我正在考虑创建一个使用Libsodium的crypto_box_easy
来加密和解密聊天消息的移动应用。
但是,在网上阅读了很多书后,我发现公钥-私钥算法的主要缺陷之一是,一旦收件人的私钥泄露,记录的数据就可以解密。
为避免这种情况,建议使用完全前向保密(PFS),我想知道Libsodium是否已在前面提到的函数中支持PFS,因为每种加密都使用了单独的nonces
。>
也许有人可以指导我了解PFS和Libsodiums函数之间的区别(如果有的话),或者通过阐明现时与PFS的关系来帮助我。
答案 0 :(得分:0)
没有前瞻性保密。
crypto_box_seal()
稍好一点,因为发件人使用临时密钥。可以使用长期秘密密钥对这些消息进行签名,以检查它们是否来自预期的参与者,但是该密钥被泄露将不允许解密先前的消息。
但是,如果收件人的密钥被泄露,仍可以对录制的消息进行解密。
由于这些原因,libhydrogen中没有box
构造。取而代之的是,有一些基于Noise的协议实现可用于安全密钥交换,并且都具有前向保密性。这些API有时会被反向移植到libsodium。
但是安全的聊天应用程序并非易事。 signal库是一个更好的起点,即使许可可能与您的期望不兼容。