1 随机数发生器设计概述
密码行业的随机数发生器总体框架标准为GM/T 0103。随机数发生器可以分为硬件随机数发生器和软件随机数发生器。
硬件随机数发生器一般以组成部件的形式集成在安全芯片的内部,或者随机数发生器本身就是安全芯片。考虑到随机数发生器是密码产品必不可少的组成,一般的安全芯片都具备硬件随机数发生器。具备商用密码认证证书的安全芯片所使用随机数发生器都被认为是“核准”的随机数发生器。国内可供使用安全芯片产品众多,从物联网、IC卡、终端到密码卡均有覆盖,可以在这里查询信息:精准查询。
相比硬件随机数发生器,软件随机数发生器具备成本低、便携型好的优势,适应当前移动互联网的应用场景。但考虑到软件的运行环境复杂,熵源信息易受控,软件随机数发生器的设计应更全面考虑自身安全性。
无论是硬件或软件随机数发生器,均应考虑如下方面:
1) 熵评估。在随机数发生器的设计阶段,应“通过理论建模分析、统计检测等方法对随机源序列进行预测评估,得到熵估值”。熵估计不是随机数发生器的组件部件,但却是设计阶段必需步骤。熵估计可以参考NIST.SP.800-90B第6部分。
2) 随机数发生器的实现。随机数发生器的熵源可以是物理熵源,也可以是系统熵源,熵源输出经熵源健康测试后进行后处理。处理完成后输出随机数数据。硬件和软件随机数发生器的实现分别参考本文第2和第3部分。
3) 外界使用随机数发生器时需对输出的随机数进行使用自测试。自测试应符合GM/T 0062.
2 硬件随机数发生器
硬件随机数发生器的设计参考GM/T 0078《密码随机数生成模块设计指南》。本文不再对该标准进行重复。
物理随机源电路即为物理熵源,设计原理包括混动动力系统原理、相位抖动原理和热噪声直接放大原理。
物理随机源失效检测即为熵源健康测试。需要注意的是,除了健康测试,物理随机源电路输出的随机数应满足GM/T 0005的单比特频数检测、扑克检测、游程总数检测,测试数据长度为2*10^4,检测显著性水平为α=0.0001。
3 软件随机数发生器
软件随机数发生器的设计参考GM/T 0105《软件随机数发生器设计指南》。
软件随机数发生器的熵源一般为系统熵源,也可以引入物理熵源。引入物理熵源时需注意物理熵源数据的安全传输。
下图是一个典型的软件随机数发生器。来自系统熵源的输入数据经健康测试(包括上电健康测试和连续健康测试)后存入熵池,再经扩展后进入后处理阶段。后处理阶段的输出函数根据内部状态计算最终输出的随机序列,初始化函数和重播种函数则根据输入的熵数据更新内部状态。
与硬件随机数发生器一样,软件随机数发生器也对外提供2个输出接口:
1)状态输出接口:当内部自测试未通过,通过状态输出接口提示外界自身错误状态。
2)随机数据输出接口:为外界提供可用的随机数据。需要注意的是,这些随机数也应按照GM/T 0062进行自测试后才能使用。
考虑到当前商用密码产品由硬件向软件应用转型,越来越多的软件产品面临软件随机数发生器的设计问题,后面的文章会详细介绍上述软件随机数发生器的各部分设计方式和源码。
如果商用密码产品认证中遇到问题,欢迎加微信symmrz或13720098215沟通。