基于SM4计数器模式的随机数生成方法、系统及设备转让专利

申请号 : CN202211653313.8

文献号 : CN115632782B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 代政一赵光耀冯国柱

申请人 : 湖南密码工程研究中心有限公司

摘要 :

本公开实施例中提供了一种基于SM4计数器模式的随机数生成方法、系统及设备,属于数据处理技术领域,具体包括:步骤1,随机数发生器初始化;步骤2,从熵源获取初始种子材料;步骤3,基于SM4将初始种子材料进行派生,得到派生种子材料;步骤4,利用派生种子材料更新随机数发生器状态;步骤5,输出随机数。通过本公开的方案,提高了密码算法底层的安全性。

权利要求 :

1.一种基于SM4计数器模式的随机数生成方法,其特征在于,包括:步骤1,随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;

步骤2,从熵源获取初始种子材料;

步骤3,基于SM4将初始种子材料进行派生,得到派生种子材料;

步骤4,利用派生种子材料更新随机数发生器状态;

所述步骤4具体包括:

步骤4.1,在当前状态Key值的作用下,SM4的ECB模式下的加密V+1得到128比特输出结果output1;

步骤4.2,在当前状态Key值的作用下,SM4的ECB模式下的加密V+2得到128比特输出结果output2;

步骤4.3,将output1与output2进行连接,再与256比特的派生种子材料进行异或操作;

步骤4.4,将得到的结果的前128比特作为Key的更新值、结果的后128比特作为V的更新值;

步骤5,输出随机数;

所述步骤5具体包括:

步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;

步骤5.2,设置目标种子材料为256比特的0比特串;

步骤5.3,基于当前内部状态Key值,在SM4的ECB模式下加密当前内部状态的V+1得到

128比特输出结果output;

步骤5.4,取output的前requested_number_of_bits作为输出的随机数;

步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。

2.根据权利要求1所述的方法,其特征在于,所述步骤2具体包括:利用熵源轮函数进行迭代,将预设长度的伪随机数变换后生成多个相同长度的新随机数并将全部新随机数作为所述初始种子材料。

3.根据权利要求1所述的方法,其特征在于,所述步骤3具体包括:步骤3.1,填充所述初始种子材料S,其中,S=初始种子材料的字节数||派生种子材料的字节数||种子材料值||0x80,其中初始种子材料的字节数、派生种子材料的字节数均为32比特数,符号||表示比特串的连接,当填充后的S的比特长度不是128的倍数时,继续填充

0x00直至填充后的S的比特长度是128的倍数;

步骤3.2,选取SM4的CBC模式下使用的密钥和初始向量IV为0x00000000连接96比特的0比特串,并将初始向量IV和所述初始种子材料S连接,即IVS=IV||S;

步骤3.3,利用密钥在SM4的CBC模式下加密IVS,输出的128比特MAC值作为SM4的ECB模式下的密钥K;

步骤3.4,选初始向量IV为0x00000001连接96比特的0比特串,同样将IV与S相连接,即:IVSS=IV||S;

步骤3.5,利用密钥在SM4的CBC模式下加密IVSS,输出的128比特MAC值作为SM4的ECB模式下的加密数据X;

步骤3.6,在密钥K的作用下,在SM4的ECB模式下加密X,输出128比特值 ,再加密 输出128比特值 , 即为256比特派生种子材料。

4.一种基于SM4计数器模式的随机数生成系统,其特征在于,包括:初始化模块,用于随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;

获取模块,用于从熵源获取初始种子材料;

派生模块,用于基于SM4将初始种子材料进行派生,得到派生种子材料;

更新模块,用于利用派生种子材料更新随机数发生器状态;

所述更新模块具体包括:

步骤4.1,在当前状态Key值的作用下,SM4的ECB模式下的加密V+1得到128比特输出结果output1;

步骤4.2,在当前状态Key值的作用下,SM4的ECB模式下的加密V+2得到128比特输出结果output2;

步骤4.3,将output1与output2进行连接,再与256比特的派生种子材料进行异或操作;

