数字签名(又称公钥数字签名,英语:Digital Signature)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。
公开密钥加密(英语:Public-key cryptography),也称为非对称加密(英语:asymmetric cryptography),是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密。
使用:
如果任何人使用公钥加密明文,得到的密文可以透过不安全的途径(如网上)发送,只有对应的私钥持有者才可以解密得到明文;其他人即使从网上上窃取到密文及加密公钥,也无法(在数以年计的合理时间内)解密得出明文。
相反,如果某一用户使用他的私钥加密明文,任何人都可以用该用户的公钥解密密文;由于私钥只由该用户自己持有,故可以肯定该文件必定出自于该用户;公众可以验证该用户发布的数据或文件是否完整、中途有否曾被篡改,接收者可信赖这条信息确实来自于该用户,该用户亦无法抵赖,这被称作数字签名,大部分国家已经立法承认数字签名拥有等同传统亲笔签名的法律效力。
那么比特币网络中的数字签名是怎么实现的?
比特币在实现数字签名实际使用的是一种非对称加密算法,椭圆曲线数字签名算法(ECDSA)
用户的密钥对:(d, Q);(d为私钥,Q为公钥)
待签名的信息:M;
签名:Signature(M) = (r, s);
签名过程:
1、根据ECC算法随机生成一个密钥对(k, R), R=(xR, yR)
2、令 r = xR mod n,如果r = 0,则返回步骤1
3、计算 H = Hash(M)
4、按照数据类型转换规则,将H转化为一个big endian的整数e
5、s = k^-1 (e + rd) mod n,若s = 0, 则返回步骤1
6、输出的S =(r,s)即为签名。
验证过程:
1、 计算 H = Hash(M)
2、按照数据类型转换规则,将H转化为一个big endian的整数e
3、计算 u1 = es^-1 mod n, u2 = rs^-1 mod n
4、计算 R = (xR, yR) = u1G + u2Q, 如果R = 零点,则验证该签名无效
5、令 v = xR mod n
6、若 v == r,则签名有效,若 v ≠ r, 则签名无效。
这个是我从这里搬过来的,没看懂!https://www.8btc.com/article/63058
网友评论