1. 程式人生 > 其它 >非對稱加密之ECC橢圓曲線加密

非對稱加密之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$