国际惯例:本文截取自
http://www.jianshu.com/p/1394a7d83cfa
对称加密
A发送给B加密信息和加密规则
B收到信息后使用加密规则解密加密信息
C截取到加密信息和加密规则
C使用加密规则解密加密信息
C使用加密规则加密信息伪装成A发送信息给B
非对称加密
公钥可以验证私钥签名的信息
私钥可以解密公钥加密的信息
A有自己的私钥A和B的公钥B
B有自己的私钥B和A的公钥A
A使用自己的私钥签名信息,使用B的公钥加密信息,把两段信息一同发送给B
B使用A的公钥验证A发送过来的签名信息确保信息是由A发送,使用自己的私钥解密A发送过来的加密信息
C只有A的公钥和B的公钥
C伪装成A发送给B的签名信息,B使用A的公钥验证不通过,所以C无法伪装成A
C截取到A发送给B的加密信息,因为没有B的私钥,无法解密
1,数字签名机制
数字签名是现代计算机密码学的一个重要概念,比特币的数字签名是基于不对称加密算法来完成的,具体示例如下:假如小明想向小红发送一条信息,但是这条信息可能被小张监听到,于是他俩想到一个好办法,就是通过一套商量好的加密规则,将信息加密,这样即使小张监听到内容,由于他不知道加密规则,还是破译不了这条信息内容,这叫对称加密。
但是对称加密有个明显缺点是,小明需要把加密规则告知小红,小张要是能截取到加密规则,那以后小明和小红的信息交流就可以被破解,并且小张也可以假冒小明向小红发送假冒信息,因此我们需要另一套通讯规则来避免这种情况。
非对称加密可以有效解决上述问题。首先,小明需要一对公钥和私钥,公钥和私钥是成对存在的,公钥由私钥通过一个不可逆的数学公式生成,公钥和私钥遵循以下规则:
1,用公钥加密的信息,可以用私钥解密,但反过来不可以;
2,用私钥签名的信息,可以用公钥验证,即验证签名;
有了上述规则我们就可以设计如下的信息交互场景:
我们从上图可以看出,在这种情况下,整个系统没有人可以假冒小明发信息,因为只有小明知道自己的秘钥,这种设计可以有效保证发信人的不被恶意伪冒。
当然,这套机制也可以进行加密的信息传输:
以上就是数字签名及不对称加密的主要内容了,两者配合使用,可以保证交易的安全性,而签名算法的大概原理,可以用下面一个简单的数学例子来说明:
我们对两个数求和,比如2+8=10,这个结果只需一次运算就可以验证,但是由10推理出2和8就相对困难了,因为有很多种可能性。这说明我们可以找出一个不可逆或很难逆向求解的数学算法,用这个算法来实现来非对称加密。
2,数字指纹
假如小明发送信息给小红,小红如何验证这条信息没有被小张截取后篡改过呢?小明想了个聪明的办法,他事先把发送的信息通过一些变换,生成了一段字符串,原始信息要是被篡改,那这段字符串也会发生很大变化,随后将两段报文都发送给小红。小红接到后先将接受到的信息进行相同变换,得到一个字符串,再将该字符串和小明生成的字符串比较,如果相等,就说明该条信息没有被篡改过。流程如下:
1,小明将发送的信息通过一个算法变换,得出一个指纹字符串。
2,将该信息和对应的指纹字符串发送给小红。
3,小红提取出该信息,并进行相同变换,得出第二个指纹字符串。
4,小红通过对比两个字符串,即可得出信息是否被篡改过。
我们将上述过程称为数字指纹技术,这种技术被广泛用于比特币交易系统中,常见的数字指纹算法有MD5/SHA1/SHA256等,注意数字指纹也是不可逆的,即不可能通过指纹字符串逆推出原始信息。