公钥(yuè
)和私钥的概念并不是什么新鲜事物,鉴于不少小伙伴还是不明白,简单写个说明的文章吧。
介绍
公钥和私钥属于不对称加密方式,在网络通讯中很十分常用。
公钥,顾名思义,就是可供公众使用的密钥,你甚至可以公开提供给别人下载,它被用来加密和验章。
私钥,就是仅供自己使用的密钥,必须谨慎保存,用来解密和签章。用公钥加密的内容只能用私钥解密,用私钥加密的内容也只能用公钥解密。
当 A
方向 B
方发送内容时:
-
A
使用B
的公钥加密,这样确保只有B
能解密。 -
A
以自己的私钥做签章,收取方使用A
的公钥进行验章,确认内容由A
发送。
数字证书就是采用公钥体制,利用一对相互匹配的密钥进行加解密,即:
-
每个用户自己设定一把特定的仅为本人所知的私有密钥,即私钥,用来进行解密和签名。
-
同时,还要设定一把公共密钥,即公钥,并公开给一组用户所共享,用于加密和验证签名。
-
发送内容时,发送方使用接收方的公钥对数据加密,接收方则使用接收方自己的私钥解密。
这样就保证了加密过程不可逆,即只有用私有密钥才能解密。
在公开密钥密码体制中,常用的一种是 RSA
体制,于 1977 年由 Ron Rivest、Adi Shamirh 和 LenAdleman 发明,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO
推荐为公钥数据加密标准,它的算法基于一个十分简单的数论事实,即将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
此外,用户也可以用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。
采用数字签名,能够确认以下两点:
-
保证信息是由签名者自己签名发送,签名者不能否认或难以否认。
-
保证信息从签发后到接收到的过程中都未被修改,签发的内容是真实内容。
举例
接下来,举个例子可能会更容易理解:
假设,我最近新交了一个女朋友,正处于热恋中,我们在发给彼此的信息中总会有一些甜言蜜语。
为了保证我们两人的对话不被他人看到,我们设计了两个暗号,分别是:
-
"天王盖地虎"
-
"宝塔镇河妖"
这两句暗号都可以用来加密信息,但用某一句暗号加密的信息,只能用另一句解密。
因为我比较喜欢后者,即 "宝塔镇河妖"
,便留给自己使用没告诉任何人 (私钥),而把前者 "天王盖地虎"
贴在了我房间门口,即我、我的女朋友、其他家人朋友,都可以使用 (公钥)。
有一天我的女朋友要给我发送一句 "么么哒"
,女朋友很害羞怕被别人看到这句话,于是她用我告诉她的暗号 "天王盖地虎"
(公钥) 进行加密得到内容是 "哒么么"
后才发送给我。结果我的手机在地铁站丢失,小偷打开手机看到了 "哒么么"
,但由于他不知道解密的暗号是我保留的那句 "宝塔镇河妖"
(私钥),所以他完全不知道这是什么意思。这样我就保护了我发送的内容,这叫公钥加密。
后来为了表扬女朋友的机智行为,我要给她发送一句 "萌萌哒"
表示赞赏,大方的我不怕被人看到这句话,可是我担心那个小偷冒充我发送其它内容,于是我使用我保留的暗号 "宝塔镇河妖"
(私钥) 进行加密得到 "哒萌萌"
后发给女朋友,女朋友收到后,用公开的暗号 "天王盖地虎"
(公钥) 解密,得到了原来的内容并且很开心。小偷想冒充我诈骗我的女朋友,由于他不知道我的私有暗号 "宝塔镇河妖"
(私钥),所以做不到。这样就可以保证发送者的身份,叫做私钥签名。