GM/T 0105-2021 软件随机数发生器设计指南

GM/T 0105-2021 Design guide for software-based random number generators

行业标准-密码 中文简体 现行 页数:31页 | 格式:PDF

基本信息

标准号
GM/T 0105-2021
标准类型
行业标准-密码
标准状态
现行
中国标准分类号(CCS)
国际标准分类号(ICS)
-
发布日期
2021-10-18
实施日期
2022-05-01
发布单位/组织
国家密码管理局
归口单位
密码行业标准化技术委员会
适用范围
本文件给出了软件随机数发生器设计的基本模型、基本部件的设计指南以及安全分级方法,并在附录中给出了基于SM3算法和基于SM4算法的设计实例。
本文件适用于软件随机数发生器的设计、开发、检测和评估。

发布历史

研制信息

起草单位:
中国科学院数据与通信保护研究教育中心、中国科学院软件研究所、浙江大学、深圳技术大学、深圳市纽创信安科技开发有限公司、成都卫士通信息产业股份有限公司、中国科学技术大学网络空间安全学院、成都信息工程大学、中国金融认证中心、北京宏思电子技术有限公司、北京智芯微电子科技有限公司、智巡密码(上海)检测技术有限公司
起草人:
马原、吕娜、陈华、沈海斌、郑昉昱、陈天宇、张翌维、樊俊锋、林璟锵、刘攀、吴鑫莹、张立廷、吴震、王飞宇、张文婧、胡晓波、范丽敏、韩玮
出版信息:
页数:31页 | 字数:68 千字 | 开本: 大16开

内容描述

ICS35030

CCSL.80

中华人民共和国密码行业标准

GM/T0105—2021

软件随机数发生器设计指南

Designguideforsoftware-basedrandomnumbergenerators

2021-10-18发布2022-05-01实施

国家密码管理局发布

GM/T0105—2021

目次

前言

…………………………Ⅲ

引言

…………………………Ⅳ

范围

1………………………1

规范性引用文件

2…………………………1

术语和定义

3………………1

缩略语

4……………………3

软件随机数发生器设计

5…………………3

基本模型

5.1……………3

熵源

5.2…………………4

熵池

5.3…………………5

熵估计

5.4………………5

健康测试

5.5……………5

5.6DRNG………………6

安全分级方法

6……………7

概述

6.1…………………7

安全等级一级

6.2GB/T37092…………8

安全等级二级

6.3GB/T37092…………8

实现

7………………………8

通用

7.1…………………8

关键安全参数定义

7.2…………………8

熵源独占性

7.3…………………………8

附录资料性熵源和熵池结构示例

A()…………………9

附录规范性基于算法的设计

B()SM3RNG…………11

附录资料性熵估计方法

C()……………16

附录规范性连续健康测试方法

D()……………………20

附录规范性基于算法的设计

E()SM4RNG…………23

参考文献

……………………29

GM/T0105—2021

软件随机数发生器设计指南

1范围

本文件给出了软件随机数发生器设计的基本模型基本部件的设计指南以及安全分级方法并在附

、,

录中给出了基于算法和基于算法的设计实例

SM3SM4。

本文件适用于软件随机数发生器的设计开发检测和评估

、、。

2规范性引用文件

下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款其中注日期的引用文

。,

件仅该日期对应的版本适用于本文件不注日期的引用文件其最新版本包括所有的修改单适用于

,;,()

本文件

信息技术安全技术消息鉴别码第部分采用分组密码的机制

GB/T15852.11:

信息安全技术分组密码算法的工作模式

GB/T17964

信息安全技术密码杂凑算法

GB/T32905SM3

信息安全技术分组密码算法

GB/T32907SM4

信息安全技术二元序列随机性检测方法

GB/T32915—2016

信息安全技术密码模块安全要求

GB/T37092—2018

密码术语

GM/Z4001

3术语和定义

和界定的以及下列术语和定义适用于本

GB/T32915—2016、GB/T37092—2018GM/Z4001

文件

31

.

熵entropy

对一个封闭系统的无序性随机性或变化性等状态的度量

、。

注随机变量X的熵是对通过观测X所获得信息量的一个数学度量

:。

32

.

熵源entropysource

产生输出的部件设备或事件当该输出以某种方法捕获和处理时产生包含熵的比特串

、。,。

33

.

已知答案测试known-answertest

一种测试确定性机制的方法即通过该机制处理给定的输入然后将所得到的输出与已知值进行

,,

比较

34

.

熵池entropypool

临时保存熵的存储区域

1

GM/T0105—2021

35

.

最小熵min-entropy

熵的下界是对确定样本熵最坏情况的估值

,。

k

注如果k为最大值使得PXx-那么比特串X或更准确地说是形成此类随机比特串的相应的随机变

