持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
密码学家的六个工具:对称密码,公钥密码,单向散列函数,消息认证码,数字签名,伪随机数生成器。
单向散列函数(也称消息摘要):
单向散列函数可以实现完整性的检查,可以辨别出“篡改”,但无法辨别出“伪装”。
当我们不仅需要确认消息的完整性,同时还需要确认消息是否真的来自发送者,紧靠完整性检查是不够的,还需要进行“认证”。
消息的完整性(integrity),指“消息没有被篡改”这一性质,完整性也叫一致性。
消息的认证(authentication)指的是“消息来自正确的发送者”这一性质。
用于认证的技术包括“消息认证码”和“数字签名”。
消息认证码能够向通信对象保证消息没有被篡改以及非攻击者所伪装。
数字签名不仅能向通信对象保证消息没有被篡改以及非攻击者所伪装,还能够向所有第三方作出这样的保证。
认证需要使用密钥,也就是通过对消息附加发送者的密钥,来确保消息真的来自发送者。
消息认证码( Message Authentication Code)简称 MAC 是一种确认完整性并进行认证的技术。
MAC的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,MAC可以输出固定长度的数据,这个数据称为MAC值。可见,MAC比单向散列函数多了密钥,MAC是一种与密钥相关联的单向散列函数。要计算MAC必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息认证码正是利用这一性质来完成认证的。和单向散列函数一样,哪怕消息发生1比特的变化,MAC值也会产生变化,消息认证码正是利用这一性质来确认完整性的。
对称密码的“密钥配送问题”,消息认证码也同样存在。
认证加密(AE: Authenticated Encryption, AEAD:Authenticated Encryption with Associated Data)
认证加密将对称密码与消息认证码相结合,同时满足机密性、完整性和认证三大功能。
认证加密方式:
Encrypt-then-MAC: 先用对称密码将明文加密,然后计算密文的MAC值。(可防止发送伪造密文的选择密文攻击)
Encrypt-and-MAC: 将明文用对称密码加密,并对明文计算MAC值。
MAC-then-Encrypt: 先计算明文的MAC值,然后将明文和MAC值同时用对称密码加密。
HMAC: 是一种使用单向散列函数来构造消息认证码的方法。
针对消息认证码的重放攻击(replay attack):
攻击者并没有破解消息认证码,只是将正确的MAC截获并通过重复发送,让接收方多次执行相同的消息请求。
防御方法:
1)序号 :通讯双方需要记录最后一个消息的序号
2)时间戳(由于考虑通讯延迟,需留有缓冲时间,多少还是存在重放攻击的空间)
3)nonce: 接收者先向发送者发送一个一次性的随机数nonce,发送者在消息中包含这个nonce并计算MAC。
消息认证码无法解决的问题:“对第三方证明”和“防止否认”
数字签名
利用非对称密码,使用私钥签名(加密),使用公钥验证(解密),相当于把公钥密码反过来使用。
由于公钥密码速度慢,一般先对消息进行hash,然后对hash值进行签名。将签名和消息一起发给对方,对方验证签名和消息的hash值相同。由于使用公钥验证,任何人都可以对签名进行验证,且由于使用私钥签名,所以可以防止否认。
数字签名的作用不是保证机密性,如果需要机密性,需要和密码组合使用。
公钥证书
验证数字签名的时候需要公钥,如果确认公钥是合法的呢?可以将公钥作为消息,对它加上数字签名。像这样对公钥施加数字签名所得到的就是公钥证书。