為什麼橢圓曲線的群階的判別性和素性會影響安全性?
在一本關於密碼學和橢圓曲線的書中,提到並非所有曲線都是安全的,並且聲明為了選擇安全曲線,曲線必須滿足 3 個要求。
- 曲線方程為 $ y^2 = x^3 + ax + b\quad\pmod p $
- 和 $ 4a^3 + 27b^2 \neq 0\quad\pmod p $
- 和訂單 $ #E(\mathbb F_p) $ 橢圓曲線組的 是素數。
第三點很奇怪,因為在 DLP 中,比如 Diffie-Hellman 模 $ p $ , 命令 $ p-1 $ 可以是任何數字,不一定是素數(如果它是我不知道的素數,它可能會更加安全)。
我當然理解第一個陳述,但我完全不知道為什麼其他兩個陳述必須為真才能使橢圓安全。因此,如果有人可以解釋為什麼陳述 2/3 對於良好的橢圓曲線必須為真,以及如果這兩個條件不成立會發生什麼。任何小例子 $ p, a, b $ 將非常感激,所以我可以理解它背後的數學。
- $ y^2 = x^3 + ax + b\bmod p $ 是 Short Weierstrass 方程。它背後的理論在這裡
使用 Bezout 定理,可以證明每個不可約三次都有一個 flex(切線與重數為 3 的曲線相交的點)或奇異點(一個沒有切線的點,因為兩個偏導數都為零)。
$$ Reducible cubics consist of a line and a conic, which are easy to study. $$ 具有 flex 的不可約三次可以仿射變換為 Weierstrass 方程: $$ Y^2 + a_1 XY + a_3 Y = X^3 + a_2 X^2 + a_4 X + a_6 $$
這可以轉換成一個簡短的魏爾斯特拉斯方程,如果 $ p $ 大於 $ 3 $ . 轉換可以通過
改變 $ Y\longrightarrow y-(a_1x+a_3)/2 $ 和 $ X \longrightarrow x $
$$ y^2 = x^3 - (1/4 a_1^2 +a_2 )x^2 + (1/2 a_1 a_3)x + (a_4+ 1/4 a_3^2 + a_6) $$
重命名
$$ \begin{align} A & = - (1/4 a_1^2 +a_2 )\ B & = 1/2 a_1 a_3\ C & = a_4+ 1/4 a_3^2 + a_6 \end{align} $$
現在新方程的形式為$$ y^2=x^3+Ax^2+Bx+C. $$
現在改變 $ x\longrightarrow x-A/3 $ ,$$ y^2 = x^3 - \left(1/3A^2x + Bx \right)+ \left( 2/27 A^3 - 1/3AB + C \right) $$ 重命名;
$$ \begin{align} a &= 1/3A^2 + B\ b & = 2/27 A^3 - 1/3AB + C\ \end{align} $$ 現在新方程的形式為$$ y^2=x^3+ax+b. $$
的原因 $ p \neq 2,3 $ 從分工可以看出。還應注意,變數的兩個變化是可逆的,因此它們的組成也是。這得出結論,兩個方程上的有理點是雙射對應的。
為了 $ p=2 $ 和 $ p=3 $ , 還有其他縮寫形式。在密碼學中,我們在任一二進制擴展欄位( $ \mathbb{F}{2^m} $ ),它們不再是安全的大素數域 ( $ \mathbb{F}{p} $ ) 及其副檔名 ( $ \mathbb{F}_{p^m} $ ). 2. 如果判別式為零 ( $ \Delta = 0 $ ),那麼曲線是奇異的,DLP 很容易。在幾何上,這意味著該圖具有尖點、自交點(節點)或孤立點。
尖頭; 什麼時候 $ \Delta=0 $ 和 $ a=0 $ ( $ y^2 = x^3 $ );
交點或節點;什麼時候 $ \Delta=0 $ 和 $ a\neq 0 $ ( $ y^2 = x^3 +3x +1 $ );
Acnode(孤立點); $ y^2 + x^3 + x^2 $ , 在 $ (0,0) $
請注意,這些圖不在我們無法輕易看到這些數字的有限域中。有限域上的曲線只是我們在平面上繪製時的點,我們看不到上面的奇異點;但是,我們仍然可以計算它們。
以上是曲線的點 $ \operatorname{GF}(307) $ 用曲線方程 $ y^2 = x^3 + x^2 + x $ 並且這條曲線的點組同構於 $ \mathbb Z_{160} \oplus \mathbb Z_2 $
而且,Wolfram 有一個關於這些奇異點的好頁面。
- 這並不完全正確。一些曲線具有素數順序(即, $ #E(\mathbb F_p) $ 是素數),它們被稱為素數曲線。除了身份之外的所有元素都可以是生成器。這是群論中拉格朗日定理的直接結果,即一個元素產生的子群的階必須除以群的階。要查看有限域上的曲線點可以形成什麼樣的群,請參見底部的定理。
有些曲線沒有素數順序,例如 Curve25519 和 Curve448。Curve25519 有一個輔因子 $ h=8 $ IE $ h = \frac{#E(\mathbb F_p)}{n} $ 在哪裡 $ n $ 是生成點的順序 $ G $ . 在這種情況下,我們選擇了最大的素數來形成子群並為它選擇一個生成器。
還有一個必須考慮的與順序相關的扭曲安全性。儘管 NIST P-224 具有輔因子 1(即它具有素數順序),但它沒有扭曲的安全性。
**定理:**讓 $ E $ 是有限域上的一個橢圓曲線群 $ \mathbb{F_q} $ . 然後$$ E(\mathbb{F_q}) \simeq \mathbb{Z_p} \text{ or } \mathbb{Z_{n_1}} \oplus \mathbb{Z_{n_2}} $$對於某個整數 $ n \geq 1 $ ,或者對於一些整數 $ n_1,n_2 \geq 1 $ 和 $ n_1|n_2 $ .
如果曲線的階是素數,那麼它必須是 $ E(\mathbb{F_q}) \simeq \mathbb{Z_p} $ .
用於轉換的 SageMath 程式碼。第一部分;
var('x y z a b c') f = y^2 - x^3- a*x^2-b*x-c print(f) g = f.subs(x == x-a/3) print(g) g.expand()
第二部分;
var('X Y Z x y z a1 a2 a3 a4 a5 a6') f = Y^2 + a1 * X*Y + a3*Y - X^3 - a2*X^2 - a4*X - a6 f g = f.subs(Y == Y - (a1*X +a3)/2) print(g) g.expand()