一 点睛
该伪随机数生成器,用于密码软件PGP中。
二 伪随机数生成器的步骤
1 初始化内部状态
2 将当前时间加密生成掩码。
3 对内部状态与掩码求XOR。
4 将步骤3的结果进行加密。
5 将步骤4的结果作为伪随机数输出。
6 对步骤4的结果与掩码求XOR。
7 将步骤6的结果加密。
8 将步骤7的结果作为新的内部状态。
9 重复步骤2~8直到得到所需数量的伪随机。
三 攻击性分析
在步骤2中,我们将当前时间进行加密生成了一个掩码。当前时间是可以被攻击者预测出来的,但是由于攻击者不知道加***,因此他无法预测加密后的当前时间(掩码)。
在之后的步骤3和步骤6中,我们将使用掩码对比特序列进行随机翻转。
步骤3~5的作用是输出伪随机数。这里输出的伪随机数是将内部状态与掩码的XOR进行加密之后的结果。那么,攻击者是否能通过伪随机进行反算来看穿内部状态与掩码的XOR呢?不能,因为要看穿这个值,攻击者必须要**密码。因此,根据过去输出的伪随机数列,攻击者无法推测出伪随机生成器的内部状态。
步骤6~8的作用是更新内部状态。新的内部状态是将上一个伪随机数与掩码的的XOR进行加密之后的结果。那么,攻击者是否能够从伪随机数推测出新的内部状态呢?不能,因为要算出新的内部状态,只知道上一个伪随机数是不够的,还必须知道掩码以及加密的**才行。
通过分析上述步骤,可以发现,在这种伪随机数生成器中,密码的使用保证了无法根据输出的伪随机数列来推测出内部状态。换言之,伪随机数生成器的内部状态是通过密码进行保护的。
四 伪代码