步骤4.4,将得到的结果的前128比特作为Key的更新值、结果的后128比特作为V的更新值;

输出模块,用于输出随机数;

所述输出模块具体包括:

步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;

步骤5.2,设置目标种子材料为256比特的0比特串;

步骤5.3,基于当前内部状态Key值,在SM4的ECB模式下加密当前内部状态的V+1得到

128比特输出结果output;

步骤5.4,取output的前requested_number_of_bits作为输出的随机数;

步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。

5.一种电子设备,其特征在于,所述电子设备包括:至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行前述权利要求1‑3中任一项所述的基于SM4计数器模式的随机数生成方法。

说明书 :

基于SM4计数器模式的随机数生成方法、系统及设备

技术领域

[0001] 本公开实施例涉及数据处理技术领域,尤其涉及一种基于SM4计数器模式的随机数生成方法、系统及设备。

背景技术

[0002] 目前,近年来,新型基础设施诸如6G、移动互联网、大数据和云计算等发展迅猛,越来越多的应用场景需要密码算法来保障传输数据的机密性、完整性以及可认证性。伪随机数发生器,作为保障密码算法安全性的底层组件,保障了密码算法输出的不可预测性。随机数在密钥生成、密钥交换协议、零知识证明、区块链、安全多方计算等许多交互式协商场景下发挥着越来越重要的作用。
[0003] 真随机数发生器将一个随机的熵源作为输入,输出的比特序列类似于随机抛硬币一样随机。为了保证伪随机数与真随机数不可区分,伪随机数发生器的重要特点就是随机性和不可预测性。随机性是指随机数的比特之间是相互独立的,每个比特服从均匀分布;不可预测性是指无法根据已知一段序列片段推测出其前序片段和后序片段。伪随机数发生器通常取一个随机值作为种子,用一个确定性的算法产生比特序列,若输出序列与真随机序列是不可区分的,则该确定性算法可以替代真随机熵源完成生成随机数的功能。对于伪随机数发生器而言,种子是十分重要的,一旦攻击者获取到了种子,则其得到了后续全部随机数的信息。
[0004] 可见,亟需一种安全性高的基于SM4计数器模式的随机数生成方法。

发明内容

