我试图通过libsodium为应用程序设置客户端/服务器通信。到目前为止,我计划使用硬编码的公钥分发应用程序。服务器将保留其密钥,而不必共享它。这应该允许用户加密消息并将其发送到服务器,其中密钥解密消息。
如果服务器上的密钥遭到破坏(我不确定如何,但以防万一)如何将新公钥分发给所有客户端?有没有办法生成新的密钥而不需要分发新的公钥?类似的东西:
make_new_secret( secret_buffer, previous_public );
我希望有一个非常简单的解决方案,它不需要复杂的算法来安全地分发新的公钥。如果在创建新公钥时必须完成新的私钥,可以使用哪些算法将公钥从服务器安全地分发到客户端?
其他信息(随意跳过):
我们可以阅读here Glenn Fiedler(libyojimbo的作者,使用libsodium)谈论&#34的想法;只需滚动一个新的私钥"。
如果有办法重新使用旧的公钥并使用libsodium创建一个新的私钥,我很乐意阅读它。我已经完成了文档,但还没有看到任何功能。所以我担心我可能需要深入研究更复杂的算法来安全地分发新的公钥。
我已经检查了Diffie Hellman,但似乎要求双方以共同的颜色#34开头。所以我想我的问题是关于达成一个新约定的起始颜色。
答案 0 :(得分:0)
公钥/私钥始终是pair
(EC除外有两个公钥,基本上是一样的)。因此,如果您的服务器私钥被泄露,或者您决定roll
,则需要客户端知道您的服务器新公钥。
挑战是真实的。如果您对其进行硬编码,则必须重新编译/重新分发应用程序到您的客户端。
我不了解您的整个用例,但如果您正在尝试授权,请查看OAUTH2,这将允许您从服务器向您的客户端发出临时(可在服务器上配置)令牌。在这种情况下,您可以撤消OAUTH令牌,以防服务器或客户端遭到入侵,并且您(您的服务器)可以完全控制它。