公钥(yuè)和私钥的概念并不是什么新鲜事物,鉴于不少小伙伴还是不明白,简单写个说明的文章吧。

介绍

公钥和私钥属于不对称加密方式,在网络通讯中很十分常用。

公钥,顾名思义,就是可供公众使用的密钥,你甚至可以公开提供给别人下载,它被用来加密和验章。

私钥,就是仅供自己使用的密钥,必须谨慎保存,用来解密和签章。用公钥加密的内容只能用私钥解密,用私钥加密的内容也只能用公钥解密。

A 方向 B 方发送内容时:

  • A 使用 B 的公钥加密,这样确保只有 B 能解密。

  • A 以自己的私钥做签章,收取方使用 A 的公钥进行验章,确认内容由 A 发送。

数字证书就是采用公钥体制,利用一对相互匹配的密钥进行加解密,即:

  • 每个用户自己设定一把特定的仅为本人所知的私有密钥,即私钥,用来进行解密和签名。

  • 同时,还要设定一把公共密钥,即公钥,并公开给一组用户所共享,用于加密和验证签名。

  • 发送内容时,发送方使用接收方的公钥对数据加密,接收方则使用接收方自己的私钥解密。

这样就保证了加密过程不可逆,即只有用私有密钥才能解密。

在公开密钥密码体制中,常用的一种是 RSA 体制,于 1977 年由 Ron Rivest、Adi Shamirh 和 LenAdleman 发明,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被 ISO 推荐为公钥数据加密标准,它的算法基于一个十分简单的数论事实,即将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

此外,用户也可以用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。

采用数字签名,能够确认以下两点:

  • 保证信息是由签名者自己签名发送,签名者不能否认或难以否认。

  • 保证信息从签发后到接收到的过程中都未被修改,签发的内容是真实内容。

举例

接下来,举个例子可能会更容易理解:

假设,我最近新交了一个女朋友,正处于热恋中,我们在发给彼此的信息中总会有一些甜言蜜语。

为了保证我们两人的对话不被他人看到,我们设计了两个暗号,分别是:

  • “天王盖地虎”

  • “宝塔镇河妖”

这两句暗号都可以用来加密信息,但用某一句暗号加密的信息,只能用另一句解密。

因为我比较喜欢后者,即 "宝塔镇河妖",便留给自己使用没告诉任何人 (私钥),而把前者 "天王盖地虎" 贴在了我房间门口,即我、我的女朋友、其他家人朋友,都可以使用 (公钥)。

有一天我的女朋友要给我发送一句 "么么哒",女朋友很害羞怕被别人看到这句话,于是她用我告诉她的暗号 "天王盖地虎" (公钥) 进行加密得到内容是 "哒么么" 后才发送给我。结果我的手机在地铁站丢失,小偷打开手机看到了 "哒么么",但由于他不知道解密的暗号是我保留的那句 "宝塔镇河妖" (私钥),所以他完全不知道这是什么意思。这样我就保护了我发送的内容,这叫公钥加密。

后来为了表扬女朋友的机智行为,我要给她发送一句 "萌萌哒" 表示赞赏,大方的我不怕被人看到这句话,可是我担心那个小偷冒充我发送其它内容,于是我使用我保留的暗号 "宝塔镇河妖" (私钥) 进行加密得到 "哒萌萌" 后发给女朋友,女朋友收到后,用公开的暗号 "天王盖地虎" (公钥) 解密,得到了原来的内容并且很开心。小偷想冒充我诈骗我的女朋友,由于他不知道我的私有暗号 "宝塔镇河妖" (私钥),所以做不到。这样就可以保证发送者的身份,叫做私钥签名。