第 9 章介紹了 DLP:給定底數 g,在 x = g^y mod p 中找出 y。
橢圓曲線密碼學有一個類似的問題:
橢圓曲線的問題操作的是點而非數,且用乘法取代了指數運算。
所有橢圓曲線密碼學都建立在 ECDLP 之上。 與 DLP 一樣,它被認為是困難的,而且自 1985 年被引入密碼學以來,一直抵抗住了密碼分析。
關鍵優勢:更小的數字#
ECDLP 與古典 DLP 的一個重要差別是:ECDLP 讓你能用更小的數字,同時享有相近的安全等級。
一般而言,當 p 是 n 位元時,你會得到約 n/2 位元的安全等級:
| 方案 | 參數大小 | 安全等級 |
|---|---|---|
| 橢圓曲線 | 256 位元的 p | 約 128 位元 |
| DLP 或 RSA | 數千位元 | 約 128 位元 |
ECC 算術所用的數字較小,這正是它往往比 RSA 或古典 Diffie–Hellman 更快的原因之一。
如何求解 ECDLP#
求解 ECDLP 的一種方式是找出兩個輸出之間的碰撞:c₁P + d₁Q 與 c₂P + d₂Q。
這裡的點 P 與 Q 滿足 Q = kP(k 未知),而 c₁、d₁、c₂、d₂ 是你為了找出 k 所需的數。
與第 6 章的雜湊函式一樣,碰撞發生在兩個不同的輸入產生相同輸出時。因此要求解 ECDLP,我們需要找到滿足下式的點:
c₁P + d₁Q = c₂P + d₂Q把 Q 換成 kP:
c₁P + d₁kP = (c₁ + d₁k)P = c₂P + d₂kP = (c₂ + d₂k)P這告訴我們:對曲線上的點數(不是秘密)取模時,(c₁ + d₁k) 等於 (c₂ + d₂k)。由此推導:
d₂k − d₁k = c₁ − c₂
k(d₂ − d₁) = c₁ − c₂
k = (c₁ − c₂) / (d₂ − d₁)我們找到了 k——ECDLP 的解。
當然這只是大方向,細節更複雜也更有趣。
實務上橢圓曲線建立在至少 256 位元的數字上,這讓「靠找碰撞來攻擊橢圓曲線密碼學」變得不切實際——因為那要花上
2^128次運算(如第 6 章所述,在 256 位元數上找碰撞的成本)。