消息传递应用程序中的 Diffie Hellman 密钥交换

信息安全 安卓 爪哇 密钥交换 diffie-hellman 即时通讯
2021-08-13 11:50:55

我目前是一名学生,正在尝试使用 java 在 android 上开发一个消息传递应用程序,该应用程序将实现 diffie hellman 密钥交换,以确保他们都能够计算一个密钥来解密在文本中发送的内容.

我在网上寻找了各种资源,但我找不到图书馆或无法让我自己的 diffie hellman 密钥交换发生在应用程序本身内。例如,如果我使用手机 A 生成密钥,那么手机 B 如何接收该数据并知道它是公钥?还有,一旦收到公钥,他如何根据公钥生成自己的私钥?

我查看了各种来源,例如 https://stackoverflow.com/questions/34237971/conducting-diffie-hellman-between-java-and-crypto-c http://docstore.mik.ua/orelly/java- ent/security/ch13_07.htm http://www.java2s.com/Tutorial/Java/0490__Security/ImplementingtheDiffieHellmankeyexchange.htm

还有更多,但似乎他们提供的代码更多地用于在设备中有 2 个用户的应用程序内运行,而不是在应用程序内,而是每个设备有 1 个用户。

给您添麻烦了,谢谢!

1个回答

为了更好地了解 Diffie Hellman 密钥交换,一些图解表示可能会有所帮助。

在 Android(或任何其他客户端设备)上使用 Java(或任何其他语言)的消息传递应用程序的常用方法是利用 TLS 通常与 HTTPS 结合使用,通过包含对等点之间的密文表示。

在没有几年经验的情况下实施安全自制版本的 Diffie Hellman 密钥交换的可能性很小。一个可以澄清大局的事实是,公私密码学中的安全性依赖于证书颁发机构的参与作为身份验证的一部分。 JSA(Java 安全架构)为您提供了一些选项来在对等点之间以及在没有 Web 服务器的情况下使用所有这些,但在更高级别。

私钥和公钥之间的关系被设计成实际上不能从公钥计算出私钥,所以不要费心去寻找一种方法来做到这一点。

另一种高度安全的替代方法是使用一次性垫,这对于您的应用程序可能根本不实用。

如果两个设备具有相同的秘密(事先商定),您可以简单地在两个对等方上使用对称算法,但需要在两个设备上存储一个强密码或由两个用户记住。