需要注意的是第三步s的计算是数值计算,利用随机数隐藏私钥,并非哈希或椭圆曲线乘法这种单向性的运算。因此每次签名随机数r必须更换,否则对不同信息用相同的随机数签名就可以推算出私钥,而且随机数r的质量将影响私钥的保密性。 1.3.2 公钥验签 验签是通过公钥K(x',y')、消息哈希h和签名值(Rx,s)来推算签名值是否由公钥K对应的私钥k签名。验签的过程为:
公钥验签的原理是用公钥、签名和哈希值构造出算法,使计算结果能回到原来选取的随机数上: R’ = h * G(x,y) / s + Rx * K(x',y') / s = h * G / s + Rx * (k * G) / s = (h + k * Rx)G / s = (h + k * Rx)G * (r / (h + k * Rx)) = r * G 因此验签是否成功的标志是R'x和Rx是否相同。 这里都是最简化的推导方式,没有把求模运算和具体的椭圆曲线加法和乘法等涉及到的运算考虑进去,实际计算中关于数值的计算要求模,因此最后R’可能算出的是R的对称点,而对称点的y轴坐标不同但是x轴相同。还有,数值除法也并不是常规的运算,而是将除数转换成模逆元再做乘法。 2.加密与解密非对称加密的作用是将信息通过公钥加密传递给私钥持有者。非对称加密和签名相反,信息是经过隐藏的,发送方也并不和身份绑定,主要的功能是传输信息而不是确定身份。非对称加密的效率比对称加密低很多,主要的优势是接收方不需要将秘钥通过交换协议或者直接传输给信息发送方。和签名类似,非对称加密也有RSA和椭圆曲线的方法。加密同样利用算法的单向性,使消息和随机数被隐藏起来,然后用私钥计算将加密的消息提取出来。
如图所示,蓝线为签名所需要的数据,经过单向门的数据可被隐藏,未经过单向门的数据需要小心处理;红线是验签的数据,这些数据是要传给解密者或者解密者本身持有的。解密流程中私钥为解密方单独持有,随机数和消息由加密方生成和提供。 2.1 公钥加密 加密也用到单向门的特性将随机数隐藏,具体流程为:
加密中编码的方式有很多种,比如用M点做对称加密的密钥,然后将用该密钥加密后的信息一起发送给接收方,接收方用私钥解密出M后,再用M解密对称加密的信息。 (责任编辑:admin1) |