全稱 「 Ellipse Curve Cryptography 」 means 「 橢圓 曲線 密碼學 」。html
傳統加密方法大多基於大質數因子分解困難性來實現,ECC則是經過橢圓曲線方程式的性質來產生密鑰。linux
ECC164位的密鑰產生一個安全級,至關於RSA 1024位密鑰提供的保密強度,並且計算量較小,處理速度更快,存儲空間和傳輸帶寬佔用較少。web
應用方面:目前我國居民二代身份證
正在使用 256 位的橢圓曲線密碼,虛擬貨幣比特幣
也選擇ECC做爲加密算法。算法
假設平面直角座標系中有點A(x,y),咱們定義 X= x/z,Y = y/z,Z=z;那麼聯立方程:aX+bY+c1Z =0;安全
aX+bY+c2Z =0 能夠計算出z=0;因此咱們新的座標系中的點能夠表示爲:(X:Y:0);這是橢圓曲線創建的座標系基礎。ide
例如y^2=x^3-10x+12的曲線以下:函數
數學家在這個曲線上定義了一種橢圓曲線的加法,ECC裏面的加法創建在「有限域上的二元三次曲線的點」上,組成一個「有限加法循環羣」。加密
圖a - 兩個不一樣的點相加spa
圖b - 兩個相同的點相加3d
這並非傳統的數學上的加法,運算法則:任意取橢圓曲線上兩點P、Q (若P、Q兩點重合,則作P點的切線)作直線交於橢圓曲線的另外一點R,過R作y軸的平行線交於R’。
咱們規定P+Q=R’。因此很容易理解nP的值,就是P通過n次加法(對P作切線,取得另外一個交點的關於X軸的對稱點)。
有了以上的基礎,咱們才能夠來計算公鑰,產生公鑰的算法其實就是橢圓曲線上的乘法運算:
Q = k * P
上面公式中,P 是橢圓曲線上的一個點,且這個點在比特幣中是固定不變的;k 是咱們的私鑰,
咱們知道私鑰是一個很大的隨機數;而結果 Q 就是咱們產生的公鑰,根據上面的知識,能夠知道公鑰是 k個 P 相加的結果,這個結果仍然是橢圓上的一個點
secp256k1標準經過特別的算法,使得生成曲線的速度比別的曲線快30%。這在移動端等小型設備上是很是重要的。
對於比特幣中的橢圓曲線算法,須要明確知道的是(p,a,b,G,n,h)。p是Fp的模的範圍,比特幣中定義的是:
知足下面公式的全部 座標的集合,就是spec256k1 橢圓曲線:
實際上橢圓曲線是一個散點圖,並非全部實數字x都知足這個曲線,以P=17爲例子(固然了這個數很小),知足公式的(x,y)的圖形:
spec256k1
,它是由 NIST(National Institute of Standards and Technology)這個組織肯定的。
Python 3.6.7 (default, Oct 23 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. # 這裏取一個spec256k1的 P 的例子 >>> p = 115792089237316195423570985008687907853269984665640564039457584007908834671663 # P 能夠肯定一個橢圓,而後再在其中取一個點(x, y) >>> x = 55066263022277343669578718895168534326250603453777594175500187360389116729240 >>> y = 32670510020758816978083085130507043184471273380659243275938904335757337482424 # 驗證 >>> (x**3 + 7) % p - y**2 % p 0
目前橢圓曲線應用的範圍愈來愈廣,在BTC,ETH,EOS,萊特幣,DASH等都有使用。密碼學中把正向計算是很容易的,但若要有效的執行反向則很困難的算法叫作陷門函數。在RSA的內容裏,RSA會隨着因式分解的數字變大而變得越有效率,對於私鑰增加的需求決定了RSA並不能算做一個完美的陷門函數。事實證實在橢圓曲線中若是你有兩個點,一個最初的點乘以K次到達最終點,在你只知道最終點時找到n和最初點是很難的,這就是一個很是棒的trapdoor函數的基礎,最近三十年的研究,數學家尚未找到一個方法證明。密碼學家Lenstra引進了「全球安全(Global Security)」的概念:假設破解一個228字節的RSA祕鑰須要的能量少於煮沸一勺水的能量。那麼破解一個228字節的橢圓曲線祕鑰須要煮沸地球上全部水的能量。若是RSA要達到一個一樣的安全水平,你須要一個2,380字節的祕鑰。就像前面文章中講到的,ECC可以使用較小的資源而產生安全性較高的效果。
筆記參考:
https://www.cnblogs.com/gzhlt/p/10270913.html
https://www.zhihu.com/question/22399196/answer/96016340
https://www.jianshu.com/p/5040d4347c66