Encryption
如何使用橢圓曲線密碼術 (ECC) 進行加密?
我需要問這個,因為我不被允許評論並且不太理解現有的答案,因為我沒有密碼學背景,也從未研究過 ECC 是如何工作的。
- 為什麼不能使用通過 ECC 生成的公鑰加密消息?
- Alice 和 Bob 兩個對等點如何就共享密鑰(對稱密鑰)達成一致,兩者都具有基於橢圓曲線的公鑰-私鑰對?
- 方案是否可以基於普通的 Diffie-Helmann 密鑰交換,您使用對方的公鑰作為身份驗證(簽名消息)?
- 為什麼不能使用通過 ECC 生成的公鑰加密消息?
好吧,對於初學者來說,您需要意識到 ECC 是許多使用橢圓曲線進行密碼學的協議的統稱。其中一些協議(ECIES、ECElGamal)是公鑰加密方法(即,它們有一個公共加密密鑰和一個私有解密密鑰,而公共加密密鑰允許您加密消息,但不能解密它);有了這些,你肯定可以用公鑰加密。當然,還有其他協議(ECDH、ECDSA、EdDSA)做其他事情,並不打算加密消息。
- Alice 和 Bob 兩個對等點如何就共享密鑰(對稱密鑰)達成一致,兩者都具有基於橢圓曲線的公鑰-私鑰對?
實際上,是的,Diffie-Hellman 可以很好地轉換為橢圓曲線,該版本稱為 ECDH,並且被廣泛使用。ECDH 的工作原理與經典 DH 類似(細微差別主要是您需要對公共共享進行的有效性檢查)
- 方案是否可以基於普通的 Diffie-Helmann 密鑰交換,您使用對方的公鑰作為身份驗證(簽名消息)?
將公鑰用作“身份驗證”是沒有意義的;為確保消息來自您,您需要加入一些並非所有人都知道的內容。這可能是私人簽名密鑰,也可能是您和預期收件人之間共享的秘密。如果這是每個人都知道的事情,那麼每個人都可以產生該消息,因此它實際上不會用作“身份驗證”
- 從技術上講,你可以。理論上,可以將 ElGamal 與決策 Diffie-Hellman 假設成立的任何橢圓曲線組一起使用。需要設計適當的填充方案以在選擇密文攻擊下提供安全性,這很難正確執行。在實踐中,這會很慢而且容易出錯,就像 RSA 加密很慢而且容易出錯(部分是由於填充),所以沒有人這樣做。我們使用您連結的答案中描述的 ECIES,因為它更快更安全。
- 他們可以使用Elliptic-Curve Diffie-Hellman。也可以使用橢圓曲線創建密鑰封裝機制,如在PSEC-KEM中,但我們通常需要 Diffie-Hellman 的屬性(創建臨時方案的速度和易用性),因此我們不太常用。
- 通常,為多種目的重複使用密鑰是一個壞主意。密鑰應該用於簽署xor交換xor加密xor封裝,從不超過一個。相反,使用密鑰派生函式從單個主值派生用於不同目的的私鑰。不這樣做可能會導致您的私鑰洩露,因為在某些方案中,其中一個操作是另一個操作的簡單逆操作。