先用一句話抓住這篇
不從協定縮寫開始,而是沿著 ECC 的誕生、橢圓曲線、點加法、Galois Field 與離散對數,一步步看懂私鑰為什麼是數字、公鑰為什麼是點。
先把這篇當成一張閱讀地圖:上方摘要說明問題,圖片先建立直覺,下面文字再補上真正的技術取捨。
如果第一次讀覺得名詞很多,可以先記住比喻與結論;第二次再回頭看名詞,會順很多。
RSA 保護的是能幫助重建私鑰的因數資料。ECC 則保護一個祕密整數:從公開起點 G 出發,依曲線的點加法累積 k 次,得到公開點 Q。適當參數下,知道 G 與 k,算 Q 很快;只知道 G 與 Q,要找回 k 就困難得多。這個差異是 ECC 用來建立公私鑰分工的基礎。
這一課從曲線上的點開始,逐步建立點加法與有限體除法,再看祕密整數如何變成公開點。全程使用可手算的 GF(17)。文末也能操作同一組點,檢查 2G=(6,3) 與 19G=𝒪。群很小,任何人都能窮舉,因此完全不安全;它讓我們看清楚運算規則,還不是完整協定。
1. 已經有 RSA,為什麼還要另一條路?

先把時間拉回 1985 年
公開金鑰密碼的想法已經存在,RSA 也已成為重要方法。可是密碼學家仍在找別的「單向道路」:有沒有一種運算,正向很快,知道結果後卻很難把祕密找回來?Victor Miller 與 Neal Koblitz 在 1985 年分別提出,把橢圓曲線上的點組拿來建構密碼系統。兩人的工作彼此獨立,後來成為 ECC 的起點。[1][2]
RSA 的安全直覺連到整數分解:已知巨大乘積,要找回質因數很難。ECC 的核心是橢圓曲線離散對數:已知起點 G 與終點 Q=kG,要找回走了幾次的 k 很難。兩種難題都能支撐公開與私密資訊的不對稱,但運算與攻擊方法要分開分析。
短金鑰不是魔法壓縮
在 NIST 的傳統安全強度對照裡,約 128-bit 的安全強度可對應到 3072-bit 的 RSA 類整數分解金鑰,或約 256–383-bit 的橢圓曲線金鑰。這是在已知攻擊模型下,相近安全強度所需的參數尺寸。實際速度與成本還取決於曲線、實作與協定;尺寸較短,不能直接推得每個 ECC 系統都更快或更省。[4]
因此 ECC 常出現在智慧卡、行動裝置與各種在意頻寬、儲存或運算成本的系統裡。不過我們先不急著談產品。下一步只問一個更基本的問題:名字裡的「橢圓曲線」,到底是不是橢圓?
2. 橢圓曲線為什麼不是橢圓?

看到「elliptic curve」,很多人會先畫一顆橢圓。這個直覺很自然,卻不是這裡的意思。橢圓曲線常寫成 y²=x³+ax+b;右邊有 x³,圖形可能像兩條彎曲的道路,也可能分成不同形狀,並不等於橢圓方程式。
名稱的歷史和橢圓積分有關。早期數學家研究橢圓弧長時遇到一類積分,後來和這些三次曲線建立了深刻關係;「elliptic」就這樣留在名字裡。先認得橢圓曲線是一組滿足特定方程式的點;曲線的名稱不代表它有橢圓的外形。
不是每一組 a、b 都能用
我們還要求曲線沒有尖點,也不能自己交叉。對 y²=x³+ax+b 而言,常用 4a³+27b²≠0 表示它是非奇異曲線。若條件失敗,某些點的切線或加法會失去良好定義,後面想建立的群結構也跟著壞掉。
本課選 y²=x³+2x+2。先把它當成實數平面上的曲線,讓眼睛看懂幾何;第 7、8 頁才把同一個方程式搬進 GF(17)。這個順序很重要:先有畫面,再把畫面翻譯成有限體計算。
3. 曲線上的「成員」有哪些?

𝒪。一個點 P=(x,y) 是不是曲線成員,不靠目測,要把座標代回方程式。以本課曲線為例,若左右兩邊相等,點就在曲線上;若不相等,再接近那條線也不算。
方程式左邊是 y²,所以 y 與 −y 平方後相同。只要 (x,y) 在曲線上,(x,−y) 通常也在;圖形因此對 x 軸上下對稱。這個「上下成對」稍後會變成取負點的規則。
為什麼要多放一個看不見的點?
數學家加入無窮遠點 𝒪,讓每次點加法都有答案。它扮演零的角色:P+𝒪=P。而 P 與它的上下鏡像 −P 相加時,答案就是 𝒪。
這聽起來像刻意補洞,其實是很有用的統一。普通整數有 0,讓加法能完整運作;曲線點也需要自己的單位元素。等我們開始反覆相加,𝒪 會成為一圈走完後回到的起點。
4. 兩個點怎麼相加?

