参考答案
Hash函数被广泛的应用于各种不同的安全应用和网络协议中,本篇列举常见的五个应用场景。
1.消息认证
消息认证是用来验证消息完整性的一种机制和服务。消息认证确保收到的数据确实和发送时的一样,还要求消息认证机制确保发送方声称的身份是真实有效的。当Hash函数用于提供消息认证功能时,Hash函数值通常被称为消息摘要。
消息认证中使用Hash函数的本质:
发送方根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接收方接收后对于消息执行同样的Hash计算,并将结果与收到的Hash值进行比较。如果匹配,则消息准确。反之,消息遭受了篡改。
Hash码能够通过不同方法用于提供消息认证,具体如下:
- 使用对称密码E加密消息和Hash码,由于只有A和B共享密钥K,所以消息必然发自A处,且可通过验证Hash码证明数据在传输过程中未被更改。
- 使用对称密码只对Hash码加密。由于明文无需加密性的应用,这种方案大大减少了加密操作的负担。
- 不使用加密算法,仅使用Hash函数实现消息验证。该方案中,通信双方共享相同的秘密值S,发送方A将消息M和秘密值S串联后计算其Hash值,并将得到的Hash值附在消息M后发送。因为接收方B同时掌握S值,所以能够重新计算该Hash值进行验证。
- 在方案c的基础上将整个消息和Hash值加密,以提供保密性。
处于成本和速度方面的考虑,人们越来越对那些不包含加密函数的方法感兴趣,因此b和c方案更受青睐,不过如果对整个消息有加密型要求,则a和d仍具有实际意义。
实际应用中,消息认证通常使用消息认证码(MAC)实现。MAC函数将通信双方共享的密钥和数据块作为输入,产生Hash值作为MAC码,然后将MAC码和受保护的消息一起传递或存储。需要检查消息的完整性时,使用MAC函数对消息重新计算,并将计算结果与存储的MAC码对比。
MAC提供安全保护,用于抵抗不知道密钥的攻击者的攻击。在实现中,往往使用比加密算法效率更高的特殊设计的MAC函数。
2.数字签名
2.1 数字签名的应用比消息认证更广泛。
2.2 在进行数字签名时,使用用户的私钥加密消息的Hash值,其他任何知道该用户公钥的人都能够通过数字签名来验证消息的完整性。
2.3 Hash码用于提供数字签名的方案主要有以下两种:
- 使用发送方的私钥利用公钥密码算法对Hash码进行加密。这种方法也可提供认证;由于只有发送方可以产生加密后的Hash码,所以这种方法也提供了数字签名。
- 若既希望保证保密性又希望有数字签名,则先用发送方的私钥对Hash码加密,再用对称密码中的密钥对象消息和公钥算法加密结果进行加密,这种技术比较常用。
3.产生单向口令文件
在操作系统中,存储口令的Hash值而不是口令本身,当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值来进行用户验证。
4.用于入侵检测和病毒检测
将每个文件的Hash值H(F)存储在安全系统中(如CD-R),随后就能通过重新计算H(F)来判断文件是否被修改过。入侵者只能够改变F,而不能改变H(F)。
5.用于构建随机函数PRF或用作伪随机数发生器。
6.基于Hash函数的PRF可用于对称密码中的密钥产生。
以上,是Java面试题【散列算法的应用场景有哪些】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—