首页 > 解决方案 > Libsodium 和完美的前向保密

问题描述

我正在考虑创建一个使用 Libsodiumcrypto_box_easy加密和解密聊天消息的移动应用程序。

然而,在网上查阅了很多资料后,我发现公私钥算法的一大缺陷是,一旦接收者的私钥泄露,记录的数据就可以被解密。

为避免这种情况,建议使用完美前向保密(PFS),我想知道 Libsodium 是否已经在前面提到的功能中支持 PFS,nonces因为每个加密都使用了个人。

也许有人可以指导我 PFS 和 Libsodiums 函数之间的区别(如果有的话),或者通过澄清 nonces 和 PFS 的关系来帮助我。

标签: encryptionpublic-key-encryptionencryption-asymmetricnoncelibsodium

解决方案


没有前向保密。

crypto_box_seal()稍微好一点,因为发件人使用临时密钥。可以使用长期密钥对这些消息进行签名,以检查它们是否来自预期的一方,但该密钥被泄露将不允许解密先前的消息。

但是,如果接收者的密钥被泄露,记录的消息仍然可以被解密。

由于这些原因,libhydrogenbox中不存在该构造。相反,有用于安全密钥交换的基于噪声的协议实现,所有这些都具有前向保密性。这些 API 将在某个时候向后移植到 libsodium。

但安全聊天应用程序的构建绝非易事。信号库是一个更好的起点,即使许可证可能与您的期望不兼容。


推荐阅读