[0005] 有鉴于此,本公开实施例提供一种基于SM4计数器模式的随机数生成方法、系统及设备,至少部分解决现有技术中存在安全性较差的问题。
[0006] 第一方面,本公开实施例提供了一种基于SM4计数器模式的随机数生成方法,包括:
[0007] 步骤1,随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;
[0008] 步骤2,从熵源获取初始种子材料;
[0009] 步骤3,基于SM4将初始种子材料进行派生,得到派生种子材料;
[0010] 步骤4,利用派生种子材料更新随机数发生器状态;
[0011] 步骤5,输出随机数;
[0012] 所述步骤5具体包括:
[0013] 步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;
[0014] 步骤5.2,设置目标种子材料为256比特的0比特串;
[0015] 步骤5.3,在当前内部状态Key值的作用下,SM4的ECB模式下的加密当前内部状态的V+1得到128比特输出结果output;
[0016] 步骤5.4,取output的前requested_number_of_bits作为输出的随机数;
[0017] 步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。
[0018] 根据本公开实施例的一种具体实现方式,所述步骤2具体包括:
[0019] 利用熵源轮函数进行迭代,将预设长度的伪随机数变换后生成多个相同长度的新随机数并将全部新随机数作为所述初始种子材料。
[0020] 根据本公开实施例的一种具体实现方式,所述步骤3具体包括:
[0021] 步骤3.1,填充所述初始种子材料S,其中,S=初始种子材料的字节数||派生种子材料的字节数||种子材料值||0x80,其中初始种子材料的字节数、派生种子材料的字节数均为32比特数,符号||表示比特串的连接,当填充后的S的比特长度不是128的倍数时,继续填充0x00直至填充后的S的比特长度是128的倍数;
[0022] 步骤3.2,选取SM4的CBC模式下使用的密钥和初始向量IV为0x00000000连接96比特的0比特串,并将初始向量IV和所述初始种子材料S连接,即IVS=IV||S;
[0023] 步骤3.3,利用密钥在SM4的CBC模式下加密IVS,输出的128比特MAC值作为SM4的ECB模式下的密钥K;
[0024] 步骤3.4,选初始向量IV为0x00000001连接96比特的0比特串,同样将IV与S相连接,即:IVSS=IV||S;
[0025] 步骤3.5,利用密钥在SM4的CBC模式下加密IVSS,输出的128比特MAC值作为SM4的ECB模式下的加密数据X;
[0026] 步骤3.6,在密钥K的作用下,在SM4的ECB模式下加密X,输出128比特值 ,再加密 输出128比特值 , 即为256比特派生种子材料。
[0027] 根据本公开实施例的一种具体实现方式,所述步骤4具体包括:
[0028] 步骤4.1,在当前状态Key值的作用下,SM4的ECB模式下的加密V+1得到128比特输出结果output1;
[0029] 步骤4.2,在当前状态Key值的作用下,SM4的ECB模式下的加密V+2得到128比特输出结果output2;
[0030] 步骤4.3,将output1与output2进行连接,再与256比特的派生种子材料进行异或操作;
[0031] 步骤4.4,将得到的结果的前128比特作为Key的更新值、结果的后128比特作为V的更新值。
[0032] 第二方面,本公开实施例提供了一种基于SM4计数器模式的随机数生成系统,包括:
[0033] 初始化模块,用于随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;
[0034] 获取模块,用于从熵源获取初始种子材料;
[0035] 派生模块,用于基于SM4将初始种子材料进行派生,得到派生种子材料;
[0036] 更新模块,用于利用派生种子材料更新随机数发生器状态;
[0037] 输出模块,用于输出随机数;
[0038] 所述输出模块具体包括:
[0039] 步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;
[0040] 步骤5.2,设置目标种子材料为256比特的0比特串;
[0041] 步骤5.3,在当前内部状态Key值的作用下,SM4的ECB模式下的加密当前内部状态的V+1得到128比特输出结果output;
[0042] 步骤5.4,取output的前requested_number_of_bits作为输出的随机数;
[0043] 步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。
[0044] 第三方面,本公开实施例还提供了一种电子设备,该电子设备包括:
[0045] 至少一个处理器;以及,
[0046] 与该至少一个处理器通信连接的存储器;其中,
[0047] 该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述第一方面或第一方面的任一实现方式中的基于SM4计数器模式的随机数生成方法。
[0048] 本公开实施例中基于SM4计数器模式的随机数生成方案,包括:步骤1,随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;步骤2,从熵源获取初始种子材料;步骤3,基于SM4将初始种子材料进行派生,得到派生种子材料;步骤4,利用派生种子材料更新随机数发生器状态;步骤5,输出随机数;所述步骤5具体包括:步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;步骤5.2,设置目标种子材料为256比特的0比特串;步骤5.3,在当前内部状态Key值的作用下,SM4的ECB模式下的加密当前内部状态的V+1得到128比特输出结果output;步骤5.4,取output的前requested_number_of_bits作为输出的随机数;步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。
[0049] 本公开实施例的有益效果为:通过本公开的方案,基于SM4计数器模式进行随机数发生器初始化、获取熵源种子、基于SM4的种子派生、随机数发生器状态更新、输出随机数五个步骤,提高了密码算法底层的安全性。

附图说明

[0050] 为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0051] 图1为本公开实施例提供的一种基于SM4计数器模式的随机数生成方法的流程示意图;
[0052] 图2为本公开实施例提供的一种熵源轮函数流程示意图;
[0053] 图3为本公开实施例提供的一种熵源轮函数中F函数的操作流程示意图;
[0054] 图4为本公开实施例提供的一种基于SM4计数器模式的随机数生成系统的结构示意图;
[0055] 图5为本公开实施例提供的电子设备示意图。

具体实施方式

