代码之家  ›  专栏  ›  技术社区  ›  gamers2000

把一堆数据当作盐

  •  1
  • gamers2000  · 技术社区  · 15 年前

    我在想,用杂碎做盐有什么坏处吗?

    例如hashAlgorithm(数据+hashAlgorithm(数据))

    这可以防止使用查找表,并且不需要在数据库中存储salt。如果攻击者没有访问源代码的权限,他将无法获得算法,这将使暴力强制变得更加困难。

    思想?(我有一种直觉认为这很糟糕——但我想看看它是否真的是,如果是,为什么。)

    5 回复  |  直到 15 年前
        1
  •  6
  •   Wim    15 年前

    如果攻击者无法访问源代码

    这叫做 security through obscurity “,这通常被认为是不好的。一个天生安全的方法总是更好的,即使唯一的区别在于你感觉不到拯救“因为他们不知道如何”。有人可以而且永远都会找到算法——通过仔细的分析、尝试和错误,或者因为他们通过ssh-ing到您的共享托管服务或其他一百种方法中的任何一种找到了源代码。

        2
  •  6
  •   erickson    15 年前

    使用数据的散列作为数据的盐是 安全。

    salt的目的是从其他相同的输入中产生不可预测的结果。例如,即使许多用户选择了相同的输入(例如,作为密码),在应用一个好的salt之后,您(或攻击者)将无法辨别。

    当salt是数据的函数时,攻击者 可以 预先计算查找表,因为每个密码的salt是可预测的。

    最佳盐是从用随机种子初始化的密码伪随机数生成器中选择的。如果你真的不能储存额外的盐,可以考虑使用一些对每个用户都不同的东西(比如用户名),以及一些特定于应用程序的东西(比如域名)。这并不像随机的盐那么好,但它并没有致命的缺陷。

    记住,salt不必是秘密的,但它不能是被salt的数据的函数。

        3
  •  3
  •   Kevin Montrose    15 年前

    此优惠 只是散列没有进步 . 使用随机生成的盐。

    盐析的目的是使两个按时间顺序不同的值的散列不同,这样做会中断预先计算的查找表。

    考虑:

    data=“测试”
    hash=hash(“test”+hash(“test”))

    每当data=“test”时,hash将是常量。因此,如果攻击者拥有算法 总是 有算法)它们可以预先计算数据项字典的哈希值。

        4
  •  3
  •   Messa    15 年前

    这不是salt-您刚刚修改了hash函数。攻击者不必为原始哈希算法使用查找表,只需为修改后的哈希算法获取该表;这不会阻止查找表的使用。

        5
  •  0
  •   deamon    15 年前

    最好把真实的随机数据当作盐来使用。假设有一个实现,其中用户名ist作为salt值。这将导致“根”或“管理”等常用名称的安全性降低。

    如果您不想为每个散列创建和管理salt值,那么可以使用一个强大的应用程序范围salt。在大多数情况下,这将是绝对足够的,而且许多其他东西将比散列更容易受到攻击。