看完《数字签名是什么?》的文章后,还是有点稀里糊涂的不懂。有了很多疑问:
于是自己再去各个网站看资料思考,总算是自己弄懂了其中的关系和用处。在这里我写下自己对公钥、私钥以及数字签名的了解。
(建议先看阮一峰老师的文章,看不懂再来看这篇,因为那篇文章里面有很多细节没有提到,而这篇讲的比较详细)
要懂公钥、私钥和数字签名是什么,首先就要先懂公钥和私钥的原则(重要):
所以通过以上原则,我们还要区分“加密”和“认证”的区别:
像原则的第3点,可以通过秘钥来进行“加密”,保护数据的私密性。
原则的第4点,通过成功的秘钥解密,可以认证发送加密数据的身份。
好了,开始说流程了,为了便于区分和理解,人物用中文名。为了容易理解,这里对秘钥也进行了ABC等的命名
张三和翠花在异地,他们之间通过信来交流
张三有一个私钥A,翠花有公钥A(当然公钥A其他人也可以获得)
翠花给张三写信,然后用公钥A加密了,张三收到信后用私钥A把信中加密的信息解密了出来(这时保证了数据的加密,因为只有张三有私钥A,只有私钥A能解密。但是注意,张三不能辨别该信是否是翠花发出的,因为该信用公钥A加密的,而公钥A谁都可以获得)
张三给翠花回信,他决定用“数字签名”的方法:对信件内容进行某种处理(例如Hash函数),生成信件的摘要(digest),然后用私钥A给摘要加密,附在信中一起送出。
翠花收到信后,为了判断是否是张三发出的,她用公钥A解密,得到摘要,然后对信中的内容进行和张三相同的处理(Hash函数)后和解密出来的摘要对比,就可以知道信中的信息是否完整,并且知道这封信是由张三发出的。
这时候隔壁老王出现了,老王用自己的公钥B偷偷替换了翠花电脑里面的公钥A,而翠花却不知道自己的公钥A被人替换。
当老王用自己的私钥B写信并且做成“数字签名”并加密发送给翠花。翠花收到信后用了自己以为是公钥A的秘钥(实际上是老王的公钥B来解密信件,之后翠花对比摘要会发现内容相同,但是自己却不知道该信件是由老王发出的。因为翠花以为自己用的是公钥A来解密信件。能用公钥A解密出的信件只有手持私钥A的张三才能加密,所以翠花理所应当地认为这封信就是张三发出的。
这时候怎么办?自己手持的公钥不安全,很容易遭到替换。而“证书中心”(CA)就是来解决这个问题的。张三先是去“证书中心”为自己的公钥做了认证,然后“证书中心”用自己的私钥C对张三的公钥A以及张三个其他相关信息进行加密,生成“数字证书”。
以后张三每次发送信件给翠花,照例在信件中对信息进行处理(Hash函数)形成摘要,然后用私钥A进行加密做成“数字签名”,以及增加了在信中附上“证书中心”的“数字证书”(现在信件中有:信件的信息、数字签名、数字证书),翠花收到后便用“证书中心”的公钥C解密,里面就有张三的真实公钥A以及其他相关信息。这个时候翠花就可以用这个真实的公钥A去解密信件中的“数字签名”,然后进行内容比对,从而判断出信件信息的完整性以及发信件的人是张三。
在以“证书中心”的公钥C不会被替换的保证前提下,翠花收到的信件如果能用公钥C打开核实里面的信息,那么里面存放的公钥就一定是真实可靠的。这样就不会出现公钥被调换的情况。“证书中心”的数字证书的作用就是传递公钥,保证公钥的真实性。
以上流程都是我个人的思考和理解,如有错误欢迎指出来,感谢!