本章学习内容
- 什么是密钥
- 各种不同的密钥
- 密钥的管理
除此之外还有以下知识点
- Diffie-Hellman
- 基于口令的密码(PBE)
- 如何生成安全的口令
什么是密钥
密钥就是一个巨大的数字
密钥本身是个数字,但是重要的是密钥空间的大小,密钥空间越大包里破解约困难。密钥空间由密钥长度决定。
DES密钥
实际长度56比特:7字节
三重DES的密钥
DES-EDE2长度为112比特:14字节
DES-EDE3长度为168比特:21字节
AES密钥
长度可以从128、192、256中选择
密钥和明文是等价的
得到密钥就意味着获取明文,所以密钥的价值和明文实际上是等价的
密码算法和密钥
依赖密码算法的机密性是非常危险的,所以高强度密码算法是公开的,而密钥需要好好保管。
各种不同的密钥
对称密码与公钥密码的秘钥
对称密码中发送者和接受者使用同一个秘钥
而公钥密码中加密解密使用的是不同的秘钥,加密秘钥为公钥,解密秘钥为私钥。这两个为密钥对。
消息认证码的秘钥与数字签名的秘钥
在消息认证码中只有持有合法秘钥的人计算出来。将认证码附加在通信报文后面就可以识别是否被篡改或伪装。
数字签名中,签名的生成和验证用不同的秘钥。
用于确保机密性的密钥与用于认证的密钥
对称密码与公钥密码的密钥都是用于确保机密性的密钥
而消息认证码和数字签名使用的密钥是用于认证的密钥
会话密钥与主密钥
用于通信只使用一次的密钥称为通信密钥,因为会话密钥仅用于本次会话,所以即使被破解了下次会话也是安全的。一直被反复使用的秘钥则称作主密钥。
用于加密内容的秘钥与用于加密秘钥的秘钥
一般来说加密对象是用户之间使用的信息,这种秘钥是CEK
而加密秘钥的秘钥则称为KEK
秘钥管理
生成秘钥
- 用随机数生成秘钥 需要使用密码学安全的伪随机数进行生成
- 用口令生成秘钥 口令附加上盐(随机数)然后输入单向散列函数,防止字典攻击。这种方法称为基于口令的密码
配送秘钥
配送秘钥是共享秘钥的重要问题,有以下方法解决:
- 事先共享密钥
- 使用密钥分配中心
- 使用公钥密码
- Diffie-Hellman秘钥交换
更新秘钥
定期更新秘钥是提高机密性的技术。例如可以将当前秘钥的散列值作为下一个秘钥。
而且更新秘钥时间点前的明文都无法被破解,这种安全叫做后向安全。
保存秘钥
秘钥重复使用的时候就需要考虑保存秘钥的问题了
- 人类无法记住具有实用长度的秘钥
- 对密钥进行加密的意义
- 我们记不住秘钥,但是将密钥保存下来又可能被窃取
- 可以将密钥放到保险柜等安全的地方
- 我们可以使用将密钥加密后保存的方法
- 对密钥进行加密虽然没有完全解决机密性问题,但是可以减少秘钥数量
作废秘钥
问:为什么要作废秘钥?
答:如果密钥被窃取,那么本次通信的秘钥则不再被使用
问:如何作废秘钥
答:秘钥是文件,删除文件不足以删除秘钥,所以在删除秘钥不但要用到密码软件还要再设计计算机系统时考虑
问:秘钥丢了怎么办
答:如果丢失了公钥其实问题不大,但是丢失私钥后悔导致无法解密公钥加密的信息。如果丢失了数字签名的私钥,则无法再进行签名。
Diffie-Hellman秘钥交换
什么是Diffie-Hellman秘钥交换
通过这种方法可以通过交换一些可以公开的信息就足够生成共享的秘密数字,而这一秘密数字可以用作对称密码的秘钥。
Diffie-Hellman秘钥交换步骤
基于口令的密码(PBE)
什么是基于口令的密码
通过可以记住的口令来生成密码,加密和解密用同一个秘钥。
PBE加密过程
PBE解密过程
盐的作用
盐可以用于防御字典攻击,使得用于攻击的候选KEK数量快速增大
口令的作用
口令可以让我们可以记住,而盐和加密后的CEK则通过物理方式保护。
通过拉伸来改良PBE
对于用户来说1000次散列不会带来多大负担,但是对于攻击者来说则是很大的负担
这种将单项散列函数进行多次迭代的方法叫做拉伸。
如何生成安全的口令
- 使用只有自己才能知道的信息
- 将多个不同的口令分开使用
- 有效利用笔记
- 理解口令的局限性
- 使用口令生成和管理工具
使用自己才能知道的信息
- 不要使用对自己重要的事物的名字
- 不要使用关于自己的信息
- 不要使用别人见过的信息
将多个不同的口令分开使用
多个口令用于不同用途可以提高安全性
有效利用笔记
将伪随机数生成器生成的随机字符作为口令,然后将口令记下来放在安全的地方
理解口令的局限性
口令由于长度都比较短,所以极易被暴力破解
使用口令生成和管理工具
通过工具来保存和生成口令,但是也要防止这些工具盗取用户口令