密码学的随机性与区块链随机数

随机数的核心是数的随机性。随机性是信息安全领域,尤其是密码学领域一个很关键的研究问题。在密码学中,对一个序列的随机性是这样定义的:“看起来是随机的,即能通过我们所能找到的所有正确的随机性检验。”

背景介绍
随机数虽然看起来不起眼,但它却是信息安全的基础之一。在区块链中,随机数有很多的应用场景,例如抽奖活动、验证码、Token、密码应用场景等。

随机数的核心要义
随机数的核心是数的随机性。随机性是信息安全领域,尤其是密码学领域一个很关键的研究问题。在密码学中,对一个序列的随机性是这样定义的:“看起来是随机的,即能通过我们所能找到的所有正确的随机性检验。”

这个序列是不可预测的,即使给出产生序列的算法或者硬件设计和以前产生序列的所有知识,也不可能通过计算来预测下一个比特是什么或者计算代价很大几乎不可实现。

随机性在密码学中占有重要的地位,几乎所有的密码算法和协议都要用到一些对攻击者来说必须是秘密的数据。比如对一个密码算法来说,如果将秘密寓于密钥之中,那么密钥就是秘密,包括对称密码算法(DES、AES、IDEA 等)的密钥和非对称密码算法(RSA、DSA、Diffie-Hellman 等)的私钥等,而这些密钥必须是随机数。对于唯一已经证明了绝对安全性的一次一密系统来说,其安全性就依赖于随机的密钥。

随机数的核心要义是不可预测性,这也是对随机数最基本的底线要求。一旦随机数被人预测到,则基于随机性的安全体系将立刻崩塌。

随机数发生器
既然随机数如此重要,那么随机数生成器的地位也就不言而喻了。随机数生成器用来产生一个位序列,这个位序列的随机性就很重要。如何才能生成均匀的随机位序列呢?

掷骰子被认为是产生随机数的典型示例。统计学家 Francis Galton 在 1890 年的《自然》杂志中提出“在所有的产生随机数的事物中,我认为没有什么能够超越骰子了。” 在摇骰子的过程中,骰子在容器中不断地翻滚、互相撞击,以各种形式和角度与容器壁发生碰撞,在容器中的位置和形态在外界看来都是不可预知的,各种偶发因素一起参与摇骰子的过程中,比如容器哪怕只发生一次晃动,外界都不可能知道里面到底是什么形态。

迄今为止发现最早的骰子(4 个面)来自中东的一座公元前 24 世纪的坟墓里。公元前 1100 年的中国,一些“先知”利用火烧龟壳产生的随机龟裂对未来做预测。又过了几个世纪,在中国诞生了易经占卜法,利用 49 蓍草法进行占卜,其操作的分裂过程很类似于抛硬币。

真伪随机生成器
随机数生成器有真随机和伪随机之分。

只满足“随机数的核心要义”中所讲的随机性要求的其实是伪随机数生成器。伪随机数生成器是一个确定性算法,用一个长度为 k 的二进制序列作为输入,算法就能产生长度为 m(m>>k)的随机数序列,伪随机生成器的输入称为生成器的种子。

实际上,伪随机数生成器产生的随机数并不是真的随机。伪随机数生成器具有周期性,其产生的随机数序列总会产生重复,不过如果生成器的周期足够长(至少要远远大于可能采集的随机数的长度),那么这个随机数生成器产生的局部的随机序列也就和真随机序列看起来没有什么区别了。

真随机数生成器在满足“数的随机性”以及“序列不可预测”这两个要求之外,还要满足第三个要求:

这个序列不能重复产生,即使在完全相同的操作条件下用完全相同的输入对序列发生器操作两次,也将得到两个完全不同的、毫不相关的位序列。

满足了这三个要求的随机数生成器,其产生的随机数是不可重现的,即使是你自己也无法再次产生同样的随机数。

伪随机数生成器 PRNG(Pseudo Random Number Generator)
伪随机数生成器是由冯诺依曼在 1946 年创造的。他的基本思想是从一个随机数种子开始,对其平方,然后取中间值。接下来重复对得到的数取平方并取中间值的过程,就会得到一个具有统计意义属性的随机数序列了。这也就是广为人知的平方取中法。

然而,冯诺依曼的方法并没有经得住时间的考验,因为不论从什么随机种子开始,序列最终都会落入某个短循环序列,比如:8100,6100,4100,8100,6100,4100……。序列中的数字是依赖于前一个数字的这种生成函数,上面的重复循环问题是不可避免的。但是如果说这个循环间隔非常非常大,对实际应用并不会产生影响,那会怎样呢?

1949 年,数学家 D.H.Lehmer 利用线性同余生成器(LCG)实现了这一思路。这种随机生成器发明之初非常流行。一个开发者 Paul Houle 说道&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值