Store 加密关键安全
关键必须从不是 hardcoded 或 committed 到源 control. Learn HSM, KMS, envelope 加密, 和键 derivation patterns 为安全键 storage.
- 1
golden 规则: 从不存储加密关键在 plaintext alongside 数据它们加密. Options 从最多到 最少安全: HSM (hardware), KMS (cloud 服务), envelope 加密 (主键 wraps 数据关键), 键 derivation (derive 从 password/passphrase).
- 2 PBKDF2 密钥派生 →
Derive 加密键 从用户 password using PBKDF2 具有高 迭代数量 (100,000+). salt 必须是 random 和 stored separately. 此是 为用户-controlled 关键 where 否服务器-边 storage exists.
- 3 bcrypt 哈希生成器 →
Hash 主 password 具有 bcrypt 为认证. Note: bcrypt 输出是 不 suitable as 加密键 directly — use PBKDF2/scrypt 为键 derivation, bcrypt 为 password 验证.
- 4 AES 加密器 →
Use derived 键到 加密数据. 键从不 touches 磁盘在 plaintext — 它 exists 仅在 内存期间加密操作和 是 zeroed afterward.
- 5
为服务器-边 applications, use KMS (AWS KMS, GCP KMS, Azure 键 Vault) 或 HSM. 主键 从不 leaves hardware; 你调用 API 到加密/解密. 为客户端-边, derive 关键从 用户 passwords 具有 strong KDF 和存储仅 salt.
常见问题
- 能够 I 存储键 在环境变量?
- Environment 变量是 better than hardcoding 但仍然可见到 任何人具有处理 access (e.g., /proc/pid/environ 开 Linux). Use KMS 或 secrets manager (Vault, AWS Secrets Manager) 为 production. Environment 变量是 acceptable 为 development 仅.
- 什么是 差集之间 PBKDF2 和 bcrypt?
- PBKDF2 是 KDF 该 produces 键的 任何长度 — use 它为 加密关键. bcrypt 是 password 哈希函数具有固定输出 — use 它为 password 验证. 它们服务不同 purposes 和是 不 interchangeable.