在安全应用中使用的Hash函数称为密码学Hash函数
密码学Hash函数要求两种情况在计算上不可行(即没有攻击方法比穷举更有效):
- 对预先指定的Hash值找到对应的数据块(单向性)
- 找到两个不同的数据块对应相同的Hash值(抗碰撞性)
Hash函数被用于判断数据是否被篡改过(数据完整性)
Hash函数的操作过程:
输入数据的长度首先被填充为某固定长度(如1024位)分组的整数倍,填充的内容包括原始消息的位长度信息。填充长度信息能够提高攻击者修改信息而保持Hash值不变的难度。
一、密码学Hash函数的应用
1.消息认证(Message Authentication)
是用来验证消息完整性的一种机制和服务
- 消息认证确保收到的数据确实和发送时的一样(即没有修改、插入、删除或重放)
- 还要求消息认证机制确保发送方声称的身份是真实有效的
当Hash函数用于提供消息认证功能时,Hash函数值通常称为消息摘要
消息认证中使用Hash函数的本质如下: - 发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去
- 接收者收到后对消息执行同样的Hash计算,并将结果与收到的Hash值进行对比
- 如果不匹配则接收者推断出消息(也可能是Hash值)遭到了篡改
Hash函数 的运行结果必须通过安全的方式进行传输。
Hash码能够通过以下方法用于提供消息认证:
- 使用对称密码算法加密消息和Hash码
- 使用对称密码算法只对Hash码进行加密
- 不使用加密算法,仅使用Hash函数也能实现消息认证
- 对整个消息和Hash值加密
b所需计算少,a、d需要加密整个消息,如果不要求提供保密性,b比a、d更有优势。
更一般地,消息认证是通过使用消息认证码(MAC)实现的,即带密钥的Hash函数。
通常情况下,通信双方基于共享的同一密钥来认证彼此之间交互的信息时,就会使用MAC。
MAC函数将密钥和数据块作为输入,产生Hash值作为MAC码,然后将MAC码和受保护的消息一起传递或存储。
检查消息完整性的时候,使用MAC函数对消息重新计算,并将计算结果与存储的MAC码对比。