【密码学原理】hash函数
Hash 函数的特点:将可变长度的数据块作为输入,产生固定长度的Hash值。
Hash函数应该具备的特性:单向性和抗碰撞性。
Hash函数的应用:保证数据完整性。
Hash函数应用于消息认证
消息认证是用来验证消息完整性的一种机制或服务,消息认证保证发送方和接收方的信息一致,通常还要保证发送方的身份真实有效。
上图展示了Hash码不同方式的消息认证:
- 使用对称密码算法加密消息和Hash码。这种方式A和B共享**k,能够提供保密性。
- 使用对称密码算法只对Hash码进行加密。这种方式应用于无需保密性的场景,减少了加解密的负担。
- 不使用加密算法,仅使用Hash函数实现消息认证。A和B共享**S,B可以验证Hash值。
- 将整个消息和Hash值加密,能够提供方案3中不能提供的保密性。
人们越来越对那些不含加密函数的方法感兴趣:
- 加密软件速度慢。
- 加密硬件成本不容忽视。
- 加密硬件的优化通常是针对大数据块的。
- 加密算法可能受专利保护,会增加成本。
Hash函数应用于数字签名
消息认证通常用消息认证码(MAC)实现,即带**的Hash函数。
数字签名与MAC相似,在进行数字签名过程中,用户的私钥加密消息作为Hash的输入,然后输出消息摘要,其他任何知道该用户公钥的人都可以通过数字签名来验证消息的完整性。攻击者只有获得了私钥,才能篡改消息。
Hash用于数字签名的方案如图所示
- 使用发送方的私钥,利用公钥密码算法对Hash码加密。
- 如果既希望实现保密性,又希望有数字签名,则先用发送方的私钥对Hash码加密,然后后对称密码中的**对消息和公钥算法加密结果进行加密。
Hash函数还可以用于产生单向口令文件,用于入侵检测和病毒检测,用于构建随机函数或者伪随机数发生器。