不兼容的密鑰類型
考慮以下。我有一個分散的節點網路,可以相互通信,我想加密它們的通信。我轉向非對稱加密,大多數網際網路的工作方式,由於我使用過Google Tink並且已經為它編寫了一些方便的程式碼,所以我選擇了 Tink 中的混合加密。
混合加密的頁面說,“混合加密只提供隱私,而不是真實性。只有當收件人可以接受匿名消息或依靠其他機制來驗證發件人時,它才是安全的。” 所以我想,好吧,好吧;我將給每個節點一個私鑰/公鑰對,使用混合加密使用接收者的公鑰加密消息,並使用數字簽名使用發送者的私鑰對消息進行簽名。
除了,一旦我設置了一些程式碼並開始測試它,我很快意識到不同的機制支持完全不相交的密鑰類型集。
問題:
- 這是所涉及的加密機制的基本屬性嗎?
- 是否真的沒有辦法使用相同的密鑰對進行簽名和加密,或者甚至在此處給出的任何兩個對稱機制之間?
- 我是否只需要跟踪每個節點的多個密鑰?我曾抱有希望通過它們的公鑰來辨識節點;這似乎是一個特別優雅的解決方案….
所以我想,好吧,好吧;我將給每個節點一個私鑰/公鑰對,使用混合加密使用接收者的公鑰加密消息,並使用數字簽名使用發送者的私鑰對消息進行簽名。
請注意,這是encrypt-then-sign。只有當您只信任特定的一組參與者,並且您信任參與者不會替換任何其他參與者的簽名時才可以。
1. 這是所涉及的密碼機制的基本屬性嗎?
不,不是。他們忘記展示使用 RSA 的混合加密。
2. 真的沒有辦法使用相同的密鑰對進行簽名和加密,或者甚至在此處給出的任何兩種對稱機制之間使用嗎?
是的,您可以同時使用 RSA,ECDH 密鑰對通常也與 ECDSA 兼容。但是,此 API 用於安全地使用加密技術,並且使用相同的密鑰生成簽名和解密並不被視為最佳實踐。
3. 我是否只需要跟踪每個節點的多個密鑰?我曾抱有希望通過它們的公鑰來辨識節點;這似乎是一個特別優雅的解決方案….
它不是。通常您需要進行密鑰管理。密鑰通常有一個指定的有效時間範圍。例如,證書的
notBefore
和notAfter
欄位不僅指示證書何時有效,還指示私鑰(通常是公鑰)可以使用多長時間。看來這個庫是開發者的輔助庫。它並沒有真正指定任何協議。老實說,我認為這些沒有實現和/或不是特定於應用程序的“包裝庫”用途有限。
我強烈建議您使用兩個密鑰對,一個用於加密和簽名。要創建信任框架,您可以使用 PKI。最後,您似乎需要運輸安全性;在這種情況下,我會推薦 TLS。