ECC(橢圓曲線加密)算法剖析


背景

隨着計算機性能的提升,市面上的加密技術越來越不安全,1024位的RSA私鑰加密已經可以破解,目前有效的手段只是將1024位換成2048位,但隨着技術的進步,RSA算法的破解難度會越來越低,因此需要用更安全的加密算法來代替。隨着加密難度的提高,RSA算法的密鑰長度呈現指數式的增長,然而ECC算法取可以做到使用更短的密鑰獲得同等級別的安全性。

 

ECC是什么

ECC是Elliptic Curve Cryptography(橢圓曲線密碼學)的縮寫,是一種基於橢圓曲線數學的公開密鑰加密算法,其本質是利用離散對數問題實現加密。
ECC的主要優勢,是在使用更小的密鑰的同時,提供更快的性能和更高等級的安全。
 

橢圓曲線又是什么

一條橢圓曲線就是一組被 y2 = x3 + ax + b 定義的且滿足 4a3 + 27b2 ≠ 0 的點集。
4a3 + 27b2 ≠ 0 這個限定條件是為了保證曲線不包含奇點(在數學中是指曲線上任意一點都存在切線)。
 

阿貝爾群

阿貝爾群的概念是抽象代數的基本概念之一,是一種代數結構,由一個集合以及一個二元運算所組成。
如果一個集合或者運算是群的話,就必須滿足以下條件(+ 表示二元運算):
1、封閉性(closure),如果a和b被包含於群,那么a+b也一定是群的元素;
2、結合律(associativity);
3、存在一個單位元(identity element)0,0與任意元素運算不改變其值的元素,即 a+0 = 0+a = a;
4、每個元素都存在一個逆元(inverse);
5、交換律(commutativity),即 a+b = b+a;
 

橢圓曲線中的阿貝爾群

在橢圓曲線上定義一個群:
1、群中的元素就是橢圓曲線上的點;
2、單位元就是無窮處的點0;
3、相反數P,是關於X軸對稱的另一邊的點;
4、二元運算規則定義如下:取一條直線上的三點(這條直線和橢圓曲線相交的三點),P, Q, R(皆非零),他們的總和等於0,P+Q+R=0。
如果P, Q, R在一條直線上的話,他們滿足:
P+(Q+R)=Q+(P+R)=R+(P+Q)=⋯=0。
當P,Q點為同一點時,P=Q,滿足:
這樣,我們可以直觀的證明:+運算符是符合交換律和結合律的,這是一個阿貝爾群。
因為阿貝爾群滿足交換律和結合律,所以點P和點-R的二元運算結果必會在曲線上,即P+P+P的結果必會在曲線上的另一點Q,
以此類推,可以得出得出:
Q=kP(k個相同的點P進行二元運算(數乘),記做kP)
 

離散對數問題

描述一條Fp上的橢圓曲線,常用到六個參量:T=(p,a,b,n,x,y)。(p 、a 、b) 用來確定一條橢圓曲線,p為素數域內點的個數,a和b是其內的兩個大數;
x,y為G基點的坐標,也是兩個大數;
n為點G基點的階;
以上六個量就可以描述一條橢圓曲線,有時候我們還會用到h(橢圓曲線上所有點的個數p與n相除的整數部分)。

這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:

  1、p 當然越大越安全,但越大,計算速度會變慢,200位左右可以滿足一般安全要求;
  2、p≠n×h;
  3、pt≠1 (mod n),1≤t<20;
  4、4a3+27b2≠0 (mod p);
  5、n 為素數;
  6、h≤4。

 

加解密過程

  1、選定一條橢圓曲線 Ep(a,b) 並取橢圓曲線上一點,作為基點P。
  2、選擇一個大數k作為私鑰,並生成公鑰 Q=kP。
  3、將 Ep(a,b) 和點Q、P傳給用戶。
  4、用戶接到信息后 ,將待傳輸的明文編碼到Ep(a,b)上的一點M,並產生一個隨機整數r。
  5、公鑰加密(密文C是一個點對):
    C={rP, M+rQ}
  6、私鑰解密(M + rQ - k(rP) ,解密結果就是點M),公式如下:
    M + rQ - k(rP) = M + r(kP) - k(rP) = M
  7、對點M進行解碼就可以得到明文
  假設在加密過程中,有一個第三者H,H只能知道橢圓曲線 Ep(a,b)、公鑰Q、基點P、密文點C,而通過公鑰Q、基點P求私鑰k或者通過密文點C、基點P求隨機數r都是非常困難的,因此得以保證數據傳輸的安全。
 
具體:
設私鑰、公鑰分別為k、K,即K = kG,其中G為G點。
  公鑰加密:
  選擇隨機數r,將消息M生成密文C,該密文是一個點對,即:
    C = {rG, M+rK}
    其中K為公鑰
  私鑰解密:
    M + rK - k(rG) = M + r(kG) - k(rG) = M
    其中k、K分別為私鑰、公鑰
 

橢圓曲線簽名與驗證簽名

橢圓曲線簽名算法,即ECDSA。
設私鑰、公鑰分別為k、K,即K = kG,其中G為G點。
 
私鑰簽名:
  1、選擇隨機數r,計算點rG(x, y)。
  2、根據隨機數r、消息M的哈希h、私鑰k,計算s = (h + kx)/r。
  3、將消息M、和簽名{rG, s}發給接收方。
 
公鑰驗證簽名:
  1、接收方收到消息M、以及簽名{rG=(x,y), s}。
  2、根據消息求哈希h。
  3、使用發送方公鑰K計算:hG/s + xK/s,並與rG比較,如相等即驗簽成功。
 
原理如下:
  hG/s + xK/s = hG/s + x(kG)/s = (h+xk)G/s = r(h+xk)G / (h+kx) = rG

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM