0

我正在尝试通过 libsodium 为应用程序设置客户端/服务器通信。到目前为止,我计划使用硬编码的公钥分发应用程序。服务器将保留其秘密密钥,而不会共享它。这应该让用户加密消息并将它们发送到服务器,密钥在那里解密消息。

如果服务器上的密钥被泄露(我不确定如何泄露,但以防万一)如何将新的公钥分发给所有客户端?有没有一种方法可以在不需要分发新公钥的情况下生成新的密钥?就像是:

make_new_secret( secret_buffer, previous_public );

我希望有一个非常简单的解决方案,不需要复杂的算法来安全地分发新的公钥。如果必须在制作新公钥的同时制作新的私钥,那么可以使用哪些算法将公钥从服务器安全地分发到客户端?

附加信息(随意跳过):

我们可以在这里阅读Glenn Fiedler(使用 libsodium 的 libyojimbo 的作者)谈到“只需滚动一个新的私钥”的想法。

如果有办法重用旧公钥并使用 libsodium 创建新私钥,我很乐意阅读它。我已经浏览了文档,但还没有看到任何功能。所以我担心我可能不得不深入研究更复杂的算法来安全地分发新的公钥。

我已经检查了Diffie Hellman,但似乎需要双方从一个共同的“颜色”开始。所以我想我的问题是关于达成新的商定起始颜色。

4

1 回答 1

0

公钥/私钥总是pair(除了 EC 有 2 个公钥,这本质上是一样的)。因此,如果您的服务器私钥被泄露或您决定这样roll做,您需要客户端知道您的服务器新的公钥。

挑战是真实的。如果您对其进行硬编码,那么您必须重新编译/重新分发应用程序给您的客户。

我不了解您的整个用例,但如果您尝试进行授权,请查看 OAUTH2,它允许您从服务器向客户端发出临时(可在服务器上配置)令牌。在这种情况下,您可以撤销 OAUTH 令牌,以防服务器或客户端受到威胁并且您(您的服务器)可以完全控制它。

于 2016-11-29T22:04:00.573 回答