密鑰管理和輪換
鑰匙是平臺的「信任根源」。可靠的密鑰管理系統(KMS/HSM+過程+遙測)將密碼學從一次性集成轉變為日常操作:密鑰定期更新,使用透明,定位,客戶在沒有中心時體驗密鑰交換。
1)目標和原則
密碼敏捷性:無需大量遷移即可更改密鑰算法/長度。
Least exposure:私鑰不會離開KMS/HSM;簽名/解密操作-已刪除。
短命的藝術品:代幣/會話密鑰的壽命為幾分鐘而不是幾周。
雙鍵/雙證書窗口:無故障旋轉。
區域和租戶分組:按地區和租戶劃分鑰匙。
完全可聽性:不變操作日誌,HSM認證,訪問控制。
2)按鍵分類
根(Root CA/Master Key):在HSM中,極少使用,用於釋放中間密鑰或數據密鑰包裝。
操作:JWT/事件簽名,TLS,webhook簽名,config/PII加密。
會議/臨時:DPoP,mTLS綁定,頻道/對話的ECDH輸出。
整合:合作夥伴密鑰(公共)和HMAC秘密。
Data Keys (DEK):在KEK下使用envelope加密,不顯式存儲。
3)密鑰識別和使用策略
每個密鑰都具有「kid」(密鑰在令牌/標題中識別):yaml key:
kid: "eu-core-es256-2025-10"
alg: "ES256" # или EdDSA, RSA-PSS, AES-GCM, XChaCha20-Poly1305 purpose: ["jwt-sign","webhook-sign"]
scope: ["tenant:brand_eu","region:EE"]
status: "active" # active next retiring revoked created_at: "2025-10-15T08:00:00Z"
valid_to: "2026-01-15T08:00:00Z"
規則:「一個目標是一個關鍵」(Sharing的最低限度),明確的應用區域和時間表。
4)密鑰生命周期(KMS/HSM)
1.Generate:在HSM/KMS中,使用導出策略=被禁止。
2.出版物:對於不對稱-帶有「kid」的JWKS/證書。
3.使用:使用受控的IAM進行遠程操作(sign/decrypt)。
4.Rotate:運行「next」密鑰並啟用雙接受。
5.Retire:將舊版本轉換為「retiring」,然後轉換為「revoked」。
6.銷毀:在爭議窗口後銷毀材料(帶有purge協議)。
5)輪換: 策略
Scheduled:日歷(例如,JWT簽名的每個1-3個月,TLS耳機的6-12個月)。
滾動:消費者逐步切換(JWKS已經包含新密鑰;在腰果加熱後,發行人開始簽署新的協議)。
強制(安全):在損害時立即輪換;短的雙接受窗口,攻擊性的文物到期。
Staggered per region/tenant:不要同時向整個世界「鼓掌」。
黃金規則:首先出版,然後簽名新,只有到期後-舊的回憶。
6)雙鍵窗口(無故障更換)
我們用新舊的「kid」發布JWKS。
驗證者接受兩者。
在N分鐘/小時後,發行人開始簽名。
監視新/新「kid」檢查的份額。
達到目標比例後,retairim是舊的。
yaml jwks:
keys:
- kid: "eu-core-es256-2025-10" # new alg: "ES256"
use: "sig"
crv: "P-256"
x: "<...>"; y: "<...>"
- kid: "eu-core-es256-2025-07" # old alg: "ES256"
use: "sig"
...
7)簽名和驗證政策
默認算法:簽名ES256/EdDSA;需要的RSA-PSS。
禁止「無」/弱算法;whitelisting在驗證側。
Clock skew:我們允許300 c ±,我們計算偏差。
Key pinning(內部服務)和短TTL JWKS-kesha(30-60 s)。
8) Envelope加密和KDF
以以下方式存儲數據:
ciphertext = AEAD_Encrypt(DEK, plaintext, AAD=tenant region table row_id)
DEK = KMS. Decrypt (KEK, EncryptedDEK )//on access
EncryptedDEK = KMS. Encrypt (KEK, DEK )//on write
KEK(關鍵加密密鑰)存儲在KMS/HSM中,並定期輪換。
為對象/批次創建DEK;在輪換KEK時,我們執行re-wrap(快速,無重加密)。
對於線程-ECDH+HKDF,用於輸出簡短的通道密鑰。
9)區域性和多特南特
密鑰和JWKS跨區域:「eu-core」,「latam-core」是不同的密鑰集。
將IAM/審計劃分為 tenant/region;密鑰不在居民之間「流動」。
「kid」用信任域前綴編碼:「eu-core-es256-2025-10」。
10)集成的秘密(HMAC, API密鑰)
存儲在KMS後端的Secret Store中,通過短暫的客戶機秘密進行演示(rotation policy ≤ 90天)。
旋轉時支持兩個活動秘密(雙秘密)。
對於webhooks-timestamp+HMAC身體簽名;時間窗口≤ 5分鐘。
11)訪問控制和流程
IAM矩陣:誰可以「generate」,「sign」,「decrypt」,「rotate」,「destroy」(角色最少)。
4眼原理:敏感手術需要兩個確認。
Change windows:新密鑰啟用窗口和測試金絲雀區域。
Runbooks: scheduled和forced輪換的過程模板。
12)可觀察性和審計
度量標準:- `sign_p95_ms`, `decrypt_p95_ms`, `jwks_skew_ms`,
- 「kid」,「old_kid_usage_ratio」的消費,
- `invalid_signature_rate`, `decrypt_failure_rate`.
- 每個簽名/解密操作:「who/what/when/where/kid/purpose」。
- 關鍵狀態和輪換/重寫請求的歷史記錄。
- HSM認證,關鍵材料的訪問日誌。
13)花花公子(事件)
1.簽名密鑰的損害
立即恢復舊的「kid」(或翻譯成帶有最小窗口的「retiring」),發布新的JWKS,縮短的TTL令牌,強制綁定/RT殘疾,與集成所有者的通信,復古審核。
2.旋轉後批量「INVALID_SIGNATURE」
檢查JWKS/clock skew緩存,返回雙接受,延長窗口,發送給客戶。
3.KMS/HSM潛伏期增長
啟用本地簽名緩存是無效的;取而代之的是-發射器中的batch/queue,autoscaling HSM代理,優先考慮關鍵線程。
4.一個地區的拒絕
啟動區域隔離程序;不「拉動」其他地區的鑰匙;降低下降區域的簽字功能。
14)測試
合同:JWKS正確性,正確的「kid」/alg/use,客戶兼容性。
Negative:假簽名,過時的「kid」,不正確的alg,clock skew。
混亂:瞬間旋轉,KMS不可用,時間的「漂移」。
下載:簽名高峰(JWT/webhooks),解密高峰(PII/付款)。
E2E:雙鍵窗口:問題-驗證-交通轉移-舊的剔除。
15)配置示例(YAML)
yaml crypto:
regions:
- id: "eu-core"
jwks_url: "https://sts. eu/.well-known/jwks. json"
rotation:
jwt_sign: { interval_days: 30, window_dual: "48h" }
webhook: { interval_days: 60, window_dual: "72h" }
kek: { interval_days: 90, action: "rewrap" }
alg_policy:
sign: ["ES256","EdDSA"]
tls: ["TLS1. 2+","ECDSA_P256"]
publish:
jwks_cache_ttl: "60s"
audit:
hsm_attestation_required: true two_person_rule: true
16)工件中JWKS和標記的示例
JWT頭的片段:json
{ "alg":"ES256", "kid":"eu-core-es256-2025-10", "typ":"JWT" }
JWKS(公共部分):
json
{ "keys":[
{"kty":"EC","use":"sig","crv":"P-256","kid":"eu-core-es256-2025-10","x":"...","y":"..."},
{"kty":"EC","use":"sig","crv":"P-256","kid":"eu-core-es256-2025-07","x":"...","y":"..."}
]}
17)反模式
長壽鑰匙「多年」,適用於所有地區。
沒有雙重接受的「一時」輪換。
從KMS/HSM出口私有密鑰「快速」。
混合任務:一鍵簽名JWT和加密數據。
沒有HSM和IAM限制的日誌/認證。
在KEK旋轉時,DEK沒有重寫機制。
Env中的手動「秘密」代替Secret Store。
18)售前支票清單
- KMS/HSM中的所有私有密鑰;IAM矩陣和4眼原理已調整。
- 算法策略、密鑰長度和壽命已得到批準。
- 啟用了雙鍵過程,並通過「kid」監控份額。
- JWKS以短TTL和腰果預熱發布;客戶端接受≥2密鑰。
- Envelope加密:KEK輪換,DEK重寫而不停機。
- 區域隔離和tenant分開鍵集。
- 花花公子犯規/滾動/輪換;訓練運行。
- 包括度量(「old_kid_usage_ratio」,「invalid_signature_rate」)和變量。
- contract/negative/chaos/load/E2E測試集已通過。
- 集成文檔:如何處理「kid」更改,哪些窗口和錯誤代碼。
結論
密鑰管理是一門操作學科:KMS/HSM是真理的來源,具有雙鍵,區域和影子隔離,內置加密和可觀察性的定期和安全輪換。按照這些規則,您可以獲得可擴展的加密連接,可以抵抗事件並輕松向審計員解釋-開發人員和集成商可以輕松地進行任何更改。