对称加密和非对称加密 | Cult Minds

对称加密和非对称加密

对称加密和非对称加密,是加密通信中常见的两个概念。wiki的定义是:

对称密钥加密密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。

非对称加密也称非对称加密,是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密的时候,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文;甚至连最初用来加密的密钥也不能用作解密。

为了便于理解。我们来举例说明。

对称加密

回想起初中时代的小纸条了没,假设同学A想给同学B传一个小纸条,但是A离B隔着几个座位,需要由中间的C来帮忙传纸条,因为C是个爱打小报告的家伙,所以A和B都不想让C知道纸条中的具体内容是什么。于是A和B私下约定,纸条中的内容以摩尔斯编码来代替,例如要发送“hello”,那么纸条中就写“hello”的摩尔斯编码“…. . .-.. .-.. — ”,由于C不知道A与B的约定转换规则,所以他即使看到了纸条的内容,也不知道A与B的交谈内容。但B得到了这个密文,通过对照摩尔斯编码转换表,就可以得到原始信息“hello”。

此时,A与B就是通信的双方,摩尔斯编码就是密钥,也就是明文“hello”——>密文”…. . .-.. .-.. —“的映射关系。

A与B用的是同一个密钥来加密解密信息,也就是摩尔斯编码。所以称为对称加密。

抽象一点来说,实际上密钥就是一种函数/映射关系,我们以encry()来表示。整个传递过程如下:

A明文---->encry---->A密文---->C信道---->B密文----encry---->B明文

一句话总结就是,对称加密就是通信双方用的是相同密钥来进行加密和解密。

常见的对称加密算法有

DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

缺陷

对称加密相当简单,但有一个致命的缺陷就是,一旦密钥被第三方获取,那么加密的信息就全部泄漏了。依旧以上面的例子为例,C知道了A与B是用摩尔斯编码来通信,那么他获取了摩尔斯编码表,就相当于完全掌握了A与B的通信内容。为了解决这个问题,人们又引入了非对称加密算法。

非对称加密

对称加密算法在于共同的密钥,非对称加密算法的做法是,每个人生成一个私钥-公钥对,私钥由个人保护不公开,而公钥可以随便分享,最关键的是,使用公钥加密的信息,只有对应的私钥才能解密,使用私钥加密的信息,只有对应的公钥能解密

假设,A生成了自己的一个私钥-公钥对“A私钥-A公钥”,B也生成了自己的私钥-公钥对“B私钥-B公钥”,依照非对称加密的原则,A的私钥由A保存只有A知道,B同理。

此刻,A想给B发送密文。

通信过程如下:

A: “hi,老哥,我想给你发个密文,把你的公钥发给我一下”
B: “好啊好啊,这是我的公钥‘HE8eU#hb*!’,请查收”
A: ”这是密文'jk2$$#4dfjkl``[email protected]#cds'“

这时C听到了A和B的通话,而且知道了B的公钥‘HE8eU#hb*!’和密文‘jk2$$#4dfjkl[email protected]#cds’。他兴奋地回去,想要解密密文,听听A和B到底在说什么。但是他发现没有办法解密这个密文。为什么?因为密文是用B的公钥来加密的只有B的私钥才能解密!所以C除了B的公钥和密文之外什么也得不到。这就是非对称加密的强大之处。

总结一下通信过程,假设某人发送信息,那么他先要获取对方的公钥,再用这个公钥来加密明文为密文发送给对方,对方再用自己私钥来解密信息。而第三方没有私钥,所以没法解密。

一句话总结,非对称加密的非对称表现在,加密的密钥公开,而解密的密钥不公开

实例

我们常用的密钥方式ssh登陆服务器的流程就是以非对称加密方式实现的:

  1. 远程服务器持有用户公钥,当有用户进行登录,服务器就会随机生成一串字符串,然后发送给正在进行登录的用户。
  2. 用户收到远程服务器发来的字符串,使用与远程服务器公钥配对的私钥对字符串进行加密,再发送给远程服务器。
  3. 服务器使用公钥对用户发来的加密字符串进行解密,得到的解密字符串如果与第一步中发送给客户端的随机字符串一样,那么判断为登录成功。

缺陷

非对称加密可以确保,发送方知道接收方的公钥的前提下,该密文在有效时间内无法被破解。但请注意这个前提,发送方知道接收方公钥,也就是说,第三方可以伪造自己的公钥为接收方公钥,在第一次通信建立的时候,发送方无法分辨他得到的公钥是不是接收方公钥。如何解决这个问题呢?答案就是数字签名和数字证书。详情请见


0%