橢圓曲線加密和簽名算法
簡述
橢圓曲線密碼學,簡稱ECC。是一種建立公開加密的算法,也就是非對稱加密。和RSA類似。被公認在給定密鑰長度下最安全的加密算法。應用范圍很廣,主要的三個技術TLS、PGP、SSH都在使用它,特別是以BTC為代表的數字貨幣。
橢圓曲線
橢圓曲線並不是我們高中時學習的橢圓形狀,其名字的由來是應為橢圓曲線的描述方程,類似於計算一個橢圓周長的方程。這里用來加密的 橢圓曲線的定義 是一個特殊情況。
橢圓曲線暫時可以簡單的理解為:
其中:
a和b決定了曲線在坐標系的不同形狀。舉個例子:
當b=1,a的取值從2到-3時,曲線的形狀如下:
特殊曲線:當a=b=0時(左),或a=-3,b=2時(右),這兩條都不是符合標准的曲線。
阿貝爾群
數學上,群是指定義了二元操作運算並且用符號“+”表示的一個集合。則必須滿足以下要求:
封閉性:如果a和b都是群成員,那么a+b也是群成員。
組合性:(a+b)+c=a+(b+c)
單位元:存在確切的一個值可以保證 a+0=0+a=a成立,我們稱之為單位元
逆元:每個成員都有一個相反數:對於任意值a必定存在b使得a+b=0
這樣的群我們稱之為阿貝爾群。另外阿貝爾群還應該滿足交換律a+b=b+a
我們所熟知的在整數范圍內的加法運算(Z,+)就是阿貝爾群
封閉性:a、b屬於整數,a+b也屬於整數
組合性:(a+b)+c=a+(b+c)
單位元:0值就是單位元
逆元:a的逆元就是-a
所以(Z,+)是一個阿貝爾群。
橢圓曲線的加法
假設我們有這樣一條橢圓曲線y2=x3-x,曲線上有兩點P、Q,過P和Q做一條直線,交橢圓曲線於R'點,再過R'點做垂直於X軸的直線,交橢圓曲線於另一點R,我們定義P+Q=R。
當P=Q時候,則是過P點的切線交於橢圓曲線於R',此時R=2P,如圖所示:
當有k個相同的點P相加時,記做kP,如:P+P+P=2P+P=3P,如圖:
橢圓曲線密碼利用上述“運算”中的“橢圓曲線上的離散多數問題”,就像RSA利用“大數質因數分解”一樣。
橢圓曲線上的離散對數問題
離散對數問題:
已知:
橢圓曲線E
橢圓曲線E上的一點G(基點)
橢圓曲線E上的一點xG(x倍的G)
求:
x
這里需要說明一下,若果橢圓曲線上的一點P,存在最小正整數n使得數乘nP=0(無限原點),則稱n是P的階,若n不存在,則P是無限階的。
也就是當給定點P時,我們已知數x求xG是非常簡單的,但反過來已知xG求x就非常困難了,利用離散度數就可以保證橢圓曲線密碼的安全性。
有限域上的橢圓曲線
我們知道橢圓曲線是連續的,並不適合加密;所以我們需要把橢圓曲線定義在有限域上的,把它變成離散的點。
有限域Fp是指對於某個給定的質數P,由0,1,2,3.....P-1組成的P個元素所組成的整數集合中定義的加減乘除運算。
比如當橢圓曲線位於有限域F23上時,記做:
可以理解為左側的值和右側的值除以23的余數相等,此時的函數圖像如圖所示:
如果我們已知曲線上的一點P(3,10),依照加法運算的規則計算2P,3P....結果如圖所示:
當我們已知P(3,10),Q(9,7),求-P,P+Q,2P時,計算過程如下所示:
橢圓曲線加密ECC
考慮K=kG ,其中K、G為橢圓曲線Ep(a,b)上的點,n為G的階(nG=O∞ ),k為小於n的整數。則給定k和G,根據加法法則,計算K很容易但反過來,給定K和G,求k就非常困難。因為實際使用中的ECC原則上把p取得相當大,n也相當大,要把n個解點逐一算出來列成上表是不可能的。其中G稱為基點,k為私鑰,K為公鑰。
加密過程如下:
Alice選定一條橢圓曲線E,並取橢圓曲線上一點作為基點G 假設選定E29(4,20),基點G(13,23) , 基點G的階數n=37
Alice選擇一個私有密鑰k(k<n),並生成公開密鑰K=kG 比如25, K= kG = 25G = (14,6)
Alice將E和點K、G傳給Bob
Bob收到信息后,將待傳輸的明文編碼到上的一點M(編碼方法略),並產生一個隨機整數r(r<n,n為G的階數) 假設r=6 要加密的信息為3,因為M也要在E29(4,20) 所以M=(3,28)
Bob計算點C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
Bob將C1、C2傳給Alice
Alice收到信息后,計算C1-kC2,結果就應該是點M C1-kC2 =(6,12)-25C2 =(6,12)-25*6G =(6,12)-2G =(6,12)-(27,27) =(6,12)+(27,2) =(3,28)
參數要求:
p越大安全性越好,但會導致計算速度變慢,200bit左右可滿足一般安全要求
n應為質數
ECC VS RSA
優點:
安全性能更高
160位ECC與1024位RSA、DSA有相同的安全強度
處理速度更快
在私鑰的處理速度上,ECC遠 比RSA、DSA快得多
帶寬要求更低
存儲空間更小
ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多
缺點:
設計困難,實現復雜
如果序列號設計過短,那么安全性並沒有想象中的完善
橢圓曲線簽名算法
即是ECDSA。
這里我們依然假設私鑰、公鑰分別為k,K。其中K=kG,G為基點。
私鑰簽名:
Alice選擇隨機數r,計算點rG(x, y)。
Alice根據隨機數r、消息M的哈希h、私鑰k,計算s = (h + kx)/r。
Alice將消息M、和簽名{rG, s}發給接收方。
公鑰驗證簽名:
Bob收到消息M、以及簽名{rG=(x,y), s}。
Bob根據消息M,求哈希h。
使用發送方公鑰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
這里關鍵的一點是引入了隨機數r,提高了簽名的安全性,即使同一條消息,只要改變隨機數r,所得到的簽名也會隨之改變。
