彩虹表是一种用于破解加密哈希函数的工具,它利用预先计算好的身份验证数据库来发现明文密码。彩虹表解决方案使用一种算法来快速查找破解密码哈希所需的信息。虽然现代密码加盐和哈希算法已基本使彩虹表失效,但仍有许多应用程序由于疏忽或对重要细节的忽视,而没有使用这些现成的工具,而是依赖于单一的哈希密码。
使用彩虹表或其他哈希破解方法的想法源于身份验证数据库中密码哈希的使用。任何使用密码进行身份验证的系统都必须以某种形式存储这些密码。最糟糕的情况是,应用程序开发人员将密码存储为明文,这使得所有注册用户的密码极易受到黑客甚至内部系统管理员的未经授权访问。虽然这种不良做法已存在数十年,但在在线应用程序中仍然很常见。
有些程序员会做一件看似毫无意义的事,但实际上却毫无意义的事情,就是对密码进行一次哈希计算。有一些常见的哈希算法可以将密码转换成看似随机的字符串,但实际上,用彩虹表很容易进行逆向工程。当你在系统中进行身份验证时,你输入的密码会使用与密码数据库中存储密码相同的算法进行哈希运算。如果哈希值匹配,则表示你已成功通过身份验证。这时,彩虹表就派上用场了。
彩虹表存储了所有明文密码的单向哈希值,长度从 1 个字符到 7 个甚至 8 个字符不等。(一个用于简单哈希算法的 8 个字符彩虹表将占用高达 32PB 的数据库空间!)。当黑客窃取简单密码哈希值的缓存时,他们可以在彩虹表中查找哈希值来找到明文密码。
随着密码加盐技术发展到最多支持 32 个字符,彩虹表已无法用于此类查找(来源:彩虹表已死)。更重要的是,许多标准二进制文件会对密码进行迭代哈希处理。这意味着对加盐密码进行多次哈希运算,例如,将第 764 次哈希运算的最终值存储在数据库中,以便在应用程序进行身份验证时进行比较。彩虹表无法破解这些密码。
当黑客窃取密码缓存时,他们可以通过彩虹表查找前 100 个密码,快速确定这些密码是否经过了 N 次加盐和哈希处理。如果找到匹配项,他们就可以逆向推导,判断程序员是否偷懒,没有对密码进行加盐或迭代哈希处理,或者两者兼而有之。开发人员经常跳过这些重要步骤,因此黑客现在只需通过简单的彩虹表逆向工程即可获取您的密码。
彩虹表是破解无盐密码和单次哈希密码的快速有效方法。如果您在中小企业开发应用程序,请务必询问密码的存储方式。询问开发人员他们的盐值(SALT)有多大(8 个字符较小,32 个字符足够),然后询问他们在存储哈希值之前对密码进行了多少次迭代。LastPass 对主密码进行了超过 100,000 次哈希运算。对于您的组织来说,这可能有点过头了,但应该需要几百到几千次。
常用的加盐和哈希函数包括:“ Argon2、scrypt、bcrypt和PBKDF2 ”。
无论您做什么,都请将此视为应用程序开发中的一项关键需求。如果您无法在密码架构中构建单点登录 (SSO),并且需要存储密码哈希值,则必须使用本文中提到的工具对密码数据库进行加盐和迭代哈希处理。
来源:
延伸阅读:
相关术语:
发现并分享最新的网络安全趋势、技巧和最佳实践——以及需要注意的新威胁。
作者:Katie Boquetti | 编辑:Craig Taylor Craig Taylor 编辑:验证码应该测试……
了解更多