Public-Key

不兼容的密鑰類型

  • December 14, 2021

考慮以下。我有一個分散的節點網路,可以相互通信,我想加密它們的通信。我轉向非對稱加密,大多數網際網路的工作方式,由於我使用過Google Tink並且已經為它編寫了一些方便的程式碼,所以我選擇了 Tink 中的混合加密。

混合加密的頁面說,“混合加密只提供隱私,而不是真實性。只有當收件人可以接受匿名消息或依靠其他機制來驗證發件人時,它才是安全的。” 所以我想,好吧,好吧;我將給每個節點一個私鑰/公鑰對,使用混合加密使用接收者的公鑰加密消息,並使用數字簽名使用發送者的私鑰對消息進行簽名。

除了,一旦我設置了一些程式碼並開始測試它,我很快意識到不同的機制支持完全不相交的密鑰類型集

問題:

  1. 這是所涉及的加密機制的基本屬性嗎?
  2. 是否真的沒有辦法使用相同的密鑰對進行簽名和加密,或者甚至在此處給出的任何兩個對稱機制之間?
  3. 我是否只需要跟踪每個節點的多個密鑰?我曾抱有希望通過它們的公鑰來辨識節點;這似乎是一個特別優雅的解決方案….

所以我想,好吧,好吧;我將給每個節點一個私鑰/公鑰對,使用混合加密使用接收者的公鑰加密消息,並使用數字簽名使用發送者的私鑰對消息進行簽名。

請注意,這是encrypt-then-sign。只有當您只信任特定的一組參與者,並且您信任參與者不會替換任何其他參與者的簽名時才可以。

1. 這是所涉及的密碼機制的基本屬性嗎?

不,不是。他們忘記展示使用​​ RSA 的混合加密

2. 真的沒有辦法使用相同的密鑰對進行簽名和加密,或者甚至在此處給出的任何兩種對稱機制之間使用嗎?

是的,您可以同時使用 RSA,ECDH 密鑰對通常也與 ECDSA 兼容。但是,此 API 用於安全地使用加密技術,並且使用相同的密鑰生成簽名和解密並不被視為最佳實踐。

3. 我是否只需要跟踪每個節點的多個密鑰?我曾抱有希望通過它們的公鑰來辨識節點;這似乎是一個特別優雅的解決方案….

它不是。通常您需要進行密鑰管理。密鑰通常有一個指定的有效時間範圍。例如,證書的notBeforenotAfter欄位不僅指示證書何時有效,還指示私鑰(通常是公鑰)可以使用多長時間。

看來這個庫是開發者的輔助庫。它並沒有真正指定任何協議。老實說,我認為這些沒有實現和/或不是特定於應用程序的“包裝庫”用途有限。

我強烈建議您使用兩個密鑰對,一個用於加密和簽名。要創建信任框架,您可以使用 PKI。最後,您似乎需要運輸安全性;在這種情況下,我會推薦 TLS。

引用自:https://crypto.stackexchange.com/questions/96625