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