公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS

作者: yoyoso

https://my.oschina.net/ioslighter/blog/359207

对公钥和私钥有点稀里糊涂的,搜索了一些资料,作一些整理吧,先看这个:

加密--公钥

看了这个也许会对私钥用于签名不解,其实它等同于用私钥加密,而公钥验证就是用公钥解密,但是不能用于保密信息。因为公钥是公开的。

再来一个:

1)公钥和私钥成对出现

公钥和私钥都可以用来加密或解密---只要能保证用A加密,就用B解密就行。至于A是公钥还是私钥,其实可以根据不同的用途而定。

一、公钥加密,私钥解密——用于保密信息

如果你想把某个消息秘密的发给某人,那你就可以用他的公钥加密。因为只有他知道他的私钥,所以这消息也就只有他本人能解开,于是你就达到了你的目的。

二、私钥加密,公钥解密——用于数字签名

严格来说,这里说的私钥加密是用私钥对摘要进行加密,接收方可以用公钥解密,解密成功则可验证信息的发送者是私钥的拥有人。因为公钥是公开的,所以起不了保密信息的作用。

如果你想发布一个公告,需要一个手段来证明这确实是你本人发的,而不是其他人冒名顶替的。那你可以在你的公告开头或者结尾附上一段用你的私钥加密的内容(例如说就是你公告正文的一段话),那所有其他人都可以用你的公钥来解密,看看解出来的内容是不是相符的。如果是的话,那就说明这公告确实是你发的---因为只有你的公钥才能解开你的私钥加密的内容,而其他人是拿不到你的私钥的。

但这仅仅做到了数字签名的第一部分:证明这消息是你发的。数字签名还有第二部分:证明这消息内容确实是完整的---也就是没有经过任何形式的篡改(包括替换、缺少、新增)。

要做到数字签名的第二部分,需要做的是:把你公告的原文做一次哈希(md5或者sha1都行),然后用你的私钥加密这段哈希作为签名,并一起公布出去。当别人收到你的公告时,他可以用你的公钥解密你的签名,如果解密成功,并且解密出来的哈希值确实和你的公告原文一致,那么他就证明了两点:这消息确实是你发的,而且内容是完整的。

三、对公钥进行认证——数字证书

黑客可以替换你的公钥,然后用他的私钥做数字签名给你发信息,而你用黑客伪造的公钥能成功验证,会让你误认为消息来源没变。

这种情况下需要CA(证书中心certificate authority)对公钥进行认证。证书中心用自己的私钥,对信息发送者的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。

这个可以参考这篇文章:数字签名是什么? ,讲得非常好,图示很清楚。

通过在实际的使用中,公钥也不会单独出现,总是以数字证书的方式出现,以确保公钥的安全性和有效性。

四、对称与非对称算法

对称算法是说,加密过程和解密过程是对称的,用一个 密钥加密,可以用同一个密钥解密。使用公私钥的算法是非对称加密算法。

HTTPS一般使用了以下算法,其中就包括非对称和对称加密算法:

五、HTTPS的工作原理

往期推荐:

浅谈 Linux 下 Makefile

Git最佳实践:基本操作和分支管理

一分钟搞懂开源许可协议

并发编程:原子操作atomic

通俗理解TCP的三次握手

公钥、私钥、数字签名、数字证书、对称与非对称算法、HTTPS

码农code之路,一个值得关注的公众号!

上一篇:在.NET中操作数字证书(新手教程)


下一篇:Java加密技术(八)——数字证书