密码学的一个警世准则是“密码算法是公开的”。之前一直觉得这句话是感性表述,因为完全可以把密钥设定为 TM 描述,加密解密算法都是 UTM,这样相当于实际的算法是保密的。
不过现在我产生了新的理解:要公开的是密码学算法的 instance 开始之前固定的部分,保密的是 instance 开始之后抽取的随机样本。待会儿论述为什么是这样。如果接受了这个想法,那么上面提到的 UTM 法里面,密钥只能从一个特定的 TM 分布抽取。而这个分布是在开始算法运行之前就固定好的,因此属于需要公开的。
现在来论述为什么是这样:
从实用角度考虑,这个分布必须是多项式时间可抽取分布;因为这个分布在算法开始使用之前已经固定,也属于需要公布的一部分,因此“实际的算法”是什么仍然是要公开的(即使它可能是多个算法和混合)。从实践的角度说,这个抽取密钥的算法需要写在密码学软件里面,或者写在硬件上,所以总是可以反向工程出来——应该看成公开的。
从理论角度考虑,以安全的伪随机数生成器为例,如果 G 是伪随机数生成器,且对任意高效的一位输出算法 D,有
Pr[D(y)=1] - Pr[D(G(x))=1]
是安全参数的可忽略函数(其中 y 取自 G 的到达域,x 取自 G 的定义域,都是均匀分布),则说 G 是 安全的。定义中 D 的量化是在 G 之后的,因此“ D 知道 G ”(虽然有些 D 可能不会利用这一点),如果我们把密码学分析师或黑客想象为 D 的设计者,则他们可以用对 G 的知识设计 D,因为在取 D 的时候 G 已经固定了。“对手”知道 G,也就是“算法是公开的”。
————————
我思考、草稿用的是汉语,然后写博文是英语,最后再把博文的大概内容翻译成汉语,简直要命……
在这篇博文的书写过程中,我建立了一个新的 extension 帮我管理简单的引用。当你点击博文里面的 [AU83] 或者 [WIKI] 的时候,你会被转到最后列出引用的地方,并且那里会出现一个“箭头按钮”,点击之可以返回正文的位置;如果有多个正文的位置引用同一个内容,可以返回正确的位置(一个例子参考 这篇博文 提到的 6 月 23 日更新内容)。这一切都不需要 JavaScript 即可完成。
————————
参与讨论:
(另外欢迎挑刺找我的文章中的 语法 / 拼写 / 数学 错误
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.