1 商密认证中的随机数介绍
如果说密钥的安全是密码产品的基石,那随机数的安全就是密钥安全的基石。密码产品设计和商用密码产品认证中,随机数的合规性也是需要重点关注的环节。
随机数的合规性主要包括:
- 随机数的来源合规。如果是自行设计的随机数发生器,该发生器需符合相关标准。
- 不同类型的密码产品在使用随机数时需进行对应的自测试,以保证产品的随机数安全。例如,密码机应对随机数执行出厂检测、上电检测、使用检测,其中使用检测又包括周期检测和单次检测。
- 密码产品使用的随机数质量检测。按照要求应采集1000组128KB大小的样本文件,执行GB/T 32915要求的15项测试。注意,随机数质量检测仅有2次机会,不通过则判定产品不合格。
本系列将围绕随机数展开描述,涉及随机数的定义、应用场景、规范解读、随机数发生器的设计、随机数质量的检测等。
如果商用密码产品认证中遇到任何问题,欢迎加微信symmrz或13720098215沟通。
2 随机数概述
2.1 随机数的定义
随机数,顾名思义就是随机出现的数,其最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系。
根据密码学原理,随机数的随机性可以分为三个标准:
- 统计学伪随机性。统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量。同理,‘10’、‘01‘、’00’、‘11’四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。
- 密码学安全伪随机性。其定义为,给定随机样本的一部分和随机算法,不能有效的演算出随机样本的剩余部分。
- 真随机性。其定义为随机样本不可重现。实际只要给定边界条件,真随机数并不存在,可如果产生一个真随机数样本的边界条件十分复杂且难以捕捉(例如计算机当地的辐射波动值),可以认为用这个方法演算出来了真随机数。
按照上述三个标准,随机数也分为三类:
- 伪随机数:满足第一个条件的随机数。
- 密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数生成器计算得出。
- 真随机数:同时满足三个条件的随机数。
2.2 随机数常见应用场景
随机数是密码学的基石,在密钥生成、密码运算、密码应用等场景,随机数都是关键信息。试想,如果在生成密钥时无法确保随机数的随机性,即攻击者可以预测即将生成的“密钥”,这将对密码产品带来严重的安全风险。下面简要介绍几个常见的随机数应用场景
2.2.1 密钥生成
对于密码产品,密钥生成方式可以简单分类为内部生成和根据输入派生两种方式。
内部生成:内部生成时可以直接调用随机数发生器的输出作为密钥。需要注意的是,设计密码产品时,随机数发生器应是“核准”的。例如,可以使用安全芯片的随机数接口获取真随机数作为对称密钥,也可以使用密码卡产生的真随机数作为SM2私钥。
根据输入派生:从一个密钥派生出一个或多个新的密钥。比如在GM/T 0024定义的GMSSL通信中,通信双方通过随机数协商出一个主密钥,再使用PRF函数从这个主密钥派生出本次会话需要使用的一组密钥作为工作密钥。如下图。
2.2.2 密码运算
在SM2数字签名、加密、密钥交换等运算中,会产生随机椭圆曲线点,此时需要使用随机数发生器输出的随机数。如下图所示,在SM2签名过程中的第3步,需要使用随机数发生器生成随机数,该随机数作为基点的倍数用来生成椭圆曲线上的随机点。
2.2.3 密码应用
随机数广泛应用于密码技术的应用。
a) 生成Nonce(Number once)
参考GB/T 15843,在执行身份鉴别过程中,需要使用时间戳、序号或随机数作为时变参数抵御重放攻击。时间戳、序号或随机数可以统一称为Nonce,即GB/T 15843中描述的时变参数。
在密码学中,推荐使用随机数作为时变参数。如下图所示,RB即为验证方B发送给声称方A的随机数。验证方B每次执行鉴别时调用随机数生成器产生一定长度的随机数RB,声称方A需要对RB执行加密并将加密结果返回以证明自身具备鉴别密钥。
b) 生成Salt盐值
Salt盐值是指将特定字符串插入到明文固定位置,让散列/加密等运算的结果值不同于使用原始明文的计算结果值。
以散列运算为例,散列算法如果被获知,只要有相同的明文,任何人都能算出相同的摘要值。添加盐值的意义在于让只有掌握正确盐值的用户才能计算出正确的散列值。如果每次散列使用的盐值都不一样,那么即使相同明文的散列值也是不一样的,这样就增加了破解难度。此外,盐值的随机性越好,对应的散列计算的安全性就越高。