摘 要: 随着信息技术的发展,智能IC卡在认证、银行、交通等领域得到广泛应用,系统的真随机数的产生及其改进成为人们的研究重点之一。简单论述了真伪随机数的产生方法,并对其随机性进行了伪随机方法的改进。测试结果表明,经过算法处理后的随机性得到了较大的提高,完全通过国家商用密码管理局的随机性检测规范的测试。
0 引言
随机数在智能卡芯片操作系统(Chip Operation System,COS)中主要用于卡片和读卡器之间的认证、数据加密及其安全传输。随机数是以现代密码学为基础的信息安全系统的基石。整个系统的安全性完全依赖于随机数序列的生成效率和质量。因此,高质量的随机数对COS的安全举足轻重,如果随机数的随机性不够安全,整个系统极有可能被攻击者攻破,造成无法挽回的损失。
1 伪随机数和真随机数
信息安全系统中的随机数序列要求具有足够的长度和周期,以及尽可能高的熵值,即具有高度的随机性和不可预测性。
随机数序列的产生方法有两种:伪随机数和真随机数。
1.1伪随机数
目前应用的随机数通常是通过某些数学公式计算而产生的伪随机数,即由伪随机数发生器(Pseudo Random Number Generator,PRNG)产生的,它是由一个初始状态开始,通过一个确定的算法来生成随机数。一旦给定算法和种子,输出序列就确定了,有一定的周期性。
伪随机序列一般都有比较好的随机统计特性,其用数学算法生成,在一些统计特性方面接近真随机序列,但却是周期的和可预测的。
伪随机数容易获得且方便使用,一般用于仿真、测试等场合。
1.2 真随机数
真随机数是不可预测的,因而不可能重复产生两个相同的真随机数数列。真随机数只能用某些随机物理过程来产生。例如放射性衰变、电子热噪声、宇宙射线的触发时间等。
真随机数序列是由真随机数发生器(True Random Number Generator,TRNG)产生,是依托自然界物理现象的随机特性。对一个TRNG来说,不存在初始序列或种子,没有任何一种算法可以预先决定下一个输出是什么,消除了伪随机性的周期问题,而且是独立和不相关的。
真随机序列虽然有难以预测、不能重复的特性,但随机统计却不理想。真随机序列用物理方法生成,通过选取真实世界的自然随机性,所生成的随机数称为真随机数。
真随机数取自物理世界的真实随机源,难以破解,主要应用在数据加密、密钥管理、身份鉴定等对安全性要求较高的领域。
2 基于振荡采样产生随机数
在智能卡中随机数通常用于产生密钥以及与读卡器之间的认证。由于高安全的原因,随机数应当是真随机数而不是伪随机数。现在所有的智能卡控制芯片都有产生真随机数的硬件随机数产生器。所产生的随机数的随机性必须不能受到外部物理环境的影响,比如温度、电压。
本文真随机数的产生基于振荡采样的设计方法。基于振荡采样的TRNG从时钟抖动中获得随机性。图1所示是基于振荡器的真随机数发生器。
带有抖动的慢振荡器通过D触发器采样一个周期固定的快振荡器,输出随机序列Y。由于慢振荡器的抖动是不确定的[1],并且其抖动范围远远大于快振荡器周期,因此输出0和1的概率基本相等,从而输出的序列Y随机。
振荡器的相位抖动使得采样值具有不确定性,理想情况每一次采样都能产生一个随机位。但产生的随机数不具有较好的统计属性,所以通常会用伪随机的方法来对采样输出进行处理,改善其随机性。
3 随机数随机性的算法改进及测试
3.1 真随机数的伪随机处理
虽然真随机数发生器在密码、密钥的应用中起着重要作用,但是目前大多数真随机数发生器还是基于一种理想状况来分析其输出的随机序列的性能。由于各种物理环境变化的影响,基于硬件实现的随机序列源通常具有一定的相关性。
实际中产生的随机数存在分布性较差、稳定性不佳等缺点,所以在实际应用中,通常还需要对其发生器的输出序列进行进一步的处理和运算来改进,才能使输出的序列通过各种随机性的测试。
几乎每个智能卡操作系统都包括有用于鉴别的加密算法。使用它作为真随机数的伪随机改进是一个必然的选择。实现一个尽可能把明文搅乱的加密算法,如果不了解密钥就无法从密文得出明文。称之为“雪崩准则”的原理:平均而言,输人改变1位则输出的各位中将有一半要改变[2]。这个特性能很好地为随机数发生器所应用,发生器的准确构造随其实现而各不相同。图2和图3是两种真随机数的改进方法示意图。
基本改进过程:将产生的真随机数填充环形缓冲器,再将环形缓冲器部件之值用DES加密,用一个对卡是唯一的密钥,产生密文长度为8 B的随机数,也可以采用其他加密算法进行加密。加密后的数据与缓冲器里下一个真随机数的XOR值提供了EEPROM环形缓冲器的新输入。循环结束后产生的随机数即为改进的真随机数。
对产生的真随机数通过加密算法进行进一步改进处理。主要步骤为:
(1)先通过硬件随机数发生器,产生8/16 B的随机数,将产生的真随机数作为明文,再重新产生一次真随机数作为密钥,经过3DES加密得到密文;
(2)将经3DES加密后的密文,作为SM1国密算法的基础密钥EK;
(3)重复步骤(1),将得到的密文作为SM1国密算法的系统密钥SK;
(4)重复步骤(1),将得到的密文作为SM1国密算法的辅助密钥AK;
(5)重复步骤(1),将得到的密文作为新的明文;
(6)利用步骤(2)~步骤(5)产生的密钥和明文,通过SM1国密算法进行加密,得到的随机数称为改进随机数。
3.2 改进随机数的测试
实现了随机数发生器之后,对它所产生的随机数必须严格地测试,基本情况是在所产生的随机数中,1和0的数量应接近于相等。采用标准统计方法从数学上测试随机数。对大量8位随机数进行测试,应当有10 000~100 000的数字产生,分析以达到合理的可信结果。测试方法是使用计算机测试程序。
本实验使用的测试工具是由美国国家标准技术研究所(NIST)推出的SP 800-22[3]随机性测试工具,并根据国家商用密码管理局的随机性检测规范的要求[4],对测试工具补充了所增测试项。
测试设定的显著性水平为α=0.01,样本数量为1 000,样本长度选取106 bit。测试结果如表1所示。
根据国密局随机性检测规范,当样本数量为1 000个,每个样本容量为106 bit时,如果通过的样本个数不小于981,则随机数发生器通过此项检测;否则,未通过此项检测。从表1可知,改进的真随机数产生器通过了国家商用密码管理局的随机性检测规范的所有随机性测试项。
4 结论
本文描述了一个基于振荡器的真随机数的实现方法,并对产生的随机数进行了伪随机改进。测试结果显示,改进后的真随机数的输出是随机的,满足了国家商用密码管理局对智能卡COS产品的随机性要求。
参考文献
[1] 霍嘉.随机数发生器的设计与研究[D].西安:西安科技大学,2010:28-30.
[2] RANKL W, EFFING W. Smart card handbook(4th edition)[M]. New York: JohnWiley&Sons, 2010:159-166.
[3] NIST. FIPS PUBS 800-22. A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications[Z]. 2010.
[4] 国家密码管理局商用密码检测中心.随机性检测规范[Z]. 2014.