我想了解 Encrypted Key Exchange
机制。我对这个插图有点困惑:
并没有找到很多有用的引用资料。任何人都可以解释 EKE 的机制及其工作原理吗?双方在交换什么,为什么可以安全攻击,例如中间人?这将非常有帮助。谢谢你。
最佳答案
在试图找到 EKE 或 DH-EKE 的实现时,我预计那里的引用文献数量非常有限。维基百科相互之间的交叉链接以及我遇到的解释不一定那么容易理解。 EKE 的原始专利于 2011 年到期,导致我的理解 EAP-EKE 被发布。
我在 Bruce Schneier 的“Applied Cryptography”(第二版)中找到了最好的解释,包括对算法的改进。由于您已经了解了该过程的图像,因此我将尝试外行回答那里发生的情况。我只是在学习自己,所以我可能会弄错你的那个形象,但它似乎是一个 DH-EKE 实现。我会在这个答案上坚持使用 EKE-idea,因为我认为我已经基本理解了 ;-)
基础是 Alice 和 Bob 共享一个共同的 secret 。我可能会错过它可以有多“弱”的一点(在您的图像中它被标记为弱),但让我们假设它是一个有效的对称加密 key 。
双方有相同的对称 key S,这是一个共享的 secret
为了让 Eve 摆脱中间人,她只看到了用其他 key 加密的 key 。如果不破解公钥算法,就不可能从 Alice 和 Bob 之间的受监控流量中猜测密码。然而,弱共享 secret 确实允许 Eve 尝试在图片中假装是 Alice 或 Bob,因此(我的术语在这里可能有缺陷)可以发起针对监听服务器的主动攻击。
我描述的版本中有一些假设,最好由其他人解释(已发布),Alice 被信任可以生成好的 key 对,Bob 被信任可以生成好的 session key 。还有一些算法更适合(或一些更糟糕)。 “应用密码学”中列出了一些内容,但由于我的第二版似乎有点落后于 AES 之类的东西,我相信可以挖掘更多最新信息来选择算法。
对于它的值(value),似乎我需要用 C# 和 Java(Azure .NET 后端,Android 客户端)自己实现 EKE。我尝试以对其他人有用的方式对其进行打包。
更新:
在 C# 上非常简单的实现可在以下位置获得:
https://github.com/kallex/sharp-eke-example
它像现在一样缩短了几位(仅使用明文的 SHA256 以使用初始 key ),因此请谨慎使用。我目前的用法是机器生成安全 key ,并在单独的 channel 中将安全 key 分发给双方,因此我不需要为此测试台进行任何更复杂的实现。
关于encryption - 加密 key 交换理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15779392/