1 背景
假设,目前,我们(简称A)想向心仪的对象(简称B)偷偷发送告白消息(LOVE),但是不想其他人知道🤫,那么就需要加密技术登场!
2 加密
(1)对称加密
那么我们可以通过比较简单的加密方式,比如所有字母后移一位,把“LOVE”转为“MPWF”发送过去,这样其他人就不能一眼看出来我想发啥消息🤨。
即: A ——对称加密——> B
问题是,这种加密方式加密和解密是同一种密钥,别人太容易破解了,所以需要更厉害的加密方式才行👻!
(2)非对称加密
既然是想给B发消息,那我希望这个消息只有B能解析出来,所以让B创造了一套只有她自己能理解的加密方式,然后让她把加密方式(公钥)发给我。
即: B ——公钥——> A , A化身为A(B公钥)
我用B的公钥加密“LOVE”,再发给她,那就只有她自己能解密出来了!这下她终于能明白我的心意了~🤩
即: A(B公钥)——密文—— > B
B(B私钥)解析密文,得到“LOVE”
但是!这时候突然出现了一个第三者C(比如网络黑客),他想插一脚进来😠
C呢,先是截获了B发给我的公钥,然后截获了我要发给B的“LOVE”,他气不过,所以用B的公钥,加密“HATE”发给B!👿
啊啊啊啊,这样我的心上人就会误解我的意思!这个讨厌的C,不仅窃听消息,还篡改我的消息,天理不容!🤬
即:B ——公钥—— > C
A(B公钥)——密文(LOVE)——> C
C(B公钥)——密文(HATE)——> B
B(B私钥)解析密文,得到“HATE”
问题显而易见,我需要防止C的偷听,也要防止他冒充我,让B知道告白信息是我发给她的,而不是其他人😤!
3 数字签名(假设公钥传递无误,不会被拦截更改)
说起防止冒充,那就不得不提我们古老的手写签名了!
所以我也研究出一套全世界绝无仅有,属于自己的加密方式,并把我的公钥发送给B,
即:A ——公钥——B,这样B也变成了B(A公钥)
我再用一套Hash算法把消息“LOVE”转换一下,得到复杂的哈希值,这里称为“摘要”吧。然后用我的私钥加密摘要(因为私钥只有我自己有,所以这里相当于做了数字签名),再用B的公钥加密“LOVE”,一起发送给B,B收到消息后,用我的公钥解析Hash值,用自己的私钥解析出内容“LOVE”,再用同样的Hash算法得到“LOVE”的哈希值,对比两个摘要的哈希值,如果一致,就说明消息没有被篡改!
即:A(B公钥)——摘要+密文(LOVE)——B(A公钥)
B解析摘要,拿到A生成的hash值,解析密文,根据密文生成B的hash值,对比hash值。
这样,即便C拦截了信息,并修改了内容,但是B用A公钥解析出的消息和摘要对不上,也会知道消息已被篡改或不是A发送的消息,而丢弃该消息,要求我本人重发😏。
不过,这里忽略了一个很重要的前提,那就是互相传递公钥的时候怎么保证不会被C截获呢?
4 数字证书
有一些权威机构(称为CA机构),他们的公钥被嵌入在一些官方的浏览器中。传递公钥的时候,CA机构用自己的私钥把消息加密,如果通过浏览器可以解析出,则能安全地拿到公钥。
至此,我们的告白终于落下帷幕,愿有情人终成眷属吧😊