本文首发公众号VenusBlockChain,关注公众号后可免费阅读!VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。
1 ECDSA算法
首先,需要设置参数 ( a , b , p , N , G ) (a,b,p,N,G) (a,b,p,N,G)来初始化一椭圆曲线,椭圆曲线方程 y 2 = ( x 3 + a x + b ) m o d p y^2=(x^3+ax+b)modp y2=(x3+ax+b)modp, p p p是模运算的底, N N N是曲线上面点的个数, G G G是曲线上所有点的生成元,也就是一个参考的基点,也可以是曲线上面的任意一点。
然后,生成公钥 p k pk pk和私钥 s k sk sk, s k sk sk是一个随机数,且 s k ∈ Z n ∗ , d < n sk\in Z_n^\ast,d < n sk∈Zn∗,d<n,公钥 p k = G ∗ s k pk=G*{sk} pk=G∗sk。
目前,比特币中的ECDSA签名算法使用的椭圆曲线是secp256k1,其中素数 p = 2 256 − 2 32 − 977 p=2^{256}-2^{32}-977 p=2256−232