之前常常看到别人说私钥公钥,但是其加密解密的用法似乎非常混乱:“用私钥加密blabla”“用私钥解密blabla”之前看的就很迷,咋又能加密又能解密,加密用的东西叫钥匙🔑?于是学习了一下。

首先加密通信的目的需要了解下:

  • 机密性:只有发送方和目标接收方能理解通信内容
  • 完整性:确保收到的东西是发送方想发的,没有被篡改(黑客可能破译不了加密,但能改变内容,把他改动过的东西发给原目标接收方)
  • 端点鉴别:通信双方能够证实另一方身份(否则黑客可以冒充人给你发东西)

对称密钥系统

这种系统里比较简单,加密和解密用的都是同一个钥匙。

打个比方,A有个带锁的箱子,把要给B的东西放在箱子里用用钥匙把箱子反锁了,然后邮寄给B,B收到箱子后用同样的钥匙把箱子打开取出东西。这过程中当然别人拿到箱子也打不开,因为没有钥匙。

这里就存在一个问题,A怎么把同样的钥匙给B?

现实生活中就是线下给嘛,就像家里开门钥匙一样,配钥匙了去爷爷奶奶姥姥姥爷家里给他们发一份。但网络通信加密当然没有线下的选择,你把钥匙网上发给别人的过程中就可能被黑客复制了一份,以后你们通信加密内容黑客就能为所欲为23333

所以我们常用的不是对称加密系统。(但对称加密简单,一些大数据场景下还是会用的)

非对称密钥系统=公开密钥系统

这就是我们常看到的了,非对称嘛,那就是有公钥私钥。私钥加密的信息可以用公钥解密,公钥加密的信息可以用私钥解密。

使用方法:你手里保留自己的私钥不给其他人知道,然后把你的公钥公开。想和你加密通信的人就会把他说的话用你的公钥加密,将密文发给你。公钥加密的东西只能用私钥解开嘛,而私钥又只有你手上有,所以只有你能看懂别人加密发给你的东西。你向别人发东西就反过来一下,拿他的公钥加密你要发的东西,那密文就只有他能看到。

你想向很多人群发消息就用你的私钥加密消息,这样所有知道你公钥的人都可以解密看看你说的什么。(当然这种群发是没有机密性的23333,毕竟想知道你公钥so easy,不如明文群发算了╮(╯-╰)╭)

然后解释一下常听到的“用密钥加密一个数据”的意思,就是将密钥作为一个参数,代入加密算法去加密数据。加密的算法都是公开的嘛,像大家可能听过的RSA加密等等,既然算法公开,谁都可以用,那么密文的机密性如何保障呢?答案就是只有特定使用者知道的私钥。这样别人虽然知道算法,但不知道解密这条信息时要用的参数(即私钥)是什么,也就没法解密了。(tip 虽然能知道公钥,也就是加密时的参数,但是由公钥无法推出私钥是多少,数学原理下期讲)

至此,加密通信的机密性已得到保证,完整性和加密性后面再讲2333