TL

鍵管理ライフサイクルの原理(生成・ローテーション・失効)

鍵が漏れても被害を最小化できる運用設計が分かる。生成から破棄までの各段階、KEK/DEK の鍵階層とエンベロープ暗号化、暗号化バックアップと鍵分離の判断基準まで原理で押さえられる。

応用鍵管理鍵ローテーションエンベロープ暗号化KEKDEK最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.鍵には生成・配布・保管・ローテーション・失効・破棄という明確なライフサイクルがあり、各段階で「鍵を平文で晒さない」「漏れても被害を限定する」を貫くのが鍵管理の核心。
  • 2.KEK(鍵暗号化鍵)で DEK(データ暗号化鍵)をラップする鍵階層を組むと、ローテーション時に上位鍵だけを差し替えれば済み、実データの再暗号化を回避できる。これがエンベロープ暗号化。
  • 3.ローテーションには新鍵への移行期間と旧鍵の世代管理が要る。失効した鍵は即破棄せず、過去データの復号用に分離保管し、用が済んでから破棄(cryptographic erasure)するのが原則。

鍵管理が解く問題:アルゴリズムでなく運用が漏れる

暗号アルゴリズムが破られて情報が漏れる事故は稀です。現実の漏洩のほとんどは、鍵の取り回し——どこに置き、どう配り、いつ替え、どう捨てるか——の失敗から起こります。AES-256 がいくら堅牢でも、その鍵が平文でログに出れば暗号は無意味になります。だから鍵には、生成から破棄までを一貫して律する**ライフサイクル(lifecycle)**という概念が要ります。

NIST SP 800-57 は鍵のライフサイクルを段階に分けて規定しています。本記事では実務で要となる生成・配布・保管・ローテーション・失効・破棄の6段階を、なぜその設計になるのかという原理から見ていきます。貫く原則は2つ。鍵を平文で晒す瞬間を最小化することと、1本漏れても被害を限定することです。

鍵には「使用目的」と「暗号期間」が紐づく

良い鍵管理では、1本の鍵に用途(暗号化用か署名用か)と暗号期間(cryptoperiod)——その鍵を使ってよい期間——が定義されます。1鍵1用途が原則で、暗号化鍵と署名鍵を兼用しないのは、片方の運用都合(頻繁なローテーション等)がもう片方の保証(署名の長期検証可能性)を壊すためです。暗号期間を区切ること自体が、後述するローテーションの前提になります。

生成と配布:エントロピーと「平文を運ばない」

ライフサイクルの起点は生成です。鍵は暗号論的に安全な乱数源(CSPRNG)から生成されねばならず、ここで予測可能な乱数を使うと鍵空間が実質的に縮小し、総当たりが現実的になります。鍵生成は理想的にはHSMの内部で行い、平文の鍵が一度もメモリに載らないようにします。

次が配布です。生成した鍵を使う場所へ届ける段階ですが、ここが最も漏れやすい。平文の対称鍵をネットワークでそのまま送るのは論外で、原則として鍵を別の鍵で暗号化して運ぶ(鍵ラッピング)か、そもそも鍵を移動させない設計を採ります。後者が望ましく、鍵を HSM 内に固定し、アプリには鍵そのものでなく「鍵を指すハンドル」だけを渡せば、配布時に平文の鍵が境界外へ出ることがなくなります。

配布の三方式(安全性は下ほど高い):

  平文配布         鍵をそのまま送る               ← 原則禁止
  ラップ配布       KEK で暗号化して送る           ← 移動が必要なら最低限これ
  非配布(参照)   鍵は HSM 内に固定、ハンドルだけ ← 望ましい

保管:鍵階層と KEK/DEK

保管の核心は鍵階層(key hierarchy)です。すべての鍵を同列に平置きするのではなく、鍵を暗号化する鍵データを暗号化する鍵を分けます。前者を KEK(Key Encryption Key/鍵暗号化鍵)、後者を **DEK(Data Encryption Key/データ暗号化鍵)**と呼びます。

DEK は実データを暗号化しますが、その DEK 自身を KEK でラップ(暗号化)して保管します。すると DEK は暗号化された状態でディスクや DB に置けるようになり、平文で守るべき鍵は最上位の KEK だけに集約されます。最上位の KEK(マスター鍵)だけを HSM の耐タンパ境界内に固定すれば、少数の鍵を物理保護するだけで無数の DEK を論理的に保護できます。

上位ほど保護を厚く、下位ほど数が多い。平文で守るのは最上位だけに集約する。
鍵の種類役割保管場所
マスター鍵 / Root KEK最上位。下位の鍵をラップするHSM 境界内に固定。外へ出さない
KEK(中間鍵暗号化鍵)DEK をラップするマスター鍵でラップして外部保管も可
DEK(データ暗号化鍵)実データを直接暗号化するKEK でラップしてデータと並置

このラップ済み DEK を暗号文と一緒に保管する手法が**エンベロープ暗号化(envelope encryption)**です。各データに固有の DEK を割り当て、ラップした DEK を暗号文のヘッダに同梱します。復号時は KEK で DEK をアンラップし、その DEK で本体を復号する。クラウド KMS の中核機能であり、データごとに鍵を分ける設計を低コストで実現します。

ローテーション:上位鍵だけ替えれば済む理由

ローテーション(rotation)は、鍵を定期的に新しいものへ差し替える運用です。なぜ必要か。鍵は使うほど暴露面が広がり、1本の鍵で暗号化したデータ量が増えるほど、漏洩時の被害も暗号解析の手掛かりも増えるからです。暗号期間を区切って定期的に替えれば、仮に旧鍵が漏れても影響範囲がその世代に限定されます。

ここで鍵階層が効きます。ナイーブに考えると、鍵を替えるには全データを旧鍵で復号して新鍵で再暗号化する必要がありそうですが、これはペタバイト級では非現実的です。エンベロープ暗号化なら、KEK を替えるときに再ラップが必要なのはラップ済み DEK だけで済みます。

KEK ローテーション(実データに触れない):

  旧KEK でアンラップ → DEK(平文、HSM 内) → 新KEK で再ラップ
       ↑ 動くのはラップ済みDEKのみ。実データは旧DEKのまま据え置き

DEK が暗号化している実データには一切触れず、最上位の鍵だけを差し替えられる。これがエンベロープ暗号化の運用上の最大の利点です。一方で DEK 自体を替えたい場合(DEK の暗号期間が来た、あるいは漏洩疑いがある場合)は、そのデータの再暗号化が避けられません。だからこそ、頻繁に替える層(KEK)と、替えると高くつく層(DEK)を分離しておく設計が効いてきます。

ローテーションには移行期間と世代管理が要る

鍵を替えた瞬間に旧鍵が不要になるわけではありません。旧鍵で暗号化された既存データは、再暗号化が完了するまで旧鍵でしか復号できないからです。したがってローテーションは「新鍵で書く・旧鍵で読む」が共存する移行期間を持ち、各データがどの鍵世代で暗号化されたかを key ID/バージョンで追跡する必要があります。世代管理を欠いたまま旧鍵を捨てると、過去データが永久に読めなくなります。

失効と破棄:捨てるタイミングを誤らない

鍵が漏洩した、あるいは暗号期間が満了した場合、その鍵を**失効(revocation)**させます。失効とは「以後その鍵での新規暗号化・署名を禁止する」状態への移行であり、即座の物理破棄とは区別されます。

ここが鍵管理の機微です。失効した鍵を直ちに消してはいけない場合があります。その鍵で暗号化された過去データがまだ存在するなら、復号のために旧鍵を保持し続ける必要があるからです。したがって失効鍵は「新規使用は禁止、復号専用に分離保管」という中間状態を経ます。署名鍵の場合は逆で、漏洩した署名鍵は失効情報を検証側へ伝播させる必要があり、その仕組みは証明書失効リスト(CRL)や OCSP として公開鍵基盤(PKI)に組み込まれています。

最終段階が**破棄(destruction)**です。鍵を本当に消す方法には2系統あります。

暗号的消去は「鍵を消せばデータは復号不能=実質消去」とみなす手法。物理消去が困難な大容量・クラウド環境で有効。
手法原理適する場面
鍵の物理消去鍵バイトをメモリ/ストレージから上書き・ゼロ化HSM 内の鍵、移行完了後の旧鍵
暗号的消去(cryptographic erasure)データはそのまま、復号鍵だけを破棄大量データの即時無効化、媒体廃棄

