随机数与一次一密

随机数

序列密码的安全性完全取决于密钥序列,所以随机数非常重要。

随机数生成器

1. 真随机数生成器(TRNG)

真随机数的突出特点是它的输出是不可复制的。真随机数生成器都是基于物理过程,例如抛硬币、掷骰子等。

密码学中通常使用TRNG用于生成回话密钥。

2. (通用的)伪随机数生成器(PRNG)

伪随机数生成器从一个初始种子值开始通过各种计算得到序列。通常使用递归得到:
s0=seed
si+1=f(si),i=0,1,…

此表达式的一个推广形式就是si+1=f(si,si-1,…,si-t)所示的生成器,其中t是一个固定整数。最常见的就是线性同余生成器:
s0=seed
si+1=a si+b mod m,i=0,1,…
其中a,b,m都是整型常量。

注意,PRNG不是真正意义上的随机,它是通过计算得到的。例如ANSI C中的rand()函数,它的参数s0=12345,a=1103515245,b=12345,m=231

PRNG都被要求具有良好的统计属性,意味着它的输出近乎跟真随机数相同。

除了密码学外,伪随机数在其他很多地方也应用广泛。

3. 加密安全的伪随机数生成器(CSPRNG)

它是PRNG的一个特例,它是一种不可预测的PRNG。

也就是说,给定密钥序列的其中一部分,不能预测到其他部分,或者是不存在任何一种算法会使成功预测的概率大于50%。

不过,只有密码学中才要求CSPRNG具有不可预知性,在几乎所有的计算机科学或计算机工程的情况中都需要伪随机数,但并不要求其具有不可预知性。

一次一密

无条件安全的定义

如果一个密码体制在无限计算资源的情况下也不能破译,则说明它是无条件安全的或信息理论上是安全的。

一次一密的定义

一个序列密码被称为一次一密,必须满足一下条件:

  1. 通过真随机数生成器得到的密钥序列:s0,s1,s2,…
  2. 只有合法的通讯方才知道密钥序列;
  3. 每密钥序列为si仅使用一次。

一次一密是无条件安全的。

无条件安全基于信息理论,并对攻击者的计算能力没有限制。则,对一个对称加密算法进行蛮力攻击,即使一个密钥长度足够长,也只有可能是计算安全的,而不是无条件安全的。

证明OTP是无条件安全的:

对每个密文位,可得到以下形式的等式:
y0 ≡ x0 + s0 mod 2
y1 ≡ x1+ s1 mod 2
……

即使攻击者知道了y0的值,也无法确定x0。如果s0来自一个真随机源,且值为0和1的概率都是50%,则x0为0和1的概率也完全相同;而如果si不是真随机数,则情况完全不同,x0与y0之间将存在一定的函数关系,即使求解等式系统会很困难,但它却不是可证明安全的了。

而如果使用OTP,则需要满足那三个条件,第一个:要用TRNG的话,可以用基于半导体白噪音的设备,虽然不容易实现,但开始可以实现的。第二个条件,需要Alice将此随机位安全的传给Bob,意味着Alice要将真随机位烧录到CD ROM(只读光盘)中,并将此CD ROM安全送至Bob。第三个条件可能是最不切实际的一个:密钥序列位不能被重复,这意味着每个明文位都需要有一个密钥位!也就是说一次一密的密钥长度要跟明文长度一样长。这也许是OTP最大的缺点,因为长度不同的明文需要更换长度不同的密钥。

因此OTP在现实中很少用,但它为安全密码提供了很好的设计思路,例如将真随机位与明文进行XOR(异或)操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值