我的问题是我们知道通过均匀分布的信息可以实现完美的保密。但是如果消息分布不统一会是什么呢?那么我们如何定义完美的保密?
答案 0 :(得分:2)
为了给出令人信服的答案,最好讨论一些定义安全性的可能方法。正确的定义并不明显,历史上需要进行大量的研究和一些迭代才能实现。
大多数人都认为,“一次性垫”在非常强烈的意义上是完全安全的。一次性垫是一种非常古老的技术,它在二战之前就已为人所知。
这个想法是这样的:你是间谍,我是你的间谍主管。我想把你送到国外收集秘密并寄回给我。为了我们可以沟通,我首先创建一个完整的随机数字书。 (有些机器机械地翻转硬币并打印零或一个,我们可以说。)我有一份副本,而且你有副本,没有其他人这样做。
如果要向我发送k
个字节的消息,则从书中获取k
个字节,并将其与字节进行异或。 (然后你将书签提前k
个字节。)当我从你那里收到k
个字节时,我会用书中的下一个k
字节对它们进行异或,然后推进我的书签。
即使敌人拦截了你的所有信息,如果我们考虑它们看起来如何作为书中(随机)位的函数,对手收到的信息将作为独立的硬币翻转分发。实际上,对于您发送的任何固定邮件,如果message xor book
是随机的,则book
完全是随机的。
因此,这种方案非常安全 - 密文在统计上与明文无关,因此对手无法了解您的消息。
这个问题是您必须事先私下交换尽可能多的字节,因为您将公开交换。当你在做什么时,例如信用卡在线销售,您不能假设事先有私人交换密钥材料。因此,能够减少所需的关键材料数量非常重要。
另一方面,如果将密钥材料减少到k
字节消息的k
字节,那么可证明您将无法达到此安全级别。对于不同的消息,密文分发必须是不同的 - 即使你可以证明它们之间存在较大的统计距离,因为字节数变小。
在现代密码学中,放宽定义的通常方法是尝试将注意力限制在计算限制的对手。
形式化两个分布D1
和D2
的统计距离的一种方法是,距离是所有测试函数T : { strings } -> { 0, 1 }
中期望差异的最大值{{ 1}}与E_{x ~ D_1} [ T(x) ]
。
然后,我们可以通过仅关注高效可计算的测试函数E_{x ~ D_2} [ T(x) ]
来修改定义,例如,在多项式时间或次指数时间等等。 (通常是某些东西是“安全参数”。)
如果计算限制对手的T
和D1
的统计距离较小,我们有时会说,D2
和D1
是< EM>区分
然后,我们可以说,对于任何固定消息D2
,如果随机种子/密钥中的概率,密文的分布与均匀分布无法区分,则加密协议是安全的。 / p>
在合理的加密假设下,人们普遍认为,即使对于比消息短得多的密钥,也可以实现这一点。但是,如果没有证明P!= NP和许多其他困难的事情,就不能严格证明这一点。例如,我们需要更严格的伪随机生成器构造,即使在生成器比对手更昂贵的情况下,仍然不知道。
请注意,在这种形式主义中,消息分发是什么并不重要。无论是接收消息,然后压缩它们,然后加密它们,还是加密普通英文文本,目标都是每个固定消息字符串,种子/密钥中的随机性是enoguh到制作一个欺骗对手的发行版。
还有其他方法可以使安全性正式化,但我认为这是一种体面的方式。
关键点:
如果任何固定消息的安全条件成立,那么它也可以通过平均参数保留消息的任何固定分发。这使得这个定义非常强大。