Rsa
基於 RSA 的雙棘輪算法
我正在閱讀 Signal 規範,他們建議使用 EC 密鑰,特別是 X25519 或 X448 曲線,用於初始X3DH 協議和DH 棘輪。
我注意到語言和庫似乎對 RSA 有更好的支持(例如 Signal 推薦的兩條曲線在使用普通 OpenJDK 時不可用),所以我想知道是否可以使用RSA 密鑰而不是 EC 密鑰(當然,假設使用適當大小的密鑰)。
在規範文件中,他們沒有解釋為什麼應該使用 EC。我認為它可以提高性能,但我想知道它是否是雙棘輪算法上下文中的要求,或者是否可以使用任何好的非對稱密碼系統。
X3DH 的關鍵要素本質上是 DH 密鑰交換。這是 Alice 和 Bob 獨立發送的非互動式密鑰交換協議 $ g^a $ 和 $ g^b $ 他們可以建立一個共享密鑰 $ g^{ab} $ . 但是您不能使用 RSA 建構非互動式密鑰交換協議(我不知道)。要使用 RSA 交換密鑰,Alice 需要將她的公鑰發送給 Bob,然後 Bob 在 Alice 的公鑰下加密一個隨機密鑰。請注意,我們仍然發送兩條消息,但第二條消息只能在收到第一條消息後發送(在 DH 情況下,兩條消息可以同時發送)。
雖然可以調整 Signal 協議以使用 RSA KEM 而不是 EC DH,但這並不像替換非對稱加密算法那麼簡單,您需要在協議級別進行更改並可能進行新的安全分析。範例見https://eprint.iacr.org/2019/1356 ,原始 X3DH 是圖 2,基於 KEM 的圖 3。
使用 ECDH 的另一個原因是因為它比 RSA 更有效並且使用更小的密鑰。