解釋curve25519的模減少,將hi位乘以38技巧?
我了解到有一個技巧可以加快 x25519 曲線中一個點(x 值)的模數減少。因為,它使用素數 $ 2^{255} - 19 $ .
來自文章:
減少模利用了這樣一個事實: $ 2^{255} - 19 $ . $ 2^{256} \equiv 38 $ , 所以 $ 38r4 $ 被添加 $ r0 $ 和 $ 38r5 $ 被添加 $ r1 $ 等等。
$ r_n $ 是大小為 64 位的寄存器。
我遇到的問題。我真的不明白為什麼會這樣?我想知道是否有人可以擴展這個?
讓 $ p = 2^{255} - 19 $ .
清楚地 $ p \equiv 0 \pmod p $ , 意義 $ p $ (模數)除 $ p - 0 $ (等式的兩側),或等效地:存在一些整數 $ k $ 這樣 $ p - 0 = k\cdot p $ . (這裡 $ k = 1 $ .)
所以 $ 2^{255} - 19 \equiv 0 \pmod p $ , 因此 $ 2^{255} \equiv 19 \pmod p $ , 表示存在一些 $ k $ 這樣 $ 2^{255} - 19 = k\cdot p $ . (又是在這裡, $ k = 1 $ .)
如果我們將等式兩邊乘以 $ 2 $ ,那麼我們得到 $ 2\cdot 2^{255} \equiv 2\cdot 19 \pmod p $ , 表示存在某個整數 $ k $ 這樣 $ 2\cdot 2^{255} - 2\cdot 19 = k\cdot p $ . (這裡 $ k = 2 $ .)
但是這個等式只是 $ 2^{256} \equiv 38 \pmod p $ .
因此,每當您進行算術模運算時 $ p $ , 數量 $ 2^{256} $ 和 $ 38 $ 是等價的。由於減少模 $ p $ 是環同態——也就是說,$$ [(a + b) \bmod p] \equiv [(a \bmod p) + (b \bmod p)] \pmod p, $$和同樣的乘法——我們可以拆分一個數字 $ n $ 進入低 256 位 $ n_{\mathrm{lo}} $ 其餘的 $ n_{\mathrm{hi}} $ 以便 $ n = n_{\mathrm{lo}} + 2^{256} n_{\mathrm{hi}} $ . 然後$$ n = n_{\mathrm{lo}} + 2^{256} n_{\mathrm{hi}} \equiv n_{\mathrm{lo}} + 38 n_{\mathrm{hi}} \pmod p. $$