公鑰加密,也稱非對稱加密.是現代網絡安全或者網絡信任鏈的基礎.公鑰加密最大的特徵就是通訊雙方各有一對公私鑰,每一個人保存本身的私鑰,公開本身的公鑰.這樣作的好處是不怕通訊線路被竊聽,由於攻擊者拿到公鑰是沒法解出密文的.公私鑰的基本使用場景有兩種: 假設通訊雙方叫Tom(公鑰A,私鑰a)和Bob(公鑰B,私鑰b).html
整個過程當中,即便竊聽者拿到密文m,兩我的的公鑰A,B都沒什麼用,沒法解密出任何東西.事實上,只有擁有私鑰b的人,才能解密出這份信息.換個角度來講,每一個人均可以擁有Bob的公鑰B,也就是說,每一個人均可以創造一份只有Bob可使用或者說只對Bob有效的信息.算法
這裏主要的目的不是解密,而是對這份文件的來源驗證,證實它確定是由Tom發出的聲明.即便文件被惡意篡改,那麼此時再拿公鑰A解密,就是無效的,由此可證實信息被改動過了,並非Tom原來的文件.用這種方式使用公私鑰能夠證實信息的來源而且有不能否定的特性.安全
以上是使用公鑰加密算法的基礎場景,但事實上用上述方法進行通訊還遠遠不夠,例如須要提升加密速度,須要先對文件進行hash;再如不能抵禦中間人攻擊,(即獲取的公鑰不必定是正確的)須要引入證書.網絡
通常來講,橢圓曲線能夠用下列方程式表示,a,b,c,d爲係數(a≠0,ax^3+bx^2+cx+d=0沒有重根)post
E:y^2=ax^3+bx^2+cx+d 例如,當a=1,b=0,c=-2,d=4時,所獲得的橢圓曲線爲:性能
E_1:y^2=x^3-2x+4 橢圓曲線下圖所示。網站
羣是一種代數結構,由一個集合以及一個二元運算所組成,已知集合和運算(G,*)若是是羣則必須知足以下要求:編碼
定義橢圓曲線上的加法。 如今有橢圓曲線y^2 = x ^ 3 - x,曲線上的點P和Q。過P和Q作一條直線,交橢圓曲線爲點R',再過R'點作垂直於X軸的直線,交曲線另外一點爲R,定義P + Q = R。以下圖所示。加密
若P=Q,則爲過P點的切線交於橢圓曲線爲R'。以下圖所示。設計
這樣,稱R = 2P。相似的,3P = P + P + P = P + 2P = P + R。也就是說,當給定點P時,「已知數x求點xG的運算」不難,由於有加法的性質,運算起來能夠比較快。但反過來,「已知點xG求x的問題」則很是困難,由於只能遍歷每個x作運算。這就是橢圓曲線密碼中所利用的「橢圓曲線上的離散對數問題」。
要想使這個運算知足阿貝爾羣的性質,咱們還要引入一個無窮遠點O,能夠把它理解爲平行直線的交點(若是感受難以理解,請參考無窮遠點的定義),咱們把這個O點做爲單位元。(方便理解,你能夠當作全部平行於y軸的直線交於O點)。
橢圓曲線上的加法爲一個阿貝爾羣
橢圓曲線密碼利用了上述「運算」中的「橢圓曲線上的離散對數問題」的複雜度,就像RSA利用了「大數質因數分解」的複雜度,以及EIGamal密碼的Diffie-Hellman密鑰交換利用了「有限域上的離散對數問題」的複雜度同樣
橢圓曲線上的離散對數問題: 已知 橢圓曲線E 橢圓曲線E上一點G(基點) 橢圓曲線E上的一點xG(x倍的G) 求解 x 這個問題的難度保證了橢圓曲線密碼的安全性。
考慮K=kG ,其中K、G爲橢圓曲線Ep(a,b)上的點,n爲G的階(nG=O∞ ),k爲小於n的整數。則給定k和G,根據加法法則,計算K很容易但反過來,給定K和G,求k就很是困難。由於實際使用中的ECC原則上把p取得至關大,n也至關大,要把n個解點逐一算出來列成上表是不可能的。這就是橢圓曲線加密算法的數學依據點G稱爲基點(base point)k(k<n)爲私有密鑰(privte key)K爲公開密鑰(public key)
1.Alice選定一條橢圓曲線E,並取橢圓曲線上一點做爲基點G 假設選定E29(4,20),基點G(13,23) , 基點G的階數n=37
2.Alice選擇一個私有密鑰k(k<n),並生成公開密鑰K=kG 好比25, K= kG = 25G = (14,6)
3.Alice將E和點K、G傳給Bob
4.Bob收到信息後,將待傳輸的明文編碼到上的一點M(編碼方法略),併產生一個隨機整數r(r<n,n爲G的階數) 假設r=6 要加密的信息爲3,由於M也要在E29(4,20) 因此M=(3,28)
5.Bob計算點C1=M+rK和C2=rG C1= M+6K= M+625G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)
6.Bob將C一、C2傳給Alice
7.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)
數學原來上能解密是由於:C1-kC2=M+rK-krG=M+rkG-krG-M
一般將Fp上的一條橢圓曲線描述爲T=(p,a,b,G,n,h)p、a、b肯定一條橢圓曲線(p爲質數,(mod p)運算)G爲基點,n爲點G的階,h是橢圓曲線上全部點的個數m與n相除的商的整數部分
參量選擇要求:
p越大安全性越好,但會致使計算速度變慢 200-bit左右可知足通常安全要求 n應爲質數 h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20) 4a3+27b2≠0 (mod p)
p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F= 2^256 − 2^32 − 2^9 − 2^8 − 2^7 − 2^6 − 2^4 − 1
a = 0, b = 7
G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
h = 01
優勢
安全性能更高
160位ECC與1024位RSA、DSA有相同的安全強度
處理速度更快
在私鑰的處理速度上,ECC遠 比RSA、DSA快得多
帶寬要求更低
存儲空間更小
ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多
缺點
設計困難,實現複雜
若是序列號設計太短,那麼安全性並無想象中的完善
參考資料: