密钥轮换与检测
轮换密钥并发现泄露。
密钥轮换与检测 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
为什么要轮换密钥
密钥轮换是定期用新机密替换旧机密并停用旧机密的做法。即使密钥得到了完美存储,轮换仍然有益:
- 限制暴露窗口:如果密钥在未被察觉的情况下泄露,轮换会使其失效。
- 减少密码学磨损:使用单个密钥加密的数据更少。
- 满足合规要求:PCI DSS 等标准要求定期轮换。
- 移除离职人员的访问权限:前员工曾经看到的凭据会变得毫无用处。
核心思想是:机密变化得越频繁,对攻击者的价值衰减得越快。轮换会将泄露从永久性问题变成暂时性问题。
轮换生命周期
简单粗暴地轮换——删除旧密钥并创建新密钥——会导致服务中断,因为仍持有旧密钥的使用者会立即失效。安全的轮换会使用重叠的有效期:
- 1. 生成:在现有密钥旁生成新密钥。
- 2. 分发:将新密钥分发给所有使用者。
- 3. 激活:启用新密钥处理新的操作。
- 4. 宽限期:在使用者完成切换期间,让两个密钥都保持有效。
- 5. 停用:确认没有任何使用者仍在使用旧密钥后,撤销旧密钥。
这种双密钥重叠是零停机轮换的基础。
零停机轮换实践
为了在轮换过程中不影响流量,服务必须在宽限期内同时接受旧密钥和新密钥。验证器会使用当前仍有效的任一密钥检查传入令牌。
对于签名密钥,请发布多个公钥,并在标头中使用密钥 ID(kid)标识哪个密钥对令牌进行了签名。使用方会自动选择匹配的密钥。
只有在遥测数据确认旧密钥已无流量后,才将其弃用。
# A JWKS endpoint publishes multiple valid public keys.
# Tokens carry a 'kid' so verifiers select the right one,
# allowing old and new keys to coexist during rotation.
{
"keys": [
{ "kid": "2024-q1", "kty": "RSA", "n": "...", "e": "AQAB" },
{ "kid": "2024-q2", "kty": "RSA", "n": "...", "e": "AQAB" }
]
}自动化轮换
手动轮换很少见、容易出错,而且在压力下往往会被跳过。请将其自动化。云端平台和密钥保管平台可以按计划轮换,无需人工参与:
- AWS Secrets Manager运行轮换 Lambda 函数,创建新的凭据、测试凭据并使其生效。
- HashiCorp Vault轮换根凭据,并签发短期动态机密,使轮换持续进行。
- Cloud KMS可以按固定间隔自动轮换加密密钥。
自动轮换也是应对疑似泄露最可靠的方式:只需一条命令或一个计划,就能将轮换应用到所有位置。
# Enable automatic rotation every 30 days in AWS Secrets Manager
aws secretsmanager rotate-secret \
--secret-id prod/billing/db \
--rotation-lambda-arn arn:aws:lambda:...:func:rotate-pg \
--rotation-rules AutomaticallyAfterDays=30加密密钥与凭据的轮换
轮换密码很直接:签发新的密码并更新使用方。轮换加密密钥则更困难,因为旧数据是用旧密钥加密的。
标准解决方案是信封加密:使用每个对象专属的数据密钥加密数据,再使用主密钥加密密钥(KEK)加密该数据密钥。轮换时,只需使用新的 KEK 重新加密较小的数据密钥,而不必重新加密整个数据集。
Vault 的 Transit 引擎通过版本化密钥处理这一过程:它会跟踪每段密文是由哪个版本加密的,并允许您将其重新封装为最新版本。
# Rotate a Transit key to a new version
vault write -f transit/keys/orders-key/rotate
# Rewrap old ciphertext under the newest key version
# (cheap - re-encrypts the data key, not the whole payload)
vault write transit/rewrap/orders-key ciphertext='vault:v1:abc...'紧急轮换
计划轮换用于日常维护;紧急轮换则用于应对入侵。当密钥已知或疑似遭到泄露时,您可以跳过缓慢的宽限期并立即轮换,必要时接受短暂的服务中断。
充分准备可以让这一过程能够顺利进行:
- 为每种机密类型准备一份经过测试的运行手册。
- 提前了解每个机密的所有使用方。
- 准备好自动化流程,让紧急轮换只需一条命令即可完成,而不是临时开展研究项目。
紧急轮换的速度直接决定了泄露规模。
检测泄露:机密扫描
轮换用于处理已知泄露;检测则用于发现未知泄露。机密扫描器会在代码、历史记录、日志和构建产物中搜索凭据模式。
请在多个层面进行扫描,以构建纵深防御:
- 提交前:在机密进入代码仓库之前将其拦截。
- CI 流水线:捕获绕过本地钩子的机密。
- 全仓库:定期对完整历史记录进行深度扫描。
- 平台侧:在推送时使用 GitHub/GitLab 的机密扫描功能。
gitleaks 和 trufflehog 等工具会结合正则表达式与熵分析,发现看起来像密钥的高随机性字符串。
# CI step: fail the build if a secret is found in the diff
gitleaks detect --source . --redact --exit-code 1
# Verify candidates by testing them live (trufflehog)
trufflehog git file://. --only-verified --json熵与模式检测
扫描器会使用两种互补的技术:
- 模式匹配:识别已知的前缀和格式。例如,AWS 密钥以
AKIA开头,Stripe 实时密钥以sk_live_开头,GitHub 令牌以ghp_开头。 - 熵分析:衡量随机性。真实机密通常是高熵字符串;即使没有已知前缀,较长且看起来随机的值也很可疑。
模式匹配提供精确率(误报较少),熵分析提供召回率(可以捕获未知格式)。优秀的工具会结合两者,并允许您调整阈值和允许列表来控制噪声。
# Shannon entropy heuristic: high-randomness strings flag as candidate secrets
# AKIAIOSFODNN7EXAMPLE -> matches AWS prefix pattern
# 4f8b2c9e1a7d6f3b... -> flagged by entropy threshold
# 'hello world' -> low entropy, ignored蜜标记:检测使用情况,而不仅是存在
扫描可以发现不该出现的机密。蜜标记(或金丝雀令牌)则可以检测机密是否被攻击者使用。
您可以在配置文件或公共代码仓库等容易被注意的位置放置看起来真实但实际虚假的凭据,例如 AWS 密钥、应用程序接口令牌或数据库连接信息。该凭据不会发挥任何有用作用,但任何使用它的尝试都会触发警报。
由于合法系统从不会接触蜜标记,每一次命中都是入侵的高可信信号,能够尽早警告您攻击者已经获得了机密存储库或代码库。
# A canary AWS key: looks real, grants nothing, alerts on any API call.
# Plant it in a config file or a fake .env.
# When an attacker tries: aws s3 ls --profile leaked
# the canary service logs the source IP and pages your team.监控异常使用情况
除了蜜标记,还要监控真实机密的使用方式。来自密钥保管库和云服务提供商的审计日志可以揭示滥用模式:
- 新的地理位置:某个密钥突然从意料之外的国家被使用。
- 非工作时段访问:在凌晨 3 点、没有任务运行时使用凭据。
- 权限探测:只读密钥尝试执行写入操作或管理员调用。
- 使用量激增:应用程序接口调用突然大幅增加。
将这些日志输入带有告警功能的 SIEM。检测加快速轮换,是应对漏过预防机制的泄露的实用方法。
整合实践:轮换策略
成熟的方案会将主动轮换与持续检测结合起来:
- 优先使用短期动态机密,让轮换自动且持续进行。
- 对无法避免的静态机密自动执行计划轮换。
- 使用双密钥重叠,实现签名密钥的零停机轮换。
- 在所有位置进行扫描:提交前、CI、历史记录和平台。
- 部署蜜标记,并监控审计日志中的异常使用情况。
- 保留紧急运行手册,确保确认泄露后可在数分钟内完成轮换。
目标是:让每个机密都具有较短的有效期,让每次泄露都可被检测,并让每次轮换都快速而例行化。
快速检查
测试您对检测技术的理解。
回顾:密钥轮换与检测
您已了解如何保持机密的新鲜有效,并发现漏过防护机制的泄露。
- 轮换可以缩短暴露窗口并满足合规要求;安全轮换使用双密钥重叠来实现零停机。
- 通过云端管理器、Vault 和 KMS自动执行轮换;优先使用短期动态机密,让轮换持续进行。
- 轮换加密密钥时使用信封加密,这样只需重新封装较小的数据密钥,而不必处理整个数据集。
- 紧急轮换依赖运行手册,以及提前了解所有使用方。
- 检测结合了机密扫描(模式匹配加熵分析)、揭示使用情况的蜜标记,以及通过审计日志和 SIEM 进行的异常监控。
- 成熟的策略会将主动轮换与持续检测结合起来,使泄露的持续时间缩短、情况可见,并能够迅速得到控制。
《机密管理与密钥轮换》课程至此结束。
常见问题解答
「密钥轮换与检测」课时是免费的吗?
是的 — 「密钥轮换与检测」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「密钥轮换与检测」这节课中我会学到什么?
轮换密钥并发现泄露。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「密钥轮换与检测」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。