散列函数的应用研究

(整期优先)网络出版时间:2024-05-22
/ 2

散列函数的应用研究

施利萍

(武警警官学院信息通信系,四川 成都 621000)

[内容摘要] 散列函数作为一种重要的密码学工具,以其输出散列值长度固定、不可逆、抗碰撞等特性,在数据完整性校验、数据索引、数据单向加密等方面发挥着重要作用。本文首先介绍了散列函数的基本特性,随后详细探讨了散列函数在软件发布、用户密码保护、消息认证码、云盘上传和下载服务等方面的应用,可作为密码学课程散列函数部分理论和实践教学的教学案例。

[关键词]密码学 散列函数 教学案例 数据完整性 数据索引

在信息社会中,数据安全已成为社会关注的热点。散列函数作为一种有效的密码学工具,因其独特的性质而广泛应用于各个领域。本文将介绍散列函数的基本特性,并探讨其在数据安全领域的应用,这些应用场景可为密码学课程散列函数部分理论和实践教学提供教学案例,让学生通过其应用实例加深对散列函数的理解,并能给够灵活运用到其他问题。

  1. 散列函数的特点

散列函数是一种将任意长度的数据映射为固定长度数据的函数,又称为哈希函数、消息摘要函数。输出的散列值也称为哈希值、消息摘要或者指纹。常见的散列函数有MD5,SHA-1,SHA-256,国产散列函数是SM3。大多数散列函数的结构都是迭代型的,将输入数据经过分组、填充、多轮循环运算,其产生的散列值完全与输入值没有直接的对应规律。因此具有以下特性:(1)长度固定:输出散列值长度固定,与输入数据长度无关,例如MD5函数的散列值长度是16字节。(2)不可逆(单向性):无法由散列值反推出原始数据,具有不可逆性,只能加密,不能解密。(3)高度离散性:输出的散列值没有任何规律。输入的微小变化导致输出的大变化。(4)抗碰撞:即不同输入数据产生相同散列值的概率极低。正因为有了这些特性,散列函数可作为数据的唯一标识,可应用于数据完整性校验、数据索引、数据单向加密等方面。

  1. 数据完整性校验

数据的完整性,是指“数据没有被篡改”,完整性也叫一致性。由于散列函数具有高度离散性和抗碰撞性,因此数据若有一丝修改则其散列值会大不同,可通过比较数据的散列值检验数据是否一致。具体有以下应用场景:

(1)软件发布。当开发者发布了一个程序或软件,为防止程序被置入木马,开发者可以在发布程序时,同时发布其散列值,这样别人下载程序后,只需要自己计算一遍散列是否与发布者发布的相同,就能知道程序有没有被人篡改。根据散列函数的不可逆性与抗碰撞性,篡改者几乎不可能使篡改后的程序散列值与原散列值相同。很多软件,尤其是安全相关的软件都会把通过单向散列函数计算出的散列值公布在自己的官方网站上。用户在其他网站下载到软件之后,可以自行计算散列值,然后与官方网站上公布的散列值进行对比。

(2)传输文件完整性校验。当我们要传输一个非常大的文件,由于网路传输过程的不可靠因素,有可能导致文件传输不完整或者有可能被篡改,如何校验接收端文件与发送端一致呢?只需要在先在发送端先计算出文件的散列值,并把这个结果发送给接收端。接收端在接收文件完成后,也计算一次散列值。如果两者一致,则文件一定是完整的。

(3)消息认证码。消息认证码是一种确认完整性并进行认证的技术。发送者与接收者事先共享密钥,发送者将消息和共享密钥共同计算散列值(消息认证码MAC值)并发送给接收者[1]。接收者根据接收到的消息和共享密钥生成MAC值并与接收到的MAC值进行比对,以验证消息的完整性和发送者的身份。然而,消息认证码存在重放攻击的风险。为防御重放攻击,可以在生成MAC值的输入中添加一次性随机数。发送者在消息中包含这个随机数并计算MAC值。由于每次通信时随机数的值都会发生变化,因此无法进行重放攻击。

  1. 数据单向加密

在网站上注册时输入的用户名和密码等账户信息是保存在网站服务器上的数据库。那密码作为个人账号的关键信息,若在数据库中以明文形式保存,那么存在很大的安全隐患,因为网站服务器管理或工作人员可以取得所有用户的账号信息。因此密码不能以明文形式存储,但若采用对称或非对称加密方式加密密码,则用户在登录网站时就必须先解密才能核对输入用户名或密码是否与数据库中的一致。实际上,在信息系统中为保证用户账号安全,数据库中存储的密码并非原文,而是哈希值,这样保证了密码的安全,因为散列函数的不可逆特性,数据库管理员和其他非法获取数据库者是无法推算出用户的密码原文。

用户注册时,用户输入了自己能记住的密码,由程序生成输入密码的哈希值,服务器保存用户名和密码哈希值。在用户登录时,用户输入的是密码原文,程序计算该密码原文的哈希值,服务器程序判断用户输入密码哈希值与数据库中保存的该用户的密码哈希值是否相等。若相等,则登录成功。

  1. 数据索引

数据的散列值是数据指纹,可以唯一标识数据。因此在云盘服务中可以将散列值用作数据的索引值,只要数据不相同,索引值就不会重复。

在使用云盘上传服务时,用户选择本地文件,点击上传后,服务器程序接收到文件后,计算其哈希值,并在数据库中保存文件路径、文件的哈希值,根据哈希值生成的提取码返回给用户。当用户需要下载存储在云盘服务器上的文件时,在网页中输入提取码,云盘服务器程序根据提取码在数据库中找到对应文件的记录,根据文件路径找到文件实际存储位置,并通过网络发送给用户。

  1. 结束语

本文系统地介绍了散列函数的基本特性和其在数据完整性校验、数据单向加密以及数据索引等领域的广泛应用,不仅为密码学课程的教学提供了丰富的实践案例,也为学生深入理解散列函数并灵活应用于实际问题提供了宝贵的资源。

参考文献

[1] 结城浩,周自恒.图解密码技术[M].北京:中国工信出版集团.2016:165.