【问题标题】:java SSL socket using a known shared key使用已知共享密钥的 java SSL 套接字
【发布时间】:2018-10-11 00:46:54
【问题描述】:

我有一个设置,我有多个计算机/节点通过 LAN 进行通信,TCP 在 java 8 运行时上运行。他们都知道一个对所有计算机都相同的共享密钥。密钥仅在运行时才知道。目标是使用共享密钥加密 TCP 上的通信。加密和解密都必须可以通过共享密钥进行。

我想使用 java Socket 类在节点之间进行 TCP 通信,因此 java SSLSocket 类似乎是合乎逻辑的解决方案,但我不知道如何将其设置为仅使用已知的共享密钥两端的节点。据我了解,SSLSocket 使用证书对另一端进行身份验证,但我不知道如何调整它以使用共享密钥。

【问题讨论】:

  • Java 的 SSL api 不支持所谓的“预共享”密钥。看来 Bouncycastle java 库确实基于 some classes 那里,但我从未尝试过。您将拥有支持 SSL/TLS 和预共享密钥的客户端和服务器组件。

标签: java sockets ssl encryption tcp


【解决方案1】:

我不会尝试强制 ssl 套接字以其他方式工作。恕我直言,与扩展您自己的套接字或流来实现既定目标相比,它需要更多的工作和解决方法

目标是使用共享密钥加密通过 TCP 的通信。

我会尽量保持简单。也许有一个自定义的流(或通道)可以发送/接收随机 IV 以进行密码初始化,然后使用一些流密码(或 ctr 密码模式)来完成这项工作。发现这个 方法本身并不能确保数据完整性。

如果您可以扩展安全提供程序,如前所述,您可以使用BC PSK TLS,它比上面的简单选项更强大

【讨论】:

  • 链接已死
  • 链接已修复。
猜你喜欢
  • 2014-05-09
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多