Java SSL套接字使用已知共享密钥

3
我有一个设置,其中多台计算机/节点在运行Java 8时通过LAN使用TCP通信。它们都知道一个单一的共享密钥,该密钥对所有计算机相同。密钥仅在运行时已知。目标是使用共享密钥加密TCP通信。必须从共享密钥进行加密和解密。
我想在节点之间使用Java Socket类进行TCP通信,因此Java SSLSocket类似乎是逻辑解决方案,但我不确定如何设置它以仅使用节点两端已知的共享密钥。据我所知,SSLSocket使用证书来验证其他端点,但我不知道如何使其适应使用共享密钥。

1
Java的SSL api不支持所谓的“preshared”密钥。看起来Bouncycastle Java库可以基于一些类来实现,但我从未尝试过。您需要同时拥有支持SSL/TLS和preshared密钥的客户端和服务器组件。 - President James K. Polk
1个回答

0

我不会尝试强制实现 SSL 套接字工作的方式。在我看来,这将需要比扩展自己的套接字或流以实现所述目标更多的工作和解决方法。

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

我会尽量保持简单。也许拥有一个自定义流(或信道),它会发送/接收用于密码初始化的随机 IV,然后使用一些流密码(或 ctr 密码模式)就可以完成任务。虽然这种方法本身无法确保数据完整性。

如果您愿意扩展安全提供程序,就像已经评论过的那样,您可以使用BC PSK TLS,这比上面的简单选项更为健壮。


链接已失效。 - Yava
链接已经修复。 - satur9nine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接