:,(=)≤2,(,

量的最小熵为k也就是说X至少包含k比特的熵或随机性

)。,。

36

.

随机数发生器randomnumbergeneratorRNG

;

产生随机二元序列的器件或程序

来源

[:GB/T32915—2016,2.2]

37

.

种子seed

用作随机数发生器的输入的比特串

38

.

重播种函数reseedfunction

一种特定的内部状态转移函数该函数在提供新种子值的情况下更新内部状态

,。

39

.

关键安全参数criticalsecurityparameter

与安全相关的秘密信息这些信息被泄露或被修改后会危及密码模块的安全性

,。

注关键安全参数可以是明文形式的也可以是经过加密的

:。

来源

[:GB/T37092—2018,3.3]

310

.

确定性随机数发生器deterministicrandomnumbergeneratorDRNG

;

一种随机数生成器通过将确定性算法应用于适当的随机初始值称为种子产生随机样式的比

,(“”)

特序列

311

.

熵率entropyrate

平均每比特数据包含的熵的大小

312

.

密码边界cryptographicboundary

明确定义的边线该边线建立了密码模块的物理和或逻辑边界并包括了密码模块的所有硬件软

,/,、

件和或固件部件

/。

来源

[:GB/T37092—2018,3.4]

313

.

软件随机数发生器software-basedRNG

软件密码模块或混合密码模块的软件部件中的随机数发生器部件可以单独作为软件密码模块

(),,

也可以作为软件密码模块或混合密码模块的软件部件的一部分

()。

314

.

密码模块cryptographicmodule

实现了安全功能的硬件软件和或固件的集合并且被包含在密码边界内

、/,。

注密码模块根据其组成可分为硬件密码模块固件密码模块软件密码模块以及混合密码模块

:,、、。

来源

[:GB/T37092—2018,3.5]

315

.

公开安全参数publicsecurityparameter

与安全性相关的公开信息一旦被修改会威胁到密码模块安全

,,。

2

GM/T0105—2021

注例如公钥公钥证书自签名证书信任锚与计数器和内部保持的日期和时间相关联的一次性口令公开安

:,、、、、。

全参数如果不能被修改或者修改后能够被密码模块发现此时可以认为该公开安全参数是受保护的

,。

来源

[:GB/T37092—2018,3.14]

316

.

敏感安全参数sensitivesecurityparameter

包括关键安全参数和公开安全参数

来源

[:GB/T37092—2018,3.17]

317

.

重播种计数器值reseedcounter

一种内部状态计数器变量表明自初始化或重播种期间获得新的熵输入以来请求随机数生成的

,,

次数

318

.

上次重播种时间值timevalueoflastreseed

软件随机数发生器上一次重播种的时间值单位为秒

,。

319

.

重播种计数器阈值reseedcounterthreshold

在软件随机数发生器重播种前能够产生随机数的最大请求次数

,。

320

.

重播种时间阈值reseedtimethreshold

距离软件随机数发生器上一次重播种的最大时间间隔单位为秒

,。

4缩略语

下列缩略语适用于本文件

中央处理器

CPU:(CentralProcessingUnit)

随机数发生器

RNG:(RandomNumberGenerator)

软件随机数发生器

SRNG:(Software-basedRNG)

确定性随机数发生器

DRNG:(DeterministicRandomNumberGenerator)

初始向量

IV:(InitialVector)

5软件随机数发生器设计

51基本模型

.

本文件给出的软件随机数发生器基本模型见图主要包含系统熵源熵估计熵池和健康

1,、、、DRNG

测试等部分其中主要由内部状态初始化函数重播种函数输出函数自测试等基本部件

。,DRNG、、、、

组成

3

GM/T0105—2021

图1软件随机数发生器的基本模型

软件随机数发生器收集系统熵源的随机性作为其随机性的来源随机性的来源也可以来自系统或

(

硬件随机数发生器系统熵源的数据进入熵池进行熵累积等待收集足够的熵源数据在对熵池中的

)。,,

数据经扩展函数压缩后与系统或硬件随机数发生器的输出数据可选经数据拼接后一同作为

,()DRNG

的输入产生种子经过初始化开始内部状态的迭代以及必要的重播种操作以产生所需数量

。DRNG,,

的随机数除熵输入外输入还包括必选个性化字符串可选和额外输入可选

。,DRNGnonce()、()()。

为保证软件随机数发生器的安全性需要对熵源的熵进行熵估计以及对熵源的状态进行必要的健

,,

康测试对于一个关键安全参数其收集的最小熵值应符合的要求本文件以

。,GB/T37092—2018,256

比特的最小熵值为基准来给出软件随机数发生器的参数信息

52熵源

.

熵源是软件随机数发生器随机性的来源由于软件密码模块运行在通用操作系统上因此其随机

。,

性的来源也一般依赖操作系统提供包括系统时间特定的系统中断事件磁盘状态人机交互输入事件

