前言:
工作中,零零散散接触了些密码学的知识,并产生了些疑问,借者工作不忙的情况下,把这些疑问都弄清楚,比如:单向散列函数和HMAC的联系?对称密码为什么要和迭代模式共用?证书和签名的联系?公钥密码的基本原理?怎么安全的交换共享密钥?为什么加入盐可以防止字典攻击?为什么密码中常用到随机数nounce?这些疑问都可以在本章找到答案。
参考文献:
《图解密码技术》,人民邮电出版社,2015,(日)结城浩(著)
1.1. 对称密码
目的:密钥不被破译的前提下,保证消息的机密性
1.2. 公钥密码
目的:私钥不被破译的前提下,保证消息的机密性
1.3. 单向散列函数
目的:可将任意长度的消息转换成固定长度的短文,可用于验证消息的完整性,即检测出数据是否被篡改。
1.4. 消息认证码
目的:密钥不被破译的前提下,不仅能验证消息的完整性,还能确认消息是否来自所期望的通信对象。
1.4.1. HMAC
说明:HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104)。
1.5. 数字签名
目的:私钥不被破译的前提下,能验证消息的完整性,能确认所期望的通信对象,能防止通信对象事后否认自己先前发送的消息。
上图中直接对消息进行签名的方法,非常耗时,因为公钥密码算法本来就非常慢。所以,可以在签名前后,先将消息通过单向散列函数生成一个很短的数据。对消息的散列值签名的流程图如下图,下图是Alice对消息的散列值签名,Bob验证签名。
1.6. 证书
目的:私钥不被破译并且认证机构是可信的前提下,能在数字签名的基础上验证公钥的合法性。
1.7. 分组模式
说明:
密码算法可分为流密码和分组密码两种:流密码和分组密码。
流密码是对数据流进行连续处理的一类密码算法;
分组密码只能加密固定长度的分组,但是需要加密的明文长度可能会超过分组密码的固定长度,所以需要对分组密码算法进行迭代,实现对一段很长的明文应用分组密码并全部加密。
本节介绍的就是对分组密码算法进行迭代的方法。
1.7.1. ECB模式
1.7.2. CBC模式
1.7.3. CFB模式
1.7.4. OFB模式
1.7.5. CTR模式
1.7.6. GCM模式
说明:GCM模式与上述分组模式不同的是,它除了能提供对消息的加密外,还能提供对消息的完整性。
1.8. 密钥交换
目的:解决收/发双方在通信前需要共享密钥的问题。
1.8.1. Diffie-Hellman
1.8.2. 公钥密码
1.9. 基于口令的密码(PBE)
目的:PBE是一种根据口令生成密钥并用该密钥进行加密的方法。
1.9.1. 盐的作用
目的:盐是用来防止字典攻击的