最近項目中用到了ECC的相關算法,惡補了一下相關知識
ECC:Elliptic Curves Cryptography,橢圓曲線密碼編碼學
ECDSA:用於數字簽名,是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中採取的算法爲ECC,最後簽名出來的值也是分爲r,s。
ECDH:是基於ECC(Elliptic Curve Cryptosystems,橢圓曲線密碼體制,參看ECC)的DH( Diffie-Hellman)密鑰交換算法。交
重點說一下,ECDH用途:
由於通過ECDH,雙方可以在不共享任何祕密的前提下協商出一個共享祕密,因此,ECDH廣泛用於協議之中,通過ECDH得到對稱加密密鑰。如TLS中的*_ECDH_*密碼套件。使用DH算法的協議,都可以升級到ECDH算法。ECDH具有ECC的高強度、短密鑰長度、計算速度快等優點。
密鑰交換過程:
假設密鑰交換雙方爲Alice、Bob,其有共享曲線參數(橢圓曲線E、階N、基點G)。
1.Alice生成隨機整數a,計算A=a*G。Bob生成隨機整數b,計算B=b*G。
2.Alice將A傳遞給Bob。A的傳遞可以公開,即攻擊者可以獲取A。由於橢圓曲線的離散對數問題是難題,所以攻擊者不可以通過A、G計算出a。Bob將B傳遞給Alice。同理,B的傳遞可以公開。
3.Bob收到Alice傳遞的A,計算Q=b*A
4.Alice收到Bob傳遞的B,計算Q‘=a*B
總結:
Alice、Bob雙方即得Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q' (交換律和結合律),即雙方得到一致的密鑰Q。
參考資料:ECDH