Elliptic-Curves
公鑰認證加密:crypto_box
我一直在閱讀crypto_box加密並有一個問題。在算法的細節中,它使用了 Key exchange:
X25519
。但是,我不明白他們為什麼需要使用密鑰交換算法。所以我的問題是他們在哪里以及為什麼需要密鑰交換算法?
密鑰交換算法在哪裡?
crypto_box
很簡單,crypto_box_curve25519xsalsa20poly1305
它有兩個部分;第 1 部分:獨立於數據包的預計算;
- 聚會 $ A $ 有 32 字節的密鑰 $ sk_A $ 和公鑰 $ pk_A $ 在哪裡 $ pk_A = [sk_A]G $
- 聚會 $ B $ 有 32 字節的密鑰 $ sk_B $ 和公鑰 $ pk_B $ 在哪裡 $ pk_B = [sk_B]G $ 和 $ G $ 是 X25519 的基點。
這裡 $ [a]G $ 是標量乘法,表示加法 $ G $ 對自己 $ a $ 次。
- 聚會 $ A $ 用途 $ sk_A $ 和 $ pk_B $ 使用 X25519 派生密鑰;
$$ k = Hash(x([sk_A]pk_B)) $$注意 $ pk_B $ 是曲線上的一個點,X25519 僅使用 $ x $ ECDH 點的座標(用 $ x(\cdot) $ .
如您所見,一次 $ A $ 可以得到公鑰 $ B $ 鑰匙 $ k $ 可以立即建構,類似 $ B $ , 也。這是橢圓曲線 Diffie-Hellman 密鑰交換 (ECDH)。
第 2 部分:每包計算
- $ A $ 選擇 24 字節隨機數 $ n $ (必須是唯一的)並且在與 $ B $ . 24 字節的 nonce 可以安全地隨機生成。
- $ A $ 展開密鑰 $ k $ 將隨機數放入密鑰流中
xsalsa20
- 消息使用保留第一個 32 字節的流(僅 x-or)加密。
- 前 32 字節用於驗證加密消息
Poly1305
。為什麼他們需要密鑰交換算法
如果他們沒有密鑰交換機制,那麼他們需要一種對稱密鑰分發機制 ,這是在發明公鑰加密之前對稱加密的負擔。
公鑰需要驗證。有時它們被用作 TOFU(對首次使用的信任),然後通過 Signal 等一些機制進行驗證。在一些更安全的通信中,首先驗證公鑰。
有關更多詳細資訊,請閱讀