我对密码学中使用的PRG有点困惑。
基本上,PRG 用于将长度为 s 的随机序列(主要是密钥)扩展为长度n >s,看起来仍然是随机的。现在虽然这在数学意义上显然是不可能的,但我们的想法是我们实现了合理的随机性,这意味着一个有效的区分器无法将更大的序列与随机区分开来(因此我们在计算意义上实现了随机性)。我的问题是我们真的吗?
考虑这个例子:
输入: k: {0,1}^2
PRG G: {0,1}^2 -> {0,1}^4
输出: k' = G(k) : {0,1}^ 4
这意味着我们的初始键可以采用 4 个可能的值。尽管我们的派生密钥涵盖了 16 个值的范围,但它只能取这 16 个值中的 4 个,因为 PRG 是确定性的。那么是什么阻碍了我将可能的初始密钥映射到输出密钥作为攻击呢?因此,我可以将搜索空间从 16 个值减少到 4 个值。所以基本上反转扩展?
我现在认为,只要我们有内存来存储这些映射,我们就不会实现任何随机性扩展。由于有一些常用的 PRG,这将激励协作项目映射所有或至少部分密钥以破坏许多应用程序的安全性。
我确信我上面一定有什么问题,但我无法弄清楚我的错误在哪里。能否请你帮忙?
非常感谢