評估一條橢圓曲線是否安全的準則包括:所用群的階(點數)、它的加法公式,以及它的來源。
橢圓曲線有好幾種型態,但並非全都同樣適合密碼學用途。選擇時要審慎挑選方程式 y² = x³ + ax + b 中的係數 a 與 b,否則你可能得到一條不安全的曲線。
實務上你會使用某條事實標準的曲線,但了解什麼構成一條安全的曲線,能幫你在數個可用選項中做出選擇,也能更好地理解相關風險。
三個判準#
群的階不該是小數字的乘積,否則求解 ECDLP 會變得容易得多。
加法公式最好統一。 前面提過,
P + Q在Q = P時需要一個特殊的加法公式。把這個情況與一般情況區別對待,若攻擊者能分辨「倍點」與「相異點相加」,就可能洩漏關鍵資訊。
有些曲線之所以安全,正是因為它們對所有點加法都使用單一個公式。(當一條曲線的倍點不需要特殊公式時,我們說它容許統一加法律〔unified addition law〕。)
係數的來源要說得清楚。
若曲線的創造者不解釋
a與b的來源,他們可能被懷疑動了手腳——因為你無從得知他們是否挑了較弱的值,讓某種尚未被發現的攻擊得以成立。
更多準則與曲線細節見專門網站 https://safecurves.cr.yp.to/ ↗。
NIST 曲線#
2000 年,美國 NIST 在 FIPS 186 文件的〈Recommended Elliptic Curves for Federal Government Use〉中把 NIST 曲線標準化。
- 五條在質數之模下運作,稱為質數曲線(prime curves)。
- 另外十條使用二元多項式——一種讓硬體實作更有效率的數學物件(本書不深入,因為它們很少與橢圓曲線一起使用)。
最常見的 NIST 曲線是質數曲線,其中最常見的是 P-256:
運作模數:p = 2^256 − 2^224 + 2^192 + 2^96 − 1(256 位元)
方程式: y² = x³ − 3x + b(b 是一個 256 位元的數)NIST 也提供 192、224、384 與 521 位元的質數曲線。
對 NIST 曲線的批評#
NIST 曲線有時受到批評,因為只有曲線的創造者 NSA 知道其方程式中
b係數的來源。我們得到的唯一解釋是:
b來自用 SHA-1 雜湊一個看起來隨機的常數。例如 P-256 的b參數來自這個常數:c49d3608 86e70493 6a6678e1 139d26b7 819f7e90沒有人知道 NSA 為什麼挑了這個特定常數,但多數專家並不認為該曲線的來源藏有任何弱點。
Curve25519#
Daniel J. Bernstein 於 2006 年把 Curve25519 帶到世上。他出於效能考量設計它,目標是比標準曲線更快、使用更短的金鑰。
但 Curve25519 也帶來安全上的好處:與 NIST 曲線不同,它沒有可疑的常數,而且能對「相異點相加」與「倍點」使用同一個統一公式。
方程式:y² = x³ + 486662x² + x
運作模數:2^255 − 19(一個盡可能接近 2^255 的 256 位元質數)這個方程式的形式與本章其他方程式略有不同,但它仍屬於橢圓曲線家族。這種不尋常的形式讓特定的實作技巧成為可能,使 Curve25519 在軟體中很快。
而係數 486662 是滿足 Bernstein 所設安全準則的最小整數。
綜合這些特性,Curve25519 比 NIST 曲線及其可疑係數更值得信賴。
它被到處使用:Google Chrome、Apple 系統、OpenSSH 等眾多系統。不過因為它不是 NIST 標準,某些應用仍堅持使用 NIST 曲線。
想了解 Curve25519 背後的全部細節與理由,可看 Daniel J. Bernstein 2016 年的簡報〈The first 10 years of Curve25519〉:http://cr.yp.to/talks.html#2016.03.09/ ↗。
其他曲線#
本書寫作時,多數密碼應用使用 NIST 曲線或 Curve25519,但也還有其他仍在使用的舊標準,以及正被推廣並推進標準化委員會的新曲線。
舊的國家標準#
- 法國的 ANSSI 曲線
- 德國的 Brainpool 曲線
這兩族曲線不支援完整的加法公式,而且使用來源不明的常數。
較新的曲線#
較新的曲線比舊曲線更有效率,也沒有任何嫌疑;它們提供不同的安全等級與各種效率最佳化:
- Curve41417:Curve25519 的變體,處理更大的數,提供更高的安全等級(約 200 位元)。
- Ed448-Goldilocks:2014 年首度提出的 448 位元曲線,被視為網際網路標準。
- Aranha 等人在〈A note on high-security general-purpose elliptic curves〉(http://eprint.iacr.org/2013/647/ ↗)中提出的六條曲線——不過這些很少被使用。