报文完整性
数字签名
数字签名类比于手写签名
- 发送方数字签署了文件,前提是他是文件的拥有者/创建者
- 可验证性,不可伪造性,不可抵赖性
- 谁签署,接收方可以向他人证明是他,而不是其他人签署了这个文件
- 签署了什么:这份文件,而不是其他文件
简单的对m的数字签名
- Bob使用他自己的私钥对m进行了签署,创建数字签名 K B K_B KB(m)
- 假设Alice收到报文m,以及数字签名 K B − ( m ) K^{-}_B(m) KB−(m)
- Alice使用Bob的公钥 K B + K^+_B KB+对 K B − ( m ) K^-_B(m) KB−(m)进行验证,判断 K B + ( K B ( m ) ) = m K^+_B(K_B(m))=m KB+(KB(m))=m是否成立
- 如果 K B + ( K B ( m ) ) = m K^+_B(K_B(m))=m KB+(KB(m))=m成立,那么签署这个文件的人一定拥有Bob的私钥
Alice可以验证
- Bob签署了m
- 不是其他人签署了m
- Bob签署了m而不是m’
不可抵赖性
- Alice可以拿着m以及数字签名 K B − ( m ) K^-_B(m) KB−(m)到法庭上,来证明是Bob签署了这个文件m
报文摘要
对长报文进行公开密钥加密算法的实验需要耗费大量的时间
Goal:固定长度,容易计算的"fingerprint"
- 对m使用散列函数H,获得固定长度的报文摘要H(m)
散列函数的特性
- 多对一
- 固定长度不变
- 给定一个报文摘要x,反向计算出报文在计算上是不可行的x=H(m)
数字签名 = 对报文摘要进行数字签署
Bob发送数字签名的报文
Alice校检签名和报文完整性
散列函数算法
- MD5散列函数(RFC 1321)被广泛的应用
- 4个步骤计算出128-bit的报文摘要
- 给定一个任意的126-bit串x,很难构造出一个报文m具有相同的摘要x
- SHA-1也被使用
- US标准[NIST,FIPS PUB 180-1]
- 160-bit报文摘要