,、、、

如按键鼠标移动等动作等为了保障软件随机数发生器的可靠性建议随机性来源不少于种

(、)。,3。

以操作系统中的中断事件为例给出如何从中断事件中提取随机性

A.2,。

此外在特定的软硬件平台上熵源也可以是平台已有的随机数发生器包括硬件随机数发生器和

,,,

系统随机数发生器见图如基于抖动的随机数发生器内置的硬件随机数发生器外部

(1),CPU、CPU、

硬件随机数发生器部件等软件随机数发生器也可以用这些特定软硬件平台上的熵源作为熵输入来增

大随机性但仍然需要保证在没有这些熵源时输入的熵仍然是充足的不同的是为了考虑效率和安

,,。,

全性图中的系统熵源的输出数据需要在熵池中累积并经过扩展函数输出后再作为的熵

,1DRNG

输入

4

GM/T0105—2021

53熵池

.

熵池作为软件随机数发生器中保证熵采集的重要部件在空闲时可以把熵源输出收集起来

,,RNG;

当需要时可以及时从熵池中读取所需的数据从而减少产生随机数的延迟此外为增加熵源数据混

,,。,

淆节省熵池空间熵池内可采用迭代压缩函数来增加熵率如通过循环移位寄存器实现如果熵池太

、,,。

小会导致累积的熵不足如果熵池太大则浪费内存空间出于以上考虑熵池大小应大于或等于字

,。,512

节但不宜超过字节给出了一种基于循环移位寄存器的熵池结构示例

,4096。A.3。

在收到初始化或重播种请求时在熵池中的熵值大于比特后根据的熵估计结

DRNG,256(5.4

果所有熵池中的数据进行压缩后与图中的系统可选或硬件可选的输出数据经数据

),1RNG()RNG()

拼接后一同作为的输入同时扩展函数压缩后的结果也反馈回熵池中以保证后向安全性

DRNG。,,。

为保证熵池中的熵能够最大限度的保持可使用密钥扩展函数作为压缩算法仅使用密码杂凑算法无法

,,

保证压缩结果是满熵的一种基于密码杂凑算法的密钥扩展函数按附录

(full-entropy)。SM3(SM3_df)

输出长度可设置为比特有关密码杂凑算法的计算方法按

B,440。SM3GB/T32905。

54熵估计

.

熵估计是保证随机数发生器安全性的关键系统熵源一般属于非物理熵源因此难以建立一个可

。,

靠的数学模型对熵源的随机行为进行刻画也难以进一步通过理论建模的方法对熵源的熵进行估计

,。

本文件给出了一种离线统计熵估计的方法对系统熵源的最小熵进行估计见附录其中包含了一种

,(C),

较为通用的基于马尔可夫预测器的熵估计器更多的熵估计器可以参考文献此外对使用外部

,[2][5]。,

随机数发生器作为熵输入的情况如系统或硬件统计熵估计也适用于对这些随机数发生

(RNGRNG),

器输出的熵估计

55健康测试

.

健康测试用于监测熵源的状态以保证随机数发生器运行时的安全健康测试包括上电健康测试

,。、

连续健康测试和按需健康测试三种

上电健康测试

a):

在软件随机数发生器或其所在的密码模块上电或重启以及首次使用熵源之前执行

●,;

上电健康测试可以确保熵源在正常运行条件下使用前可以按预期工作并且自上次上电

●,

健康测试以来没有发生任何故障

;

上电健康测试需要对至少个连续样本执行连续健康测试

●1024;

在上电健康测试期间熵源的输出不能用于其他操作

●,;

在测试完成后且没有发现任何故障或错误那么可以考虑使用测试期间的熵源的输出

●,。

连续健康测试

b):

连续健康测试关注熵源的行为在熵源工作时持续地检测从熵源得到的所有数字化的样

●,,

本目的是当熵源输出时能够及时发现熵源潜在的多种故障执行该测试时无需禁止熵源

,,

的输出

;

在熵源正常运行时该测试的误警率应非常低在许多系统中一个合理的误警率策略可

●,,,

以保证即便在很长的使用时间内也几乎不会发生故障报警

;

连续健康测试会受到资源限制这个限制将影响检测到熵源故障的能力因此连续健康

●,,,

测试通常被设计成检测严重故障

按需健康测试

c):

可以在任何时候被执行

●;

在按需健康测试的过程中从熵源收集的数据在测试完成前不应使用可以随时丢弃也

●,,,

5

GM/T0105—2021

可以在测试完成后且未发生任何错误的情况下使用

上述三种健康测试方法中上电健康测试和连续健康测试是应做的附录给出了连续健康测试

,。D

方法包含个测试算法重复计数测试和自适应比例测试除了附录中的两种算法外设计者也可

,2:。

推荐标准