**暗号的消去(cryptographic erasure / crypto-shredding)**は強力です。データ本体を1バイトも触らず、その復号に必要な鍵を破棄するだけで、暗号文を解読不能な乱雑バイト列へと変えます。テラバイト級のディスクをゼロ埋めする代わりに、数十バイトの鍵を消すだけで瞬時に「論理的に消去」できる。これが成立するのは、データごとに鍵を分けてある(エンベロープ暗号化で DEK を分離してある)からこそで、鍵分離の設計が破棄段階で利いてくる好例です。

バックアップと鍵分離:可用性とのトレードオフ

鍵保護を突き詰めると可用性と衝突します。HSM のゼロ化や災害で鍵そのものを失うと、暗号化されたデータは永久に読めなくなる——これは漏洩と同じくらい深刻な事故です。だから鍵はバックアップを取りますが、平文でコピーを増やせば暴露面が広がる。両立の答えが、バックアップ自体を別の鍵で暗号化し、その鍵を元データから分離保管することです。

暗号化バックアップと鍵を同じ場所に置かない

データのバックアップを暗号化しても、その復号鍵を同じバックアップ媒体や同じストレージアカウントに同梱していれば、暗号化は無意味です。攻撃者は両方を一度に奪えます。原則は、暗号化されたバックアップと、それを復号する鍵を異なる信頼境界(別アカウント・別 HSM・別地域)に置くこと。これにより片方が侵害されても、もう片方がなければ復号できない状態を保ちます。鍵分離(key separation)は、保管だけでなくバックアップ設計でも核心です。

設計判断として、バックアップ用の鍵は本番の DEK とは別系統で管理し、ローテーション周期も独立させるのが定石です。本番鍵を頻繁に替えても、過去のバックアップは当時の鍵世代でしか復号できないため、バックアップ鍵の世代管理は本番以上に長い保持期間を要します。「漏洩を防ぐための鍵分離」と「読めなくなる事故を防ぐためのバックアップ」は対立する要求であり、信頼境界を分けることでのみ両立します。

まとめ

鍵管理ライフサイクルの本質は、鍵を平文で晒す瞬間を最小化し、1本漏れても被害をその世代に限定することに尽きます。生成は CSPRNG と HSM 内で、配布は移動させない設計を最優先に。保管では KEK/DEK の鍵階層を組み、最上位の鍵だけを物理保護に集約します。

エンベロープ暗号化は、この階層を運用に効かせる要です。ローテーションでは KEK の差し替えだけで実データの再暗号化を回避でき、破棄では暗号的消去で大量データを瞬時に無効化できる——いずれもデータごとに鍵を分けてあるからこそ成立します。失効鍵は即破棄せず復号専用に分離保管し、暗号化バックアップとその鍵は異なる信頼境界に置く。鍵保護の物理的土台はHSM と鍵保護の原理、鍵を含む機密情報の運用論はシークレット管理、鍵で何を守るかの基礎は暗号の基礎を合わせて参照してください。

セキュリティ Article

鍵管理ライフサイクルの原理(生成・ローテーション・失効)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

鍵管理

比較で見る軸

難易度: advanced / カテゴリ: セキュリティ / タグ数: 5

導入後に効く点

KEK(鍵暗号化鍵)で DEK(データ暗号化鍵)をラップする鍵階層を組むと、ローテーション時に上位鍵だけを差し替えれば済み、実データの再暗号化を回避できる。これがエンベロープ暗号化。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
セキュリティ
タグ数
5

判断チェックリスト

  • 自社の用途が「鍵管理 / 鍵ローテーション」に近いか確認する。
  • 強みである「鍵には生成・配布・保管・ローテーション・失効・破棄という明確なライフサイクルがあり、各段階で「鍵を平文で晒さない」「漏れても被害を限定する」を貫くのが鍵管理の核心。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

鍵管理鍵ローテーションエンベロープ暗号化KEKDEK鍵管理鍵ローテーションエンベロープ暗号化
参考: 公式情報