写在前面
“对称加密”和“非对称加密”是两种不同的加密方案。
本文撇开了具体的技术细节和复杂的数学概念,尝试用通俗易懂的语言和简单的交互演示给读者讲述明白这两种加密方案在其思想和原理上的区别。本文可以帮助你从宏观上理解对称加密和非对称加密的区别。
对称加密
概念
对称加密方案采用单密钥体制。也就是说,以下这两个操作需要的密钥是相同的。
- 加密:明文→密文
- 解密:密文→明文
交互演示
我们来模拟一个场景。假设你和我想要进行通信,但我们所处的环境是不安全的,可能存在窃听者。简便起见,我们用正整数来模拟要传递的“消息”。(可以理解为将任何格式的消息编码为正整数后再传输。)
现在,请你按如下步骤将消息发送给我:
- 请你在心里想一个数字(正整数)作为想要发给我的消息明文;
- 再请你挑选一个数字(正整数)作为密钥;
- 我和你协商加密方式为:
密文 = 明文 × 密钥
。请你按照此公式和前两步的数字算出密文; - 请你将第 2 步的密钥和第 3 步的密文填写进下列表单,然后点击“Send”按钮,这表示将密文发送给我。
密文(数字): 密钥(数字):
我收到的消息为:
这个演示很简单,除法是乘法的逆运算。但稍微考虑一下就会发现,在实际的网络传输中,如果同时传输密文和密钥,似乎并不会提高安全性——如果无法保证传输过程(信道)的安全性,密钥同样可能会被窃听到;如果可以保证信道的安全性,就没有必要多此一举地对信息进行加密了。
这就是对称加密方案的矛盾所在。
本文地址:https://www.jeddd.com/article/what-is-asymmetric-encryption.html
非对称加密
概念
非对称加密方案采用双密钥体制。在该方案中,加密和解密使用的是一对而不是一个密钥。一对密钥由一个公钥和一个私钥构成,二者相互关联,但得知一个并不能推算出另外一个。
密钥的创建者可以一次性创建出一对相关联的公钥和私钥。公钥即公开密钥(public key),是可以向所有人公开的;私钥即私有密钥(private key),只为创建者所有,不能泄露给任何人。
交互演示
还是之前的场景。现在,请你按如下步骤将消息发送给我:
- 请你在心里想一个三位数作为想要发给我的消息明文(一定要是三位数);
- 规定加密方式为:
密文=(明文×91)%1000
。请你将心里想的数字乘以 91,再取末三位的结果作为密文(注意密文也一定是三位数); - 请你密文填写进下列表单,然后点击“Send”按钮,这表示将密文发送给我。
密文(三位数):
我收到的消息为:
这个演示就比较有趣了。在这个演示中,你自己想的三位数就是明文,我告诉你的数字 91 则是我公开出去的公钥,而与其对应的私钥是我自己保存的,并没有告诉你。我们规定加密方式为“密文 = (明文 × 91) % 1000”(% 为模运算)。加密过程中有取模运算,仅仅保留了结果的最后三位数,看似损失了一些信息,其实不然。
事实上,这是一个 3 位数加密系统。我是这样解密的:一开始我生成了两个质数作为一对密钥:91(公钥)和 11(私钥),它们之间的关联是 91 × 11 = 1001,而任何一个三位数乘以 1001 后,结果的末三位不会改变(如 123 × 1001 = 123123)。所以,你将你心里想的三位数乘以 91 再取末三位给我后,我只需要再将你给我的数字乘上 11,最后结果的末三位就是你一开始想的数字了。
仔细想一下,你用公钥加密,我用私钥解密,这个过程可以说是很安全的。除了我,没有任何人有私钥。即使是你(加密者)自己,也无法(准确地说是很难)从密文和公钥反推出私钥或密文,世界上能解密的人只有我(拥有私钥的人)。
本文地址:https://www.jeddd.com/article/what-is-asymmetric-encryption.html知道以上原理后,我们就可以据此构造定义域和值域更大的加密系统了。如 8 位数加密系统:
19801 × 20201 = 400000001
甚至是 30 位数加密系统:
1199481995446957 × 3334772856269093 = 4000000000000000000000000000001
上面这些加密体系的安全性就在于,计算两个数的乘积非常容易,而由一个乘积分解出两个因数十分困难,这种困难性使得破解非对称加密系统几乎是不可能的。
写在后面
以上例子很好地说明了对称加密和非对称加密方案的思想,但实际生产中并不是用简单的乘法来进行加密解密的,而是利用指数、模运算等更加复杂的算法。如有兴趣,读者可以自行查阅流行的加密算法,如 DES、AES、RSA、ECC 等。
References
本文地址:https://www.jeddd.com/article/what-is-asymmetric-encryption.html