版权声明:转载请附上博客地址 https://blog.csdn.net/weixin_38134491/article/details/84574775
消息认证函数
任何消息认证或数字签名都有上下两层,下层有产生认证符的函数,认证符是一个用来认证消息的值,上层协议将该函数作为原语使接收方可以验证消息的真实性。
产生认证符的函数有哪些?
- Hash函数:将任意的消息映射为定长的Hash值的函数,以该Hash值作为认证符
- 消息加密:对整个消息加密后的密文作为认证符
- 消息认证码(MAC):它是消息和秘钥的函数,它产生定长的值,以该值作为认证符
消息加密
消息加密提供了一种认证手段,对称密码和公钥密码体制中对消息加密的方法是不同的,
- 对称加密
- 公钥加密
下面的我们先谈谈公钥加密:
直接使用公钥加密可以提供保密性但不能提供认证。发送发A使用接收方B提供的公钥PUb对M加密,因为只有B有对应的私钥PRb,所以只有B能对消息解密,但是任何攻击者可以假冒A用B的公钥对消息加密,仅仅用公钥加密不能保证真实性。
若钥提供认证,则A用自己的私钥对消息加密,而B用A的公钥对接收的消息解密
和对称密码情形的推理一样,这提供了认证功能,因为只有A有PRa,能产生用PUa可解密的密文,所以该消息一定来自于A,
同样,对明文也必须有某种内部结构能使接收方区分是否是真实的明文还是随机的位串
但大家有没有发现问题?发送方A用自己的私钥对消息加密(也就是签名),接收方能用A的公钥对接收到的消息解密,同样攻击者也可以用公开的公钥对其解密,所以这种方法不能提供保密性
如果既要提供保密性又要提供认证,那么A可以先用自己的私钥对M加密(也就是数字签名),然后A用B的公钥对上诉结果加密,这可保证保密性。但这种方法的缺点是,一次通信中要执行4次而不是两次复杂的公钥算法
Reference:《cryptography and networking security》6th ,William Stalling