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