51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

解释哈希函数在密码存储中的应用,为什么需要加盐(salt)和多次哈希(如BCrypt的多次迭代),并说明哈希碰撞(collision)的风险及如何降低。

360安全开发初级工程师难度:中等

答案

1) 【一句话结论】:在密码存储中,哈希函数通过添加随机盐并多次迭代计算,生成唯一且抗暴力破解的哈希值,有效抵御彩虹表攻击和哈希碰撞风险,保障用户密码安全。

2) 【原理/概念讲解】:哈希函数的核心是单向压缩(输入任意长,输出固定长),但直接存储密码哈希易被彩虹表破解(预计算所有常见密码的哈希)。加盐(随机字符串,如16字节随机数)是为了每个密码的哈希值唯一,即使密码相同,加盐后哈希不同;多次哈希(如BCrypt的1000次迭代)是为了增加计算成本,使暴力破解时间指数级增长。类比:给每个密码锁加一个独一无二的锁芯(盐),然后多次转动钥匙(迭代哈希),破解者需要尝试更多组合才能找到正确钥匙。

3) 【对比与适用场景】:

特性普通哈希(如MD5)加盐+多次哈希(如BCrypt)
加盐否(无随机盐)是(存储随机盐,与密码结合)
迭代次数1次(单次哈希)多次(如1000次迭代)
安全性低(易被彩虹表破解,碰撞风险高)高(防彩虹表,抗暴力破解,碰撞概率极低)
适用场景非密码存储(如文件校验)密码存储(用户登录验证)
注意点不可用于密码存储(易破解)必须存储盐(否则无法验证)

4) 【示例】:伪代码展示BCrypt的密码存储流程。

function storePassword(username, password):
    salt = generateRandomString(16)  // 16字节随机盐
    hashed = bcrypt.hashpw(password + salt, bcrypt.gensalt(rounds=1000))  // 1000次迭代
    store(username, salt, hashed)  // 存储盐和哈希值

验证时:

function verifyPassword(username, password):
    storedSalt, storedHash = retrieve(username)
    if bcrypt.checkpw(password + storedSalt, storedHash):
        return true
    else:
        return false

5) 【面试口播版答案】:(约80秒)
“面试官您好,哈希函数在密码存储中用于将用户密码转换为固定长度的哈希值,但直接存储易被彩虹表破解。首先,加盐是为了每个密码的哈希值唯一,即使密码相同,加盐后哈希不同,防止彩虹表攻击。其次,多次哈希(如BCrypt的1000次迭代)是为了增加计算成本,对抗暴力破解,因为破解者需要尝试更多组合才能找到正确哈希。哈希碰撞是指不同输入得到相同哈希,虽然概率极低,但强哈希算法(如BCrypt)通过增加迭代次数和随机盐,显著降低了碰撞风险。总结来说,加盐和多次哈希共同作用,使密码存储更安全,能有效抵御常见攻击。”

6) 【追问清单】:

  • 问:为什么BCrypt比SHA-256更适合密码存储?
    答:BCrypt内置了加盐和多次迭代,而SHA-256仅单次哈希,且BCrypt的迭代次数可配置,能根据硬件调整计算成本,更灵活。
  • 问:加盐的具体作用是什么?
    答:加盐是为了确保相同密码的哈希值不同,即使密码泄露,攻击者也无法通过预计算的彩虹表快速破解,因为每个用户的盐不同。
  • 问:多次哈希的迭代次数如何选择?
    答:迭代次数需平衡安全性和性能,通常根据硬件性能设置(如1000-5000次),避免过高的计算成本影响系统响应。
  • 问:哈希碰撞的数学概率如何?
    答:对于n位哈希,碰撞概率约为1/(2^n),但强哈希算法通过增加迭代次数和随机盐,实际碰撞概率极低,可忽略。
  • 问:如何处理盐的存储?
    答:必须与哈希值一起存储,因为验证时需要用相同的盐重新计算哈希并与存储值比较,否则无法正确验证密码。

7) 【常见坑/雷区】:

  • 坑1:认为多次哈希是为了提高安全性(实际主要是增加计算成本,对抗暴力破解,而非直接增强哈希函数的抗碰撞性)。
  • 坑2:使用弱哈希算法(如MD5、SHA-1),这些算法已被证明易被碰撞攻击,不适合密码存储。
  • 坑3:盐的长度不足或未随机生成,导致相同密码的哈希值相同,无法防彩虹表。
  • 坑4:未存储盐,导致验证时无法正确计算哈希,验证失败。
  • 坑5:迭代次数过少,计算成本低,容易被暴力破解。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1