[0056] 下面结合附图对本公开实施例进行详细描述。
[0057] 以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0058] 需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
[0059] 还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0060] 另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
[0061] 本公开实施例提供一种基于SM4计数器模式的随机数生成方法,所述方法可以应用于互联网场景的加密过程中。
[0062] 参见图1,为本公开实施例提供的一种基于SM4计数器模式的随机数生成方法的流程示意图。如图1所示,所述方法主要包括以下步骤:
[0063] 步骤1,随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;
[0064] 具体实施时,随机数发生器内部状态working_state可以由三部分组成:V、 Key、 reseed_counter,三者定义如下:
[0065] a) 比特串V:长度为128比特,每生成一组长度为128比特的随机数时会进行更新;
[0066] b) 比特串Key:长度为128比特,当生成预定组数的随机数时会进行更新;
[0067] c) 重播种计数器reseed_counter:记录请求随机数的次数,在初始化或种子更新之后会进行更新。
[0068] 初始化过程中使用的自主设计的熵源将128比特的伪随机数经一系列变换后生成新的128比特随机数,其中128比特伪随机数可由用户给出,也可调用系统rand()函数生成,然后使用伪随机数初始化随机数发生器的相关状态信息,即比特串V、比特串Key以及重播种计数器。
[0069] 步骤2,从熵源获取初始种子材料;
[0070] 进一步的,所述步骤2具体包括:
[0071] 利用熵源轮函数进行迭代,将预设长度的伪随机数变换后生成多个相同长度的新随机数并将全部新随机数作为所述初始种子材料。
[0072] 具体实施时,如图2所示,利用熵源轮函数进行迭代,具体的,首先将128比特输入分成4块,每块32比特,执行20次图2所示的轮函数迭代,其中F函数执行过程如下:
[0073] 首先将  与 进行异或操作,将结果与  做模 加法操作,即:  ;
[0074] 其次将 执行线性操作;,
其中 <<< 操作表示将比特串 进行循环左移操作;
[0075] 最后 将 与轮数 进行 异或 ,再与 做模 加法操 作,即 :;
[0076] F函数操作流程如图3所示,迭代轮函数20轮,输出为128比特,将20轮的迭代输出结果作为部分初始种子材料,调用两次熵源即可完成初始种子材料的生成。若用户需要更多的种子材料,多次调用熵源轮函数即可生成足够多的种子材料,图2与图3表示了从熵源获取的比特值到生成种子材料过程中使用的变换方式与轮函数。将熵源获取的128比特分成4块,每块32比特,轮函数的输入为 ,轮函数输出为,迭代20轮,其中 表示当前轮数值。
[0077] 步骤3,基于SM4将初始种子材料进行派生,得到派生种子材料;
[0078] 在上述实施例的基础上,所述步骤3具体包括:
[0079] 步骤3.1,填充所述初始种子材料S,其中,S=初始种子材料的字节数||派生种子材料的字节数||种子材料值||0x80,其中初始种子材料的字节数、派生种子材料的字节数均为32比特数,符号||表示比特串的连接,当填充后的S的比特长度不是128的倍数时,继续填充0x00直至填充后的S的比特长度是128的倍数;
[0080] 步骤3.2,选取SM4的CBC模式下使用的密钥和初始向量IV为0x00000000连接96比特的0比特串,并将初始向量IV和所述初始种子材料S连接,即IVS=IV||S;
[0081] 步骤3.3,利用密钥在SM4的CBC模式下加密IVS,输出的128比特MAC值作为SM4的ECB模式下的密钥K;
[0082] 步骤3.4,选初始向量IV为0x00000001连接96比特的0比特串,同样将IV与S相连接,即:IVSS=IV||S;
[0083] 步骤3.5,利用密钥在SM4的CBC模式下加密IVSS,输出的128比特MAC值作为SM4的ECB模式下的加密数据X;
[0084] 步骤3.6,在密钥K的作用下,在SM4的ECB模式下加密X,输出128比特值 ,再加密输出128比特值 , 即为256比特派生种子材料。
[0085] 具体实施时,SM4算法是国内官方于2006年2月公布的第一个商用分组密码标准,是中国无线局域网安全标准推荐使用的密码算法。分组长度与密钥长度均为128比特,采用非平衡Feistel结构,具有加解密速度快,实现性能高等优点。本专利使用的随机数发生器是面向国产系统、国产设备、国产芯片自主设计的基于SM4计数器模式的随机数发生器。
[0086] 电子密码本(ECB)模式与密文分组链接(CBC)模式是分组密码的两种工作模式,电子密码本模式具有操作简单,易于实现的特点,同时由于分组的独立性,利于并行处理,并且能很好地防止错误传播。密文分组链接模式将所有分组的加密过程链接在一起,使得某一分组的密文不再仅依赖于该分组的明文,而是依赖于该分组之前(包含该分组)的所有明文分组,同时加密过程中使用了初始向量随机化的操作,同时掩盖了明文分组与密文分组的相关性,提高安全性。
[0087] 在获取初始种子材料后,进行种子材料派生,派生后的种子材料用于随机数发生器内部状态的更新,派生函数执行步骤可以如下所示:
[0088] 首先进行初始种子材料的填充,S=初始种子材料的字节数||派生种子材料的字节数||种子材料值||0x80,其中初始种子材料的字节数、派生种子材料的字节数均为32比特数,符号||表示比特串的连接。当填充后的S的比特长度不是128的倍数时,继续填充0x00直至填充后的S的比特长度是128的倍数;
[0089] 选取SM4的CBC模式下使用的密钥0x000102030405060708090A0B0C0D0E0F,其次选取初始向量IV为0x00000000连接96比特的0比特串,将IV与S相连接,即:IVS=IV||S。在密钥的作用下,在SM4的CBC模式下加密IVS,输出的128比特MAC值作为SM4的ECB模式下的密钥K;另选初始向量IV为0x00000001连接96比特的0比特串,同样将IV与S相连接,即:IVSS=IV||S。在密钥的作用下,在SM4的CBC模式下加密IVSS,输出的128比特MAC值作为SM4的ECB模式下的加密数据X。在密钥K的作用下,在SM4的ECB模式下加密X,输出128比特值 ,再加密输出128比特值 , 即为256比特派生种子材料。
[0090] 步骤4,利用派生种子材料更新随机数发生器状态;
[0091] 在上述实施例的基础上,所述步骤4具体包括:
[0092] 步骤4.1,在当前状态Key值的作用下,SM4的ECB模式下的加密V+1得到128比特输出结果output1;
[0093] 步骤4.2,在当前状态Key值的作用下,SM4的ECB模式下的加密V+2得到128比特输出结果output2;
[0094] 步骤4.3,将output1与output2进行连接,再与256比特的派生种子材料进行异或操作;
[0095] 步骤4.4,将得到的结果的前128比特作为Key的更新值、结果的后128比特作为V的更新值。
[0096] 具体实施时,在得到256比特派生种子材料seed后,将派生种子材料基于当前内部状态进而更新随机数发生器内部状态Key和V,状态更新函数执行步骤如下:
[0097] 首先在当前状态Key值的作用下,SM4的ECB模式下的加密V+1得到128比特输出结果output1;
[0098] 其次在当前状态Key值的作用下,SM4的ECB模式下的加密V+2得到128比特输出结果output2;
[0099] 将output1与output2进行连接,再与256比特派生种子密钥seed进行异或操作;
[0100] 得到的结果的前128比特作为Key的更新值、结果的后128比特作为V的更新值。
[0101] 步骤5,输出随机数;
[0102] 所述步骤5具体包括:
[0103] 步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;
[0104] 步骤5.2,设置目标种子材料为256比特的0比特串;
[0105] 步骤5.3,在当前内部状态Key值的作用下,SM4的ECB模式下的加密当前内部状态的V+1得到128比特输出结果output;
[0106] 步骤5.4,取output的前requested_number_of_bits作为输出的随机数;
[0107] 步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。
[0108] 具体实施时,当随机数发生器初始化完成后即可进行随机数的输出,随机数发生器基于当前的内部状态返回需要的给定长度的随机数,每次输出的随机数最多为128比特,输出随机数的同时更新随机数发生器的内部状态,输出随机数的执行步骤如下:
[0109] 判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,具体的,重播种操作是基于当前内部状态进行状态更新。执行步骤如下:
[0110] 首先从熵源中获取256比特初始种子材料;
[0111] 其次将初始种子材料进行派生,得到256比特派生种子材料,派生种子材料过程与初始化过程的派生函数执行步骤相同;
[0112] 最后将派生种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态,状态更新过程与初始化过程的状态更新函数执行步骤相同。
[0113] 若未超过间隔,则执行下一步,设置种子材料为256比特的0比特串;
[0114] 在当前内部状态Key值的作用下,SM4的ECB模式下的加密当前内部状态的V+1得到128比特输出结果output;
[0115] 取output的前requested_number_of_bits作为输出的随机数;
[0116] 将种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。
[0117] 由于每输出一次随机数就进行一次状态的更新,因此在不知道内部状态的情况下是难以根据当前的随机数的输出来推断下一状态下的随机数的输出的,随机数的输出至少达到了128比特的熵。
[0118] 本实施例提供的基于SM4计数器模式的随机数生成方法,通过基于SM4计数器模式进行随机数发生器初始化、获取熵源种子、基于SM4的种子派生、随机数发生器状态更新、输出随机数五个步骤,提高了密码算法底层的安全性。
[0119] 在上述实施例的基础上,
[0120] 与上面的方法实施例相对应,参见图4,本公开实施例还提供了一种基于SM4计数器模式的随机数生成系统40,包括:
[0121] 初始化模块401,用于随机数发生器初始化,其中,所述随机数发生器包括比特串V、比特串Key和重播种计数器;
[0122] 获取模块402,用于从熵源获取初始种子材料;
[0123] 派生模块403,用于基于SM4将初始种子材料进行派生,得到派生种子材料;
[0124] 更新模块404,用于利用派生种子材料更新随机数发生器状态;
[0125] 输出模块405,用于输出随机数;
[0126] 所述输出模块405具体包括:
[0127] 步骤5.1,判断重播种计数器是否超过重播种间隔,若超过间隔,则执行重播种操作,否则执行步骤5.2;
[0128] 步骤5.2,设置目标种子材料为256比特的0比特串;
[0129] 步骤5.3,在当前内部状态Key值的作用下,SM4的ECB模式下的加密当前内部状态的V+1得到128比特输出结果output;
[0130] 步骤5.4,取output的前requested_number_of_bits作为输出的随机数;
[0131] 步骤5.5,将目标种子材料以及当前的内部状态Key和V进行状态更新从而得到新的随机数发生器内部状态Key、V,同时将重播种计数器的值+1,记录输出随机数的次数。
[0132] 图4所示系统可以对应的执行上述方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
[0133] 参见图5,本公开实施例还提供了一种电子设备50,该电子设备包括:至少一个处理器以及与该至少一个处理器通信连接的存储器。其中,该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中的基于SM4计数器模式的随机数生成方法。
[0134] 本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中的基于SM4计数器模式的随机数生成方法。
[0135] 本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的基于SM4计数器模式的随机数生成方法。
[0136] 下面参考图5,其示出了适于用来实现本公开实施例的电子设备50的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
[0137] 如图5所示,电子设备50可以包括处理装置(例如中央处理器、图形处理器等)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储装置508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有电子设备50操作所需的各种程序和数据。处理装置501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
[0138] 通常,以下装置可以连接至I/O接口505:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置506;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置507;包括例如磁带、硬盘等的存储装置508;以及通信装置509。通信装置509可以允许电子设备50与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备50,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
[0139] 特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置509从网络上被下载和安装,或者从存储装置508被安装,或者从ROM 502被安装。在该计算机程序被处理装置501执行时,执行本公开实施例的方法中限定的上述功能。
[0140] 需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD‑ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
[0141] 上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
[0142] 上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备可以执行上述方法实施例的相关步骤。
[0143] 或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备可以执行上述方法实施例的相关步骤。
[0144] 可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0145] 附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0146] 描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。
[0147] 应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。
[0148] 以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。