Really "core", really random

小课堂 | 真「芯」,真随机

浅谈真随机数及在 imKey Pro 的应用

浅谈真随机数及在 imKey Pro 的应用

导语

对区块链稍有接触的人,大多听说过「非对称加密」、「哈希算法」之类的加密学名词,但并不是所有人都知道,这些加密算法背后的基石 ——「随机数」。 用户在创建钱包的过程中,可「随机」获得一把私钥,通过私钥用密码学计算出地址,有了地址就能收取数字货币,私钥能且唯一支配这个地址上的数字资产。所以,谁拥有私钥,谁就拥有对应地址在链上的资产。 那么,私钥会不会有一天耗尽?是否可以通过撞库的方式暴力破解? 要消除这些困扰,你需要先对随机数有所了解。

一、随机数的重要性

在计算机科学中,随机序列在很多领域中都有重要作用,譬如计算机仿真、统计采样、密码学、网络游戏等,不同领域对于随机序列质量的要求也不一样。如在网络游戏中会存在大量随机事件——暴击率计算和抽奖等,这些场景一般都使用特定的伪随机机制,降低连续暴击或不暴击的概率,或十连抽必中的策略,都是为了让玩家有更好的游戏体验。但在本质是攻防对抗的信息安全领域,不满足「随机性」和「不可预测性」的随机数显然是不能使用的,这可能会导致安全体系产生不可弥补的漏洞。

不管是密码协议设计还是更基础的密码算法,随机数都是对抗攻击的核心依赖。根据柯克霍夫原则,密码系统的安全性应该完全依赖于密钥而不是保密的系统设计,密钥通常都源于随机序列产生,因此随机数的质量在密码系统非常重要,在理想情况下,完全随机的密钥应该只能通过暴力攻击来破解。

随机数在密钥生成、数字签名、认证与鉴别等应用中以及各种与安全通信有关的协议中都有大量应用,如:

  • 密钥分发方案中,通常会使用随机序列作为握手信息来防止重放攻击。
  • 在 SSL/TLS 协议过程中,随机序列不但用来防重放攻击,也是生成会话密钥的基本元素。
  • 非对称密钥算法的密钥产生和签名过程,公开的数学算法 + 随机序列提供了工程实现安全。

二、随机数生成器

通常来说,随机数有以下 3 个检验标准:

1. 随机性

随机序列应该有良好的统计特性,不存在统计学偏差,是完全杂乱的数列。序列中的随机数分布应该是一致的,出现频率大约相等。满足这类要求的数字在人类「一眼看上去」是随机的。

2. 不可预测性

给定随机序列的一部分和随机算法,不能有效的演算出随机样本的其他部分。

3. 不可重复性

除非将随机序列本身保存下来,否则不可能出现相同的序列。

一般我们说满足 1 和 2 的随机数生成器是伪随机数生成器,3 个条件全部满足的随机数生成器是真随机数生成器。

伪随机数生成器(PRNG)

在计算机中如果给定确定的初始条件,使用确定的算法去产生随机数,那么产生的随机数总会在周期内遵循某种规律,这意味着到达周期之后总会重复,即使其满足随机性统计所定义的特定分布要求,因为其结果在特定周期是可见可预测的,那么这种方法产生的随机数并不「随机」,我们把它称为伪随机数,对应的方法为伪随机数生成器。在工程实现中通常需要将周期设置的足够长(要远远大于可能采集的随机数的长度),但其在理论上确实是有规律且可预测的。

真随机数生成器(TRNG)

真随机性的条件是苛刻的,在给定边界条件下,可以认为在经典力学下产生的随机数都是伪随机数,因为物理噪音、温度变化等都是可观测的,但出于现实应用需要,如果边界条件复杂且难以捕捉,可以认为是真随机数。

那么计算机如何生成真随机数呢?

通常需要引入外部熵源使产生的随机序列周期性大大减弱,UNIX 内核的随机数发生器(/Dev/Random)和Windows内核的 RtlGenRandom 都是这样的实现。UNIX 维护了一个熵池,不断收集非确定性的设备事件作为种子来生成随机数;Windows 则会收集进程、线程、时间、CPU 内部高精度计数器等信息作为内部熵源。

可以这样来描述真随机数:TRNG 是基于一种不可预测的物理现象(称为熵源)的功能或设备,用于生成非确定性数据(例如,一串连续的数字),目标为密码算法提供种子(Seed)。

生成大量的真随机数和伪随机数并将其可视化后,如下图,可以直观的看到真随机数没有任何规律,而伪随机数是按照一定规律排列。

三、安全芯片的真随机数发生器

通常安全芯片的真随机数生成器是由熵源和熵提取或采样单元组成,采样后的数据还需经过后处理单元或密码调节单元进行质量控制。产生的随机数质量高度依赖于熵源输出的原始熵,一般会内置基于物理噪声的单路或者多路随机源电路,每路随机源电路独立采样,将模拟信号提取为可用的数字形式后,交由后处理单元对其进行处理,譬如消除原始输出的偏差或者对信号进行增强处理等,通过这种方式获取的随机数主要应用于密码技术,具备高质量的 TRNG 也是安全芯片一个必不可少的功能点。

为了确保随机数生成器的可靠性,安全芯片每次上电后会对随机数生成器进行自检,通常也支持随时发起检测。

(注:基于噪声的 TRNG 典型架构)

四、TRNG检测

国内外都有一些认证方和认证规范来验证 TRNG 的产生是否符合真随机数的 3 个标准:随机性、不可预测性和不可重现性。

如 NIST 的 SP 800-90 A/B/C 标准,它提供了对应的检测套件,(FIPS) 140-2 的 4.9.2 章节规定了「连续随机数生成器测试」等内容,测试标准即 SP 800-90B 标准,如下图所示。

五、imKeyPro 如何使用真随机数功能

imKey Pro 产品核心是Infineon 的  SLE78CLUFX5000PH,该芯片为数字安全方案「完整性保护」提供全面错误检测、自检双 CPU 和全加密数据,包括 CPU 内加密计算。

(注:RZH1532 代表 SLE78CLUFX5000PH 芯片的生产批次号)

该芯片满足通用标准 EAL6+(高级)和 EMVCo 认证。

对应证书可在 CC 官网查阅

https://www.commoncriteriaportal.org/files/epfiles/0879V4c_pdf.pdf


Public Security Target 文档中指明了该芯片的随机数模块通过了 SP 800-90B 标准,具体可详见

https://www.commoncriteriaportal.org/files/epfiles/0879V4b_pdf.pdf


拥有高质量的真随机数发生器,还需要在工程实践中正确使用它,imKey Pro 在整个产品的生命周期中都使用了 TRNG,包括但不限于以下方面:

  • 设备唯一证书密钥对的产生
  • 连接授权码的产生
  • 创建钱包时候产生的熵
  • 密文存储密钥的产生
  • 签名过程中使用到的随机数,如 256K1 签名时的K值(也可选用 RFC 6979)
  • 设备管理的 SCP11C 安全通道的建立

 

文章来源:飞天诚信产品研发部