单向散列函数与用户口令的安全保护

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在图 1 所示界面中,通过“Hash”选项可 以 选 择 LM、 MD5、 SHA1 等 各 种 散 列 算 法 ; “Min Len”表示口令明文的最小长度;“Max
图 1 RainbowCrack 彩虹表生成器
Len”表示口令明文的最大长度;“Chain Len”、 “Chain Count”及“N of tables”用于控制所生成
算法[2]步骤如下: ①对输入消息进行适当的填充,使其字节长 度对 512 求余的结果等于 448。 ②将表示原始数据长度的 64 位数据附加在 步骤 1 得到的结果之后。使得消息长度正好是 512 的整数倍。 ③初始化 128 位的缓冲区,用以保存中间和 最终的计算结果。 ④以 512 位的分组为单位对输入消息进行 4 轮循环处理,每轮使用不同的非线性函数,在同 一轮中使用相同的非线性函数进行 16 次运算。 ⑤输出结果。 2.2.2 SHA 安全散列算法 SHA (Secure Hash Algorithm) 主要适用于数字签名标准里定义的数字签名算 法。当输入消息的长度小于 264 位时,SHA 通 过计算产生一个 160 位的消息摘要,然后将该摘 要应用到计算消息签名的数字签名算法中。SHA 采用了与 MD4 相似的设计思想,由美国密码算 法标准的制定机构— ——美国国家标准技术研究院 与美国国家安全局设计,在 1994 年被推荐给美 国政府和金融系统采用,是美国政府目前应用最 广泛的密码算法。 算法[3]步骤如下: ①对输入消息进行适当的填充,使其字节长 度对 512 求余的结果等于 448。 ②将表示原始数据长度的 64 位数据附加在 步骤 1 得到的结果之后。使得消息长度正好是 512 的整数倍。 ③初始化 160 位的缓冲区,用以保存中间和 最终的计算结果。 ④以 512 位的分组为单位对输入消息进行 4
彩虹表是一个庞大的、针对各种可能的字 符组合的预先计算好的散列值集合,可以针对 LM、NTLM、MD5、SHA1 等多种散列算法。有 的网站 (如:http://www.xmd5.org)/ 就利用彩虹 表提供口令的在线查询解密服务,只要在网页 上输入口令的散列值,就可返回对应的口令明 文;有的网站 (如:http://www.freerainbowtables. com)/ 直接提供了多种散列算法的彩虹表的下载; 此外,攻击者还可以使用口令破解工具 (如: RainbowCrack) 生成自己的彩虹表。下图为在 RainbowCrack 中所使用的彩虹表生成器界面。
在采取“用户名 + 口令”的身份认证方式 中,如果用户的口令采用明文方式进行存储或 者通过网络进行传输,则容易被攻击者截获, 因此系统在存储用户口令时,通常是采用单向 散列函数对用户的口令进行运算,存储的是用 户口令的散列值。本文通过对单向散列函数攻
击方法的分析,阐述了使用随机数字符串对用 户口令的传输和存储进行保护的方案。
由于单项散列函数的工作原理是将可变长 度的输入信息压缩变换成固定长度的散列值, 输入信息的样本空间远远大于散列值的样本空 间,因此必然会产生碰撞,即不同的输入信息 通过变换后得到相同的散列值。碰撞攻击的主 要目标是找到一对或多对碰撞消息,主要的方 法有生日攻击、中间相遇攻击、修正分组攻击 等。
要找到一对 MD5 的碰撞消息,大约需要经 过 264 次运算的尝试。但是在 2004 年和 2005 年 , 王 小 云 教 授 发 表 了 破 译 MD5、 HAVAL- 128、MD4 和 RIPEMD 和 SHA-1 算法 的报告,利用两个明文块产生了完全碰撞,将 计算复杂度分别降低到 239 和 232。
64
第4卷
清远职业技术学院学报
2011 年
2.4 对单向散列函数的攻击方法 2.4.1 字典攻击
字典攻击,是指攻击者使用事先收集好的 字符串的集合 (称为字典),逐一尝试可能之用 户口令组合的攻击方式。如果系统通常保存的 是口令散列值,字典攻击的操作将无法直接进 行。为此,Jeff Atwood 提出了彩虹表散列值破解 法 (Rainbow Hash),该方法是字典攻击方法的 一个变种。彩虹表散列值破解法是在获得用户 口令的散列值后,采用快速搜索机制在预先计 算出来的口令明文和散列值对照表 (Rainbow Tables) 中进行匹配,从而破解用户的口令。借 助一个预先计算好的海量散列值表,涵盖所有 可能的字符组合带来的优势,即使在不提升计 算机运算性能的基础上,也可以使攻击进程加 快多个数量级。
在操作系统和应用软件的登录认证上,单项 散列函数得到了广泛应用。用户需要登录系统 时,在客户端输入用户名和口令,客户端程序首 先使用单项散列算法计算出口令的散列值,然后 再将用户名和口令的散列值传送到服务器,服务 器对比系统中存储的散列值,如果一致,则身份 验证通过。例如,在 UNIX 和 Linux 系统里,用 户口令就是通过 MD5 算法计算后将其散列值存 储在文件系统中,系统在不知道用户口令的情况 下就可以确定是否允许用户登录,这可以避免用 户口令被其他用户掌握。
第4卷 第3期 2011 年 06 月
清远职业技术学院学报 Journal of Qingyuan Polytechnic
Vol. 4 , No. 3 June. 2011ห้องสมุดไป่ตู้
单向散列函数与用户口令的安全保护
马 强1 邓 健2 魏 敢3
(1.清远职业技术学院计算机应用系 广东清远 511510;2.新闻出版总署信息中心 北京 100052; 3.清远高级技工学校信息中心 广东清远 511517)
针对王小云教授[4]等破译的以 MD5 为代表 的 Hash 函数算法的报告,美国国家技术与标准 局 (NIST) 于 2004 年 8 月 24 日发表专门评论, 评论的主要内容为:“在最近的国际密码学会 议 (Crypto 2004) 上,研究人员宣布他们发现了 破解数种 HASH 算法的方法,其中包括 MD4, MD5,HAVAL- 128,RIPEMD 还有 SHA- 0。分 析表明,于 1994 年替代 SHA- 0 成为联邦信息 处理标准的 SHA- 1 的减弱条件的变种算法能够
65
第3期
马强 邓健 魏敢 单向散列函数与用户口令的安全保护
总第 17 期
被破解;但完整的 SHA- 1 并没有被破解,也没 有找到 SHA- 1 的碰撞。研究结果说明 SHA- 1 的安全性暂时没有问题,但随着技术的发展, 技 术 与 标 准 局 计 划 在 2010 年 之 前 逐 步 淘 汰 SHA- 1, 换 用 其 他 更 长 更 安 全 的 算 法 (如 SHA- 224、 SHA- 256、 SHA- 384 和 SHA- 512) 来替代。”
2 单向散列函数简介
2.1 定义和性质 单 向 散 列 函 数 [1] (One- way Hash Function)
也称为哈希函数,是通过散列算法,把可变长 度的输入串变换成固定长度输出串 (散列值) 的一种函数。单向散列函数具有以下一些性质:
① 给定输入信息,容易计算出其散列值。 ②给定输入信息的散列值,计算出输入信 息是困难的。 ③改变输入信息的每一比特,都会对其散 列值产生影响。 ④给定输入信息的散列值,构造另一信息, 使其两个信息的散列值相同是困难的。 单向散列函数是一种压缩映射,散列值的 空间通常远小于输入信息的空间。 2.2 常见的单向散列函数 2.2.1 MD5 消 息 摘 要 算 法 MD5 ( Message Digest Algorithm 5) 是在安全领域广泛使用的单向散列 函数,它可以将一个随机长度的信息串通过计 算变换为一个 128 位的消息摘要。MD5 算法在
收稿日期:2011- 05- 12,2011- 06- 01 修回 作者简介:马强 (1964—),男,湖南湘潭人,高级工程师,研究方向:网络安全。
63
第3期
马强 邓健 魏敢 单向散列函数与用户口令的安全保护
总第 17 期
20 世纪 90 年代初由麻省理工学院计算机科学实 验 室 (MIT Laboratory for Computer Science) 的 Ronald Rives 教 授 和 RSA 数 据 安 全 公 司 (RSA Data Security Inc) 的 Ronald L. Rivest 提 出 , 经 MD2、MD3 和 MD4 发展而来。MD5 以 512 位为 单位对输入的消息进行分组,每一分组被划分为 16 个 32 位的子分组,经过了一系列变换,最后 输出 128 位输入消息的散列值。
3 用户口令保护方案
由于新的攻击技术的出现,使得现有的 MD5、SHA 等单向散列函数的安全性受到了严 峻的挑战。为了促进新的单向散列函数算法的 研究,美国国家标准技术研究院于 2007 年开始 在全球征集新的单向散列函数算法。2009 年 7 月 NIST 公布了进入第二轮的 14 个,最终获胜 的算法将于 2012 年确定。
彩虹表的破解成功率;“Charset”是口令明文 里所包含的字符集。设置好参数后,点击“OK” 按钮则开始生成彩虹表。RainbowCrack 是一个 对用户口令进行强力破解的口令破解器,借助 预先计算好的海量散列值表带来的优势,会使 攻击进程加快好几个数量级。 2.4.2 重放攻击
重放攻击是指攻击者截获目标主机与其他 主机通信的数据包,然后向目标主机发送这些 已经接收过的数据包,以实现欺骗目标主机的 攻击方法。用户在登录系统时通常使用用户名 和口令进行身份认证,在认证信息传输的过程 中,如果用户名和口令的散列值被截获,攻击 者即可使用这些信息来登录系统。 2.4.3 碰撞攻击
摘要:本文介绍了单向散列函数的基本知识,对重放攻击、词典攻击和碰撞攻击等方法进行了阐述。通过详细分 析单向散列函数和随机字符串对用户进行口令保护的方案,说明用户口令的抗攻击强度有了较大的提升。最后,本文 给出了.NET 平台和网络教学管理系统 MOODLE 进行口令保护的实例。
关键词:身份认证;口令安全;单向散列函数;重放攻击;字典攻击;碰撞攻击;密码盐 中图分类号:TN918 文献标识码: A 文章编号:1674- 4896 (2011) 03- 0063- 06
1 引言
在国际标准化组织的网络安全体系设计标 准 (ISO 7498- 2) 中定义了:身份认证服务、访 问控制服务、数据保密服务、数据完整性服务 和不可否认服务等五大安全服务。身份认证是 在计算机及网络系统确认操作者身份的过程, 它是整个安全体系中最重要的问题,只有在安 全可靠的身份认证基础上,才能提供其他的安 全服务。
数字签名在 ISO7498- 2 中定义是:附加在 数据单元上的一些数据,或是对数据单元所作的 密码变换,通过这种附加数据或密码变换,使数 据单元的接收者可以确认数据单元的来源和数据 单元的完整性,防止被他人进行伪造。实现数字 签名有很多方法,目前采用较多的是公钥加密技 术和散列算法。单项散列函数是非常重要的数字 签名方法,它对要发送的信息进行不可逆的运 算,产生信息唯一的数字签名 (也称为数字摘要 或数字指纹),并将数字签名与信息紧密联系在 一起发送出去,接收者只要对收到的信息重新进 行相同的运算,便可确认信息是否正确。 2.3.3 身份认证
在计算机及网络系统中常见的身份认证方 式有:基于“用户名 + 口令”的方式、基于智 能卡的方式、基于数字证书的方式和基于生物 特征的方式等。由于成本低廉以及操作简单的 原因,目前大多数的操作系统和应用软件系统 都采取“用户名 + 口令”的身份认证方式,当 用户登录系统时,输入自己的用户名和口令来 验证自己的身份。
轮循环处理,每轮使用不同的非线性函数,在同 一轮中使用相同的非线性函数进行 20 次运算。
⑤输出结果。 2.3 单向散列函数的应用 2.3.1 文件校验
传统的奇偶校验和循环冗余校验用于检测数 据传输中的差错,不能防止对数据的篡改。通过 使用单项散列函数具有的数字指纹特性,可以很 容易地检测出文件是否被修改,或者文件在传输 时是否发生了错误。例如,在许多软件下载站点 里都提供了软件的下载文件以及这些文件的 MD5 散列值,用户使用校验工具对下载的文件 进行 MD5 校验,通过对比散列值是否相同,可 以判断下载的文件与该站点提供的文件是否为同 一文件。 2.3.2 数字签名
相关文档
最新文档