為什麼 ECDSA 中使用素數?
所以我需要為學校寫一篇關於 ECDSA 及其安全性的文章。現在我以為我有一個簡單的問題,但是,我似乎無法在任何地方找到答案:
為什麼公式中的p必須是素數?
現在我明白了你如何只能有素數的模逆,我想這可能與它有關,但我不明白怎麼做。
這是我從 ECDSA 算法中找到公式的網站:https ://andrea.corbellini.name/2015/05/23/elliptic-curve-cryptography-finite-fields-and-discrete-logarithms/
為什麼 $ p $ 需要是素數嗎?
這是算術模數所必需的 $ p $ 成為一個領域。對於非素數模,我們只得到一個ring。
這很重要,因為我們想要計算模乘逆,並且需要一個欄位來使其始終如一地工作。
更具體地說:如果 $ q $ 是這樣的 $ 0<q<p $ 和 $ \gcd(p,q)\ne1 $ (這是可能的,當 $ p $ 不是素數),那麼不存在 $ r $ 和 $ q,r\equiv1\pmod p $ , 那是 $ q $ 沒有乘法逆元。這將使帶有術語的公式無效 $ (x_P-x_Q)^{-1}\bmod p $ 什麼時候 $ \gcd(p,x_P-x_Q)\ne1 $ ,在執行點加法時使用。和 $ p $ 素數,這只能發生在 $ x_P\equiv x_Q\pmod p $ ,在點加法中可以作為特例處理。
你只能有素數的模逆
呃,沒有。反例比比皆是。說 $ 1 $ ,它不是素數,是它自己的模逆;和 $ 4 $ ,它不是素數,並且具有模逆 $ 7 $ 模組 $ 9 $ , 自從 $ 4\times7=3\times9+1 $ .
正確的表述:可靠的模數反演需要素數模數。
更準確地說:所有整數來自 $ 1 $ 當且僅當模數為素數時,比模數小一具有乘法模逆。
注意:出於不同(安全)原因,編號 $ n $ 曲線上的點數(包括中性點,也稱為無窮大點)也需要是素數(就像在 ECDSA 中一樣),或者至少要有一個大的素數因子。
這是一個簡化的解釋:
正如 fgrieu 所指出的,計算乘法模逆是橢圓密碼學計算所必需的。解釋 Schneier 的“應用密碼學”第 246 頁:
求乘法逆需要找到一個滿足 1= a*x mod n 的 x。因此,例如,5 mod 14 的倒數是 3,因為當 a = 5 和 n = 14 時,我們可以看到 5 × 3 = 15,當我們模減少 15 mod 14 時,餘數/殘差為 1,因為 15 比 14 大 1。
但是由於 14 不是素數,所以如果 a = 2 且 n = 14,則不存在乘法逆元,因為沒有整數 x 可以為我們提供 1 = 2*x mod 14 的解。
相反,如果n 是素數,那麼對於1 到n 之間的每個整數(即1 到n-1),恰好存在一個模乘逆。
如果 n 不是素數,那麼您將遇到像上面範例中 n = 14 的情況,其中將無法解決模乘法逆問題。繪製橢圓曲線的域不是我們習慣的正常整數集合,而是由素數約束的一組數字。但是,為了使欄位有效,在其中執行的操作需要以對應於正常數字的方式執行。因此,對於正常數字,每個數字都有一個乘法逆,但是對於模算術,只有當它是素數時才能保證它具有乘法逆(如上所示)。因此,由於橢圓曲線是使用模算術繪製的(例如比特幣'
因此,如果 p 不是素數,而是接近素數,橢圓曲線密碼學實際上可能對大多數密鑰“有效”,但對其他密鑰可能會失敗。由於我們希望橢圓曲線密碼學在每種情況下都能始終如一地工作,因此選擇了一個素數(這將保證在每種情況下都能解決模乘逆問題)。