如何使用ECDSA算法生成數(shù)字簽名
現(xiàn)在我們經(jīng)常在區(qū)塊鏈中看到數(shù)字簽名這一術(shù)語(yǔ)是非常常見的。在發(fā)送交易時(shí),無(wú)論是比特幣、Ethereum、Hyperledger Fabric還是任何其他平臺(tái),都在使用數(shù)字簽名進(jìn)行簽名和驗(yàn)證。
區(qū)塊鏈中的數(shù)字簽名
ECDSA算法
從A點(diǎn)到B點(diǎn)在橢圓曲線上的切線
根據(jù)wiki ECDSA為:
橢圓曲線密碼體制是一種基于有限域橢圓曲線代數(shù)結(jié)構(gòu)的公鑰密碼體制。與非對(duì)稱密碼學(xué)相比,ECC需要更小的密鑰來(lái)提供同等的安全性。橢圓曲線適用于密鑰協(xié)議、數(shù)字簽名、偽隨機(jī)發(fā)生器等任務(wù)。通過(guò)將密鑰協(xié)議與對(duì)稱加密方案相結(jié)合,它們可以間接用于加密。它們也被用于一些基于橢圓曲線的整數(shù)分解算法中,這些算法在密碼學(xué)中有廣泛的應(yīng)用,例如Lenstra橢圓曲線分解。
簡(jiǎn)單來(lái)說(shuō),ECDSA算法可以使用公鑰密碼學(xué)方法生成公鑰/私鑰集合,用于簽名和驗(yàn)證簽名。讓我們看看公鑰密碼學(xué)是什么樣子的。
公鑰和私鑰由加密算法生成,如RSA,ECDSA。發(fā)件人通過(guò)收件人公鑰加密郵件并發(fā)送。在另一端,收件人通過(guò)自己的私鑰解密消息并獲取消息。
現(xiàn)在回過(guò)頭來(lái)看看ECDSA,利用橢圓曲線在給定的源點(diǎn)G上畫切線,生成密鑰。p是一個(gè)具有很大值的有限模。
橢圓曲線上的切線
橢圓曲線上的切線定義為
Y2mod p=(x3+7)mod p
G:來(lái)源點(diǎn)
p:為橢圓曲線定義范圍。
生成數(shù)字簽名的私鑰和公鑰:
從一個(gè)隨機(jī)生成的數(shù)字為dA的私鑰開始,我們將它乘以曲線上的一個(gè)預(yù)定點(diǎn),稱為生成點(diǎn)G,在曲線的另一個(gè)地方產(chǎn)生另一個(gè)點(diǎn),也就是對(duì)應(yīng)的公鑰Qa。生成點(diǎn)被指定為secp256k1標(biāo)準(zhǔn)的一部分,對(duì)所有鍵都是相同的。
從私鑰dA生成公鑰Qa
使用ECDSA算法生成數(shù)字簽名
利用私鑰dA生成簽名
驗(yàn)證簽名
驗(yàn)證是簽名生成函數(shù)的逆值,使用R、S值和公鑰計(jì)算一個(gè)值P,這是橢圓曲線上的一個(gè)點(diǎn)(創(chuàng)建簽名時(shí)使用的臨時(shí)公鑰P)。
總結(jié)
數(shù)字簽名可以使用自己的私鑰簽名,并且可以使用公鑰獨(dú)立進(jìn)行驗(yàn)證。公開簽名在任何情況下都不會(huì)導(dǎo)致獲取用戶的私鑰。因此,ECDSA算法在保證私鑰安全的同時(shí)生成簽名。