encryption - Libsodium 和完美的前向保密
问题描述
我正在考虑创建一个使用 Libsodiumcrypto_box_easy
加密和解密聊天消息的移动应用程序。
然而,在网上查阅了很多资料后,我发现公私钥算法的一大缺陷是,一旦接收者的私钥泄露,记录的数据就可以被解密。
为避免这种情况,建议使用完美前向保密(PFS),我想知道 Libsodium 是否已经在前面提到的功能中支持 PFS,nonces
因为每个加密都使用了个人。
也许有人可以指导我 PFS 和 Libsodiums 函数之间的区别(如果有的话),或者通过澄清 nonces 和 PFS 的关系来帮助我。
解决方案
没有前向保密。
crypto_box_seal()
稍微好一点,因为发件人使用临时密钥。可以使用长期密钥对这些消息进行签名,以检查它们是否来自预期的一方,但该密钥被泄露将不允许解密先前的消息。
但是,如果接收者的密钥被泄露,记录的消息仍然可以被解密。
由于这些原因,libhydrogenbox
中不存在该构造。相反,有用于安全密钥交换的基于噪声的协议实现,所有这些都具有前向保密性。这些 API 将在某个时候向后移植到 libsodium。
但安全聊天应用程序的构建绝非易事。信号库是一个更好的起点,即使许可证可能与您的期望不兼容。
推荐阅读
- security - 我可以检查是否有人下载了我的代码吗?
- reactjs - 找不到模块“reactstrap”的声明文件
- javascript - 如何使用调用 Javascript 的本机函数在 Chrome 中创建一个在 Java 中工作的粘贴按钮?
- python - 401 未授权来自 Flask RESTAPI
- docker - Microsoft Active Directory SSO 到 docker 容器
- math - 我们可以从很少的浮点数中得到多少不同的总和?
- laravel - 有没有一种方法可以创建自定义验证规则,无需在 Laravel 中使用表单请求即可重用 Livewire?
- typescript - 具有属性名和值参数的通用函数
- spring-websocket - 我希望我的应用程序在春季同时使用 https 和 websocket 协议
- java - 排序字母数字值,而不考虑字母