扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
除了经常用于生成哈希密钥(哈希(Hash)是将一个字符串转换为一个通常是固定长度的值或密钥,它代表着原始字符串。哈希用于在一个数据库中索引并检索项目,因为用较短的哈希化的密钥可查找项目要比用原始值要快得多。)来验证一个下载文件的完整性,MD5算法还广泛被用于口令的验证系统中。在上个世纪90年代,它成为最常见的Unix口令哈希算法,事实上,为了保持向后的兼容性,许多类Unix的系统仍使用MD5来生成口令哈希。
不幸的是,MD5并非是一个很好的口令哈希算法。早在1996年的时候,就发现了第一个MD5漏洞。从那时起,译/解密码者一般都推荐使用其它的算法,如SHA-1和Blowfish等。
MD5哈希算法的问题是它存在着冲突问题。这意味着某人可以生成两个独立的输入,二者都能够从MD5算法生成相同的哈希输出。这有一些严重消极的安全问题。例如,某人可以创建两个可以生成相同加密哈希的文件,其中一个文件看起来是无害的,另外一个文件与第一个文件的哈希相匹配,不过它以某种方法欺骗或攻击某个期望获得无害消息并使用哈希来验证它的人。
因为下载软件暗示着你首先相信软件的提供者,对文件验证的哈希滥用的可能性是很小的。因为你并没有选择会与一个给定的哈希相匹配的输入,你只是不能生成一个程序的两个版本:一个是良性的而另外一个是恶意的,并用此逃过某人的恶意软件防御系统,却同时又提供了一个MD5的哈希验证(两个软件文件都匹配)。
另外一方面,因为在验证系统中一个口令的唯一功能是生成一个特定的哈希,攻克验证系统的安全并不需要欺骗一个人相信对一个特定哈希的第二次输入与第一次相同,一个哈希算法冲突问题的安全意义可能要比验证一个下载文件要大得多。例如,攻克口令验证系统的离线强力攻击在许多情况下会生成口令并将其与口令哈希的本地副本相比较。在一个获得成功验证的口令被发现后,它就被用于在目标系统上进行验证。因为对同样的MD5哈希,不只有一个口令适用,这就使得一次强力攻击变得更加快速和容易。
当然,对这个问题的解决方案是使用一个没有这种冲突问题的加密算法。正如笔者所描述的,多年来,SHA-1一直被认为是一个比MD5更好的选择。不幸的是,在2005年,在SHA-1中也发现了冲突问题。
多数现代的类Unix的系统都借助于几个哈希函数作为其基础,提供了实施口令验证系统的方法。系统不仅仅被设计来给出算法的选择,而且随着技术的进步,还提供了扩展系统性能的方式,以便于合并更多的选择。这种类Unix系统上口令验证系统的模块化对那些需要安全系统的人都说是极为有利的,因为它允许我们随需要而调整默认的系统行为,用以应对日益增长的网络世界中不断演变的安全威胁。随着老的加密算法变得越来越过时,或者被发现拥有密码分析的弱点,有时我们就可以在不需要迁移到更新的系统架构上的情况下,用较新的、更强健的算法来代替它们,用以确保持续的系统安全性。
多数现代的类Unix操作系统默认采用的仍是MD5,不过对FreeBSD和Debian GNU/Linux等允许你从MD5、DES、Blowfish中选择。Blowfish是由Bruce Schneier在1993年开发的一个对称性块加密程序。它被认为是三者中最为强健的,应当成为你的加密算法选择,以作为当今多数类Unix系统上的加密算法选择。事实上,Blowfish是作为DES的替代品而创建的,其中并没有什么已知的密码分析漏洞。
在FreeBSD系统上,将口令验证系统的加密功能从默认的MD5改变为Blowfish是相当简单的。其方法如下:
首先,编辑文件/etc/login.conf,从而将下面的一行“passwd_format=md5:\”变为“:passwd_format=blf:\”。
下一步,用下面的命令重建登录数据库:
> cap_mkdb /etc/login.conf
最后,编辑文件/etc/auth,将下面一行crypt_default = md5变为crypt_default = blf。通过删除行首的“#”,保证在编辑后去掉注释。
此后,你应当改变口令。新的口令应当用Blowfish加密程序存储,而不是用MD5加密算法。在你用passwd命令改变口令之前,所有的旧口令仍将使用MD5哈希。
在Debian GNU/Linux上,从默认的MD5加密算法转换到Blowfishs要稍微费点儿工夫,不过并不是难以完成:
首先,安装libpam-unix2模块。这只能通过Debian的软件管理系统APT完成,应使用下面的命令:
# apt-get install libpam-unix2
下一步,编辑文件/etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-session, /etc/pam.d/common-password等,在每个文件中请你用pam_unix2.so替换原来的pam_unix.so。
最后 ,在编辑common-password口令文件时,将md5改为blowfish。
对于上述的每一个文件,确保你要从所编辑的每一行的行首清除所有的注释字符(即#)。正如FreeBSD中一样,在你用passwd命令改变口令之前(在这个点上新的口令将使用Blowfish加密程序),你仍将用老的MD5哈希口令。
在其它操作系统(如Fedora Core Linux)上也是这样,虽然这个过程在操作系统之间是不同的。OpenBSD默认是使用Blowfish而不是MD5。
免费/开源类Unix系统的一个好处是其灵活性,即用户配置系统适应个人需要的能力。这意味着,在目前的加密发展水平条件下,你有可能在某一天从Blowfish升级到另外一种加密算法,如Twofish 或 AES。
密码使用技术是一场持续的“军备”竞赛,其中恶意的安全破坏者尽力用新的方法来破坏加密算法的有效性,而我们总是尽力首先找到其缺点并修正之,并设法用一个更加强健的算法应对之。可以说,开发一个真正无懈可击的加密算法是不太可能的,我们最好的期望是采用一个当前的技术难于攻克的算法,或者说在我们使用期间,没有人可以轻而易举地破坏它的算法。
因为MD5和SHA-1都有其严重的缺点,而DES由于其采用56位的密钥,所以易于受到强力攻击,对于口令验证而言,应当避免使用这些算法。因为Blowfish在口令验证系统中受到如此广泛的应用,并且没有明显的加密算法弱点,所以最好保证你的Linux和BSD Unix系统采用Blowfish加密程序来保障口令验证的安全。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。