人人都应该懂的加密算法 - 公钥加密

2020 年 05 月 10 日 阅读数: 62
人人都应该懂的加密算法 - 公钥加密

前言:公钥加密是几乎每个人每天都在用的技术。本文通过一个小朋友的故事,深入浅出讲解公钥加密算法。

1. 电话手表

小明最近很开心,妈妈给他买了一块电话手表。他的好朋友小辉早就有电话手表了。

小明在科学课上觉得有点无聊,就悄悄用电话手表给小辉发消息。

二人你来我往,上课又开始变得有意思了。

小明放学回家,

妈妈一脸严肃的说:

辣条好吃吗?

小明被问了个措手不及:

我,他,你,那个,这个…. 没有啊!

小明心里想,

不应该啊,

难道发消息还被监控了?

2. 又大又坏的网络世界

小明以为他和小辉之间发消息是这样的:

实际发消息的过程是这样的,

实际上还要复杂的多:

这个“买辣条”的重大消息,

中间经过了数十上百个节点的中转,

最后才到达小辉的手机上。

这其中的每一个中转节点都能看到这条消息,

而恰好其中一个中转节点是电话手表厂的,

而电话手表厂悄悄的把消息转给了妈妈。

还好是妈妈,

都是为了你好!

但这是一个又大又坏的网络世界,

网络上有无数的坏的中转节点,

随时想要截获你的消息,

比如银行密码,

比如支付宝账号等等。

那该怎么办呢?

这可是至关重要的,

现在我们每天都离不开网络了。

所以不管你是不是计算机行业的,

不管你是大朋友还是小朋友,

都应该学习一点密码学知识,

增强自己的防骗能力。

这些密码学知识看似高深,

其实都来源于生活,

也很容易懂。

3. 传纸条

小明和小辉知道了电话手表通话并不安全,

于是他们决定用新办法 - 传纸条!

这次他们要讨论一下周六几点去买辣条

但是这个时间不能被其他同学知道,

否则他们可能会来抢辣条,

总之不能让他们知道几点去买!

但传纸条的过程必须要经过其他同学。

于是他们决定给纸条的内容加密!

纸条上就写着一个数字,

这表示18点去买辣条。

但如果就这么把纸条传过去,

必然被其他同学知道,

到时候他们来抢辣条就不好了!

于是他们决定给数字加密,

加密方法很简单,

就是给这个数字加上小明的年龄11,

那么纸条上的数字不再是18,

而成了29。

18 + 11 = 29

小明在纸条上写了29:

小辉看到以后把29减去11就得到了18。

29 - 11 = 18

而其他同学并不知道需要减去11,

所以不知道29是什么意思,

也猜不出小明他们是18点去买辣条。

4. 对称加密

小明他们用的就是最简单的加密算法。

因为这种算法加密和解密过程都要用到同一个数字,

这种算法被称为对称加密算法,

这个用来加解密的数字被称为秘钥

要发送的内容(18)被称为明文

加密后的内容(29)被称为密文

这个过程很简单:

  1. 发送者把明文使用秘钥加密成密文

  2. 接受者通过同一个秘钥把密文再转成明文

这个过程虽然简单,但有个关键点:

小明和小辉必须都知道这个秘钥11

而其他同学必须不知道这个秘钥

否则这个加密就没用了。

不要小看这个对称加密算法,

这个算法现在使用极其广泛,

你几乎每天都在使用!

虽然真正使用的秘钥和算法不会像11这么简单,

但思路和道理是完全一样的。

这些复杂的对称算法中最出名的叫做AES

英文名是Advanced Encryption Standard

中文名是高级加密标准

这个算法的秘钥可不是简单的11,

而是一个128,192或者256位的二进制数字,

它的算法也不是简单的加上秘钥,

而是先把明文分割成一个个小块,

再对这些块经过10或者14道各种运算最后才得到密文,

这个密文可以用同一个秘钥再计算出明文。

中间的网络节点拿到的数据是完全混乱的,

