Networking 已验证Diffie-Hellman变体的安全性审查

Networking 已验证Diffie-Hellman变体的安全性审查,networking,authentication,cryptography,diffie-hellman,Networking,Authentication,Cryptography,Diffie Hellman,编辑 我仍然希望得到一些建议,我试图澄清我的意图 当我在我的移动通信框架中遇到设备配对时,我研究了很多关于这个主题的论文,也从前面的问题中得到了一些信息。但是,我没有找到一个现成的协议解决方案——因此我发明了一个派生方案,由于我不是密码极客,我不确定最终解决方案的安全注意事项: 主要问题是 SHA256作为提交函数是否足够 在提交字符串中添加共享机密作为身份验证信息是否安全 1024位组DH的总体安全性是什么 我假设成功的MITM攻击的概率最多为2^-24位(因为24位挑战)。这可能吗 最有希

编辑

我仍然希望得到一些建议,我试图澄清我的意图

当我在我的移动通信框架中遇到设备配对时,我研究了很多关于这个主题的论文,也从前面的问题中得到了一些信息。但是,我没有找到一个现成的协议解决方案——因此我发明了一个派生方案,由于我不是密码极客,我不确定最终解决方案的安全注意事项:

主要问题是

  • SHA256作为提交函数是否足够
  • 在提交字符串中添加共享机密作为身份验证信息是否安全
  • 1024位组DH的总体安全性是什么
  • 我假设成功的MITM攻击的概率最多为2^-24位(因为24位挑战)。这可能吗
  • 最有希望的攻击是什么(除了从我麻木冰冷的手上撕下设备)
这是算法草图

  • 对于首次配对,实现了“对等无线网络中的密钥协商”(DH-SC)中提出的解决方案。我基于以下承诺:
    • 通信实体/角色的修复“UUID”(128位,在协议启动时发送,在承诺之前)
    • 公共DH密钥(192位私钥,基于1024位Oakley组)
    • 24位随机挑战
  • 提交是使用SHA256计算的
    • c=sha256(UUID | | DH pub | | Chall)
  • 双方交换此承诺,公开并转让上述价值观的朴素内容
艾丽丝·鲍伯 ca=commit() -------^ca cb=commit() cb^----------- 打开 ---^DH酒吧a酒店 打开 DH酒吧b,小屋b^---
  • 将向用户显示24位随机值,以进行手动身份验证
  • 计算DH会话密钥(128字节,见上文)

  • 当用户选择持久配对时,会话密钥与远程UUID一起存储为共享密钥

  • 下次设备连接时,通过在随机质询之前额外散列上一个DH会话密钥来计算提交。当然,它在打开时不会被转移

    • c=sha256(UUID | | DH pub | | DH sess | Chall)
  • 现在,当本地方可以使用自己存储的先前DH会话密钥获得相同的承诺时,用户不必费心验证。成功连接后,新的DH会话密钥成为新的共享密钥


由于这并不完全符合我目前发现的协议(以及它们的安全性证明),我非常有兴趣从这里的一些支持加密的家伙那里得到一个意见。顺便说一句,我确实读过“EKE”协议,但我不确定额外的安全级别是什么。

简单地说,如果你自己制定加密解决方案,那么它就很弱

对于这个小故事,维萨人必须重新开始4次,才能变得足够强大


我不是一个安全专家,但这是我的密码老师每次告诉我们的。

简单地说,如果你自己制作密码解决方案,那么它就很弱

对于这个小故事,维萨人必须重新开始4次,才能变得足够强大


我不是安全专家,但这是我的密码老师每次告诉我们的。

听起来不错。不知道你说的“修复UUID”是什么意思?
恶意应用是否可以访问UUID和会话密钥:它们是存储在系统范围内还是存储在服务中?SDK中有一些文本表明,任何密钥库在返回密钥之前都会等待用户确认。

听起来不错。不知道你说的“修复UUID”是什么意思? 恶意应用是否可以访问UUID和会话密钥:它们是存储在系统范围内还是存储在服务中?SDK中有一些文本表明,任何密钥库在返回密钥之前都会等待用户确认。

“SHA256作为提交函数是否足够?” SHA256的使用应该很好。我听说的唯一问题是它有一个散列扩展漏洞。如果使用同一数据生成多个哈希,不要简单地将更多数据合并到已哈希的数据末尾。在你的帖子中有两个哈希“sha256(UUID | DH pub | Chall)”和“sha256(UUID | DH pub | DH sess | Chall)”。如果第二个是“sha256(UUID | | DH pub | | Chall | | DH sess)”,那么如果UUID、DH pub和Chall都是与之前相同的值,那么散列值之间就会存在关系。您应该注意避免散列扩展问题,或者在要散列的数据中包含一个salt值,方法是通过链接传递salt,或者为每个代码路径提供不同的值

另请注意:当您已经保存了上一个会话密钥并且不需要要求用户手动确认质询代码时,是否真的需要传输Chall

“在提交字符串中添加共享机密作为身份验证信息是否安全?” 我猜你的意思是问“在公开的散列中包含秘密信息安全吗?”如果秘密真的很难猜测,并且需要很长时间才能对其执行暴力攻击,那么是的,它是安全的。如果这个秘密很容易猜到或者只有几个可能的值,那么不,它是不安全的,除非你同时包含一些难以猜到的秘密,迫使潜在的窃听者必须同时猜到所有这些秘密。对于一个大的,有效的随机数,如DH共享秘密,那么它应该是很好的

“1024位组DH的总体安全性如何” 我不确定DH group 1024是否是您想要使用的。一种密钥交换,它是一致的 Alice Bob ca = commit() -------^ ca cb = commit() cb ^----------- open ---^ DH pub a, chall a open DH pub b, chall b ^---