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
0

ECC (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

常見用於:TLS PGP SSH 和部分加密貨幣

(以下範例需使用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?