我正在使用Java编写可在Android,Windows,Linux和OSX上运行的软件,并希望这些设备能够安全地相互通信。
我最初的想法只是使用非对称算法(例如RSA)并手动共享公钥。然后会话将使用RSA加密。由于缓冲区大小,我遇到了这个问题,然后我读了关于CBC等以及如果没有执行某种形式的XOR数据的数据泄漏问题。
所以......我看着使用AES / CBC / {padding}。最初这听起来很不错:只需分享钥匙,一个IV,我们就走了。
但是这些应用程序在任何时候都可以在两个方向上相互通信,因此保持IV同步似乎不可能,导致每个消息都会发送新的IV。没什么大不了的,但AES over RSA的优势之一就是数据大小,现在我要为每条消息增加32个字节。虽然我想保持一个“接收者”和“发送者”密码可能会起作用。
现在我回到考虑替代方案,并试图避免过多的自己动手。
有没有充分的理由不手动使用RSA和CBC(或类似的)?即。将数据分成块,必要时填充,并使用RSA加密,执行任何XOR策略似乎最可靠。
是否更好的方法是在不创建SSL CA的情况下在对等对之间保持安全和可信的通信?或者,有没有办法挂钩证书验证程序,以便我可以使用我的预共享公钥来验证对等连接?
有关最佳/简单多平台对等安全通信的任何其他建议/示例吗?
答案 0 :(得分:3)
您应该考虑实施hybrid cryptosystem。如果我能够正确地猜测您对该主题的了解,那么您应该真正使用预先存在的TLS或DTLS,因为您不打算设计一个明确的加密安全协议。
请注意,证书是创建PKI所必需的,当然非对称加密也随附。但是,您只需在握手期间使用非对称加密,其中包括初始身份验证和会话密钥协商。