昨天学习了关于私钥、公钥、数字签名与数字证书相关的东西。这些加密术语在币圈里面实在是常客,如果不了解的话,就会给我们理解加密货币造成很大的困难。
下面便说下我的理解:
1 私钥与公钥是一对密钥:也就是其中一个用来加密内容,另一个用来解密内容。这一对密钥是依托于非对称算法生成的。(为什么加密解密不用同一个密钥呢?因为同一个密钥没有隐私性,一般非对称密钥都是:私钥自己保存,公钥公开)
2 数字签名用来保护内容的完整性。
3 数字证书代表内容是谁发出的,表示内容的有效性。(数字签名与数字证书这么说起来很抽象,然后我想了一个例子来说明一下)
话说北宋年间,有四个大人物,分别是东邪、西毒、南帝、北丐。由于这四个人相隔甚远,难免要有些书信往来。
某一天,东邪打算给西毒写一封书信,告诉他春节来吃饺子。
西毒这个人生性多疑,喜欢疑神疑鬼。他就想:这封信是不是东邪的原话呢,信件有没有被中间人修改过呢,如果东邪让我元宵节去,我春节就去了,岂不是很尴尬。
第一个问题出现了--即信的内容是否属于东邪?
要解决这个问题,有两种方法:
方法一:东邪和西毒商量一个加密方式(私钥东邪自己保存用来加密,公钥给西毒),然后东邪用私钥加密信件,西毒收到信之后用东邪的公钥解密。如果解密出可读内容,那么信就是东邪的,没有被修改。(弊端就是信件非常长,解密起来就会非常慢,所以后面讲的数字签名不是这个方式。)
方法二:东邪和西毒商量一个加密方式(私钥东邪自己保存用来加密,公钥给西毒),首先东邪给信件拍个照片,再用私钥给照片加密,然后把加密好的照片附加在信的末尾。西毒收到信后,拿出东邪的公钥解密照片之后就知道信是否被修改了。这种方式只需要加密照片,而不用加密整篇文字,很是方便,于是信就变成了下图这样。(其实是对内容进行了哈希运算,照片只为了方便理解)
西毒觉得第二种方法(数字签名)很好,就把这个方案推广给大家。以后写信只要在信件末尾加上这封信的加密照片,这样通过解密照片就可以判断这封信是否被修改过了。
然后四个大人物每人生成了一对公钥私钥。这样四个人就有了四对钥匙。每个人保留自己的私钥,并把公钥公开给别人,让别人用来解密,这样每个人的钥匙便如图所示:
东邪给西毒写信过程如下:(数字签名的普通防伪版)
第一步:东邪写了一封明文信件。
第二步:东邪给信拍个照片(求个哈希值),把照片用自己的私钥加密,附加在信的末尾,把信发出去。
第三步:西毒收到东邪来信,需要验证信的真伪,然后去自家的钥匙柜,找到东邪的公钥。
第四步:西毒用东邪的公钥,解密东邪的加密照片。解密出来后判断信是否被修改。
第五步:解密后信和照片中的一样,也就是没有被修改,西毒很高兴。
又有一个问题,西毒家里面的钥匙柜不够用了,它保存了东邪的公钥、南帝的公钥、北丐的公钥。以后还会有更多的人的公钥需要保存,每次找也非常麻烦。这时候数字证书就可以解决问题了。更可怕的是,如果有一天西毒的钥匙柜子里面的“东邪公钥”被郭靖偷偷的替换了,那就麻烦了。这就导致西毒以为公钥是东邪的,其实公钥变成郭靖的了,那以后郭靖就可以用自己的私钥加密内容和西毒通信了,西毒还以为对方是东邪,九阴真经可能因为通信过程的不安全,导致被偷掉了。
这时候武林出现一个机构,叫做证书机构。它的作用就是记录大家的信息(比如记录东邪的姓名、年龄,当然更重要的是它的公钥)。以后大家写完了信,都要去证书机构认证一下。这样有什么作用呢,首先每个人只需要知道证书机构的公钥就可以了。而且也能证明信件来自真的东邪,而不是冒充的郭靖。
证书机构有自己的公钥和私钥(公钥整个武林公开,所以整个武林中人,人手一把。私钥证书机构自己保存,用来给大家发证书,证书和签名类似,也是附加在信的末尾的一段内容)
东邪给西毒写信(数字签名+数字证书的 终极防伪版)
第一步:东邪写了一封明文信件。
第二步:东邪给信拍个照片(求个哈希值),把照片用自己的私钥加密,附加在信的末尾。
第三步:东邪去证书机构,将自己的姓名和公钥,给证书机构。
第四步:证书机构用自己的私钥将东邪的个人信息加密好,然后附加在东邪信的后面,东邪的信就变成这样了。
第五步:西毒收到东邪来信,需要验证信的真伪,然后去自家的钥匙柜,现在钥匙柜里面只有证书机构的公钥了。
第六步:西毒用证书机构的公钥解密证书,得到了东邪的个人信息(东邪的姓名和东邪的公钥),证明了这封信来自东邪,而非冒充的郭靖。
第七步:西毒用从证书中解密出来的东邪公钥,去解密签名。解密签名之后,得到照片。
第八步:将信的内容去对比照片,发现相同,这就确定了信没有被修改。而且第六步也确定了这封信确实来自东邪。这次西毒真的很高兴。
这就是我学习到的软件的数字签名和数字证书机制,如果有不对的地方,希望各位大佬指出。