小朋友都能懂的计算机算法 - 加解密

共 3119字,需浏览 7分钟

 ·

2021-01-11 18:42

电话手表

小明最近很开心,

妈妈给他买了一块电话手表

他的好朋友小辉早就有电话手表了。

小明在科学课上觉得有点无聊,

就悄悄用电话手表给小辉发消息,

二人你来我往,

上课又开始变得有意思了。

小明放学回家,

妈妈一脸严肃的说:

辣条好吃吗?

小明被问了个措手不及:

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

小明心里想,

不应该啊,

难道发消息还被监控了?


又大又坏的网络世界

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

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

实际上还要复杂的多:

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

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

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

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

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

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


还好是妈妈,

都是为了你好!

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

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

随时想要截获你的消息,

比如银行密码,

比如支付宝账号等等。

那该怎么办呢?

这可是至关重要的,

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


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

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

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

增强自己的防骗能力。

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

其实都来源于生活,

也很容易懂。


传纸条

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

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

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

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

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

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

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

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

纸条上就写着一个数字,

这表示18点去买辣条。

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

必然被其他同学知道,

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

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

加密方法很简单,

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

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

而成了29。

18 + 11 = 29

小明在纸条上写了29:

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

29 - 11 = 18

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

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

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


对称加密

这就是最简单的加密算法。

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

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

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

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

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

这个过程很简单:

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

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


这个过程很简单,

但有个关键点:

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

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

否则这个加密就没用了。

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

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

你几乎每天都在使用!

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

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


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

英文名是Advanced Encryption Standard

中文名是高级加密标准

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

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

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

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

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

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

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

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

需要多长时间呢?


我们来算一下:

假设秘钥长度是256,

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

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

转换成10进制以后是:

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

就算用超级计算机,

每秒可以猜测20亿亿次,

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

那时候太阳系都完蛋啦!

这么看AES是很安全的,

这个世界得救了!


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

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

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

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

在计算机网络上,

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

必须有一个方法,

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

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

怎么办?


两把钥匙

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

后来有了解决方法,

我们现在来玩一个游戏:

  1. 你在心里想一个3位数,

  2. 把这个3位数乘以91,

  3. 然后告诉我结果的后3位,

  4. 我就能算出你心里想的数字!

信不信?

我们来试一下:

  1. 假设你在心里想了365,

  2. 365 x 91 = 33215,

  3. 你把 215 告诉我。

从常规思路去看,

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

但是我能:

  1. 215 x 11 = 2365

  2. 你心里想的就是就是结果的后3位365!

是不是很神奇?

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

哪里冒出来的11

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

  1. 91 x 11 = 1001

  2. 任何1个3位数乘以1001得到的结果的后3位都是它自己, 因为1001的后3位是001, 任何1个3位数乘以1都是它自己!

  3. 我把1001分解成了 91 x 11 这两个数

  4. 我把 91 公开给了你,但是 11 自己秘密保留!

  5. 你把心里想的数字先乘以 91,告诉了我后3位, 只要后3位就够了,因为前面的位数不会影响后3位的值,

  6. 所以我用你给我的后 3 位再乘以 11 就相当于乘以了 1001

  7. 得到的结果的后 3 位就是你最初想的那个 3 位数字!

好神奇啊🤩!

在这里我有两把钥匙,

分别是 9111

我把 91公开给所有人,

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

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

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


用同样的方法,

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

也不用局限于3位数,

比如我们可以用

19801 x 20201 = 400000001

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

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

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

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

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

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

这是一个伟大的发现,

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

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

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

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

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


非对称加密

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

第一把🗝用来加密,

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

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

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

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

这个🗝决不能公开,

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


非对称加密有两把🗝,

第一把是公开的,

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

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

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

因为它的重要性,

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


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

他们是Whitfield Diffie 和 Martin Hellman:

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


1977年另外三位科学家,

Rivest、Shamir 和 Adleman,

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

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

叫做RSA算法

他们还申请了专利,

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

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

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

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


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

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

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

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


你懂了吗?

对称加密算法非对称加密算法!

有问题给我留言!感谢你的阅读!

浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