【问题标题】:Salts and Passwords - prefix or postfix盐和密码 - 前缀或后缀
【发布时间】:2010-10-25 18:01:06
【问题描述】:

这是一个关于需要散列的加盐短语的问题。

我想知道将盐作为前缀或后缀是否更安全? 盐+词组或 词组+盐

我的问题来自commentMD5s 上的这篇帖子。我不确定我是否理解作者评论背后的原因。

【问题讨论】:

  • 真正的问题是你为什么使用MD5?
  • 对于 Dru Nelson 在 skrenta 的关于 MD5 的博客文章中的评论,我仍然没有得到合理的解释。但共识似乎是(仅多数),盐的放置没有区别。我只是不想忽略某些事情(也就是说,如果 Dru Nelson 在他的评论中确实对某些事情有所了解)
  • Dru Nelson 对 Skrenta 博客文章的评论在此转载,以方便您阅读:不过我要补充一下.. 您使用 hash = md5(s . 'xyzzy') 来克服恶意方的挥手示例想要引起碰撞是行不通的。将相同的东西附加到两个哈希相同的消息将产生两个哈希相同的新消息。事实上,这使得创建散列到同一事物的任意消息变得如此容易(它根本不需要“老练的攻击者”)

标签: security encryption passwords salt


【解决方案1】:

与其他人所说的不同,这很重要!如果您愿意,请使用@einstein HMAC

为什么前缀不好,因为可以计算校验和的中间状态,直到给定的固定盐前缀。然后开始并行计算其余部分。总之phrase+saltsalt+phrase 更安全,但HMAC(salt, phrase) 甚至更好。

related reading

【讨论】:

    【解决方案2】:

    当有人对盐的使用有疑问时,我担心这是因为他们正忙于(重新)发明他们一开始就不应该做的事情。基于这个问题,我的建议是使用 HMAC。

    【讨论】:

    • 如果您使用 HMAC,您仍然需要一个必须存储在某处的私钥......影响基于盐的安全性的相同因素会影响您的 hmac 算法的密钥选择
    • 问题是关于盐的位置 - 而不是密钥管理。 HMAC 的使用解决了定位问题。
    【解决方案3】:

    什么时候消化盐并不重要:前缀、后缀、中缀都会产生不同的哈希,但达到击败彩虹表或其他预哈希字典攻击的相同目的。

    我认为该评论与 MD5 中的漏洞有关,而不是一般的散列。细节看不懂,不过has to do with finding two prefixes that produce the same hash.

    【讨论】:

    • 碰撞攻击不是这样工作的。您需要知道被散列的完整消息以产生冲突。您不能从部分消息中产生冲突
    • 您会发现两条不同的消息会产生哈希冲突。然后将相同的后缀附加到这些前缀中的每一个,然后会发生另一个冲突。我认为引用的评论试图解释使用此漏洞的密码破解,但我不明白他认为它是如何工作的。
    • 真的吗? MD5 的输出只是它的最后一个中间哈希值。如果您有两个不同的前缀发生冲突,则意味着中间散列值是相同的——并且该值是散列的整个状态。如果两个处于相同状态的 MD5 哈希消化相同的数据,您希望结果是什么?见win.tue.nl/hashclash/rogue-ca
    • comment stricken,是的,如果你为冲突添加前缀并且你附加了相同的后缀,它也会导致冲突。我不知道如何在密码存储场景中利用它
    【解决方案4】:

    盐是加在前面还是后面没有区别。

    以下因素虽然会影响安全性

    1. 您的 salt 是私有的(如果是的话,它有多私有?)。越私密越好。这意味着,如果您可以避免将盐存储在您的数据库中,即使您的数据库受到威胁,您也可以使您的系统免受暴力攻击。
    2. 你的盐是随机的吗?如果说您的数据库受到损害并且您的盐存储在数据库中,这有助于防御彩虹表攻击。注意:如果存储的密码足够长,它们可以免受暴力攻击。
    3. 你的盐够长吗?你的盐越长,你就越安全。

    【讨论】:

    • 不是我(我赞成),但我猜是因为你的第一颗子弹。私有盐并不能真正增加安全性。即使破解者获得了哈希和盐的访问权限,只要盐足够长并且每个密码都是随机的,彩虹表在计算上也是令人望而却步的。
    • 当然,但是如果盐是公开的,仍然很有可能暴力破解短密码
    • @SamSaffron :这是一个 necro-reply,但是在 salt 前面加上前缀是个坏主意,因为这样更容易暴力破解密码。如果您对sssspppp 的盐/密码字节进行哈希处理,攻击者可以计算已知ssss 部分的哈希状态,然后将其用作重复攻击未知pppp 部分的“大本营”。跨度>
    • 如果盐比哈希更私密,那么它根本就不是盐。 私有的东西是密钥(所以也许你正在使用带密钥的哈希函数),而不是盐。
    【解决方案5】:

    从技术上讲,这并不重要,只要盐是独一无二的并且不容易猜到。只是不要像我一样犯了储存盐的错误。

    对字符串“加盐”的目的是以一种比 MD5 散列更个性化和更独特的方式对其进行加扰。没有正确或错误的方法,只要你是唯一知道它是如何工作的人。无论哪种方式都会达到效果,就是让生成的MD5哈希对应彩虹表,方便破解密码。

    【讨论】:

    • 好吧,从技术上讲,如果破解者采用通用方式,那么以特定方式进行操作可以防止这种心态。换句话说,如果我的研究是有效的,前缀和后缀更容易受到某些威胁的影响。因此,如果您是安全偏执狂,那么投反对票可能是合适的,我不会假装自己是此类事情的无所不知的专家。 ^_^
    • -1 Salt 与加密密码一起公开存储,以防止对许多加密密码的摊销攻击。它不应与私钥混淆。
    • 什么?我一直认为盐是在密码之前散列之前/后缀的。显然我当时弄错了,我得去做更多的研究。耶!
    • @SamSaffron,投反对票的原因是它错了。 “盐”是具有特定含义的技术术语,具有与哈希本身相同的安全级别是该含义的一部分。如果某些东西是私有的,它不是盐,它是一个密钥(也许你使用的是 HMAC 加密的散列而不是加盐的散列)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多