評估一條橢圓曲線是否安全的準則包括:所用群的(點數)、它的加法公式,以及它的來源

橢圓曲線有好幾種型態,但並非全都同樣適合密碼學用途。選擇時要審慎挑選方程式 y² = x³ + ax + b 中的係數 ab,否則你可能得到一條不安全的曲線。

實務上你會使用某條事實標準的曲線,但了解什麼構成一條安全的曲線,能幫你在數個可用選項中做出選擇,也能更好地理解相關風險。

三個判準#

  • 群的階不該是小數字的乘積,否則求解 ECDLP 會變得容易得多。

  • 加法公式最好統一。 前面提過,P + QQ = P 時需要一個特殊的加法公式。

    把這個情況與一般情況區別對待,若攻擊者能分辨「倍點」與「相異點相加」,就可能洩漏關鍵資訊

    有些曲線之所以安全,正是因為它們對所有點加法都使用單一個公式。(當一條曲線的倍點不需要特殊公式時,我們說它容許統一加法律〔unified addition law〕。)

  • 係數的來源要說得清楚。

    若曲線的創造者不解釋 ab 的來源,他們可能被懷疑動了手腳——因為你無從得知他們是否挑了較弱的值,讓某種尚未被發現的攻擊得以成立。

更多準則與曲線細節見專門網站 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/ )中提出的六條曲線——不過這些很少被使用