0
点赞
收藏
分享

微信扫一扫

HTTPS系列之密码学基础(1)


三个主角

(1)卡尔(与冰女进行消息往来)

HTTPS系列之密码学基础(1)_数字证书

(2)拉比克(截获卡尔和冰女传递的消息,也就是中间人)

HTTPS系列之密码学基础(1)_数字签名_02

(3)冰女(与卡尔进行消息往来)

HTTPS系列之密码学基础(1)_数字证书_03

基本概念

公钥加密

假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥,只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

私钥签名

如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。

用私钥来加密数据的摘要,用途就是数字签名。

签名、证书

(1)卡尔有两把钥匙,一把是公钥,另一把是私钥。卡尔把私钥自己留下,把公钥给了拉比可和冰女。

HTTPS系列之密码学基础(1)_数字签名_04


(2)冰女要给卡尔写一封保密的信,于是她使用了卡尔的公钥对信的内容进行了加密。

HTTPS系列之密码学基础(1)_数字证书_05


(3)卡尔收到信之后,用自己的私钥对数据进行解密,只要私钥不泄露,拉比克即使截获了信,也无法对信进行解密。

HTTPS系列之密码学基础(1)_数据_06

(4)卡尔看完信之后,决定回信。首先,卡尔对回信的内容通过哈希函数生成一个摘要。如果信的内容比较大(比如视频),对整体内容加密代价很大,所以这里通过哈希函数生成摘要。

HTTPS系列之密码学基础(1)_数据_07

(5)然后对这个摘要使用私钥进行加密生成数字签名

HTTPS系列之密码学基础(1)_数据_08


(6)卡尔将这个签名放在信的末尾。将信发送给冰女。

HTTPS系列之密码学基础(1)_数字签名_09

(7)冰女收到信之后,确定是卡尔发的。使用公钥解密签名内容,可以获取到信件的摘要。由此证明这封信确实是卡尔发的。

HTTPS系列之密码学基础(1)_数字签名_10

(8)除去签名,对信的内容进行哈希运算,与刚刚获取到的信件的摘要进行对比,如果一致,则说明信没有被篡改过。

HTTPS系列之密码学基础(1)_数字签名_11

(9)拉比克作为偷技能的高手,如果让他把冰女的公钥替换成自己生成的公私钥对,那么会怎么样?这个时候拉比克截获信息之后修改之后用自己的私钥加密生成另一份签名,而冰女同样可以使用公钥解密签名,这个时候冰女并不知道信件被篡改

HTTPS系列之密码学基础(1)_数据_12

(10)后来,冰女感觉不对劲,发现自己无法确定公钥是否真的属于卡尔。她想到了一个办法,要求卡尔去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对卡尔的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)

HTTPS系列之密码学基础(1)_数字签名_13

(11) 卡尔拿到数字证书以后,就可以放心了。以后再给冰女写信,只要在签名的同时,再附上数字证书就行了。

HTTPS系列之密码学基础(1)_数字签名_14


(12)冰女收信后,用CA的公钥解开数字证书,就可以拿到卡尔真实的公钥了,然后就能证明"数字签名"是否真的是卡尔签的。图中鲍勃应该替换成卡尔

HTTPS系列之密码学基础(1)_数据_15

写在最后

公钥和私钥是成对的,它们互相解密。
公钥加密,私钥解密。
私钥数字签名,公钥验证。
要发给我的东西,你们用我的公钥加密,私钥只有我才有,其他哪怕拥有我公钥的人是解不开的。
我想要发出去的东西,用私钥来加密,就是数字签名,凡是拥有我公钥的人都能解开。

公众号

HTTPS系列之密码学基础(1)_数字签名_16


举报

相关推荐

0 条评论