上一篇介绍了消息传递存在的问题:机密性
、完整性
、认证
、不可否认性
。本篇介绍解决这些问题的方案,我们形象的把它们统称为 密码工具箱
,工具箱里的 工具
列举如下:
-
对称加密
: 解决机密性
的工具; -
公钥加密(也叫非对称加密)
: 解决机密性
的工具; -
单向散列函数
:解决完整性
的工具
(接上文:遨游密码世界(一))
二、密码学工具箱
1. 对称加密
1)异或运算
层叠消融最强大脑有个 层叠消融
的项目,本质上就是属于密码学中的对称加密。
层叠消融
把两个图形重叠在一起,相同的部分会消失,不同的部分会显示。如果这么说不太理解的话,可以看下面的 异或
运算,和 加减
运算一样简单。
0 XOR 0 = 0;
0 XOR 1 = 1;
1 XOR 0 = 1;
1 XOR 1 = 0;
XOR
和 +
、-
都是数学里面的运算符号,叫做 异或运算符
。它的规则是相同的数字做运算之后结果为 0,不同的数字做异或运算之后结果为 1。这里即可看出 层叠消融
的本质即异或运算。
2)对称加密的核心就是异或运算
随机生成两个相同位数的数字 01001100 和 10101010,对第一个数字记做 A,第二个数字记做 B,对它两进行异或运算。
0 1 0 0 1 1 0 0 // A
1 0 1 0 1 0 1 0 // B
1 1 1 0 0 1 1 0 // 结果
将结果 11100110 在与 B 做一次异或运算。
1 1 1 0 0 1 1 0 // 结果
1 0 1 0 1 0 1 0 // B
0 1 0 0 1 1 0 0 // 第二次的结果 === A
第一次对 A 和 B 做 异或运算 可以看成是 加密行为。
// 加密过程
0 1 0 0 1 1 0 0 // A:消息
1 0 1 0 1 0 1 0 // B:密钥
1 1 1 0 0 1 1 0 // 结果:密文,加密之后看不懂的东东
第二次对第一次运算的结果再与 B 做 异或运算 可以看成是 解密行为 。
// 解密行为
1 1 1 0 0 1 1 0 // 结果:密文
1 0 1 0 1 0 1 0 // B:密钥
0 1 0 0 1 1 0 0 // A:密文通过密钥处理之后又得到密文 A
电脑里的视频,图片,文本文件等如果要做加密,都是先转化为计算机识别的二进制数据,也就是 0 和 1 组成的数据,然后再做异或运算。
密钥这个过程 B(密钥) 及其重要,加密时候使用它进行加密,解密也要使用它进行解密,如果你的密钥泄露了,那么别人就可以轻而易举的破解你的加密信息。
3)当前使用的对称加密算法
异或运算只是对称加密的最底层,实际使用的对称加密算法都是在这基础上发展的,并且要复杂的多,这里介绍这个是为了以后吹逼的时候增加光环属性。
前面介绍了异或运算加/解密消息,那么加密算法如何理解呢。比如有个算法对消息进行 16 次异或操作,这是一种算法,另一个将消息拆分两半,只对其中一半进行加密,这又是一种加密算法。
个人总结:加密算法就是加密的具体行为。比如上面使用异或运算加密中,异或加密这个行为就是个算法。对于消息加密,只有同时知道 加密算法 和 密钥 这两个东东才能正确得到明文。
DES 对称加密算法
DES 加密算法是 1977 年美联邦使用的标准,在那个年代被政府和银行广泛使用。
老外整出了加密算法之后,为了验证加密算法的安全性,会定期举办个密码比赛邀请全世界的密码学大师来破译加密算法。在 1999 年举办的 DES challenge 第三次比赛中被人用了 22 个小时就给破译了(在 1997 年举办的 DES challenge 第一次比赛就被人用 96 天给破译了),自此之后安全性存在严重问题,新的加密算法应运而生。
三重 DES 对称加密算法
由于 DES
存在安全性问题,不久 三重 DES 加密算法
就诞生了,在 DES
基础上做细微修改,并且重复三次 DES
加密,所以叫 三重
。
当然,DES 底层做了 16 次异或运算,三重 DES 也就做了 48 次异或运算(不仅仅做异或运算,还有其它行为),运算次数变得更复杂,导致加/解密速度并不高。有了不爽的东西人们就会寻求替代品。
AES 对称加密算法
1997 年的时候,米国标准化机构 NIST 对外海选新的加密算法,以求替代 DES
带来的尴尬境遇。并提前指定了新的密码算法的名称就叫做 AES
。
直到 2000 年,在世界各地的密码学专家竞争中,最终筛选出 15 个最终可能选择的加密算法;这 15 个加密算法经过又一轮的生死搏杀,最终比利时密码学家带来的加密算法 Rijndael
成为 AES
的最终选择。
最在用的最多的对称加密算法还是 AES
,当然没有绝对安全的算法,被破解也是时间问题,只不过这个时间来的会比较晚一点。
4)对称密码实际应用中的缺陷
办公室你将用对称密码加密后的纸条扔给你的同事,他需要知道密钥才能解密出明文,由于你们都在一个办公室里,可以很方便的告诉他密钥是什么(这里举例好傻,都能告诉他密钥是啥了,怎么不直接告诉他明文信息,只是举例而已~~)。
如果你在上海,你的好朋友在北京,你用对称加密给他写了封信,你的好朋友需要密钥,你只好将密钥与信件一起塞进信封寄给好朋友。这样又显得很傻,信件被任何人拿到都可以通过密钥得到明文,加密失去意义。
很不爽,去叫人最初看到这个场景的时候,我没忍住破口大骂,花了十分钟读到这里原来是个自相矛盾的东东,纯属浪费时间。对称加密的密钥传递是个老大难的问题,但可以通过其它技术弥补。
2. 公钥加密(也叫非对称加密)
(未完待续,简书不能设置文章顺序,关于密码工具箱其它工具还需查阅资料完善,这里先发布文章占个位置,避免后续文章切断了遨游密码世界两篇文章的连续性)
网友评论