代码之家  ›  专栏  ›  技术社区  ›  Waleed Eissa

用“盐”有那么好吗?

  •  0
  • Waleed Eissa  · 技术社区  · 15 年前

    我并不自称是安全方面的专家,但在我看来,添加一种盐并不能真正起到很大的作用。

    你的意见?

    复制:

    13 回复  |  直到 7 年前
        1
  •  21
  •   Cœur N0mi    6 年前

    事实上,salt是为每个密码随机生成的,与密码一起存储时没有任何形式的混淆。

    密码从不存储在数据库中,只存储哈希(MD5、SHA1、SHA2*等)。

    “password”的MD5总是286755fad04869ca523320acce0dc6a4。如果您只是将MD5存储在密码数据库中,那么只需查找该字符串,就可以知道那里的密码是password。

    关键是,如果攻击者获得密码数据库的副本,密码散列将毫无意义;您甚至无法判断是否有2个或更多用户使用相同的密码。

    编辑:

    如果你认为这个数学公式是不可逆的,那么你就有可能真的丢失了数据,而且你正在把多个密码映射到同一个最终散列。这实际上增加了攻击者找到哈希密码的机会,因为任何适当的密码都可以工作。

    如果你是XOR'ing并且保证了XOR值的安全,那么它只是一个额外的秘密,需要保存在某个地方,泄露这个秘密实际上会丢失你所有的密码(同样是由于彩虹表)。由于没有额外的秘密,操作无法逆转,但可以重复,每个密码都需要单独攻击。

    编辑:当然,这现在是完全相关的: I just logged in as you

        2
  •  16
  •   Anton Gogolev    15 年前

    安全公理:永远不要在数据库中存储纯文本密码。

    考虑到这一点,salt突然起了很大的作用:由于这种salt,攻击者预先计算的哈希(前面提到的彩虹表)没有任何价值。

        3
  •  10
  •   Logan Capaldo    15 年前

    salt与加密散列一起使用,而不仅仅是在密码前面加上。您不存储salt密码或密码,而是存储salt密码的散列。salt的目的是保护用户不受“错误”密码选择的影响,而不是模糊密码。你从不只用盐。

    盐不能抵御字典的攻击。 它可以抵御rainbow表样式的攻击,在rainbow表样式的攻击中,将生成一个大的哈希表和相应的输入文本。好的密码可以防止猜测(字典攻击),盐类可以防止有人得到你的散列密码,因为使用预计算的表很昂贵。当我说“坏”时,我指的是可能存在于现有表中的密码。

        4
  •  6
  •   Jonathan Rupp    15 年前

    盐是用来防御彩虹桌的,但它的美丽在于,知道它是一种盐 削弱它作为防御措施。这是因为这并不是说一个salt有什么神奇的特性或者别的什么——这是因为它是攻击者输入的密码中额外添加的一段信息,并且是针对他攻击的密码的——它不是可以被多个帐户重用的东西——甚至不是同一服务器上的多个帐户。

    当然,攻击者可以将salt添加到他的rainbow表中,但是您已经使他的rainbow表必须比您使用的salt数据大一倍。

        5
  •  5
  •   OtherDevOpsGene Jon Strayer    15 年前

    这与您提到的原因不同:它使攻击者更难使用字典攻击。

    看一看 You Want Salt With That?

        6
  •  5
  •   Matthew Flaschen    15 年前

    你说的没有道理。让我们用一个简单的例子来演示。假设您使用的是MD5,攻击者有一个表。该表包括:

    约翰1970->D3 88 99 BC 0C B5 DC 0E D1 7F BB F7 EB F4 EA B2

    如果他们偷了你的未加盐的数据库,看到一个散列D3…B2,他们就会知道(忽略冲突)密码是john1970,然后他们就可以在你的站点和其他站点上使用这个密码。但是,如果使用salt 123456(显然,随机的更好),他们会看到一个哈希:

    2A CA 76 59 03 23 35 61 E0 20 49 11 8F铁F3 0E

    相反。即使他们在得到散列时能够破坏salt(您应该尝试通过单独存储它们来防止这种情况),他们也会留下:

    md5(x+123456)=2A…0E

    盐是一种非常有效的技术,应该尽可能的使用。另一方面,你所说的“非标准方法”似乎是在试图发明你自己未经证实的哈希算法。算了吧。

        7
  •  4
  •   Mihai Limbășan    15 年前

    如果你的盐足够大,那么制作彩虹桌是不现实的。

    http://en.wikipedia.org/wiki/Salt_(cryptography)

        8
  •  2
  •   ewanm89    15 年前

    盐渍确实有很大的区别,但你用的是哪种哈希算法?记住,salt总是会被添加到字段中的任何内容中,因此即使发现冲突,如果他在表单的该字段中键入冲突,salt也会被添加,并且冲突不再匹配。

        9
  •  2
  •   Jeromy Irvine    15 年前

    salt的真正价值不仅在于保护一条记录不受攻击,而且在于使它成为这样:如果多个用户拥有相同的密码,那么它们在散列形式中会显得不同。为了有效,你必须使用每记录盐。

    如果您的安全加密/哈希机制导致具有相同密码的用户在您的数据库中具有相同的表示形式,那么您为攻击者提供了一种一次破解多个帐户的简单方法。

        10
  •  1
  •   S.Lott    15 年前

    “攻击者很可能猜到第一部分是盐。”

    真正地?怎样?他们如何知道salt的结束和用户提供的密码的开始?从密码中解析salt的规则是什么?

        11
  •  0
  •   MatthewMartin muthu    15 年前

    我不能说问题背后的数学,但我会用一个物理隐喻。只是因为我知道门把手上的锁可以用通气工具或喷灯打破,我还是锁上了门。我在一栋公寓楼里,还有一扇门要进,我也锁上了那扇门,尽管你可以说那扇门是浪费时间,因为很多人都有钥匙,而且门常常是开着的。

        12
  •  0
  •   TrayMan    15 年前

        13
  •  0
  •   om252345    15 年前

    "1-2-3-4-5? 这是我一生中听过的最愚蠢的组合!一个白痴的行李上也会有这种东西!”

    啊,太空球。。。

    不管怎么说,是的,如果你用123456作为你的“盐”,007,安全性可能不如它可以。尽管如此,你还是让它变得更难你正在消除字典攻击作为破解它的一种手段(除非他们知道盐…)。当然,这仍然可能是野蛮的强迫,但诚实的事实是,没有什么是不可撼动的。你所做的一切都是为了让它更难破解,因为不可能破解是不可能做到的。