如何使用ECDSA算法生成数字签名
来源:电子发烧友 作者:华强电子网 时间:2019-01-23 18:47
现在我们经常在区块链中看到数字签名这一术语是非常常见的。在发送交易时,无论是比特币、Ethereum、Hyperledger Fabric还是任何其他平台,都在使用数字签名进行签名和验证。
区块链中的数字签名
ECDSA算法
从A点到B点在椭圆曲线上的切线
根据wiki ECDSA为:
椭圆曲线密码体制是一种基于有限域椭圆曲线代数结构的公钥密码体制。与非对称密码学相比,ECC需要更小的密钥来提供同等的安全性。椭圆曲线适用于密钥协议、数字签名、伪随机发生器等任务。通过将密钥协议与对称加密方案相结合,它们可以间接用于加密。它们也被用于一些基于椭圆曲线的整数分解算法中,这些算法在密码学中有广泛的应用,例如Lenstra椭圆曲线分解。
简单来说,ECDSA算法可以使用公钥密码学方法生成公钥/私钥集合,用于签名和验证签名。让我们看看公钥密码学是什么样子的。
公钥和私钥由加密算法生成,如RSA,ECDSA。发件人通过收件人公钥加密邮件并发送。在另一端,收件人通过自己的私钥解密消息并获取消息。
现在回过头来看看ECDSA,利用椭圆曲线在给定的源点G上画切线,生成密钥。p是一个具有很大值的有限模。
椭圆曲线上的切线
椭圆曲线上的切线定义为
Y²mod p=(x³+7)mod p
G:来源点
p:为椭圆曲线定义范围。
生成数字签名的私钥和公钥:
从一个随机生成的数字为dA的私钥开始,我们将它乘以曲线上的一个预定点,称为生成点G,在曲线的另一个地方产生另一个点,也就是对应的公钥Qa。生成点被指定为secp256k1标准的一部分,对所有键都是相同的。
从私钥dA生成公钥Qa
使用ECDSA算法生成数字签名
利用私钥dA生成签名
验证签名
验证是签名生成函数的逆值,使用R、S值和公钥计算一个值P,这是椭圆曲线上的一个点(创建签名时使用的临时公钥P)。
总结
数字签名可以使用自己的私钥签名,并且可以使用公钥独立进行验证。公开签名在任何情况下都不会导致获取用户的私钥。因此,ECDSA算法在保证私钥安全的同时生成签名。