开发者工具 · SHA 哈希计算器
哈希不是加密:为什么 SHA-256 哈希无法解密
· 为什么它很重要
密码学 安全 编码
没有键也没有逆:哈希是一种单向函数。这篇文章解释了与加密的区别,为什么哈希查找站点似乎反转哈希,以及这对于哈希个人数据意味着什么。
请解密这些哈希值——这张票揭示了对哈希值的误解
支持票证到达,要求解密一些 SHA-256 哈希值。阅读它的开发人员怀疑对哈希是什么有误解。这种混淆是有道理的——散列和加密都涉及密码算法,两者都会产生看起来混乱的输出,而且都与安全相关。但它们是根本不同的工具。加密是可逆的;哈希不是。这种区别非常重要,以至于混淆它们已经破坏了真正的安全系统。该票证代表了影响系统设计的理解上的常见差距。
哈希函数是一种单向函数。您可以对输入进行哈希处理以获取摘要,但没有密钥,也没有逆操作可以从摘要中恢复输入。这不是限制或错误;它是哈希的定义属性。 ToolAcre SHA 哈希计算器会生成您粘贴的文本的摘要,并且没有“解密”按钮,因为不存在任何按钮。该操作在数学上是不可逆的,而不是通过选择。没有反向功能不是您可以要求的功能。
加密有密钥和逆元;散列两者都没有——简单来说定义上的区别
加密的工作方式不同。加密算法采用明文和密钥,并生成密文。密文已被扰乱,没有密钥就无法读取。至关重要的是,相同的密钥可以将密文解密回明文。加密在设计上是可逆的。您进行加密以保证数据保密;您解密以再次阅读它。加密的安全性取决于密钥的保密性。只有钥匙的持有者才能逆转转变。
散列没有密钥,也没有反转。您对某些内容进行哈希处理以生成固定长度的摘要。相同的输入总是产生相同的摘要。不同的输入会产生不同的摘要,这就是抗碰撞属性。但你不能获取摘要并生成输入。该函数只有一种方式。如果您需要加密数据以便稍后解密,那么散列是错误的工具。如果您需要数据指纹来验证或内容寻址,则散列是正确的。选择正确的工具需要了解其中的差异。
哈希查找站点如何工作 - 常见输入的预先计算字典,而不是解密
这种区别非常重要,它是密码验证安全性的基础。服务器不存储密码。它存储对密码进行哈希处理的结果。当用户登录时,服务器会对他们提交的内容进行哈希处理,并将其与存储的值进行比较。如果服务器遭到破坏并且其数据库被盗,攻击者不会获得密码本身,而只能获得哈希值。哈希的单向性质意味着攻击者无法根据哈希对密码进行逆向工程。系统的安全性取决于此属性。
如果服务器使用加密代替——如果它加密了密码并且可以解密它们——那么窃取密钥的妥协将立即暴露每个密码。之所以专门选择散列,是因为它是不可逆的。这就是密码系统使用散列而不是加密的原因。不可逆性不是限制;这是整个安全模型。加密密码数据库从根本上来说比散列密码数据库弱,因为加密是可逆的。
低熵输入是弱点 - 为什么散列电子邮件地址、电话号码或短 PIN 几乎不能提供保护
哈希查找站点的存在是为了制造解密的假象。这些站点托管常见输入及其哈希值的预先计算表。 “彩虹表”是预先准备好的字典:一个表可能包含一千个最常见密码的哈希值,或达到一定长度的所有字母数字组合,或多种语言的整个单词列表。网站运营商已经完成了哈希工作并存储了结果。当有人向查找站点提交哈希值时,该站点不会解密任何内容。它只是在表中查找哈希值。如果散列存在(如果某些字典单词或密码模式恰好匹配),则表将返回原始输入。对于不熟悉该技术的人来说,这看起来像是魔法解密,但它只是一个数据库查找。该网站没有反转哈希值;它将其与预先计算的值进行比较。
工作示例 - 对可猜测的值进行哈希处理并显示字典如何恢复它,而不是它无法恢复的长随机值
这就是低熵输入容易受到攻击的原因。如果您对诸如“密码”之类的常见密码或诸如某人的电子邮件地址之类的可预测值进行哈希处理,则查找站点很可能已经计算出该哈希值并将其存储起来。查找立即返回原始值。如果您对 256 字符随机字符串进行哈希处理,则地球上没有任何查找站点会预先计算该特定哈希值。查找站点没有返回任何内容,因为输入不在他们的字典中。哈希的安全性完全取决于输入的熵。
ToolAcre SHA 哈希计算器直接演示了这一点。对一个常见单词进行哈希处理,如果坚定的攻击者运行自己的字典服务,他们就可以查找它。对一个很长的随机值进行哈希处理,即使是一个巨大的字典也不太可能包含它。哈希的确定性(相同的输入给出相同的输出)使得字典攻击成为可能。这也是哈希对于验证有用的原因。启用查找的同一属性也启用验证。
当您真正需要加密时 - 数据必须返回的情况,以及哈希是错误工具的情况
当您真正需要加密时(当您需要发送秘密数据并稍后恢复它时),密码是正确的工具。 AES 是对称加密的现代标准:共享一个密钥,用于加密明文并解密密文。 RSA 或椭圆曲线加密用于非对称加密:公钥加密,私钥解密。这些工具在设计上是可逆的。安全性来自密钥保密性,而不是来自不可逆性。错误在于在需要加密的地方使用散列。如果您对信用卡号进行哈希处理并打算稍后进行验证,则无法对其进行解密。如果您对个人标识符进行哈希处理,然后需要恢复它,那么哈希处理是错误的选择。这些情况都需要加密。
一个有效的示例清楚地区分了这两种用途。您有一个用户 ID 列表,必须对彼此以及您自己的员工保密。您使用 AES 对其进行加密并存储结果。稍后,当您需要查找用户时,您可以解密并读取它们。散列法不起作用;一旦经过哈希处理,ID 就会永远丢失。相反,您有用户密码。您对它们进行散列并存储散列。当用户登录时,您会对他们的提交进行哈希处理并与存储的值进行比较。您永远不需要自己恢复密码。加密会出错;初始设置后,您将无法使用明文密码。
这不包括什么 - 键控和加盐哈希设计,这提高了标准,但是一个单独的主题
加盐和密钥散列值得单独处理,因为两者都不会将摘要转换为加密。盐使相同的低熵输入产生不同的存储记录,并且密钥可以限制谁计算有效的身份验证值。输出保持不可逆;恢复尝试仍然通过测试候选输入而不是应用逆来进行。
密码散列会增加故意成本和盐,而 HMAC 使用密钥对消息进行身份验证。 ToolAcre 不实现这两种操作。将它们保留在本文之外可以避免描述简单的 SHA-256 加上临时前缀(相当于经过审查的密码记录或消息身份验证结构)的危险捷径。
要点:只有一种方法 — ToolAcre SHA 哈希计算器计算摘要;没有反向按钮,因为不存在任何反向按钮
ToolAcre SHA 哈希计算器向您展示哈希操作:粘贴文本,获取摘要,完成。任何逆转都是不可能或有意的。该工具正确地拒绝提供“解密”功能,因为该功能不存在。如果您需要加密,请使用正确的密码。不存在反转并不是该工具的限制;这是关于散列的数学事实。单向函数是一种强大的工具,正是因为它们无法逆转。他们以无法收回的方式提交数据。他们提供验证而不透露原件。即使数据库被盗,它们也能保证密码系统的安全。加盐且经过适当成本调整的密码散列变得无法通过猜测来逆转。不可逆性就是安全机制。
ToolAcre SHA 哈希计算器计算的摘要是单向的、有目的的,并且由浏览器自己的 Web Crypto 实现正确计算。如果您需要散列以进行验证或完整性,请使用它。如果您需要对数据保密并稍后检索,加密就是您的工具。了解不可逆散列和可逆加密之间的区别对于安全性和构建满足您实际需要的系统至关重要。