与胡椒(Pepper)的区别,Backend-NodeJS-Golang-Interview_QA安全面试精讲)
密码安全必修课哈希、盐Salt与胡椒Pepper的区别Backend-NodeJS-Golang-Interview_QA安全面试精讲【免费下载链接】Backend-NodeJS-Golang-Interview_QAA collection of Node JS and Golang Backend interview questions please feel free to fork and contribute to this repository项目地址: https://gitcode.com/gh_mirrors/ba/Backend-NodeJS-Golang-Interview_QABackend-NodeJS-Golang-Interview_QA 是一个 Node.js 与 Golang 后端面试题集合仓库。本文聚焦密码安全面试高频考点一次讲清哈希Hash、盐Salt与胡椒Pepper三者的区别与配合方式帮你轻松答对密码到底该怎么存。为什么密码哈希是面试必考题几乎每场后端面试都会问用户的密码是明文存数据库的吗正确答案永远是只存哈希值不存明文。面试官真正考察的是三个层次哈希Hash的本质是什么为什么不可逆为什么直接哈希不安全必须加盐Salt盐和胡椒Pepper差在哪各自防住哪种攻击这三个问题在仓库README.md的 MongoDB and Mongoose 章节第 11–13 题有原题下文按面试回答思路重新梳理。哈希是什么哈希的工作原理与常见误区哈希Hashing就是把任意长度的输入通过数学函数转换成固定长度的字符串。无论密码是 123456 还是 MyPssw0rd同一个哈希函数都会得到同样长度的指纹。哈希的三大关键特性特性含义面试关键词单向不可逆无法从哈希值反推出原密码one-way function固定长度不同长度的输入得到相同长度的输出fixed size output雪崩效应输入只改一个字符输出就完全不同avalanche effect⚠️常见误区密码存储要用慢哈希bcrypt、scrypt、argon2而不是 MD5/SHA-1 这类快哈希——快哈希被 GPU 暴力破解的速度极快。盐Salt防止彩虹表攻击的关键一步盐Salt是在哈希前附加到密码末尾的一段随机值。每个用户的盐都不同且盐不保密、只需唯一可以跟哈希值一起存进数据库。为什么盐如此重要防彩虹表Rainbow Table彩虹表是预先算好的常见密码 → 哈希值对照表。没有盐时攻击者查表秒破加上盐后每个人的输入都不同整张表直接作废。防批量暴力破解即使攻击者拿到整张用户表也只能逐个密码单独爆破无法一次命中一批人。一句话记忆盐是公开的随机数存库里人人不同。胡椒Pepper把秘密藏在数据库之外胡椒Pepper是哈希前加入的全局秘密值作用类似盐但它是严格保密的绝不能和哈希值一起存库通常放在环境变量或配置中心。️盐和胡椒的核心差异一览对比项盐 Salt胡椒 Pepper是否保密不保密可存数据库必须保密单独存放作用范围每个用户一个per-user整个应用共用一个长度要求足够唯一即可建议至少 112 位NIST 推荐防护目标彩虹表、批量暴力破解拖库后的离线爆破使用要求随库走每个应用必须重新生成不能跨应用复用数据库泄露但没有胡椒时攻击者仍可离线爆破有了胡椒他们连正确的哈希输入都构造不出来攻击直接失效。哈希、盐、胡椒三者区别对比表把三者的关系串成一句话最终参与哈希的输入 密码 盐 胡椒其中盐存数据库、胡椒存配置输出哈希值存数据库。只有哈希 → 彩虹表通杀 ❌哈希 盐 → 防彩虹表拖库后仍可离线爆破 ⚠️哈希 盐 胡椒 → 拖库后离线爆破也失效 ✅面试高频追问与标准回答思路追问 1拖库后攻击者拿到了哈希 盐还安全吗答不安全。攻击者可以在本地用彩虹表、暴力破解逐个还原密码。这时胡椒的价值就体现出来了——胡椒不在库里攻击者拿不到无法构造正确的哈希输入。追问 2为什么不能只用胡椒、去掉盐答胡椒是全局同一个值只能防拖库离线爆破盐是每用户不同的随机值才能防彩虹表和批量破解。两者叠加才是完整方案。追问 3为什么 MD5 / SHA-1 不适合存密码答它们是快哈希计算太快GPU 每秒可尝试数十亿次且已被证明存在碰撞问题。密码场景应使用慢哈希算法bcrypt、scrypt、argon2。扩展考点从 Node.js crypto 到 Golang 随机数Node.js内置crypto模块封装了 OpenSSL 的 hash、HMAC、cipher、decipher、sign、verify 等能力README.mdNode JS 章节第 21、31 题实际项目通常再引入 bcrypt 等库处理慢哈希 自动加盐。Express请求对象req上有一组与安全密切相关的属性如.cookies、.signedCookies、.secure是否走 HTTPS面试涉及会话安全时经常考到。Golang标准库自带crypto/sha256等包配合 bcrypt 生态即可实现慢哈希 加盐Golang 面试还常考如何生成真正的随机数README.mdGolang 章节第 26 题——因为盐/胡椒的随机质量直接决定安全上限。数据库延伸安全面试常连带考察 ACID 与隔离级别理解读异常有助于回答数据一致性相关问题。项目资料速查原题快速定位考点所在位置哈希原理 / 盐 / 胡椒原题README.md→ MongoDB and Mongoose 章节第 11–13 题Node.js 是否支持加密crypto 模块README.md→ Node JS 章节第 21、31 题Express 请求、Cookie、会话相关属性README.md→ Express JS 章节第 4、18、19 题Golang 生成真正的随机数README.md→ Golang 章节第 26 题锚点哈希小工具sentence_to_hashing_converter.js把问题句子转成锚点链接名字里也藏着 hashing 的梗想本地刷题一条命令克隆仓库即可git clone https://gitcode.com/gh_mirrors/ba/Backend-NodeJS-Golang-Interview_QA【免费下载链接】Backend-NodeJS-Golang-Interview_QAA collection of Node JS and Golang Backend interview questions please feel free to fork and contribute to this repository项目地址: https://gitcode.com/gh_mirrors/ba/Backend-NodeJS-Golang-Interview_QA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考