ECDSA & ECDH
ECDSA & ECDH
有三個類似名詞為ECC、ECDH、ECDSA,第一個是Elliptic Curve Cryptography的縮寫,而後面兩個都是基於ECC的加密演算法
(1)相同密鑰長度下,安全性能更高,如160位ECC已經與1024位RSA、DSA有相同的安全強度。
(2)計算量小,處理速度快,在私鑰的處理速度上(解密和簽名),ECC遠 比RSA、DSA快得多。
(3)存儲空間占用小 ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多, 所以占用的存儲空間小得多。 ECDH和ECDSA產生公私鑰的方式都相同橢圓曲線公式類似如下
相等於
相等於
其中 p 是 2²⁵⁶-2³²-2⁹-2⁸-2⁷-2⁶-2⁴-1,是一個很大的質數
例如以下範例座標 (x, y) 就是這曲線中的一點
p = 2**256 - 2**32 - 2**9 - 2**8 - 2**7 - 2**6 - 2**4 - 1
x = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y = 32670510020758816978083085130507043184471273380659243275938904335757337482424
(x**3 + 7 - y**2) % p
0ECC (Elliptic curve cryptography)
列出可用OpenSSL可用曲線
以下網站可看到各曲線的Base Point
https://safecurves.cr.yp.to/base.html
曲線方程式 Ep(a, b) 為以下型態:
ECDH
用途:
ECDH可視為ECC + DH (Diffie-Hellman)
Ex:
結果如下:
> 以下倆倆為一組,因用A之ecdh與B之public key 算出之結果與用 B之ecdh 與A之public key 相同

但你可能會問兩個人算出共同密鑰可以做什麼?
通常過程是:兩人只要把自己的public key給對方來算出secret key,之後用這把secret去做AES之類加密,即可在不傳遞真正密鑰的情況下只有兩人可以解密
原理:

ECDSA(The Elliptic Curve Digital Signature Algorithm)
ECDSA也可視為ECC+DSA(Digital Signature Algorithm)
視覺化網站:https://cdn.rawgit.com/andreacorbellini/ecc/920b29a/interactive/reals-add.html
(以下範例需使用python2)
另一個範例使用jsrsasign模組
https://www.npmjs.com/package/jsrsasign
#或是可使用Node.js的Crypto模組之ECDH來產生相同曲線之公私鑰
然後使用 jsrsasign 的Signature函式,並用同樣之secp256k1 curve來進行sign的動作
secp256k1
為比特幣私鑰產生公鑰時所使用的曲線
算出來後其結構可分為02或04 後面接上 x 在接上 y
02開頭為compress(只有x座標前面接上02因為有了x就可以代數進去方程式求得y,可以減少字串長度)
http://www.secg.org/sec2-v2.pdf
>

Last updated
Was this helpful?