趣图了解Linux中公钥和私钥的区别以及关系
导读:Linux系统上非对称性加密需要用到公钥、私钥。也常涉及到数字签名、数字证书、CA证书等概念。本文通过有趣的海绵宝宝和它小伙伴故事搭配有趣的图片形式来阐述这些概念,希望能帮助读者更简单易懂地理解这些概念及知识点。
片段1. 海绵宝宝有两把钥匙,一把是海绵宝宝的公钥,另一把是海绵宝宝的私钥。

片段2. 海绵宝宝去钥匙铺通过打造复制了多把相同的公钥并送给他好朋友派大星和章鱼哥每人一把。

片段3. 派大星要给海绵宝宝写一封秘密的信。为了防止信件被别人截取并看到内容信息。它决定写完信后用海绵宝宝给的公钥对信的内容进行加密,加密后的信内容只有通过海绵宝宝的私钥才能解开。通过这种方式就可以达到保密的效果。

片段4. 海绵宝宝收到信后,用它自己的私钥对信进行解密,就能看到了信件内容。这封信就是安全的,即使落在别人手里如果没有海绵宝宝的私钥是无法对信内容进行解密的。

片段5. 海绵宝宝给派大星回信,决定采用”数字签名”。它写完后的信息内容采用单向Hash函数,生成信件的摘要。
- 数字签名:又称“公钥数字签名“,是一种类似写在纸上的普通的物理签名但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。数字签名是非对称密钥加密技术与数字摘要技术的应用
- 数字摘要:指将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单向Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。

片段6. 然后,海绵宝宝使用它自己的私钥对这个摘要进行加密,生成”数字签名”。

片段7. 海绵宝宝将这个签名,附在信件下面,一起发给派大星。

片段8. 派大星收到信件后,取下数字签名,用海绵宝宝的公钥进行解密,得到信件的摘要。由此证明,这封信确实是海绵宝宝发出的。

片段9. 派大星再对信件本身使用相同的单向Hash函数,将得到的结果与刚才解密得到的摘要进行比较。如果两者一致,就证明这封内容没有被别人修改过。

片段10. 特殊情况出现了,章鱼哥想欺骗派大星,他偷偷自己生成的“章鱼哥公钥”换走了派大星的“海绵宝宝公钥”。此时,被调包后的派大星实际拥有的是“章鱼哥的公钥,但是它并未察觉。因此,章鱼哥就可以冒充海绵宝宝,用自己的私钥做成”数字签名”,写信给派大星,让派大星用假的海绵宝宝公钥进行解密,派大星由于解密很顺利所以就以为信是由海绵宝宝所写。

片段11. 后来,派大星越来越觉得不对劲,发现自己无法确定自己在使用的公钥是否真的属于海绵宝宝的。于是它想到了一个办法:要求海绵宝宝去找”证书中心”(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对海绵宝宝的公钥和一些相关信息一起加密,生成”数字证书”。

片段12. 海绵宝宝拿到数字证书以后,就可以放心了。以后再给派大星写信,只要在签名的同时,再附上数字证书就行了。

片段13. 派大星收信后,用CA的公钥解开数字证书就可以拿到海绵宝宝真实的公钥了,然后使用海绵宝宝的公钥重复第9步操作对数字签名进行验证,就能证明信是否真的是海绵宝宝亲笔所写。

故事的总结:
- 首先生成公钥和私钥,私钥自己保存。公钥给需要向你发送加密信息文件的接受方。
- 接受方通过公钥对发送给你的信息进行加密,这样可以保证信息的安全性(在密文暴露的情况下,如果你的私钥不被他人取得,加密的信息还是无法被解密泄露的)
- 你也可以通过生成“数字证书”来证明信是由你写的。数字证书是用单向Hash函数对新的内容生成一段加密摘要,再通过私钥对该端摘要进行加密而成。
- 在发送信件的时候将数字证书信件内容一起发送给接受方,接受方即可通过公钥对数字证书进行解密取得摘要,并再用单向Hash函数对信内容进行生成摘要。将两段摘要进行匹配则可知道信的内容是否被修改过。
- 但是有一种特殊的情况,既是对象根本不能确定其手上的公钥是否就是你给的公钥。这个时候就需要你到证书中心做一件特殊的事情,证书中心会用其私钥将你自己的信息、公钥等进行加密生成一个数字证书。
- 这样当你写信的时候在附上自己数字签名的同时也将证书中心颁发的数字证书一起带上。对方可以先通过CA公开的公钥对数字证书进行解密,得到你的公钥。再使用公钥对你的数字签名进行解密得到数字摘要。再通过与单向Hash信件内容的数字摘要对比就可确保公钥是你的公钥,信是你写的且内容未被修改!