在童子军中,使用密码(即简单的密码)来编写消息是很流行的。
我想向孩子们介绍前向保密,以便他们可以将其与这些密码一起使用。因此,如果竞争团队发现加密消息并成功解码,他们也无法解码旧消息。
我的问题,我怎样才能用前向保密来做这些简单的密码?
在童子军中,使用密码(即简单的密码)来编写消息是很流行的。
我想向孩子们介绍前向保密,以便他们可以将其与这些密码一起使用。因此,如果竞争团队发现加密消息并成功解码,他们也无法解码旧消息。
我的问题,我怎样才能用前向保密来做这些简单的密码?
你描述的不是前向保密。
前向保密涉及以下属性:实体A和B之间在某个时间T发生了安全通信;攻击者记录了所有消息;在稍后的某个时间T'攻击者获得A和B已知的所有密钥的副本;然而,攻击者无法恢复在时间T发生的通信内容。为了实现前向保密,必须满足以下条件:
如果双向通信是可能的(例如,使用 SSL 连接,使用初始握手),则可以使用像 Diffie-Hellman 这样的密钥交换算法来生成特定于通信的会话密钥,仅在连接期间使用,然后丢弃。两个侦察员都知道的任何长期秘密将仅用于相互身份验证。
由于侦察员消息是单向的,并且普通侦察员无论如何都不会计算 1024 位 DH 密钥交换(他可以:现在所有这些年轻人都有智能手机,这完全可以胜任这项任务;但我知道那不是教学点),这种解决方案不能使用。
相反,解决方案是让侦察员有状态。此处的模型是一次性便笺的模型:使发送者和接收者共享一长串秘密,并将其存储在诸如小册子之类的物理介质上。当他们使用密钥(例如小册子页面)发送或接收消息时,他们会销毁它。因此,事后夺取小册子的敌人将无法获得密钥,因此无法解密过去的消息。
这是历史上正确的解决方案;在前计算机时代,外勤人员使用 OTP。侦察员只能通过使用与几十年来真正的间谍和军队完全相同的方法而感到兴奋。用可食用材料制作小册子的额外加分,使使用后的销毁变得有趣、容易和安全(普通侦察员也会发现简单地烧掉纸张很有趣,但这可能会造成环境危害)。当 OTP 使用不当时,通过密码分析引导侦察员获得更多额外积分,即垫已被重复使用。
前向保密是关于当一名外勤特工被敌人抓住并被迫透露他的秘密时会发生什么。您所设想的情况不同:没有强行泄露秘密,而是以未指定的方式发生的被动解密(例如,来自部分已知明文的大量猜测)。您描述的属性(解密一条消息不会泄露其他消息)仅意味着加密方法对已知明文攻击具有鲁棒性:即使知道一些明文和相应的密文也不足以解密其他密文,特别是, 不足以重建任何可用于其他消息的键控组件。
纸笔密码通常很弱,尽管当攻击者也只有笔和纸时,有些密码可能非常强大。有关建议和链接,请参阅此问题。
One-Time Pad 是个例外:它可以以非常低的计算能力进行计算,但最终对已知明文攻击具有鲁棒性,因为没有使用的密钥组件被重用于另一条消息或消息部分。
摘要:使用OTP。它提供了您想要的属性;它还提供前向保密。它具有教学意义,并且适合于启发性的历史重建。
是的。
我认为您在侦察员中使用对称密钥,即使用相同的密钥来加密和解密加密的消息。
如果满足以下条件,将实现前向保密:
a)双方(发送方和接收方)都为密钥生成做出了贡献 b)双方同意贡献一些他们可以保证不会再次使用的东西......
因此,侦察队长可能会贡献:“22”,侦察员将贡献“33”,使密钥“726”(22*33)。如果任何一方都不知道对方的贡献,那将是理想的。
编辑:
当然这个方案并不是完全安全的,这个想法是让孩子们了解完美前向保密,它的目标是:
工作示例:如上,发件人贡献“22”,收件人贡献“33”,生成用于此的“会话”密钥,并且仅此消息“726”。使用原始链接中的“数字代表字母”算法,您可以创建一个简单的替换:
ABCDEFGHI ...
7 2 6 1 3 4 5 8 9 ...
(我选择从集合中删除 726,但严格来说,这不是必需的......)
这个想法不是为了实现任何有效的密码学,而是让孩子们玩得开心并了解使用临时密钥的优势,以及双方都为密钥做出贡献。
OTP 不是完美前向保密的有效示例,因为密钥是由发送者在没有接收者参与的情况下生成的。接收者必须简单地相信发送者已经正确地生成了密钥。