在平面上選兩個不同點 P 與 Q。先畫一條穿過它們的直線;對非奇異三次曲線來說,這條線還會遇到第三個交點 R′。最後把 R′ 對 x 軸反射,得到 R,我們便定義 P+Q=R。
為什麼答案不是第三個交點本身?因為加上反射後,規則能和無窮遠點、負點一起形成乾淨的加法系統。像 P+(−P)=𝒪 這類關係,也會自然落進同一張圖。
把圖翻譯成算式
在實數上,先求割線斜率 λ=(y_Q−y_P)/(x_Q−x_P),再算 x_R=λ²−x_P−x_Q 與 y_R=λ(x_P−x_R)−y_P。公式看起來多了,但每一項都能在圖上找到:斜率描述那條線,新 x 找第三個交點的位置,新 y 完成反射。
此時我們仍在實數世界。把幾何規則記牢後,搬進有限體時就算看不見連續曲線,也知道每一步是在模仿哪個動作。
5. 為什麼這套加法值得信任?

密碼系統需要的不只是「算一次好像有答案」,而是能一次又一次組合,結果仍然可預測。曲線點加法有四個重要性質:兩點相加仍回到群裡;𝒪 不改變任何點;每個點都有能把它帶回 𝒪 的反元素;先加哪一組,最後結果相同。
最後一項叫結合律:(P+Q)+R=P+(Q+R)。它讓我們可以放心寫 P+Q+R,不必每次都標括號。點加法在這裡也可交換,所以 P+Q=Q+P;整組點形成 Abelian group。
群不是密碼,卻是密碼的舞台
群本身不會自動帶來安全性。它提供的是一套封閉、可組合的動作,讓「把同一個點加很多次」有清楚定義。安全性還要看群的大小、基點的階、曲線選擇,以及目前已知的反向演算法。
漫畫先花一整頁整理規則,讓後面的 kG 有所依據。這個符號表示用群的四個性質支撐起來的重複加法,並非突然多出一套運算。
6. 同一個點和自己相加怎麼辦?

2P 是 P+P 的群運算結果,不是把 x、y 座標各乘以二。若 P 與 Q 是同一點,兩點之間沒有唯一割線。我們仍能定義加法:讓 Q 沿著曲線靠近 P,兩點的割線在極限下變成 P 的切線。切線遇到第三點後照樣反射,就得到 2P。
在實數曲線上,倍加斜率改成 λ=(3x_P²+a)/(2y_P)。後面的座標公式仍沿用點加法。若 y_P=0,切線垂直,結果定義為 𝒪。
最容易犯的錯,是把 2P 看成 (2x_P,2y_P)。數字 2 在這裡數的是「做幾次點加法」,不是放大座標。這個差別正是下一個關鍵符號 kG 的基礎。
到目前為止,圖形都畫在連續的實數平面上。電腦真正使用 ECC 時,座標不會在無限精細的實數間飄動;我們需要一個有限、能精確計算的世界。
7. Galois Field 有限,為什麼還能做除法?

GF(17) 只有 0,1,2,…,16 這 17 個元素。算到 17 以上就繞回來,所以 15+5=20 在這裡寫成 15+5≡3 (mod 17)。計算保留除以 17 的餘數,沒有四捨五入。
Galois Field 的中文常叫「伽羅瓦體」或「有限體」。關鍵字是「體」:加、減、乘,以及除以非零元素,都能在同一組元素裡完成。加減乘容易理解;真正特別的是除法。
除法藏在反元素裡
在 GF(17) 中,5 的乘法反元素是 7,因為 5×7=35≡1 (mod 17)。所以「除以 5」可以改寫成「乘以 7」。我們在 0 到 16 之間找一個能乘回 1 的元素,不把 5.0 按進計算機做普通小數除法。
17 是質數,因此每個非零元素都有這樣的反元素;0 仍然不能當除數。更一般的有限體也可以有 pⁿ 個元素,但本課只使用最容易手算的質數體 GF(p)。
這一步回答了點加法公式裡的「除」如何在有限世界完成:乘上分母的模反元素,全程不用浮點小數。
工程師延伸:GF(p) 只是有限體的一種
有限體的元素個數可以是 p^m,其中 p 是質數、m 是正整數。質數體 GF(p) 直接用整數對 p 取模;二元擴張體 GF(2^m) 則把元素看成 GF(2) 上的多項式,再對不可約多項式取模。兩者都能承載橢圓曲線,但元素運算與硬體實作取捨不同。
8. 搬進 GF(17) 後,曲線去哪裡了?

GF(17) 後,不再是一條連續線,而是有限個通過方程式檢查的座標點。現在把 y²=x³+2x+2 的 x、y 都限制在 0 到 16,而且每一步都取 mod 17。畫面不再有能一路描下去的曲線,只剩散落在格點上的答案。
拿 G=(5,1) 來檢查。左邊是 1²=1;右邊是 5³+2×5+2=137,而 137≡1 (mod 17)。兩邊餘數相同,所以 G 是群裡的點。
把所有 x 都試過,本課曲線共有 18 個普通座標點;再加上無窮遠點 𝒪,一共 19 個群元素。這個數字很小,因此稍後甚至能把整圈走完。
幾何沒有消失,只是不再負責量距離
我們仍用「割線、第三交點、反射」記住規則,但真正計算斜率時,分母要換成模反元素,算完 x、y 也都回到 GF(17)。幾何提供直覺,有限體算術才是精確的機器。
所以別在離散點圖上硬找一條連續直線。它是一張記憶圖,不是尺規作圖;答案要由有限體公式決定。
9. kG 為什麼叫純量乘法?

kG 表示把 G 用點加法累積 k 次;在本課的小群裡,走 19 步會回到 𝒪。kG 的意思很樸素:G+G+⋯+G,一共有 k 個 G。k 是普通整數,G 是曲線點,所以這個動作叫 scalar multiplication。名稱裡雖然有 multiplication,底層搭起來的仍是點加法。
來手算一次倍加。對 G=(5,1),斜率是 λ≡(3×5²+2)×(2×1)⁻¹ (mod 17)。2⁻¹≡9,而 3×25+2=77≡9,因此 λ≡9×9≡13。再把斜率代回去:x_{2G}≡13²−5−5≡6,y_{2G}≡13(5−6)−1≡3,所以 2G=(6,3)。
再走一次普通點加法,把 2G=(6,3) 加上 G=(5,1)。斜率是 λ≡(1−3)/(5−6)≡2;接著 x_{3G}≡2²−6−5≡10、y_{3G}≡2(6−10)−3≡6,得到 3G=(10,6)。繼續走會有 4G=(3,1) 與 7G=(0,6)。每一步仍然落在曲線點群裡;到 19G 時回到 𝒪,我們便說 G 的階是 19。
電腦不會傻傻加 k 次
若 k 很大,逐次相加太慢。實作會用 double-and-add 一類方法:像二進位快速冪那樣,反覆倍加並在需要時加上 G。正向計算因此很有效率。
但請再次避開座標倍增的陷阱:kG 不等於 (kx_G,ky_G)。移動路線由曲線群規則決定,不是沿平面直線把座標放大。
工程師延伸:把玩具子群完整走一圈
對 E: y²=x³+2x+2 over GF(17),G=(5,1) 會生成一個階為 19 的群。序列從 2G=(6,3)、3G=(10,6)、4G=(3,1)、5G=(9,16)、6G=(16,13)、7G=(0,6) 一路走到 18G=(5,16)=−G,最後 19G=𝒪。這個極小質數階刻意把 cofactor 的支線從主課拿掉。
10. ECC 的單向迷宮難在哪裡?

Q=kG 很好算;只看到 G 與 Q,要倒推 k 才是 ECC 想利用的難題。在玩具曲線上,若 k=7,從 G=(5,1) 算到 Q=7G=(0,6) 很直接。反過來,只給你 G 與 Q,問「哪個 k 讓 Q=kG?」這就是橢圓曲線離散對數問題。
我們的群只有 19 個元素,從 1G 開始全部試一遍就能抓到 7,因此沒有任何安全性。真實系統選擇大得不可枚舉、結構也經過審查的曲線與子群,讓目前已知的通用攻擊需要不切實際的資源。NIST SP 800-186 列出的推薦曲線與使用條件,就是實務上不該自行發明參數的原因之一。[3]
「很難」是工程判斷,不是永恆保證
密碼學不會只說「看起來亂,所以安全」。曲線大小、基點的階、cofactor、點驗證與實作方式都會影響結果;研究者也持續尋找更好的演算法。所謂安全強度,是在已知攻擊、計算資源與威脅模型下的判斷。
RSA 的難題與整數分解相連,ECC 的難題與橢圓曲線離散對數相連。兩者都能做出單向感,卻不能因為都有公鑰、私鑰就混成同一套數學。
工程師延伸:選曲線本身就是安全邊界
只記「離散對數很難」還不夠。實際系統必須說清楚有限體、曲線、子群、基點、階、cofactor、編碼與點驗證規則,也要處理旁通道與無效點輸入。審查過的標準與函式庫,價值之一就是把這些決策固定下來,不讓應用程式臨時發明參數。
11. 私鑰為什麼是數字,公鑰卻是點?

Q=dG。一組 ECC 金鑰先需要大家同意數學舞台:使用哪個有限體、哪條曲線、哪個基點 G,以及 G 所在子群的階 n。這些 domain parameters 可以公開;知道舞台不等於知道誰的私鑰。
接著從 1 到 n−1 之間可靠地隨機選一個整數 d。這個 d 就是私鑰。教材選 d=7 只是為了接上前頁;真實私鑰若可預測、重複或亂數品質差,再漂亮的曲線也救不了它。
公鑰則由 Q=dG 算出。本例是 Q=7G=(0,6)。d 是數字,Q 是點,兩者的型態本來就不同。公開 Q 之後,別人可以看到 G 與 Q,卻不該能有效率地求回 d。
到這裡先停下來
一對金鑰本身還不是完整的通訊或簽章流程。真正使用時,還需要定義資料格式、點驗證、亂數或 nonce、雜湊、錯誤處理與身分信任等規則。這些內容值得各自上一堂課,硬塞進這 12 頁只會讓初學者把地基和應用混在一起。
所以本單元的終點很克制:你現在應該看得懂 d 如何變成 Q=dG,也知道為什麼反向不容易。至於這對金鑰如何參與合作或驗證,留給下一單元。
12. 把 ECC 的骨架重新走一遍

故事從 1985 年開始。Miller 與 Koblitz 看見橢圓曲線點群也能提供公開方向容易、反向困難的運算。ECC 因此是另一個建立公開金鑰不對稱性的數學家族,不能用「更短的 RSA 公式」解釋。
先在實數上看 y²=x³+ax+b,用割線、第三交點與反射理解點加法;兩點重合時改用切線。接著把座標與四則運算搬入 GF(p),連續曲線變成有限個離散點,除法則變成乘上模反元素。
在點群裡反覆加 G,得到 G、2G、3G…kG。電腦可以用倍加與加法快速求出 Q=kG;只拿到 G 與 Q,要倒推 k,則落入橢圓曲線離散對數難題。
最後把 k 換成金鑰語言:私鑰是祕密整數 d,公鑰是曲線點 Q=dG。本課的 GF(17)、G=(5,1)、d=7 都只是透明教具;真實系統必須使用經過審查的曲線、參數與函式庫。
五點帶走
- 橢圓曲線不是橢圓;它是滿足三次方程式的一組點。
- 曲線點加法由割線、第三交點與反射建立,倍加則使用切線。
GF(p)是有限體,不只是取餘數;每個非零元素都有乘法反元素。kG是重複點加法,不是把座標乘以 k;正向容易、反向離散對數困難。- ECC 私鑰是祕密整數 d,公鑰是點
Q=dG;有了 key pair,還不等於已經有完整協定。
下一單元再回答:兩個人如何使用公開的曲線點,完成合作或驗證?
References
- Victor S. Miller, “Use of Elliptic Curves in Cryptography,” CRYPTO ’85:以橢圓曲線群建構密碼系統的早期獨立提案。
- Neal Koblitz, “Elliptic Curve Cryptosystems,” Mathematics of Computation 48(177), 1987:1985 年投稿的另一項獨立 ECC 提案與運算討論。
- NIST SP 800-186, Recommendations for Discrete Logarithm-based Cryptography: Elliptic Curve Domain Parameters:推薦曲線、domain parameters 與使用條件。
- NIST SP 800-57 Part 1 Rev. 5:金鑰管理建議與不同演算法/金鑰尺寸的安全強度對照。
沿 GF(17) 的點群走一圈
先設定 k=2,核對 2G=(6,3)。再設定 19,逐步查看點如何回到無窮遠點 𝒪。最後改成 20,預測結果再比對:群的週期讓你回到 G。
使用 y²=x³+2x+2、G=(5,1)、mod 17 的玩具群。每一步真的計算有限體點加法;19 個元素容易窮舉,不能保護金鑰。
學習指南
安全基礎
查看課程大綱 → · 進度只計入已發布課程
先備知識
- 只需基本代數與餘數概念,不要求橢圓曲線密碼學基礎
我學會了什麼
- 說明 ECC 為什麼是另一條公開金鑰路線,而不是縮小版 RSA
- 用割線、反射與切線幾何解釋點加法與倍加
- 說明 GF(p) 為什麼能對非零元素做除法
- 在 GF(17) 的玩具曲線上驗算純量乘法
- 辨認私密純量 d 與公開點 Q = dG,且不提前混入協定層