为安全性设计选择可靠的随机乱数加密方案
来源:爱集微 发布时间:2015-05-13 分享至微信

我一直认为二极体接面(diode junction)的热杂讯(thermal noise)是随机性的,但是现在,它似乎并不是那么随机。密码学家们总是在思考坏人可能会发动的攻击手法,然后要想出对抗的招数;他们做的是好事,因为大多数人(包括我自己)在进行线上金融活动或购物时,都得仰赖安全性通讯。

有许多密码学菁英任职于美国国家标准技术研究所(National Institute of Standards and Technology,NIST);该组织公布了一套规格,有关于如何建立随机位元流,以应用于加密──其SP800-90A规格所提供的解决方案,是以一种决定性随机位元产生器(Deterministic Random Bit Generator ,DRBG)将位元流加密。

这种随机乱数产生器(Random Number Generator,RNG)对我来说是有意义的,接下来我将先简短介绍DRBG的原理,然后谈谈如何将这种RNG嵌入FPGA中;现在我需要先厘清一些会用到的专门术语,然后解释其运作过程。

任何一套加密系统会需要一组金钥以及一组输入的资料流,从这里事情开始变得比较复杂。用以编排密码的、“或多或少随机”的位元流,被称做是Entropy (熵)输入;为了确保每次RNG的产出是不同的,Entropy要结合叫做Nonce (随机数)的输入;Nonce在通过DRBG的每一个周期,必须要改变或是增加。这是有道理的,因为你需要防堵一个可能会多次收集资料、尝试预测下一个输出位元流内容的攻击者。

但是为了防止Entropy本身被泄漏,还有一个选项是采用第三个变数──个人化字串(Personalization String);这里的巧妙之处在于,如果这个输入是源自于一组编号,就可以确保显然正在监视相同机器的攻击者难以有进展。SP800-90A规格还包含另一个选择性的额外输入(Additional Input),其概念是它可以源自于第二个(独立的) Entropy来源、也就是“腰带又加上吊带”的双重保障。

到这里我的头开始痛了…然后我读到有关于Health Check (健检?)的部分;Health Check一开始是做为例行检查、确认一切安好,或者是在使用者怀疑攻击者可能窜改RNG时进行。这个区块惠隔离所有DRBG的外部输入,然后馈入一组预设的刺激;输出的结果是针对一组已知答案的验证,如果因为任何原因失败,Health Check就会释出错误讯息、锁住RNG ,避免输出任何被破解的位元流。

要将RNG嵌入几乎任何一种FPGA都很容易,设计工程师只需要采用RNG IP核心以及简单的环形振荡器与计数器做为Entropy的来源;这种常见规则适用于打造加密系统,因为设计工程师必须确保FPGA内部的敏感资料,不能从元件的任何一个接脚被存取。

模拟、验证被随机设计的电路可能听起来很难,但因为是完全确定性的,RNG核心有一套完整的验证测试基准;如果最后的加密系统需要听过外部测试机构的批准,该测试基准也同样重要。我只能想像要测试位元流随机特性会遇到的问题。FPGA的实作过程应该是全数位化的,所以应该很强韧、不会受到尝试以改变电压或温度的攻击者之窜改;自振荡频率有可能会变化,但那不应该影响输出位元流的随机性品质。

采用IP核心做为嵌入式AES加密引擎的一个好处是,该种电路区块能在许多应用中同时支援其他工作,为资料流提供多重加密解密,节省FPGA内部空间。当它需要透过不安全的连结传送加密金钥,另一个选项是在密钥包装中采用AES加密引擎。

品质不良的随机乱数不会成为加密系统的弱点,只要采用标准化的解决方案,将可帮助设计工程师们一夜好眠。

编译:Judith Cheng

(参考原文: How Random is Random Enough For Cryptography?,by Paul Dillien)

[ 新闻来源:爱集微,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论

暂无评论哦,快来评论一下吧!