【问题标题】:The Time it takes to search database搜索数据库所需的时间
【发布时间】:2012-04-26 10:59:31
【问题描述】:

我是 Web 开发和数据库的新手,我正在尝试以合理的安全性和速度实现密码验证。我已经阅读了关于对密码进行哈希处理并为每个用户附加一个唯一的盐,以阻止人们生成彩虹表。

我的问题涉及我必须搜索以验证用户的时间。由于我不知道谁在任何给定时间尝试连接,在我看来,我需要从 salt 列中检索每个字段,然后对提交的密码 + 每个唯一的 salt 进行哈希处理,然后最后将每个输出与哈希值进行比较表中的字符串?

所以我必须为每个哈希组合(密码+盐)提交单独的查询?这似乎会非常缓慢。我错过了一个可以加快进程的技巧吗?还是只是为了更好的安全性而将其吸收并牺牲速度?还是我弄错了,以当今计算机的速度,这根本不是问题?

【问题讨论】:

    标签: database authentication time hash salt


    【解决方案1】:

    您不能仅根据密码对用户进行身份验证。密码是对用户是他们所说的身份的验证,因此您需要某种用户标识符——姓名或其他任何东西。然后表格看起来像users(..., name, password, ...),您执行SELECT password WHERE name = "foo" 并从那里继续进行验证。方便的形式是将生成派生密钥所需的所有参数保留在密码字段内,例如像这样:

    algo$salt$password hash
    

    对于散列本身,您不希望它很快 - 请参阅 PBKDF2、bcrypt 或 scrypt 等密钥派生函数。通常,调整参数以使导出一个密钥大约需要一秒钟是使暴力破解不可行的好方法。

    【讨论】:

    • 哇,我是个白痴。我不敢相信我没有想到在名称列中搜索匹配字符串而不是哈希该用户的密码+盐进行比较。在我的辩护中,现在是凌晨 3 点 30 分,我现在是大声笑的。谢谢。
    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2021-11-29
    • 2020-04-09
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多