密码学
胡椒(Pepper)
别称: 服务端密钥, Pepper 秘密
定义
服务端持有的一段秘密,在口令哈希之前与每个口令拼接,与数据库分开存储,用于在哈希泄露后缓解离线破解风险。
胡椒(pepper)是一段在应用层面共享的长秘密(通常 32 字节以上),在口令送入哈希函数或 KDF 之前与之拼接,与每用户唯一的盐配合使用。与盐不同,胡椒被存储在凭证数据库之外,如配置文件、环境变量或硬件安全模块(HSM)中;这样即便攻击者只拿到哈希表,也难以在离线状态下高效破解。常见做法是先在应用中计算 HMAC(pepper, password),再将结果送入 Argon2id;或者将胡椒作为秘密材料的一部分输入到 KDF。胡椒是一种纵深防御措施,不能替代强 KDF、盐和速率限制,但能显著提高仅数据库被攻破时的破解成本。
示例
- 在应用中计算 HMAC-SHA-256(pepper, password),再用 Argon2id 哈希。
- 将 pepper 存储在 HSM 中,使应用无法直接将其导出。
相关术语
盐(Salt)
在口令哈希之前与之拼接的唯一随机值,用于抵御彩虹表并使每个用户的哈希都不同。
Argon2
现代的内存密集型口令哈希与密钥派生函数,在 2015 年口令哈希竞赛中胜出,并由 RFC 9106 标准化。
密钥派生函数(KDF)
从口令、共享密钥或主密钥等秘密素材派生出一个或多个强加密密钥的密码学函数。
HMAC
基于密码学哈希函数的带密钥消息认证码结构,由 RFC 2104 与 FIPS 198-1 定义。
bcrypt
基于 Blowfish 密钥编排、带可调成本参数的自适应口令哈希函数,由 Provos 与 Mazières 于 1999 年提出。
密码学密钥
高熵的秘密或公开值,用于参数化加密算法,以加密、解密、签名或认证数据。