随机数在加密中被广泛使用。它们可以构成关键安全参数(CSP)的基础,例如用于通过公共互联网进行交易的加密密钥。
通常,试图破坏加密的攻击者将专注于在随机数中查找或诱导可利用的模式,这使得比使用暴力搜索更有效地猜测密钥。攻击者可以采用许多不同的技术,例如改变电压和温度以尝试破坏噪声源的正常运行,或者使用其控制下的几乎相同的随机数发生器(RNG)的输出来帮助预测RNG在受攻击系统中的输出。
用作加密密钥的劣质随机数可能会危及使用该密钥处理的所有消息或数据的安全性。当 RNG 不提供预测电阻时,使用受危害的 RNG 创建新的加密密钥是不够的,并且在重新设定 RNG 种子之前,所有未来的消息和数据都处于危险之中。定义“低质量”充满了困难,因为证明一串数据是随机的还是不是随机的,是一项复杂而漫长的工作。幸运的是,从相反的方向看问题可以为什么是密码学上可接受的随机数提供答案。
美国国家标准与技术研究院(NIST)推荐一种适合嵌入FPGA或SoC的方法(规格SP800-90A /B /C)SP800-90A定义了确定性随机位发生器(DRBG),它是一种基于高级加密算法(AES)算法的纯数字电路。SB800-90B中考虑并定义了硬件噪声源,包括测试电路,这些电路可用于在系统中检测其输出是否不再是随机的(例如,由于篡改或故障),并进行统计测试以鉴定特定电路是否可用作硬件噪声源。SP800-90C考虑了如何在系统中组合DRBG和噪声源。将基于加密算法的DRBG与物理噪声源相结合,产生一个RNG,该RNG提供两全其美,基于硬件噪声源的预测电阻以及加密算法的保证统计特性。
RNG内核包括完成此任务的电路。它包括一个完整的AES内核,作为设计的关键部分。AES 算法的一种标准使用模式称为计数器 (CTR) 模式。在此模式下,计数器中的值使用密钥进行加密,以生成有效的随机 128 位位块。然后,通过使用随机位对数据进行XOR来加密或解密数据。计数器和 AES 单元在自动屏蔽点击率中的组合就像一个 DRBG。它产生一系列随机数,其值对于任何知道密钥的人来说都是完全可预测的,但是如果没有密钥,则很难确定。如果AES单元的密钥取自物理噪声源(播种DRBG),我们就有了SP800-90A中规定的CTR-DRBG方案的基本基础。
SP800-90A中的系统更进一步,提供不少于三组其他输入以及物理噪声(称为熵)。
在为 RNG 构造种子时,随机数输入与熵输入一起使用。Nonce确保计算出的种子不仅仅依赖于熵,并且保证在每次实例化中都会发生变化。Nonce 数据可以是简单的计数器,也可以是从时间戳派生的,但每次使用都必须不同,并防止篡改。
个性化字符串输入是实例化 RNG 时使用的另一个可选输入。这可能是每台计算机不同的序列号。这可确保 RNG 的两个副本的行为不同,并防止攻击者获取包含 RNG 的产品副本,以预测目标副本中的 RNG 的行为方式。
附加输入提供了一种机制,用于向 DRBG 包含其他熵。例如,在设计中通常很容易找到一组信号,这些信号看起来好像它们的值本质上是随机的,但很难将它们限定为SP800-90B所需的噪声源。使用额外的输入,这些位可以“搅拌到汤中”,即使它们没有好处,至少它们不会造成伤害。如果主熵源受到损害,这将提供额外的保护层。
DRBG以复杂但完全确定的方式组合了各种输入。它依赖于AES算法的安全属性,以确保攻击者无法预测或反向工程系统输出,前提是攻击者无法访问所有输入(包括AES密钥)。
系统的确定性性质对于系统中最后一个重要块(称为运行状况检查)的操作至关重要。启动时,它会将RNG与任何其他信号隔离开来,加载测试数据,并将输出与一组已知答案进行比较。运行状况检查在重置后根据请求自动启动,例如,如果系统的另一部分检测到攻击。如果运行状况检查失败(称为灾难性错误),则逻辑设计为锁定以阻止输出任何不可靠的数据。在发生灾难性错误后,需要通过重启电源或重新配置FPGA来复位系统。
除了所描述的DRBG电路之外,还需要熵源。在纯数字系统中,常见的选择是自由运行的环形振荡器,用于计时计数器。计数器的最低有效“n”位用作 n 位种子。环形振荡器的频率无法从外部准确确定,因为它会随着电源电压上的热变化和噪声而略有不同。如果环形振荡器运行相当长的时间,并且计数器相对较小(几位),则计数器值将在很大程度上是随机的。这个和许多其他物理噪声源的一个明显问题是,可能需要比物理噪声源所能提供的随机值更频繁地需要随机值。DRBG允许在从物理噪声源定期重新播种之间生成多个随机数。
RNG可能听起来很复杂(确实如此),但加密算法的强度取决于提供给它的密钥。因此,RNG是安全系统的重要组成部分。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !