非對稱加密之ECC橢圓曲線加密
非對稱加密之ECC橢圓曲線加密
基於數學難題:橢圓曲線上離散對數問題
橢圓曲線
如果用非常學術的話來說,一條橢圓曲線是在射影平面上滿足威爾斯特拉斯方程(Weierstrass)所有點的集合
而且具有如下特點
-
橢圓曲線為齊次方程
-
橢圓曲線上每一個點都必須是光滑的,也就是處處可導的。
其影象如下圖所示
-
觀察其影象也會發現,關於x軸是對稱的。
但是上面的介紹有點過於數學,而且這圖象也一點不像曲線啊。但其實,所謂的橢圓曲線,是其方程跟橢圓周長的計算方程相似,才得名橢圓曲線。
非橢圓曲線圖示:
橢圓曲線普通方程
上面的那個關於橢圓曲線的式子是有點過於複雜的。但是在ECC的加密演算法中,並不需要用到那麼複雜的方程,會簡化到如下形式。
但其中a、b會滿足如下約束條件,該約束條件用於確保橢圓曲線的光滑性,也就是可導性。
橢圓曲線上離散化
橢圓曲線是連續的,好像並不適合運用在加密運算上。所以,我們必須把橢圓曲線變成離散的點,並令其定義在有限域上。
將橢圓曲線離散化,也就是將橢圓曲線上的點轉換為點集合,一般取整數化的點,所有的點也就成呈現離散化分佈。而為了將其引入到密碼學領域,我們在引入有限域的概念。
有限域GF(p)的概念在AES中講過,也就是伽羅華域,表示對n以內的兩個數其進行運算後(如加、減、乘、除等),其結果仍然在n內。
而在橢圓曲線內,有限域GF(p)也就是讓橢圓曲線限定在(0,0)到(p-1,p-1)的象限內,集合中的點都離散分佈在該象限內。
橢圓曲線上的加法運算
在ECC加密演算法中,我們需要用到關於橢圓曲線的加密演算法,這跟我們常識上的加法運算往往是不一樣的。
這裡必須要舉例說明
已知橢圓曲線,點P、Q分別在橢圓曲線上,如圖所示,計算P+Q=R的過程如圖所示
也就是兩點所作直線交橢圓曲線另一點R‘,過R’作與Y軸平行的直線再交橢圓曲線於R。這個R,就是加法P+Q的結果。
橢圓曲線上的乘法運算
所謂的乘法運算跟傳統的乘法運算當然也不一樣,當然也不是將兩個點進行點乘。所謂橢圓曲線上的乘法運算是由加法推演來的。我們知道,傳統乘法運算也是由數個數字相加得來的。橢圓曲線上乘法運算也類似,是指由多個橢圓曲線加法運算得來
接著上訴的加法運算,試想,如果P和Q取同一點的話會怎麼樣?怎樣進行運算?
對於P+P這樣的同點運算,其結果為2P,這就是所謂的橢圓曲線乘法。其運算過程是作該點的切線交與橢圓曲線上的2P‘,作X軸的垂直線再交橢圓曲線上一點也就是我們的2P。
然而這樣的加法是一隻可以持續下去的。比如點2P+點P也得到3P。過程同上。
有限域橢圓曲線運算
已知有限域橢圓曲線,設兩點、,無論是過兩點作直線還是同一個點的切線,都是可以列出方程來的。所以對於P+Q的結果可以用下面的公式計算:
則
則
例:假如,求P+Q以及2P
-
計算P+Q
這裡需要2 mod 23的逆元,可採用拓展歐幾里得演算法,這裡一眼就可以看出來我就不寫了。
-
計算2P
那麼,如果我們將2P、3P、4P......一直計算下去的話,就可以在橢圓曲線上得到很多點。如下圖,是一個模28的有限域橢圓曲線,P為(1,1)的乘法集合。
可以在圖中很明顯地觀察到,這是一個非常不具有規律性的點集合。那麼對於密碼學,我們知道,越是沒有規律,就越是適用於加密演算法。
如果對於p=23,a=1,b=3,共有27個點如下:
(0,7) (6,15) (15,9) (0,16) (7,10) (15,14) (2,6) (7,13) (19,2) (2,17) (10,1) (19,21) (4,5) (10,22) (21,4) (4,18) (12,8) (21,19) (5,8) (12,15) (22,1) (5,15) (14,1) (22,22) (6,8) (14,22) O
最後一點是O點,也就是無窮遠處點,O+P=P。
橢圓曲線的困難性
假如給定橢圓曲線上的兩個點P和Q,k則為整數。
意思就是,Q點由基點P經過橢圓曲線k倍乘法而得來。
-
給定k和P,計算Q是很容易的
-
而給定P和Q,求k是非常困難的(mod p一般取得非常大,窮舉出k非常困難)。
這就是橢圓曲線困難性的體現。
ECC加密演算法
公私鑰的計算
按以下步驟進行
- 選取橢圓曲線(素數p一般取得非常大),並取橢圓曲線上一點作為基點P
- 選定一個大數k作為私鑰,並生成公鑰
- 得到公鑰集合,私鑰k
加密過程
-
在進行加密之前,要對明文訊息M通過編碼嵌入到曲線上,以便更好地進行運算,具體嵌入方法可參考有關文獻。
-
假如擁有公鑰對
選取隨機數r,將嵌入到橢圓曲線上的明文訊息M生成密文,即得到密文訊息
解密過程
-
解密過程看起來挺簡單的,假如我們手頭現在擁有私鑰k
$k_3$