什么是密钥
-
密钥是一个巨大的数字
例如AES的密钥可以是128、192、256比特 -
密钥与明文是等价的
如果获得了密钥就可以解开秘闻得到明文 -
密码算法与密钥
密码算法要公开,密钥必须保存好
各种不同的密钥
按照使用场景分类
-
对称密码的密钥
称为共享密钥,加密和解密都是同一个密钥 -
公钥密码的密钥
加密用公钥,解密用私钥 -
消息认证码的密钥
使用共享密钥,计算消息认证码。并且只有在发送者和接收者之间的共享。 -
数字签名的密钥
使用私钥进行数字签名,任何人都可以使用公钥进行解密后验证。
按照用途分类
-
用于确保机密性的密钥
对称密码、公钥密码的密钥是用于确保机密性的密钥 -
用于认证的密钥
消息认证码、数字签名的密钥是用于认证的密钥
按照使用次数分类
-
会话密钥
每次通信只能使用一次的密钥称为会话密钥,其好处是即使这次通信过程中被破译,也无法影响下次通信。 -
主密钥
一直被重复使用的密钥称为主密钥。
用于加密内容的密钥和用于加密密钥的密钥
用于加密内容的密钥称为CEK,用于加密密钥的密钥称为KEK。这样做的好处是可以减少保管的密钥数量。
密钥的管理
生成密钥
-
用随机数生成密钥
一般是用伪随机数生成 -
用口令生成密钥
用口令的散列值,然后加上一段称为salt的随机数,再作为输入使用单向散列函数生成随机值作为密钥。这种方式称为PEB(Password Based Encryption)
配送密钥
配送方法可以有几种:事先共享密钥、使用密钥分配中心、使用公钥密码、Diffie-Hellma密钥交换等
更新密钥
就是通过定期更换密钥来保证安全性。
书中提到使用密钥的散列值作为下一个密钥,这个可能不是必须的,需要根据实际情况来实现。
保存密钥
密钥保存需要针对密钥进行加密,就是之前提到的KEK。虽然还是需要保存好密钥,但是这样可以大大减少需要保存密钥的数量。
作废密钥
密钥需要作废,是因为有些使用一次就不再使用,也可能是已经泄漏。作废密钥就是要删除,但是需要夏新的是,计算机内一些被删除的密钥仍旧可以恢复,这些都是在作废密钥时需要考虑的。
相比作废密钥,其实密钥丢失更麻烦。
Diffie-Hellman密钥交换
什么是Diffie-Hellman密钥交换
- 其原理就是通信双方通过交换一些可以公开的信息就能够生成出共享的秘密数字,根据这些秘密数字就可以被用作对称密码的密钥。
- 整个过程中通信双方其实是没有真正交换密钥的,所以又被称为Diffie-Helloman密钥协商。
Diffie-Helloman密钥交换的步骤
- A向B发送两个质数P和G。P和G是可以公开的,可以由任何一方生成。
- A生成一个随机数A1。A1是1~P-2之间的整数,这个数字不是公开的,只有A知道。
- B生成一个随机数B1。B1是1~P-2之间的整数,这个数字不是公开的,只有B知道。
- A将(G的A1次方 mod P)这个数发给B
- B将(G的B1次方 mod P)这个数发给A
- A用B发过来的数计算A1次方并求mod P,算出的数就是密钥。
- B用A发过来的数计算B1次方并求mod P,算出的数就是密钥。
基于口令的密码(PBE)
加密
- 伪随机数生成器生成一个称为salt的随机数。
- salt和口令一起做为单向散列函数的输入,得到的输出就是KEK,用来加密会话密钥
- 使用伪随机数生成器生成一个会话密钥,并用此密钥对消息进行加密
- 使用KEK对会话密钥进行加密,加密后的数据和salt保存在安全地方。KEK可以删除掉,因为有了salt和口令随时都能生成KEK
解密
- 用口令和salt生成散列值,也就是KEK
- 使用KEK解密会话密钥
- 使用会话密钥解密消息
网友评论