curve25519 貢獻行為的弱點
curve25519 上的 Diffie-Hellman 通常使用基點計算 $ (9,…) $ 這導致了一個循環子群 $ G:={\infty}\cup(E(F_{p^2})\cap(F_p\times F_p)) $ 索引為 8,即有一個素數 $ p_1 $ 這樣 $ |G|=8p_1 $ 和順序 $ (9,…) $ 是 $ p_1 $ . 攻擊者不必使用多個 $ (9,…) $ 雖然,甚至可以選擇扭曲組中的一個元素 $ T:={\infty}\cup(E(F_{p^2})\cap(F_p\times \sqrt 2 F_p)) $ 有順序的 $ |T|=4p_2 $ 為了一個素數 $ p_2 $ .
貢獻行為 (afaik) 描述了 Diffie-Hellman 交換的任何參與者都不能強制結果成為一小組值之一的屬性。例如,這樣的屬性對於防禦諸如三次握手攻擊之類的東西很有趣。curve25519 上的網站列出了 12 個要拒絕的值,以確保參與行為。
我知道其中 11 個來自哪裡,即 8 階和 4 階子群的元素 $ G $ 和 $ T $ 分別。因為他們都共享相同的身份元素( $ \infty $ ) 有 $ 8+4-1=11 $ 那些元素。
(如果一個元素不在那些 8 和 4 階的子群中,那麼它的階是 $ \geq \min(p_1,p_2) $ 因此,與對方的私有標量相乘產生的可能值的集合很大。)
網站上列出的 12 個元素中,哪一個不是上述 11 個元素之一,為什麼會出現?
實際上只有5個獨特的 $ x $ - 需要關注的座標:
- $ (0, \ldots) $
- $ (1, \ldots) $
- $ (-1, \ldots) $
- $ (x_1, \ldots) $
- $ (x_2, \ldots) $ ,
在哪裡
$$ \begin{eqnarray} x_1 =& 393823572354896145817230607815530211125 \ & 29911719440698176882885853963445705823 \end{eqnarray} $$ 和 $$ \begin{eqnarray} x_2 =& 32560625091655743179598362635611063129 \ & 4008115727848805560023387167927233504 \end{eqnarray}. $$ 這些對應於 $ x $ - 正如您所指出的,曲線上小階點的座標及其扭曲。您看到的剩餘值是這些值的倍數 $ x $ - 座標如下 $ 2^{256} $ :
- $ 0 \equiv 2^{255}-19 \equiv 2(2^{255}-19) \pmod{2^{255}-19} $
- $ 1 \equiv 2^{255}-19 + 1 \equiv 2(2^{255}-19) + 1 \pmod{2^{255}-19} $
- $ 2^{255} - 19 - 1 \equiv 2(2^{255}-19) - 1 \pmod{2^{255}-19} $
- $ x_1 \equiv 2^{255} - 19 + x_1 \pmod{2^{255}-19} $
- $ x_2 \equiv 2^{255} - 19 + x_2 \pmod{2^{255}-19} $
檢查這些額外的值是因為 curve25519 被設計為接受任何 $ 256 $ - 位字元串作為公鑰,每個值有一個或多個 256 位表示模數 $ 2^{255}-19 $ .