對 Diffie-Hellman 和簽名使用相同的密鑰對
使用單個密鑰對進行密鑰交換和簽名是否存在任何安全風險?
我主要對使用 Curve25519 進行密鑰交換和 Ed25519 進行簽名感興趣。但是類似的組合,例如 EC-DH 和 EC-Schnorr 甚至 EC-DSA 具有相同的密鑰對也會很有趣。
- Curve25519 散列僅 x 座標的 Diffie-Hellman 密鑰交換的輸出
- Ed25519 是 EC-Schnorr 簽名的輕微變體。
我看到了一些避免將單個密鑰用於多種目的的建議,但我找不到任何具體的東西。
論文“關於 EMV 中加密和簽名的聯合安全性”表明 ECIES 和 EC-Schnorr 簽名可以一起使用而不會影響安全性:
在隨機預言機模型中,如果 gap-DLP 問題和 gap-DH 問題都是困難的,則 ECIES-KEM 和 EC-Schnorr 是共同安全的
Ed25519 與 EC-Schnorr 極為相似,並且 ECIES 和 Curve25519 均基於 EC-DH,因此這表明使用相同密鑰對的 Curve25519 和 Ed25519 是安全的。
仍然是直接引用 Curve25519 中使用的密鑰交換的證明會很好。
一般來說,您希望加密和簽名密鑰不相交,因為它們往往具有不同的生命週期。從廣義上講,加密密鑰應該被託管,因為失去私鑰意味著失去相對於公鑰加密的數據。但是,簽名密鑰不能被託管,因為簽名的證明值僅來自密鑰所有者對私鑰的控制。有關更詳細的討論,請參閱此答案。
您的特定情況可能會容忍未託管的加密密鑰——例如,您的加密密鑰(您稱之為“密鑰交換密鑰”)僅用於建立不用於加密數據的短期會話密鑰,或者這樣加密的數據在另一端被迅速解密,並且永遠不會加密儲存。即,您的密鑰交換密鑰用於建立類似 SSL 的隧道,而不是發送加密的電子郵件。在這種情況下,剩下的一個問題是關於密鑰交換算法和簽名算法之間的互動:攻擊者是否可以通過讓您發出一些使用相同私鑰的簽名來破壞密鑰交換?正如@CodesInChaos 建議的那樣,這是合理的對 ECDH 和 ECDSA 使用相同的私鑰是安全的,但魔鬼在細節中:除非您打算使用的特定算法有明確的安全證明,否則我建議不要這樣做。
您可以做的並且是安全的,是儲存一個主密鑰K ,並使用合適的 PRF(例如 HMAC_DRBG)從K動態派生加密私鑰和您的簽名私鑰。