Ed25519

為什麼curve25519/ed25519秘鑰的低3位在創建時會被清除?

  • December 26, 2013

我目前正在試驗 ed25519,我注意到在創建密鑰時,總是設置第 254 位,並且總是清除低 3 位。我發現在這個問題中總是設置位 254 以防止定時攻擊:當使用 Curve25519 時,為什麼私鑰總是在 2^254 處有一個固定位?

但是為什麼低3位被清除了。顯然它與curve25519論文中的公式有關:密鑰集定義為 $ {\underline{n} : n \in 2^{254} + 8{0, 1, 2, 3,\ldots, 2^{251}-1}} $

這是因為那裡有 8,但為什麼那裡有 8?我懷疑它與curve25519論文中的定理2.1有關,但我不確定,因為我不完全理解那裡證明了什麼。

我正在一些加密常式中試驗 ed25519 原語,這些常式需要我將標量添加到密鑰(添加密鑰)。即使我添加了兩個格式良好的 ed25519 密鑰,結果也不會總是設置第 254 位並且清除低 3 位。這是一個安全問題嗎?我了解 254 位的風險,但不了解較低的 3。

清除密鑰的低 3 位可以確保它是 8 的倍數,這反過來又可以確保在活動的小子組攻擊的情況下不會洩露任何關於密鑰的資訊,儘管它可能很小。

典型的簡單 Diffie-Hellman 密鑰交換的工作方式如下:

$$ \text{Alice} \xrightarrow{\hspace{3cm} a G \hspace{3cm}} \text{Bob} \ \text{Alice} \xleftarrow{\hspace{3cm} b G \hspace{3cm}} \text{Bob} $$ $ a $ 和 $ b $ 是 Alice 和 Bob 的密鑰,並且 $ G $ 是基點,即 $ (9,\ldots) $ 在曲線 25519 中。愛麗絲計算 $ a\cdot bG $ , Bob 計算 $ b \cdot aG $ , 共享秘密是通過傳遞 $ abG $ 通過一些密鑰推導函式。

現在,正如您所注意到的, $ G $ 是 $ p_1 = 2^{252} + 27742317777372353535851937790883648493 $ ,而曲線本身的點數是 $ 8 p_1 $ . 這意味著還有一些剩餘點的順序很小。例如,主動攻擊者可以替換 Bob 的消息 $ bG $ 有程序問題 $ 8 $ 並且能夠找到 $ a \bmod 8 $ 通過檢查以下消息。當每個有效的密鑰都是 $ 0 \bmod 8 $ ,攻擊者一無所獲。

有人可能會爭辯說,這浪費了 3 個非常好的密鑰位來防止已經無效的攻擊。但是請注意,該方案的實際安全性與基點的順序有關, $ p_1 \approx 2^{252} $ . 清除這 3 位(共 255 位)不會減少密鑰空間,因為它仍然留下 252 位有用的位,提供的密鑰空間與生成的點數大致相同 $ G $ .

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