CN110851112A - 一种随机比特生成方法、装置及电子设备和存储介质 - Google Patents
一种随机比特生成方法、装置及电子设备和存储介质 Download PDFInfo
- Publication number
- CN110851112A CN110851112A CN201911076456.5A CN201911076456A CN110851112A CN 110851112 A CN110851112 A CN 110851112A CN 201911076456 A CN201911076456 A CN 201911076456A CN 110851112 A CN110851112 A CN 110851112A
- Authority
- CN
- China
- Prior art keywords
- function
- random number
- random
- seed
- number state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 65
- 230000006870 function Effects 0.000 claims description 177
- 239000012297 crystallization seed Substances 0.000 claims description 14
- 230000008569 process Effects 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 6
- 239000000463 material Substances 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000005236 sound signal Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000010899 nucleation Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/588—Random number generators, i.e. based on natural stochastic processes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
- H04L9/0637—Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
Abstract
本申请公开了一种随机比特生成方法、装置及一种电子设备和计算机可读存储介质,该方法包括:获取输入熵和请求比特长度;利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。本申请提供的随机比特生成方法,利用软件实现随机比特的生成,且采用外部提供的熵源,解决了熵源必需集成在内部的问题。必要时可以将熵源和本申请提供的随机比特生成方法封装在一起,即可得到传统意义上的随机数发生器,充分考虑软件和硬件的实现方式。
Description
技术领域
本申请涉及密码学技术领域,更具体地说,涉及一种随机比特生成方法、装置及一种电子设备和一种计算机可读存储介质。
背景技术
二元随机序列在密码应用中占有举足轻重的地位。现在大量的计算机系统的安全性需要依赖于二元随机序列,比如各种密码算法中使用的密钥、非对称密码算法RSA加密以及数字签名方案中生成的大素数、挑战应答身份识别系统中的挑战数等,这些都充分体现了二元随机序列的实际使用价值。
相关技术中实现的随机比特生成方法基于硬件设计的随机数发生器,不利于软件密码模块等的使用。另外,在相关技术中随机数发生器的内部必需集成熵源,使得软件上难以实现。
因此,如何在软件上实现随机比特的生成是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的在于提供一种随机比特生成方法、装置及一种电子设备和一种计算机可读存储介质,在软件上实现随机比特的生成。
为实现上述目的,本申请提供了一种随机比特生成方法,包括:
获取输入熵和请求比特长度;
利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
其中,所述利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态,包括:
确定种子长度,并根据所述输入熵和个性化信息利用所述第一函数创建所述种子长度的种子;
初始化随机数状态Key和V中的比特位均为0,并根据初始化的Key、V和所述种子利用所述第二函数创建随机数状态。
其中,所述根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特之前,还包括:
利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态。
其中,所述利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态,包括:
根据所述输入熵和附加信息利用所述第一函数重置所述种子,得到重置后的种子;
根据当前的Key、V和所述重置后的种子利用所述第二函数更新所述随机数状态。
其中,所述根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特之后,还包括:
清除所述随机数状态。
其中,所述SM4算法具体为SM4算法的ECB模式。
其中,所述根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特,包括:
S1:将目标标志位、第一计数器置0、第二计数器置1;
S2:若所述目标标志位为1或所述第一计数器为0,则根据所述输入熵和附加信息利用所述第一函数和所述第二函数重置所述种子和更新当前的随机数状态,并将所述附加信息置为空串,将所述目标标志位置为0,将所述第一计数器加1;
S3:判断所述第二计数器是否大于阈值;若是,则进入S11,若否,则进入S4;
S4:判断所述附加信息是否为空串;若是,则进入S5;若否,则进入S6;
S5:将所述附加信息置为长度为所述种子长度、所有比特位均为0的字符串;
S6:根据所述种子长度利用所述SM4算法更新所述附加信息,并利用所述第二函数更新当前的随机数状态;
S7:初始化临时字符串为空串;
S8:判断所述临时字符串的长度是否小于所述请求比特长度,若是,则进入S9,若否,则进入S10;
S9:利用预设公式更新V,根据当前的随机数状态利用所述SM4算法计算中间字符串,将所述临时字符串更新为所述中间字符串与所述临时字符串的或操作结果,并重新进入S8;
其中,所述预设公式具体为:
V=(V+1)mod 2ctr_len;其中,ctr_len为预设值;
S10:将所述临时字符串的前N位作为所述随机比特,根据所述附加信息利用所述第二函数更新当前的随机数状态,并将所述第二计数器加1,将所述目标标志位置为1,重新进入S2;其中,N为所述请求比特长度;
S11:返回所述随机比特。
为实现上述目的,本申请提供了一种随机比特生成装置,包括:
获取模块,用于获取输入熵和请求比特长度;
创建模块,用于利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
生成模块,用于根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述随机比特生成方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述随机比特生成方法的步骤。
通过以上方案可知,本申请提供的一种随机比特生成方法,包括:获取输入熵和请求比特长度;利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
本申请提供的随机比特生成方法,利用软件实现随机比特的生成,且采用外部提供的熵源,解决了熵源必需集成在内部的问题。必要时可以将熵源和本申请提供的随机比特生成方法封装在一起,即可得到传统意义上的随机数发生器,充分考虑软件和硬件的实现方式。本申请还公开了一种随机比特生成装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为根据一示例性实施例示出的一种随机数生成器的组成示意图;
图2为根据一示例性实施例示出的一种随机比特生成方法的流程图;
图3为Instantiate函数的流程图;
图4为基于SM4的导出函数的流程图;
图5为基于SM4的状态更新函数的流程图;
图6为Reseed函数的的流程图;
图7为图2中步骤S103的细化流程图;
图8为根据一示例性实施例示出的另一种随机比特生成方法的流程图;
图9为根据一示例性实施例示出的一种随机比特生成装置的结构图;
图10为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解本申请提供的随机比特生成方法,首先对其应用的随机数发生器进行介绍。如图1所示,随机数发生器的接口包括实例化接口函数(Instantiate)、重新种子化函数(Reseed)、随机数生成函数(Generate)、反初始化函数(uninstantiate)。随机数发生器的输入包括:输入熵(Entropy)、可选的唯一性数据(Nonce)、可选的个性化数据(Personalization string)、可选的附加信息(Additional input)。
输入熵是Instantiate函数和Generate函数的输入,应视为关键安全参数,它是从随机数发生器外部传入的熵源。Nonce是随机数发生器实例化时的可选输入,具有唯一性,无需保密,应被视为关键安全参数。Nonce在随机数发生器边界内生成,即保证它不离开随机数发生器本身。可选的个性化数据是实例化函数的可选参数(即可为空串),需确保唯一性。可选的附加信息是Reseed函数和Generate函数的可选输入。随机数发生器还拥有一个随机数状态信息,其中包括工作状态和管理信息。前者包括利用种子派生的信息、Generate函数调用次数的计数器等信息,后者包括安全强度等。随机数随机数状态构成包括如:Key,长度为seedlen比特(例如,256比特),每次调用都会更新;V,长度为分组大小blocklen比特(例如,128比特),每次调用都会更新;reseed_counter,记录Generate函数调用次数的长度为48比特的数据串,每调用一次累加1,初始化和重置时为1。
随机数发生器支持多个实例,不同的实例使用不同的随机数状态。Instantiate函数用于随机数发生器实例化,根据输入熵、可选的唯一性数据、个性化数据创建种子,然后创建随机数状态。Generate函数利用输入的additional input和当前状态生成所需的随机比特,同时更新随机数状态。Reseed函数用于重新设定随机数发生器随机数状态。uninstantiate函数用于反初始化即清除随机数状态。
对本申请的随机数发生器而言,采用分组密码算法SM4(一种分组密码标准),工作模式也可以为计数器模式(英文全称:Counter,英文简称:CTR)。SM4算法的分组长度blocklen为128比特,SM4密钥长度keylen为128比特,随机数发生器内部生成的种子的长度seedlen为256比特。
随机数发生器的安全参数值如下。支持的安全强度为128比特;实例与重新种子时熵的最小长度和熵值的最小长度等于支持的安全强度;熵值的最大长度为235比特;种子长度、个性化数据的最大长度、附加数据的最大长度为235比特;单次请求的最大长度219比特;种子的最大生命周期248比特。
本申请实施例公开了一种随机比特生成方法,在软件上实现随机比特的生成。
参见图2,根据一示例性实施例示出的一种随机比特生成方法的流程图,如图2所示,包括:
S101:获取输入熵和请求比特长度;
在本步骤中,获取上述随机数发生器需要的输入熵和请求比特长度。随机数发生器使用的熵是外部提供,在实例化函数Instantiate中需要使用输入的熵值。此时熵值与可选的个性化信息一起经过SM4导出函数BlockCipher_df扰乱混淆后生成种子原料seed_material,后者用于随机数发生器随机数状态的更新。在重新种子化函数Reseed中需要使用输入的熵值。此时熵值与可选的附加信息一起经过SM4导出函数BlockCipher_df扰乱混淆后生成种子原料seed_material,后者用于随机数发生器随机数状态的更新。在随机数发生器的安全性设计之中,为满足安全性要求,最小熵值应当不小于256比特。在随机数发生器内由该熵作为输入所产生的数据流均被视为关键安全参数。单次请求的请求比特长度的最大值为219比特。
S102:利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
在本步骤中,利用基于SM4的导出函数和基于SM4的状态更新函数进行随机数发生器实例化,根据输入熵、可选的唯一性数据、个性化数据创建种子,然后创建随机数状态,即实现上述介绍的Instantiate函数的功能。
其中,本步骤可以包括:确定种子长度,并根据所述输入熵和个性化信息利用所述第一函数创建所述种子长度的种子;初始化随机数状态Key和V中的比特位均为0,并根据初始化的Key、V和所述种子利用所述第二函数创建随机数状态。
如图3所示,Instantiate函数的执行步骤包括:
步骤1:若输入参数无效,返回(ERROR,Invalid)。
步骤2:调用SM4的实例算法initial_state=Instantiate_algorithm(entropy_input,personalization_string),包括:
2.1:利用第一函数计算seedlen比特的seed_material;
2.2:初始化Key=0keylen,V=0blocklen;
2.3:利用第二函数更新(Key,V);
2.4:初始化reseed_counter=1;
2.5:initial_state=(V,Key,reseed_counter)。
步骤3:新建h,把initial_state及其他信息设置到h,如果创建失败则返(ERROR_FLAG,Invalid),否则返回(SUCCESS,h)。
Instantiate函数的返回数据包括:
status:成功返回SUCCESS,失败返回错误信息;
h:实例化后的随机数状态,供后续功能函数使用。
上述第一函数的输入参数包括:待哈希数据input_string和期望返回数据长度no_of_bits_to_return。如图4所示,执行步骤包括:
步骤1:若number_of_bits_to_return>max_number_of_bits(此为512比特),返回(ERROR_FLAG,NULL);
步骤2:32比特整数L=len(input_string)/8;
步骤3:32比特整数N=number_of_bits_to_return/8;
步骤4:S=L||N||input_string||0x80,其中L和N表示为32比特整数;
步骤5:在S后添零补足。While(len(S)mod outlen)≠0,do S=S||0x00;
步骤6:初始化字符串temp=NULL;
步骤7:32比特整数i=0;
步骤8:K=leftmost(0x00010203...1D1E1F,keylen);
步骤9:While(len(temp)<keylen+outlen),执行:
IV=i||0outlen-len(i),其中len(i)=32;
temp=temp||BCC(K,(IV||S));
i=i+1。
步骤10:K=leftmost(temp,keylen);
步骤11:X=select(temp,keylen+1,keylen+outlen);
其中,步骤10-步骤11可以理解为K||X=temp;
步骤12:重置字符串temp=NULL;
步骤13:While(len(temp)<number_of_bits_to_return),执行:
X=Block_Encrypt(K,X);
temp=temp||X;
步骤14:
requested_bits=leftmost(temp,number_of_bits_to_return)。
步骤15:返回(SUCCESS,requested_bits)。
其中的内部调用函数BCC即CBC-MAC,一种基于IEEE 802.1x认证的加密技术。
上述第二函数的输入参数包括:长度为seedlen比特的任意数据provided_data和当前Key值和当前V值,目的为更新Key和V。如图5所示,执行步骤包括:
步骤1:临时数据串temp=NULL;
步骤2:While(len(temp)<seedlen)执行:
V=(V+1)mod 2ctr_len
temp=temp||Block_Encrypt(Key,V)
步骤3:
步骤4:Key=leftmost(temp,keylen);
步骤5:V=rightmost(temp,blocklen);
步骤6:返回(Key,V)。
其中的内部调用函数Block_Encrypt为基于分组密码算法SM4的ECB模式加密。
S103:根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
在具体实施中,可以利用输入的additional input和当前的随机数状态生成请求比特长度的随机比特,同时更新随机数状态,即实现上述的Generate函数的功能。
可以理解的是,在本步骤之前,还可以包括:利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态。在具体实施中,利用输入熵、可选输入参数和Instantiate函数创建的h重新设定随机数发生器随机数状态,即实现上述介绍的Reseed函数的步骤。此处的可选输入参数最大长度为235比特。
其中,所述利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态,包括:根据所述输入熵和附加信息利用所述第一函数重置所述种子,得到重置后的种子;根据当前的Key、V和所述重置后的种子利用所述第二函数更新所述随机数状态。
如图6所示,Reseed函数的执行步骤包括:
步骤1:如果h对应的随机数状态异常,或entropy_input低于256比特的熵,或additional_input的长度大于最大长度,则返回ERROR。
步骤2:执行new_state=Reseed_algorithm(state,entropy_input,additional_input),包括:
2.1:利用第一函数计算seedlen比特的seed_material;
2.2:利用第二函数更新(Key,V);
2.3:重置reseed_counter=1;
2.4:得到new_state=(V,Key,reseed_counter)。
步骤3:用new_state更新h,并返回SUCCESS。
可以理解的是,在本步骤之后,还可以包括:清除所述随机数状态,即实现Uninstantiate函数的功能,其执行步骤包括:若h无效返回ERROR;否则擦除状态,返回SUCCESS。
本申请实施例提供的随机比特生成方法,利用软件实现随机比特的生成,且采用外部提供的熵源,解决了熵源必需集成在内部的问题。必要时可以将熵源和本申请提供的随机比特生成方法封装在一起,即可得到传统意义上的随机数发生器,充分考虑软件和硬件的实现方式。
本实施例将详细介绍Generate函数的执行步骤,即如图7所示,上述实施例中的步骤S103可以包括:
S1:将目标标志位、第一计数器置0、第二计数器置1;
在本实施例中,若满足以下任一条件,返回(ERROR,NULL):h对应的随机数状态异常、请求比特长度大于单次请求长度最大值。若不满足,将局部变量reseed标识rflag(即本步骤中的目标标志位)置0,第一计数器c=0,此时第二计数器reseed_counter=1。
S2:若所述目标标志位为1或所述第一计数器为0,则根据所述输入熵和附加信息利用所述第一函数和所述第二函数重置所述种子和更新当前的随机数状态,并将所述附加信息置为空串,将所述目标标志位置为0,将所述第一计数器加1;
在本步骤中,若rflag为1,或c为0,执行:status=Reseed(h,pr,additional_input);若status≠SUCCESS,则返回(ERROR,NULL);用h获取新的随机数状态;additional_input置为空串;rflag置0。
S3:判断所述第二计数器是否大于阈值;若是,则进入S11,若否,则进入S4;
S4:判断所述附加信息是否为空串;若是,则进入S5;若否,则进入S6;
S5:将所述附加信息置为长度为所述种子长度、所有比特位均为0的字符串;
S6:根据所述种子长度利用所述SM4算法更新所述附加信息,并利用所述第二函数更新当前的随机数状态;
S7:初始化临时字符串为空串;
S8:判断所述临时字符串的长度是否小于所述请求比特长度,若是,则进入S9,若否,则进入S10;
S9:利用预设公式更新V,根据当前的随机数状态利用所述SM4算法计算中间字符串,将所述临时字符串更新为所述中间字符串与所述临时字符串的或操作结果,并重新进入S8;
其中,所述预设公式具体为:
V=(V+1)mod 2ctr_len;其中,ctr_len为预设值;
S10:将所述临时字符串的前N位作为所述随机比特,根据所述附加信息利用所述第二函数更新当前的随机数状态,并将所述第二计数器加1,将所述目标标志位置为1,重新进入S2;其中,N为所述请求比特长度;
步骤S3至步骤S10为生成随机比特的步骤,即(status,bits,newstate)=Generate_algorithm(state,n,additional_input),包括:
若reseed_counter>reseed_interval返回执行Reseed标识;其中,reseed_interval为步骤S3中的阈值;
若additional_input为空串,则additional_input=0seedlen;否则,执行:additional_input=BlockCipher_df(additional_input,seedlen);(Key,V)=CTR_DRBG_Update(additional_input,Key,V)。
初始化临时字符串temp=NULL
While(len(temp)<requeste_bits),执行:V=(V+1)mod 2ctr_len;temp=temp||Block_Encrypt(Key,V)。
returned_bits=leftmost(temp,requeste_bits)。
(Key,V)=CTR_DRBG_Update(additional_input,Key,V)
reseed_counter=reseed_counter+1。
得到(SUCCESS,returned_bits,Key,V,reseed_counter)。
S11:返回所述随机比特。
由此可见,在本实施例中,采用国产密码算法SM4进行随机比特的生成,据此组成的随机数发生器适应性更强。
本申请实施例公开了一种随机比特生成方法,相对于第一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图8,根据一示例性实施例示出的另一种随机比特生成方法的流程图,如图8所示,包括:
S201:获取输入熵和请求比特长度;
S202:利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
S203:利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态。
S204:根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
S205:清除所述随机数状态。
对于随机数发生器的安全性,随机数发生器内部采用具有良好的非线性度和密文随机性的SM4算法,工作模式为CTR模式,其输出结果是一系列计数器的加密密文。在初始化阶段和重新种子化阶段,随机数发生器的随机数状态会调用随机数状态更新函数更新随机数状态Key和V,这是一种基于SM4-CTR算法和输入熵的数据更新。在生成阶段,随机数状态首先会利用输入的附加信息进行状态更新得到新的Key和V;然后再利用新的Key和V执行SM4-CTR产生密钥流作为需要的随机数输出,其中V做为初始化向量使用;输出之后会再次利用输入的附加信息更新随机数状态,产生新的分组密码算法的加密密钥Key和计数器V。
对于随机数发生器的伪随机性分析,分组密码计数器模式CTR针对自适应选择明文(CPA-2)攻击具备可证明安全性。分组密码链接认证模式CBC-MAC针对定长消息具备伪随机性。分组密码链模式CBC在随机IV条件下具备伪随机性。
另外,本申请中的随机数发生器抗回溯攻击,即利用给定时间点的随机数发生器状态不能获取之前的输出数据。同时,本申请中随机数发生器抗预测攻击,即利用给定时间点的随机数发生器状态不能获取之后的输出数据。因为每次生成函数调用后都会执行状态更新,产生新的密钥和初始化向量,为下一次执行SM4-CTR产生密钥流作准备。
本申请中的随机数发生器的的输出长度限制为,单次调用生成函数最多可生成219比特输出,单个种子最多生成248比特输出。对输出长度和次数做限制是为了避免对对本款随机数发生器实施一种理论上的区分攻击。
由此可见,本申请实施例保证了随机数发生器的安全性、伪随机性分析、抗回溯攻击、抗预测攻击和抗区分攻击。
下面对本申请实施例提供的一种随机比特生成装置进行介绍,下文描述的一种随机比特生成装置与上文描述的一种随机比特生成方法可以相互参照。
参见图9,根据一示例性实施例示出的一种随机比特生成装置的结构图,如图9所示,包括:
获取模块100,用于获取输入熵和请求比特长度;
创建模块200,用于利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
生成模块300,用于根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
本申请实施例提供的随机比特生成装置,利用软件实现随机比特的生成,且采用外部提供的熵源,解决了熵源必需集成在内部的问题。必要时可以将熵源和本申请提供的随机比特生成方法封装在一起,即可得到传统意义上的随机数发生器,充分考虑软件和硬件的实现方式。
在上述实施例的基础上,作为一种优选实施方式,所述创建模块200包括:
第一创建单元,用于确定种子长度,并根据所述输入熵和个性化信息利用所述第一函数创建所述种子长度的种子;
第二创建单元,用于初始化随机数状态Key和V中的比特位均为0,并根据初始化的Key、V和所述种子利用所述第二函数创建随机数状态。
在上述实施例的基础上,作为一种优选实施方式,还包括:
更新模块,用于利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态。
在上述实施例的基础上,作为一种优选实施方式,所述更新模块包括:
重置单元,用于根据所述输入熵和附加信息利用所述第一函数重置所述种子,得到重置后的种子;
第一更新单元,用于根据当前的Key、V和所述重置后的种子利用所述第二函数更新所述随机数状态。
在上述实施例的基础上,作为一种优选实施方式,还包括:
清除模块,用于清除所述随机数状态。
在上述实施例的基础上,作为一种优选实施方式,所述SM4算法具体为SM4算法的ECB模式。
在上述实施例的基础上,作为一种优选实施方式,所述生成模块300包括:
第一初始化单元,用于将目标标志位、第一计数器置0、第二计数器置1;
第二更新单元,用于若所述目标标志位为1或所述第一计数器为0,则根据所述输入熵和附加信息利用所述第一函数和所述第二函数重置所述种子和更新当前的随机数状态,并将所述附加信息置为空串,将所述目标标志位置为0,将所述第一计数器加1;
第一判断单元,用于判断所述第二计数器是否大于阈值;若是,则启动返回单元的工作流程,若否,则启动第二判断单元的工作流程;
第二判断单元,用于判断所述附加信息是否为空串;若是,则启动设置单元的工作流程;若否,则启动第三更新单元的工作流程;
设置单元,用于将所述附加信息置为长度为所述种子长度、所有比特位均为0的字符串;
第三更新单元,用于根据所述种子长度利用所述SM4算法更新所述附加信息,并利用所述第二函数更新当前的随机数状态;
第二初始化单元,用于初始化临时字符串为空串;
第三判断单元,用于判断所述临时字符串的长度是否小于所述请求比特长度,若是,则启动逻辑运算单元的工作流程,若否,则启动第四更新单元的工作流程;
逻辑运算单元,用于利用预设公式更新V,根据当前的随机数状态利用所述SM4算法计算中间字符串,将所述临时字符串更新为所述中间字符串与所述临时字符串的或操作结果,并重新进入S8;
其中,所述预设公式具体为:
V=(V+1)mod 2ctr_len;其中,ctr_len为预设值;
第四更新单元,用于将所述临时字符串的前N位作为所述随机比特,根据所述附加信息利用所述第二函数更新当前的随机数状态,并将所述第二计数器加1,将所述目标标志位置为1,重新启动第二更新单元的工作流程;其中,N为所述请求比特长度;
返回单元,用于返回所述随机比特。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本申请还提供了一种电子设备,参见图10,本申请实施例提供的一种电子设备的结构图,如图10所示,可以包括处理器11和存储器12。该电子设备还可以包括多媒体组件13,输入/输出(I/O)接口14,以及通信组件15中的一者或多者。
其中,处理器11用于控制该电子设备的整体操作,以完成上述的随机比特生成方法中的全部或部分步骤。存储器12用于存储各种类型的数据以支持在该电子设备的操作,这些数据例如可以包括用于在该电子设备上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器12可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(ElectricallyErasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件13可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器12或通过通信组件15发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口14为处理器11和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件15用于该电子设备与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near Field Communication,简称NFC),2G、3G或4G,或它们中的一种或几种的组合,因此相应的该通信组件15可以包括:Wi-Fi模块,蓝牙模块,NFC模块。
在一示例性实施例中,电子设备可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的随机比特生成方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述随机比特生成方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器12,上述程序指令可由电子设备的处理器11执行以完成上述的随机比特生成方法。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种随机比特生成方法,其特征在于,包括:
获取输入熵和请求比特长度;
利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
2.根据权利要求1所述随机比特生成方法,其特征在于,所述利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态,包括:
确定种子长度,并根据所述输入熵和个性化信息利用所述第一函数创建所述种子长度的种子;
初始化随机数状态Key和V中的比特位均为0,并根据初始化的Key、V和所述种子利用所述第二函数创建随机数状态。
3.根据权利要求1所述随机比特生成方法,其特征在于,所述根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特之前,还包括:
利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态。
4.根据权利要求3所述随机比特生成方法,其特征在于,所述利用所述第一函数和所述第二函数重置所述种子和更新所述随机数状态,包括:
根据所述输入熵和附加信息利用所述第一函数重置所述种子,得到重置后的种子;
根据当前的Key、V和所述重置后的种子利用所述第二函数更新所述随机数状态。
5.根据权利要求1所述随机比特生成方法,其特征在于,所述根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特之后,还包括:
清除所述随机数状态。
6.根据权利要求1所述随机比特生成方法,其特征在于,所述SM4算法具体为SM4算法的ECB模式。
7.根据权利要求2至6中任一项所述随机比特生成方法,其特征在于,所述根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特,包括:
S1:将目标标志位、第一计数器置0、第二计数器置1;
S2:若所述目标标志位为1或所述第一计数器为0,则根据所述输入熵和附加信息利用所述第一函数和所述第二函数重置所述种子和更新当前的随机数状态,并将所述附加信息置为空串,将所述目标标志位置为0,将所述第一计数器加1;
S3:判断所述第二计数器是否大于阈值;若是,则进入S11,若否,则进入S4;
S4:判断所述附加信息是否为空串;若是,则进入S5;若否,则进入S6;
S5:将所述附加信息置为长度为所述种子长度、所有比特位均为0的字符串;
S6:根据所述种子长度利用所述SM4算法更新所述附加信息,并利用所述第二函数更新当前的随机数状态;
S7:初始化临时字符串为空串;
S8:判断所述临时字符串的长度是否小于所述请求比特长度,若是,则进入S9,若否,则进入S10;
S9:利用预设公式更新V,根据当前的随机数状态利用所述SM4算法计算中间字符串,将所述临时字符串更新为所述中间字符串与所述临时字符串的或操作结果,并重新进入S8;
其中,所述预设公式具体为:
V=(V+1)mod 2ctr_len;其中,ctr_len为预设值;
S10:将所述临时字符串的前N位作为所述随机比特,根据所述附加信息利用所述第二函数更新当前的随机数状态,并将所述第二计数器加1,将所述目标标志位置为1,重新进入S2;其中,N为所述请求比特长度;
S11:返回所述随机比特。
8.一种随机比特生成装置,其特征在于,包括:
获取模块,用于获取输入熵和请求比特长度;
创建模块,用于利用第一函数和第二函数创建所述输入熵对应的种子和随机数状态;其中,所述第一函数为基于SM4的导出函数,所述第二函数为基于SM4的状态更新函数;
生成模块,用于根据所述请求比特长度和当前的随机数状态利用所述第一函数、所述第二函数和SM4算法生成随机比特。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述随机比特生成方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述随机比特生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911076456.5A CN110851112A (zh) | 2019-11-06 | 2019-11-06 | 一种随机比特生成方法、装置及电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911076456.5A CN110851112A (zh) | 2019-11-06 | 2019-11-06 | 一种随机比特生成方法、装置及电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110851112A true CN110851112A (zh) | 2020-02-28 |
Family
ID=69598564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911076456.5A Pending CN110851112A (zh) | 2019-11-06 | 2019-11-06 | 一种随机比特生成方法、装置及电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110851112A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115632782A (zh) * | 2022-12-22 | 2023-01-20 | 湖南密码工程研究中心有限公司 | 基于sm4计数器模式的随机数生成方法、系统及设备 |
CN116243887A (zh) * | 2022-12-06 | 2023-06-09 | 北京海泰方圆科技股份有限公司 | 软件随机数生成方法及装置 |
CN116301721A (zh) * | 2022-12-27 | 2023-06-23 | 北京海泰方圆科技股份有限公司 | 一种随机数生成方法、装置、电子设备及介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1668995A (zh) * | 2002-06-06 | 2005-09-14 | 克瑞迪科公司 | 用于改善伪随机数发生器的输出的不可预测性的方法 |
CN101292464A (zh) * | 2005-08-24 | 2008-10-22 | 高通股份有限公司 | 密码学上安全的伪随机数字发生器 |
US20120179735A1 (en) * | 2011-01-06 | 2012-07-12 | Microsoft Corporation | Scalable random number generation |
CN104298485A (zh) * | 2014-10-17 | 2015-01-21 | 飞天诚信科技股份有限公司 | 一种生成满足安全强度要求的随机数的方法 |
CN106164922A (zh) * | 2014-04-07 | 2016-11-23 | 巴科股份有限公司 | 使用在线音频指纹的远程设备的自组织一次性配对 |
CN108491184A (zh) * | 2018-03-16 | 2018-09-04 | 数安时代科技股份有限公司 | 随机数发生器的熵源采集方法、计算机设备及存储介质 |
CN109617684A (zh) * | 2018-12-26 | 2019-04-12 | 绍兴心越科技有限公司 | 自修复主动防御式真随机数发生装置及生成方法 |
CN109726598A (zh) * | 2018-12-10 | 2019-05-07 | 佛山芯珠微电子有限公司 | 基于云服务器的嵌入式安全加密芯片 |
CN110399118A (zh) * | 2019-07-15 | 2019-11-01 | 宇龙计算机通信科技(深圳)有限公司 | 一种随机数生成方法、装置、存储介质及电子设备 |
-
2019
- 2019-11-06 CN CN201911076456.5A patent/CN110851112A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1668995A (zh) * | 2002-06-06 | 2005-09-14 | 克瑞迪科公司 | 用于改善伪随机数发生器的输出的不可预测性的方法 |
CN101292464A (zh) * | 2005-08-24 | 2008-10-22 | 高通股份有限公司 | 密码学上安全的伪随机数字发生器 |
US20120179735A1 (en) * | 2011-01-06 | 2012-07-12 | Microsoft Corporation | Scalable random number generation |
CN106164922A (zh) * | 2014-04-07 | 2016-11-23 | 巴科股份有限公司 | 使用在线音频指纹的远程设备的自组织一次性配对 |
CN104298485A (zh) * | 2014-10-17 | 2015-01-21 | 飞天诚信科技股份有限公司 | 一种生成满足安全强度要求的随机数的方法 |
CN108491184A (zh) * | 2018-03-16 | 2018-09-04 | 数安时代科技股份有限公司 | 随机数发生器的熵源采集方法、计算机设备及存储介质 |
CN109726598A (zh) * | 2018-12-10 | 2019-05-07 | 佛山芯珠微电子有限公司 | 基于云服务器的嵌入式安全加密芯片 |
CN109617684A (zh) * | 2018-12-26 | 2019-04-12 | 绍兴心越科技有限公司 | 自修复主动防御式真随机数发生装置及生成方法 |
CN110399118A (zh) * | 2019-07-15 | 2019-11-01 | 宇龙计算机通信科技(深圳)有限公司 | 一种随机数生成方法、装置、存储介质及电子设备 |
Non-Patent Citations (1)
Title |
---|
HUZAIFA SIDHPURWALA: "Understanding random number generators, and their limitations, in Linux", 《HTTPS://WWW.REDHAT.COM/EN/BLOG/UNDERSTANDING-RANDOM-NUMBER-GENERATORS-AND-THEIR-LIMITATIONS-LINUX》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116243887A (zh) * | 2022-12-06 | 2023-06-09 | 北京海泰方圆科技股份有限公司 | 软件随机数生成方法及装置 |
CN116243887B (zh) * | 2022-12-06 | 2023-11-14 | 北京海泰方圆科技股份有限公司 | 软件随机数生成方法及装置 |
CN115632782A (zh) * | 2022-12-22 | 2023-01-20 | 湖南密码工程研究中心有限公司 | 基于sm4计数器模式的随机数生成方法、系统及设备 |
CN116301721A (zh) * | 2022-12-27 | 2023-06-23 | 北京海泰方圆科技股份有限公司 | 一种随机数生成方法、装置、电子设备及介质 |
CN116301721B (zh) * | 2022-12-27 | 2023-09-19 | 北京海泰方圆科技股份有限公司 | 一种随机数生成方法、装置、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9553722B2 (en) | Generating a key based on a combination of keys | |
US7813503B2 (en) | Method and system for generation of cryptographic keys for use in cryptographic systems | |
JP4728657B2 (ja) | 回転バッファを用いたストリーム暗号設計 | |
CN105007157B (zh) | 基于设备生成的密钥来生成和管理多个基密钥 | |
CN110851112A (zh) | 一种随机比特生成方法、装置及电子设备和存储介质 | |
CN112003696B (zh) | Sm9密钥生成方法、系统、电子设备、装置及存储介质 | |
WO2021114850A1 (zh) | 消息的加解密、读写方法、装置、计算机设备和存储介质 | |
CN110601822A (zh) | 一种基于量子保密通信技术的加密盲签名方法 | |
CN106452771A (zh) | Jce调用密码卡实现内置rsa密钥运算的方法及装置 | |
CN112100144A (zh) | 区块链文件共享方法、装置、存储介质及电子设备 | |
CN112926075B (zh) | 一种sm9密钥生成方法、装置、设备及存储介质 | |
CN109804596B (zh) | 具有加掩码的输入的可编程块密码器 | |
CN111901097B (zh) | 一种白盒实现方法、装置、电子设备及计算机存储介质 | |
US20190238347A1 (en) | Generating an authentication result by using a secure base key | |
KR102315632B1 (ko) | 신뢰 서버의 준동형 암호 기반 확장 가능한 그룹 키 생성 방법 및 시스템 | |
Mars et al. | Digitally Mutating NV-FPGAs into Physically Clone-Resistant Units | |
CN115499118A (zh) | 报文密钥生成、文件加密、解密方法、装置、设备和介质 | |
Liu et al. | Generating dynamic box by using an input string | |
Sabt et al. | Cryptanalysis of globalplatform secure channel protocols | |
CN114173327A (zh) | 基于5g行业专网的认证方法及终端 | |
Rass | Blind Turing-machines: Arbitrary private computations from group homomorphic encryption | |
Kiningham et al. | CESEL: Securing a Mote for 20 Years. | |
US8295480B1 (en) | Uncertainty-based key agreement protocol | |
Jain | Enhancing security in Tokenization using NGE for storage as a service | |
CN116055039B (zh) | 一种基于分组密码算法的随机数生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200228 |
|
RJ01 | Rejection of invention patent application after publication |