我们所说的密钥其实分为很多种类,下面我们来整理一下。
对称密码的密钥与公钥密码的密钥
在对称密码中,加密和解密使用同一个密钥。由于发送者和接收者之间需要共享密钥,因此对称密码又称为共享密钥密码。对称密码中所使用的密钥必须对发送者和接收者以外的人保密,否则第三方就能够解密密文了。
在公钥密码中,加密和解密使用的是不同的密钥。用于加密的密钥称为公钥,顾名思义它是可以被公开的;用于解密的密钥称为私钥,只有需要进行解密的接收者才持有私钥,私钥也称为秘密密钥。相对应的公钥和私钥之间具有深刻的数学关系,因此也称为密钥对。
消息认证码的密钥与数字签名的密钥
在消息认证码中,发送者和接收者使用共享的密钥来进行认证。消息认证码只能由持有合法密钥的人计算出来。将消息认证码附加在通信报文后面,就可以识别通信内容是否被篡改或伪装。由于“持有合法的密钥”就是发送者和接收者合法身份的证明,因此消息认证码的密钥必须对发送者和接收者以外的人保密,否则就会产生篡改和伪装的风险。
在数字签名中,签名的生成和验证使用不同的密钥。只有持有私钥的本人才能够生成签名,但由于验证签名使用的是公钥,因此任何人都能够验证签名。
用于确保机密性的密钥与用于认证的密钥
对称密码和公钥密码的密钥都是用于确保机密性的密钥。如果不知道用于解密的合法密钥,就无法得知明文的内容。
相对地,消息认证码和数字签名所使用的密钥,则是用于认证的密钥。如果不知道合法的密钥,就无法篡改数据,也无法伪装本人的身份。
会话密钥与主密钥
当我们访问以 https 开头的网页时,Web 服务器和浏览器之间会进行基于 SSL/TLS 的加密通信。在这样的通信中所使用的密钥是仅限于本次通信的一次性密钥,下次通信时就不能使用了。像这样每次通信只能使用一次的密钥称为会话密钥。
只能一次性使用的密钥有哪些好处呢?由于会话密钥只在本次通信中有效,万一窃听者获取了本次通信的会话密密钥,也只能破译本次通信的内容。由于在下次通信中会使用新的密钥,因此其他通信的机密性不会受到破坏。
虽然每次通信都会更换会话密钥,但如果用来生成密钥的伪随机数生成器品质不好,窃听者就有可能预测出下次生成的会话密钥,这样就会产生通信内容被破译的风险。
相对于每次通信都更换的会话密钥,一直被重复使用的密钥称为主密钥(master key)。
用于加密内容的密钥与用于加密密钥的密钥
加密的对象是用户直接使用的信息(内容),这样的情况下所使用的密钥称为 CEK(Contents Encrypting Key,内容加密密钥);相对地,用于加密密钥的密钥则称为 KEK(Key Encrypting Key,密钥加密密钥)。
将密钥进行加密好像有点奇怪,但可以减少需要保管的密钥数量。在很多情况下,之前提到的会话密钥都是被作为 CEK 使用的,而主密钥则是被作为 KEK 使用的。