在不知道秘钥的情况下如果想要破解明文,

需要多长时间呢?

我们来算一下:

假设秘钥长度是256,

它的组合一共有2的256次方,

这个数字大的超出你想象!

转换成10进制以后是:

也就是说要猜出秘钥需要尝试这么多次,

就算用超级计算机,

每秒可以猜测20亿亿次,

都上猜上最少几十亿年的时间,

那时候太阳系都完蛋啦!

这么看AES是很安全的,

这个世界得救了!

等一等,还有一个很关键的问题没解决,

如果秘钥被人窃取了就没有安全可言了,

有秘钥的中间节点可以用秘钥轻松解密!

如何在发送者和接受者之间传递秘钥呢?

在计算机网络上,

没办法让两台电脑之间说悄悄话交换秘钥。

必须有一个方法,

可以让两者之间安全的传递秘钥,

而不被中间节点猜出来秘钥是什么!

怎么办?

5. 两把钥匙

怎么解决传递秘钥的问题呢?

后来有了解决方法,

我们现在来玩一个游戏:

信不信?

我们来试一下:

从常规思路去看,

根本没办法从215猜出365来!

但是我能:

是不是很神奇?

你可以心里多想几个3位数试试看!

哪里冒出来的11

原理其实也简单,这是一个数学问题。

好神奇啊🤩!

在这里我有两把钥匙,

分别是 9111

我把 91 公开给所有人,

任何人想要发消息给我就按照上面的方法加密,

只有我才能用第二把秘密钥匙11算出你要发的消息,

别人就算看了我的小纸条也是不可能算出消息内容的!

用同样的方法,

我们可以构造出更大更复杂的钥匙对,

也不用局限于3位数,

比如我们可以用

19801 x 20201 = 400000001

构造出末8位都不会变的加密系统,

其中19801和20201构成一对钥匙!

这个方法有点类似于家门口的快递箱,

任何一个人都可以往箱子里塞入快递,

但是只有有钥匙的人可以打卡快递箱拿到快递!

只是发送快递并没有用公开的钥匙加密。

这是一个伟大的发现,

这个方法现在应用非常广泛,

可以说是互联网加密的基石!

只不过具体实现比我们上面的例子要复杂的多,

它们可能不是用简单的乘法,

而是用更复杂的指数运算,取模运算等!

6. 非对称加密

上面的加密方法有两把🗝,

第一把🗝用来加密,

而只有第二把🗝才能解密,

所以这种方法被称为非对称加密

和前面的对称加密方法明显不同,

对称加密是同一把🗝用来加密和解密,

这个🗝决不能公开,

只有发送者和接受者知道!

非对称加密有两把🗝,

第一把是公开的,

第二把也是绝对不能公开的,

一旦公开了别人就可以破解密文了。

非对称加密也被称为公匙加密

因为它的重要性,

本文就用了公钥加密作为标题!

1976两位美国的科学家首先提出这个算法,

他们是Whitfield Diffie 和 Martin Hellman:

他们发明了Diffie-Hellman密钥交换算法

1977年另外三位科学家,

Rivest、Shamir 和 Adleman,

用类似的原理发明了一种新的算法。

这种算法用他们3人的名字首字母命名,

叫做RSA算法

他们还申请了专利,

谁要用这个算法都要给他们钱,

好在每个发明专利只有20年的有效期,

他们的专利在2000年已经失效,

现在地球人都可以免费的使用这个算法啦!

这两种算法都是公钥加密算法,

公钥加密算法使用非常广泛,

大家经常上的淘宝、京东都用了公钥加密,

这两年火起来的区块链技术更是基于公钥加密。

你懂了吗?对称加密算法非对称加密算法!

欢迎在InfoQ平台关注我,也可以关注我的公众号:麦叔编程。

用户头像

麦叔

关注

还未添加个人签名 2018.10.18 加入

还未添加个人简介

评论

发布
暂无评论
人人都应该懂的加密算法 - 公钥加密