第 9 章介紹了 DLP:給定底數 g,在 x = g^y mod p 中找出 y

橢圓曲線密碼學有一個類似的問題:

橢圓曲線的問題操作的是而非數,且用乘法取代了指數運算。

所有橢圓曲線密碼學都建立在 ECDLP 之上。 與 DLP 一樣,它被認為是困難的,而且自 1985 年被引入密碼學以來,一直抵抗住了密碼分析。

關鍵優勢:更小的數字#

ECDLP 與古典 DLP 的一個重要差別是:ECDLP 讓你能用更小的數字,同時享有相近的安全等級。

一般而言,當 pn 位元時,你會得到約 n/2 位元的安全等級:

方案參數大小安全等級
橢圓曲線256 位元的 p約 128 位元
DLP 或 RSA數千位元約 128 位元

ECC 算術所用的數字較小,這正是它往往比 RSA 或古典 Diffie–Hellman 更快的原因之一。

如何求解 ECDLP#

求解 ECDLP 的一種方式是找出兩個輸出之間的碰撞c₁P + d₁Qc₂P + d₂Q

這裡的點 PQ 滿足 Q = kPk 未知),而 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 位元數上找碰撞的成本)。