43

计算机时代的对称密码学:从100美元富兰克林到二进制XOR到AES

 4 years ago
source link: https://www.tuicool.com/articles/3QrQFfB
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

作者:村头二旧(加密二锅头) 

计算机没有出现的时代是古典密码学,计算机出现后是现代密码学。有什么区别呢?

大家回忆下之前所讲的隐藏法、移位替换、维吉尼亚加密、包括二战时期的恩尼格码机,都是英文字母,比如恩尼格码机的26个齿轮槽对应26个英文字母。

计算机读的是0和1,这根芯片基本结构单元二极管相关。那么,计算机出现后,语言学家就退居二线,现在不太需要英文字母了,加密解密的过程全部由计算机完成,而0和1的二进制世界来了。

比特序列开始统治之后,需要找个方法把语言文字变成二进制比特序列,将现实世界的东西映射为比特序列的操作叫做编码(encoding),这个编码有个规范叫做ASCII。

jIBjMbf.jpg!web

以上就是一部分二进制的对照表,网上很容易可以搜到。

这背后有有趣的东西。ASCII是IEEE的里程碑作品之一。IEEE就很有意思了,全称是:美国电气和电子工程师协会。总部在美国纽约,“拥有来自175个国家42万会员”,1963年就开始发展了。所以现在很多区块链项目动不动说是十万百万粉丝,这个很难的,你看看IEEE的发展就好了,当然啦,你说区块链行业的分布式,以及高明的传播,会加快一切进程,也对,十万会员的技术组织是很难的,十万关注的人是可行的。

IEEE最早的里程碑作品是本杰明·富兰克林的成名著作《电力的实验与发现》在1751年的时候发表,富兰克林就是美国一百元钞票上面的头像人物。

EFvEJnf.jpg!web

电子电气工程、通讯、计算机科学和工程这些学科的先驱之一是富兰克林,不是二战时候的美国总统富兰克林·罗斯福,是美国的开国时期的大佬。密码学和这些学科是交叉在一起的,所以,有趣的事情就是, 密码学从一开始就和钱有关系 。100美元的钞票上面印着的这个大佬,更多不是因为他在学术上的贡献,是因为他是财政部长、外交部长、印刷厂长、起草《独立宣言》、“第一个真正意义上的美国人”、代表了美国精神等等成就。

大家可以看下IEEE发展史,链接如下:

https://zh.wikipedia.org/wiki/IEEE里程碑列表

回到我们的二进制编码,ASCII,这时候语言文字变成了0和1, 也就是我们不需要对着字母去捣鼓折腾了,只需要改变0和1就可以对内容进行加密

下面以非常直白简单的语言讲一下怎么加密的?

什么是XOR?

XOR叫exclusive or,也就是异或,本身是一种极为简单的运算。你把它当成小学时候学过的加减乘除的一种,当然,这么说高估了运算的简单,这么说吧, 一个小学生看XOR运算,绝对比加减乘除容易非常多

1 XOR 0结果就是1;

0 XOR 1结果就是1;

1 XOR 1结果就是0;

0 XOR 0结果就是0;

前后一样就是1,前后不一样就是0. 从上文表格里找一个字母比如说是a,a就是01100001. 随便找一个秘钥(钥匙),比如01010101. 当然可以是任意选择的,下面会讲的。

mURjEbE.jpg!web

这就是用秘钥,XOR之后的结果,00110100就是密文。对照表格,这个二进制表达的信息就是:4

于是,原文的a就变成了密文的4,当然,有时候看起来没有这么规则更像是乱码。

记住口诀:同就是0,异就是1.这比背乘法口诀容易太多了,小朋友很快可以掌握。

给个图形化表达,更加容易理解:

u6jAvue.jpg!web

用钥匙去XOR原文运算之后的结果可以通过钥匙反向推回来。这就是计算机时代的对称加密法。

普及下知识:

什么是比特Bit? 什么是字节Byte?

上文中看到八位二进制就可以表达一个英文字母,那么,一个英文字母也就是一个字节,英文叫Byte,也就是1byte=8bit=8个二进制位。因为一个比特就是代表二进制里面的一位。再比如,一个汉字就是两个字节。标点符号另算。

下面讲一下分类:一次性密码本和分组密码

对称密码学中,一次性密码本属于流密码。流密码的定义更宽一些,本章不展开。

简单来理解就是,你有一段信息需要加密了,比如你的信息由1万个英文字母构成,转成二进制后有8万比特。

我现在生成一个二进制随机数,长度是多少呢?8万位,也即是说这个原文每个比特我都XOR了一下,而且没有什么规律,因为钥匙本身是个随机数(或者叫伪随机数)。

但是这样的加密比较麻烦,安全性不错,效率不高,钥匙和原文一样长。你有个1GB的文件,加密一下后还是1GB,但是钥匙也有1GB,配送和保存都是问题,记住: 密码学中也有物流问题,主要是传输秘钥。

这时候用一个固定长度的加密秘钥,去对原文循环加密,简化模型后,可以这么说,8万比特长度的原文,我拿着80比特长度的钥匙去加密,需要1000个循环。记住,这是简化的模型,实际操作的时候,比这个复杂。

分组秘钥是被广泛运用在通讯、电子商务、金融系统等领域的加密法。注意,不是以后有了非对称加密,对称加密就没有用了, 对称加密有对称的安全,非对称有非对称的麻烦 ,不是一棍子直接打死的。

DES和AES是什么?

“数据加密标准(英语:Data Encryption Standard,缩写为 DES)是一种对称密码的分组密码,由美国国家标准局于1976年选择作为美国的官方联邦信息处理标准(FIPS),随后广泛被国际使用。”

后来又有了AES(2001年),A就是advanced就是更先进更高级不是American,AES的加密方法选拔是全球公开的,AES既是美国的,又是全球的。选拔由美国一个标准化机构NIST举行,评审不是他们,是全球企业和密码学家以及参赛者共同完成。如果全世界密码学家都找不到加密方法的弱点,兼顾效率和安全性之后,就会被选上。

被选上的算法,要求免费公开给全球使用。有点像打擂台,看看谁的功夫好,就选谁,并且选好了之后把这套内功心法交给全球人民。比如我们现在广泛使用的AES实际就是Rijndael算法,是在2000年从候选算法中被选出来的。

7Z7BFzm.jpg!web

这个图片中的五家就是候选的算法了。出现了RSA公司,RSA算法就是非对称密码中最广泛使用的密码算法。RSA公司在20世纪末举行过好几场比赛,干什么呢?去组织人破译DES的对称算法,确实破解成功了,本来对称密码学中的分组密码就是可以被破解的,RSA找人破解了DES算法,又在后来提交了AES算法,并成功“提名奥斯卡”,只是最后时刻落选了,最佳算法颁给了Rijndael。

不过,在非对称密码领域,RSA那是封神的存在,也正是有了非对称密码,区块链的诞生才有可能。

我们下面就开始进入非对称加密和区块链密码学领域了,请拿好小板凳,做好笔记。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK