1. 秘密的精华
密码的本质是把较长的秘密抽象成较短的秘密,即密码的安全是密钥的安全。
2. 什么是密钥
密钥是一个巨大的数字,使用对称密码,公钥密码,消息认证码,数字签名等技术都需要密钥。
密钥的大小不重要,重要的是密钥空间的大小,密钥空间越大,暴力破解越难,密钥空间大小由密钥长度决定。
DES密钥:56比特,7字节。
3DES密钥:DES-EDE2 密钥长度112比特(14字节),DES-EDE3密钥长度168比特(21字节)。
AES密钥:128,192和256比特中选择。
3. 各种不同的密钥
对称密码密钥和公钥密码的密钥:
对称密码的加密和解密使用同一个密钥,是共享密钥。
公钥密码中,加密的密钥称为公钥,解密的密钥称为私钥。公私钥的数学关系叫做密钥对。
消息认证码的密钥和数字签名的密钥:
消息认证码中发送者和接收者使用共享密钥认证。
数字签名中签名的生成和验证使用不同的密钥,公私钥对。
用于确保机密性的密钥和用于认证的密钥:
对称密码和公钥密码的密钥都是用于确保机密性的密钥。
消息认证码和数字签名使用的密钥是用于认证的密钥。
会话密钥和主密钥:
在密钥使用的次数角度。在很多SSL通信的场景中分为会话密钥和主密钥。
会话密钥仅限于一次通信使用,像这样每次通信只能使用一次的密钥称为会话密钥。
相对于每次通信都更换的密钥,一直被重复使用的密钥称为主密钥。
CEK和KEK:
密钥加密密钥:KEK,用于加密密钥的密钥。
内容加密密钥:CEK,用于加密通信内容的密钥。
4. 密钥管理
生成密钥:生成密钥最好的方法是使用随机数。
用口令生成密钥:口令 + 盐值 ----> 单向散列函数 ---> 密钥。盐值即是随机数,用来防止字典攻击。
配送密钥:事先共享密钥,使用密钥中心分配,使用公钥密码,Diffie-Hellman等。
更新密钥:使用共享密钥进行通信的过程中,定期改变密钥。
保存密钥:密钥难以记忆。对密钥进行加密的意义:记不住密钥,又害怕被窃取。
有效的方法:减少需要保管的密钥数量。数量少价值高,数量多,价值低。价值是被破解时遭受的损失的大小。
作废密钥:不再需要的密钥就作废。
5. Diffie-Hellman密钥交换
通过交换一些公开的信息,就能生成出共享的秘密数字--->对称密钥。IPsec就使用经过改良的Diffie-Hellman密钥交换。
步骤:
1、Alice和Bob发送两个质数P和G。
2、Alice生成一个随机数A,A是1 ~ P-2之间的整数。
3、Bob生成以及随机数B,B是1~P-2之间的整数。
4、Alice将G^A mod P这个数发给Bob。
5、Bob将G^B mod P这个数发送给Alice。
6、Alice用Bob发过来的数计算A次方并求mod P,即:(G^B mod P) ^A mod P => G ^AxB mod P。
7、Bob用Alice发过来的数计算B次方并求mod P,即:(G^A mod P) ^ B mod P => G ^BxA mod P。
窃听者有P,G,G^A mod P,G^B mod P这四个数。但是求出G ^AxB mod P 很复杂,即G^A mod P 求A这类问题,属于有限域的离散对数问题。
生成元的意义:
P的生成元的乘方结果域1 ~ P-1中的数字是一一对应的。正是有这样一一对应的关系,Alice能够从1~P-2范围中随机选择一个数字。
椭圆曲线Diffie-Hellman密钥交换:
利用“椭圆曲线上的离散对数问题”的复杂度来实现密钥的安全交换。
6. 基于口令的密码(PBE)
根据口令生成密钥并用该密钥进行加密的方法:
① 生成KEK ② 生成会话密钥并加密 ③ 加密消息
PBE解密:
① 重建KEK ② 解密会话密钥 ③解密消息
盐的作用:
伪随机数生成器生成的随机数,生成密钥KEK时会和口令一起输入单向散列函数。盐是抵御字典攻击的,字典攻击是事先进行计算并转备好候选密钥队列的方法。
字典攻击:
攻击者事先准备好大量的候选KEK,窃取到会话密钥后,尝试解密,利用事先准备好的KEK,就可以大幅缩短尝试时间。
盐的长度越大,候选的KEK的数量也会随之增大,事先生成候选KEK会变得很复杂。
加盐与不加盐的区别:
不加盐:
攻击者可以事先计算口令所对应的KEK值(可能进行字典攻击)
加盐:
即便口令相同,只要盐不同,KEK值也不同,因此无法进行字典攻击
口令的作用:
不能凭记忆去记住口令。
PBE中,通过口令生成密钥KEK,再用这个密钥加密会话密钥(CEK)。
在使用基于口令的密码(PBE)时,需要将盐和加密后的CEK通过物理的方式进行保护。
通过拉伸改良PBE:
生成KEK时,多次使用单向散列函数就能提高安全性。这种将单向散列函数进行多次迭代的方法称为拉伸。