2016-11-29 35 views
0

我試圖通過libsodium爲應用程序設置客戶端/服務器通信。到目前爲止,我打算用硬編碼的公鑰分發應用程序。服務器將保留其密鑰而不用共享密鑰。這應該讓用戶加密消息並將它們發送到服務器,在該服務器中密鑰解密消息。私鑰受損,如何分配新的公鑰?通過非對稱密鑰加密的客戶端服務器模型

如果服務器上的密鑰被泄露(我不確定如何,但以防萬一)如何分配新的公鑰給所有客戶端?有沒有辦法生成新的密鑰而不需要分配新的公鑰?就像:

make_new_secret(secret_buffer, previous_public); 

我希望有一個非常簡單的解決方案,不需要複雜的算法來安全地發放新的公鑰。如果在創建新的公鑰時必須完成新的私鑰,那麼可以使用什麼算法將公鑰從服務器安全地分發給客戶端?

附加信息(隨意跳過):

我們可以讀here其中格倫·菲德勒(libyojimbo的作者,它使用libsodium)談的想法「只是推出一個新的私鑰」 。

如果有一種方法可以重新使用舊的公鑰並使用libsodium創建一個新的私鑰,我很樂意閱讀它。我瀏覽過這些文檔,但還沒有看到有這樣的功能。所以我擔心我可能不得不鑽研更復雜的算法來安全地分發新的公鑰。

我已經簽出Diffie Hellman,但它似乎要求雙方都從一個共同的「顏色」開始。所以我想我的問題是關於達成新的商定的起始顏色。

回答

0

公鑰/私鑰總是pair(除了EC有兩個公鑰本質上是相同的東西)。因此,如果您的服務器私鑰遭到入侵或者您決定使用roll,那麼您需要客戶端了解您的服務器的新公鑰。

挑戰是真實的。如果您對其進行硬編碼,則必須重新編譯/重新分發應用程序給客戶端。

我不明白你的整個使用案例,但如果你正在嘗試授權,請考慮OAUTH2,它將允許你從服務器向你的客戶端發佈臨時(可配置的服務器)令牌。在這種情況下,您可以撤銷OAUTH令牌,以防服務器或客戶端受到威脅,並且您(您的服務器)完全控制它。

+0

好的,很高興知道這是一個真正具有挑戰性的話題。我的用例是通過Steam發佈的遊戲。因此,在這種情況下,向用戶重新分配新的二進制文件實際上不成問題。所以這是有道理的! 在我的情況下,我爲NAT-puncthrough設置了一個代理服務器,就像一個STUN服務器,但是有一個自定義協議。 – Cecil

+0

要清楚:我只是想保護類似STUN的服務器本身,並且一直在閱讀加密。無論如何,謝謝你的答案! – Cecil