ガイドSC

暗号鍵・秘密情報管理とKMS・HSMの運用

公開: 2026-09-26更新: 2026-09-26
DEKとKEKの分離、KMS・HSM、鍵の生成・更新・失効、秘密分散を、漏えい時の影響と復旧まで一つの構成で学ぶ。

暗号化された給与レポートが流出しても、鍵が別に保管されていれば安全と言い切れるでしょうか。この記事では、架空の給与システムがレポートR-42を暗号化して保存し、後から復号するまでを追います。暗号鍵と認証用シークレット、KMSとHSM、鍵の生成・配布・保管・更新・失効、秘密分散を一つの構成で説明します。

科目B(午後)では『KMSを使う』『鍵をローテーションする』という対策名だけで足りません。誰がどの権限で復号できるか、鍵と暗号文の両方を攻撃者が得たか、旧鍵で守るデータが残るか、復旧時に何を検証するかを条件から答えます。以下の名称、時刻、ID、ログはすべて教材用の架空例です。

1. 何を守り、どの鍵を使うか

給与システムは、アプリ実行ロールpayroll-app、オブジェクト保管領域reports-prod、KMS上の論理鍵K-payroll、秘密情報管理サービス上のDB接続資格情報S-payroll-dbから構成されます。レポートR-42には従業員情報が含まれるとします。アプリはオブジェクトへの読書きと、KMSの限定された暗号操作だけを許可されます。

用語

意味とR-42での役割

平文と暗号文

レポートR-42の元データが平文。DEKで暗号化してreports-prodに置くバイト列が暗号文C-42。暗号文があるだけでは元データを読めないが、暗号化前後のコピーや画面・ログは別に守る必要がある。

DEK(Data Encryption Key)

R-42を直接暗号化する一時的な対称鍵D-42。この例ではレポートごとに新しく生成し、アプリのメモリで暗号化・復号に使う。平文D-42を永続保存しない。

KEK(Key Encryption Key)

DEKを包んで保護する鍵。KMSのK-payrollがこの役割を担う。レポート本文の暗号化をKMS鍵で直接行う構成ではなく、DEKを包むエンベロープ暗号化の例である。

EDK(Encrypted Data Key)

D-42をK-payrollで暗号化した値E-42。C-42と同じ保管領域に置いても、KMSで復号する権限がなければ平文D-42には戻せない。ただし同じロールがオブジェクト読取りとKMS Decryptを持つ場合、そのロールの侵害には分離の効果が限られる。

KMS(Key Management Service)

鍵のライフサイクル、利用ポリシー、暗号操作API、監査を提供するサービス。KMSへのアクセス権が広すぎれば、鍵素材を取り出せなくてもDecrypt APIの濫用で平文DEKを得られる。製品ごとの返却形式は異なる。

HSM(Hardware Security Module)

鍵操作を保護された暗号モジュールで行う装置・サービス。K-payrollのKEK素材をHSM内に非エクスポートで保持する設計でも、GenerateDataKeyが平文DEKをアプリに返すなら、DEKはHSM外に存在する。HSMの有無とデータの端から端までの保護を同一視しない。

シークレット

DBパスワード、APIトークンなど、相手システムの認証に使う秘密値。S-payroll-dbはDBで有効な資格情報であり、暗号鍵と同じく厳重に管理するが、ローテーションではDB側の資格情報も変更しなければ失効しない。

鍵バージョン・鍵ID

K-payrollはアプリが参照する論理的な鍵ID、v1・v2は暗号処理に使う鍵素材の版という例。新規暗号化に使う版を変えても、v1で包んだE-42を解くにはv1が必要。製品ごとのID・版の表現は異なる。

暗号期間と失効

鍵を新たな暗号化に使う期間と、既存暗号文の復号に使える期間は異なる。失効は利用停止・権限剥奪・鍵素材破棄などの意味があり、何を行ったかを具体化する。

鍵、資格情報、権限は別の対象です。KEK素材がHSMから取り出せなくても、payroll-appにKMSのDecrypt権限とC-42の読取り権限があれば、その実行ロールを奪った攻撃者は正規APIを使って平文へ近づけます。設計の評価には鍵素材の保管場所と利用権限の両方が必要です。

2. エンベロープ暗号化の保存フロー

アプリはKMSへK-payrollを指定してDEK生成を依頼します。この構成例のKMSは、平文D-42と、K-payrollの現行版v1で包んだE-42を返します。アプリはD-42を用い、認証付き暗号AES-GCMでR-42をC-42へ変えます。暗号化処理に必要なnonceと認証タグも保存します。

R-42の暗号化と保存アプリのメモリにだけ平文DEKが一時的に存在する。KMSはレポート本文を保存しない構成。給与アプリKMS・HSM保存領域1. D-42生成を依頼2. 平文D-42とE-423. C-42とE-42を保存4. 保存結果を返す
R-42の暗号化と保存

アプリのメモリにだけ平文DEKが一時的に存在する。KMSはレポート本文を保存しない構成。

図ではアプリ内部のAES-GCM暗号化を矢印にしていません。順序は、DEK受取り→nonceを選んで暗号化→C-42、E-42、nonce、認証タグなどを保存→アプリメモリの平文D-42を使い終える、です。平文DEKを確実に消去できるかは言語・実行環境に依存するため、メモリダンプやクラッシュログにも出さない設計が必要です。

text
record_id: R-42
ciphertext: C-42                      # レポートの暗号文
encrypted_data_key: E-42             # K-payroll v1で包んだD-42
kms_key_id: K-payroll
kms_key_version: v1
algorithm: AES-256-GCM
nonce: <R-42用の一意な値>
auth_tag: <認証タグ>
context: { purpose: payroll, report_id: R-42 }

保存する値

必要な理由・注意点

C-42

給与レポートの暗号文。誰でも閲覧できるようにしてよいという意味ではなく、保存領域の読取り制限と監査を別に設ける。

E-42

平文D-42を再取得するための包まれたDEK。C-42と一緒に置けるが、KMSのDecrypt権限、実行ロール資格情報、復号済みキャッシュとは分離して管理する。

鍵ID・版

復号に使う鍵を特定する。鍵IDや版は秘密ではないが、誤った鍵へ移すと旧暗号文を読めなくなる。移行表とバックアップ対象に含める。

nonce・認証タグ

AES-GCMの正しい復号と改ざん検知に必要。nonceは通常秘密ではない。同じDEKでnonceを再利用しない設計が必要で、レポートごとの新DEKは衝突範囲を小さくする。

context

この例ではpurposeとreport_idを、KMSでE-42を包む際の追加認証データとして使う。復号時にも同じ値が要る。秘密ではなく、監査ログに残り得るので個人情報やトークンを入れない。

認証付き暗号では、C-42と認証タグの整合が確認できなければ平文を採用しません。KMSのcontextでE-42の用途を結び付けても、レポート本文側のC-42を別レコードへ差し替える攻撃まで自動的に防ぐとは限りません。アプリ側のAES-GCMでもreport_idや用途をAADに結び付け、C-42とメタデータの対応を検証します。

GenerateDataKeyのAPI結果には平文DEKが含まれる設計例です。『鍵はHSM内にしかない』という説明をするなら、それがKEK素材についてなのか、DEKについてなのか明確にします。平文DEKをアプリへ返さない暗号サービスやストレージ暗号化方式では境界が異なります。

3. 復号フローと鍵・暗号文の分離

アプリがR-42を表示するとき、reports-prodからC-42、E-42、nonce、認証タグ、contextを読みます。次にKMSへE-42と同じcontextでDecryptを依頼し、平文D-42を得ます。アプリはC-42の認証タグを検証しながら復号し、認可された利用者へ結果を返します。

R-42の読取りと復号オブジェクト読取りとKMS Decryptの二つの許可が必要。アプリ利用者への認可は別途確認する。業務利用者給与アプリ保存領域KMS・HSM1. R-42を要求2. C-42とE-42を取得3. 暗号文とメタデータ4. E-42を復号依頼5. 平文D-42を返す6. 認可後に結果
R-42の読取りと復号

オブジェクト読取りとKMS Decryptの二つの許可が必要。アプリ利用者への認可は別途確認する。

KMSがDecryptを許可したことは、画面を見る利用者がR-42を閲覧してよいことの証明ではありません。アプリは利用者の業務権限とR-42の所有・対象範囲を独立に確認します。またKMSへの要求者は通常アプリの実行ロールであり、業務利用者本人のIDがKMSログへ自動記録されるとは限りません。

攻撃者が得たもの

R-42への影響と必要な追加条件

C-42とE-42だけ

正しい暗号方式・鍵運用なら直ちに平文にはならない。ただし暗号文の無断持出し自体は事故で、弱い鍵、平文コピー、別の復号経路がないか調べる。

K-payrollの鍵IDだけ

識別子は秘密鍵素材ではない。鍵IDの露出だけでは復号できないが、権限設定が広くKMS APIを誰でも呼べるなら別問題。

C-42、E-42とKMS Decrypt権限

攻撃者がKMSへ到達し、context等の条件を満たせば平文D-42を受け取り、C-42を読める。『鍵素材を取り出せない』だけでは防げない。

平文D-42とC-42

KMSに再アクセスできなくてもR-42を復号できる。D-42がほかのレポートにも再利用されていれば影響は拡大する。

KEK素材又は広範囲の復号操作権

K-payrollで保護された多数のE-xxが危険になる。鍵素材の流出とAPI権限の濫用は調査証拠も復旧方法も異なる。

『鍵と暗号文を別に置く』には、物理的な置き場所だけでなく、アクセス制御の分離が必要です。同じバックアップへ平文D-42、C-42、実行ロール資格情報をまとめて保存すれば、保管先を分けた効果は失われます。オブジェクト権限、KMS権限、IAM権限を別々に管理し、管理者が両方を広く得られる経路も確認します。

4. KMSとHSMは何を守り、何を守らないか

KMSは鍵の識別、版、利用権限、暗号操作、監査ログ、利用停止を運用しやすくします。HSMは特定の鍵素材や暗号処理をハードウェア境界内に閉じ込めるために使います。クラウドKMSがHSMを使う場合も、どの鍵がエクスポート可能か、平文DEKがAPIへ返るか、鍵の持込みがあるかはサービスと設定次第です。

管理面

KMS・HSMで決めること

生成

十分な乱数と承認済みアルゴリズムを使い、KEKをKMS/HSM境界で生成する。DEKはレポート単位で生成し、強度・用途・作成時刻を台帳化する。鍵素材を人手でチャットや設定ファイルに配布しない。

配布

アプリには鍵素材のコピーではなく、短期の実行IDと必要なAPI権限を渡す。平文DEKが返る方式なら、その通信路をTLSで保護し、メモリ・ログ・例外報告に残さない。

保管

KEK素材はKMS/HSMの管理境界、E-42とC-42は保存領域、DB資格情報は秘密情報管理サービスへ置く。鍵ポリシーを変更できる管理者とDecryptできる利用者を分離する。

利用

payroll-appだけに必要なKMS Decryptとオブジェクト読取りを付与し、用途context、環境、呼出し元、対象データで絞る。管理者権限の取得や代理実行による迂回経路も監査する。

バックアップ・復旧

暗号文だけでなく、旧鍵版、E-42、context、nonce、タグ、権限設定を復旧可能にする。鍵素材を失うと暗号文のバックアップだけでは復旧できない。復元試験で実際に読めることを確かめる。

停止・破棄

用途廃止時は新規暗号化、復号許可、旧版の保管、破棄を段階的に扱う。旧版を破棄する前に、全暗号文・バックアップ・法定保管対象の依存を調べる。

HSMがFIPS 140-3認証を取得しているかは、該当する具体的な暗号モジュールと構成の証明書で確認します。『HSM製品を使った』というだけで、アプリのIAM設計、復号API濫用、平文DEKのメモリ露出が解消されるわけではありません。

4-1. 秘密情報管理サービスは暗号鍵管理の代用品か

S-payroll-dbを保存する秘密情報管理サービスは、アプリのDBログイン用資格情報を適切に渡し、必要ならローテーションを自動化します。KMSはそのシークレットの保存時暗号化に使われる場合があります。しかしDBパスワードの有効・無効を決めるのはDB側です。保管サービスの旧値を消しただけでは、DBで旧パスワードが使える状態が残るかもしれません。

APIトークンでも同様に、発行先のサービスで旧トークンを取り消し、新トークンを配布したアプリが動くことを確認します。暗号鍵の再暗号化と認証シークレットの再発行・無効化は別の手順です。どちらも漏えい時に『保存場所の値だけを置き換えた』では不十分です。

4-2. 鍵の利用権限と管理権限を分ける

payroll-appに必要なのは、R-42を扱うための限定された暗号操作です。鍵ポリシーの変更、鍵の削除予定設定、他ロールへの利用許可を同じ実行ロールへ与える必要はありません。運用者にも、作成・運用・監査・緊急復旧を職務ごとに分け、強い認証と操作承認を設けます。

攻撃者がDecrypt権限を持たなくても、IAMポリシーやKMS鍵ポリシー、grantを変更できれば、自分に復号権限を付けてから利用する可能性があります。したがってDecryptの成功ログだけでなく、直前の権限変更、ロールの引受け、サービス間の代理操作、鍵の無効化や削除予定操作を同じ時間軸で調べます。

主体

許可する操作と避ける権限

payroll-app

R-42に必要なオブジェクト操作、K-payrollの限定されたGenerateDataKey・Decryptを許す。鍵ポリシー変更、他用途のDecrypt、鍵削除は許さない。

鍵管理者

鍵の作成・版更新・状態変更を承認された手順で行う。日常の給与レポート読取り権限まで同時に持たせない。

監査担当

KMSとオブジェクトの監査記録・設定差分を閲覧する。平文レポートや平文DEKを取得できる権限は不要。

緊急復旧担当

通常時は復旧鍵や分散片へ単独で到達できない。災害時だけ二人承認・期限付き権限・記録の下で作業する。

contextを条件にする場合、呼出し側が任意の値を送れる点にも注意します。『purpose=payrollなら許可』だけでは、盗んだロールが同じ値を付けて別レポートを復号する余地があります。アプリの認可、対象オブジェクトの制限、KMS側の用途条件を重ね、contextと実データの対応を検証します。

5. 更新・失効・破棄で旧データはどうなるか

時刻10:00にK-payrollの新規暗号化用版をv1からv2へ切り替えたとします。以後の新しいレポートではv2で包んだEDKを作れます。一方、既存R-42のE-42はv1で包まれたままです。v1を使った復号が許されている間は読めますが、v1を無効化又は破棄すると読めなくなる可能性があります。

操作

新規・既存データへの効果

KMS鍵の現行版をv2へ更新

新しいDEKをv2で包む。既存E-42やC-42は自動では書き換わらない。旧版v1が必要な既存暗号文を把握する。

E-42の再ラップ

D-42自体を変えず、旧E-42をv1で解いてv2で包み直す。C-42は同じDEKのままなので、平文D-42が漏れた事故には対処できない。

DEKの更新とデータ再暗号化

R-42を旧D-42で復号し、新しいD-42で新たなnonceを使ってC-42を作り直す。新EDKとメタデータを原子的に対応づける。旧暗号文のバックアップ・複製も影響評価に含める。

v1の新規利用停止

v1による新規暗号化を止める。旧E-42の復号を継続するかは別判断。暗号期間の『作成側』と『読取り側』を分ける。

v1の復号停止・鍵素材破棄

v1でしか解けないEDKが残れば、対応データは読めなくなる。破棄前に移行済みの件数とバックアップ復元を確かめる。破棄は一部の漏えい済み暗号文の被害回復を意味しない。

多くのKMS製品での『鍵ローテーション』は新規暗号化に使う鍵素材の版変更です。既存のDEKやデータを再暗号化する処理とは別です。製品によって旧版の保持・失効・破棄方法が違うため、計画には製品の実際の状態遷移を記載します。

鍵が漏れた場合、単なる定期ローテーションと同じ手順では足りません。旧鍵を持った攻撃者は、既に取得したE-42やC-42のコピーを後で復号できる可能性があります。新しい鍵へ再ラップ又は再暗号化しても、攻撃者の手元にある過去のコピーは消えません。影響期間とデータ流出の可能性を別に評価します。

どの鍵を交換するかは漏れた対象で決めます。KEK素材が漏れたなら、その版で包まれたすべてのEDKを対象にします。D-42だけが漏れたなら、まずD-42で暗号化したデータの範囲を調べます。ロール資格情報が漏れたなら、資格の停止とKMS操作履歴の調査が先です。事故対象を確定しないまま全鍵を一斉に破棄すると、証拠と復旧手段まで失うおそれがあります。

5-1. 再暗号化を安全に切り替える条件

  1. 旧版で読める状態を維持しつつ、レコードごとに新EDK又は新暗号文を作る。暗号文・EDK・nonce・タグ・context・鍵版を一組として書き込む。

  2. 新旧の混在期間にアプリが両版を読めることを確認する。処理件数、失敗件数、バックアップ内の旧版、オフライン複製を棚卸しする。

  3. 新しい版だけで代表データとバックアップから復旧できることを実際に試験する。その後で旧版の復号を停止し、保管義務と復旧要件を満たした時点で破棄を判断する。

移行途中でE-42だけv2へ変更し、C-42を別DEKで暗号化したデータへ取り違えると、認証タグ検証に失敗して読めません。移行トランザクションや版付きメタデータ、ロールバック計画を設けます。失敗を単に『鍵が違う』と片付けず、ID・版・context・タグを突き合わせます。

6. 秘密分散は復旧用の鍵をどう守るか

通常運用のDEKを毎回人手で分けるのではなく、災害時の暗号化されたオフライン復旧資料を開く鍵K-recoveryを保管する例を考えます。Shamirのしきい値秘密分散でK-recoveryを3個の分散片に分け、担当者A・B・Cに渡し、任意の2個の分散片で復元できる2-of-3構成とします。1個の分散片だけから元の秘密は復元できません。

このK-recoveryは、HSMからエクスポートできないK-payrollの鍵素材を魔法のように復元する鍵ではありません。K-payrollの可用性は導入したKMS/HSMの正規のバックアップ、複製、災害復旧手順に依存します。どの資産をどの復旧鍵で戻せるかを台帳に明記します。

概念

2-of-3での意味と限界

しきい値と分散片

3人のうち2人の分散片がそろえば復元でき、1人の分散片だけでは復元できない。単に鍵の文字列を3分割して並べ直す方式とは性質が異なる。

保管先の独立

A・B・Cの分散片を別場所・別権限で保管する。同じ金庫や同じクラウド管理者がすべての分散片を得られるなら、分散の意味は薄い。

復元時の承認

2個の分散片を集める行為を、本人確認、二人承認、目的、操作記録、作業場所の制御に結び付ける。秘密分散そのものは、正当な目的での使用かどうかを判定しない。

可用性

Aが不在でもBとCで復元できる。一方、2個の分散片以上を紛失すれば復元できない。分散片の健全性と災害時の集合方法を定期的に試す。

漏えい・改ざん

1個の分散片の漏えいだけで直ちにK-recoveryを求められるとは限らないが、別分散片取得の危険は増す。偽の分散片を混ぜる可用性攻撃を考え、分散片の真正性確認と再発行計画を持つ。

『2人の管理者が承認する』という運用上の二人承認と、暗号学的な2-of-3秘密分散は違います。また復元時にK-recoveryを一台の端末上で平文に戻すなら、その端末の侵害によって鍵が漏れます。HSMへの安全なインポートなど、復元先・作業後の消去・監査まで設計します。

Shamir方式の情報理論上の性質は、正しい実装と十分な乱数で生成した多項式の前提で成立します。分散片をメールで全員へ配る、写真を同じスマートフォンに保存する、分散片の番号を失うなどの運用ミスは防ぎません。秘密分散は通常の鍵バックアップ、権限制御、監査を置き換えません。

6-1. 分散片の更新と復元試験

担当者Bが退職した場合、Bの分散片を回収しただけでは、過去に作られた複製まで消えたとは言えません。旧分散片で旧秘密を復元できなくするには、復旧用秘密そのものを交換し、旧秘密に依存する鍵・暗号文・バックアップを移行します。同じ秘密を新しい分散片へ分け直すだけでは、残存する旧分散片を無効化できません。

復元試験では、許可された二人が所定時間内に集まり、分散片の真正性を確かめ、隔離した環境で復旧鍵を復元します。復元した値で実際にバックアップを読めるか確認し、作業後に平文秘密が端末、ログ、作業メモに残らないようにします。試験だけで本番鍵を長時間露出させない手順が必要です。

秘密分散が守るのは、保管中の復旧用秘密が一人・一拠点から復元される危険です。通常のpayroll-appが日々使うKMS Decrypt権限の濫用は止めません。この二つの経路を混同せず、通常運用の権限管理と非常時の秘密分散を別の防御点として記述します。

7. 架空の設定・ログから何が言えるか

次はR-42を一回読んだ架空ログの要約です。UTC時刻で、値の形は製品固有の記法ではありません。目的はオブジェクト読取りとKMS操作の関係を見ることです。平文DEK、DBパスワード、本文はログへ出していません。

text
10:05:01 object-store
  actor=payroll-app action=GetObject
  object=reports-prod/R-42 result=allow
10:05:02 kms
  actor=payroll-app action=Decrypt key=K-payroll
  context={purpose:payroll,report_id:R-42}
  result=success request=req-42
10:05:02 app
  user=hr-17 report=R-42 authorization=allow
  tag_check=ok response=success request=req-42

ログ

確定できること/まだ言えないこと

GetObject allow

payroll-appがR-42の保管オブジェクトを読んだこと。読んだ内容が暗号文か平文かは保存方式とオブジェクト内容を確認する。

KMS Decrypt success

payroll-appとしてK-payrollの復号APIが成功したこと。通常、この行だけではどの人間のために復号したかや、結果を外へ持ち出したかは分からない。

contextのR-42

呼出しでR-42という非秘密の用途情報が渡されたこと。アプリが偽のreport_idを送れない設計か、データ側AADと照合しているかは別に確認する。

appのauthorization=allow

アプリがhr-17のR-42閲覧を許したという記録。判断が正しいかは利用者権限・レポートの対象者・ポリシーを照合する。

tag_check=ok

アプリが受け取ったC-42とタグの整合を確認したこと。元の給与データが正しいか、表示後にコピーされたかは分からない。

鍵の漏えい調査では、KMSログだけで結論を出しません。オブジェクト読取り、実行ロールの認証情報発行、KMSの許可・拒否、アプリの利用者認可、ネットワーク出口、バックアップ取得、鍵ポリシー変更を時系列で結びます。時刻がずれ、request IDが別サービスへ伝わらない場合は、相関の確度を明示します。

8. 漏えい時は何が失われたかで対処を変える

事故の対象

主な影響と初動・復旧

C-42とE-42の持出し

暗号方式と鍵・権限が健全なら直ちに平文と断定しない。オブジェクトの公開範囲を閉じ、持出し時点、平文コピー、KMS操作権限の併発を調査する。暗号文を回収できない前提で影響を評価する。

payroll-appの実行ロール窃取

攻撃者がオブジェクトとKMSへ到達すれば正規APIを濫用できる。資格情報を無効化し、ロール権限・セッション・一時認証情報・KMS DecryptとGetObjectの履歴を調べる。鍵素材流出と同一視しない。

D-42の平文漏えい

少なくともR-42と、同じDEKで暗号化した全データが危険。D-42の再利用先と過去コピーを棚卸しし、新DEKで再暗号化する。旧C-42を攻撃者が持つ可能性は残る。

K-payrollのKEK素材漏えい

v1で包まれた全EDKが危険。旧版の新規利用を止め、影響データとバックアップを特定し、新KEK・必要なら新DEKへ移行する。既に持出された旧EDKとC-42は後からも復号可能と考えて評価する。

S-payroll-dbの漏えい

DBへの不正ログインとデータ読取り・改変が問題。発行元DBで旧資格情報を無効化し、新値を秘密情報管理サービスへ配布し、接続試験とDB監査を行う。K-payrollの更新だけでは解消しない。

復旧用分散片の漏えい

漏れた分散片の数と所在を確認する。しきい値に達した疑いがあればK-recovery自体を交換し、保護した鍵・バックアップを移行する。1個の分散片だけでも保管経路を是正し、再発行を検討する。

実行ロール窃取後の復旧Decryptできる権限が奪われた場合。鍵素材を取り出せないことだけでは事故終了にならない。1認証を止める2対象を特定3権限を直す4秘密を更新5再開を確認
実行ロール窃取後の復旧
  1. 1. 認証を止める:対応 窃取ロールと一時資格を失効/確認する証跡 IAM・セッション記録
  2. 2. 対象を特定:対応 GetObjectとDecryptを照合/確認する証跡 オブジェクト・KMSログ
  3. 3. 権限を直す:対応 最小権限と条件を再設定/確認する証跡 ポリシー差分・試験
  4. 4. 秘密を更新:対応 必要なDEKと資格を交換/確認する証跡 移行台帳・旧版依存
  5. 5. 再開を確認:対応 正規復号と拒否を試す/確認する証跡 復元・拒否・承認記録

Decryptできる権限が奪われた場合。鍵素材を取り出せないことだけでは事故終了にならない。

KMS Decryptの成功回数は被害推定の材料ですが、成功した要求が必ずデータ流出したとは限りません。逆に成功ログがないだけで安全とも言えず、平文キャッシュ、既に漏れたDEK、別環境の復号経路を調べます。ログ保持期間や監査設定の欠落があれば、不明範囲として明示します。

再開条件は、侵害されたロールと派生したセッションが使えないこと、過大な権限が修正済みであること、影響したデータ・鍵・シークレットの範囲が把握され移行済みであることです。正常なR-42復号に加え、別用途context、不正ロール、旧資格情報の拒否、バックアップからの復元を試します。

9. 科目B(午後)の記述演習

演習1:暗号文だけが流出

条件:C-42とE-42を保存する領域が外部公開された。KMSログに不審なDecryptはなく、平文コピーの有無は未調査。問い:確定事項と追加調査を述べよ。

解答:暗号文と包まれたDEKの流出は確定するが、平文閲覧はまだ確定しない。公開期間、平文コピー、KMS権限・ログ欠落・DEKキャッシュを調べる。誤答『暗号化済みなので事故ではない』は無断持出しと別の復号経路を無視する。

演習2:鍵版の定期更新

条件:K-payrollの新規暗号化版をv2へ切り替えた。R-42のE-42はv1で包まれたまま。問い:v1を今すぐ破棄してよいか。

解答:R-42やバックアップがv1に依存するため、そのまま破棄すると復号不能になり得る。再ラップ又は再暗号化、旧版依存調査、復元試験後に判断する。誤答『ローテーションで全暗号文がv2へ移った』は既存データの処理を飛ばしている。

演習3:DEK漏えいと再ラップ

条件:D-42の平文と旧C-42が攻撃者へ渡った。運用者はE-42だけを新KEKで包み直した。問い:対策の不足を述べよ。

解答:既に漏れたD-42で旧C-42を読めるため、E-42の再ラップだけでは不十分。新DEKでR-42を再暗号化し、持出し済みデータの影響を評価する。誤答『KEKを替えたので過去のコピーも安全』は攻撃者の手元の旧DEKを消せない。

演習4:HSMとKMS権限

条件:KEK素材は非エクスポートのHSM内にあるが、窃取されたpayroll-appロールにはGetObjectとKMS Decryptがある。問い:漏えいの成立条件と防御点を述べよ。

解答:攻撃者がそのロールで両サービスへ到達し、対象の条件を満たせばE-42を復号してC-42を読める。ロール資格情報の停止、権限とcontext・対象制限、API・出口監査が必要。誤答『HSMから鍵を取り出せないから読めない』は復号APIを見落としている。

演習5:DBパスワード更新

条件:S-payroll-dbの旧値が漏れ、秘密情報管理サービスには新値を登録したが、DBでは旧値を無効化していない。問い:残る危険と復旧試験を述べよ。

解答:攻撃者が旧値でDBへログインできる可能性が残る。DB側で旧資格を取り消し、新値での正常接続と旧値の拒否、監査ログを確認する。誤答『保管サービスを更新したので失効した』は認証先の状態を混同している。

演習6:秘密分散のしきい値

条件:K-recoveryを2-of-3で分散し、Aの分散片だけが漏れた。問い:直ちに分かること、まだ言えないこと、確認事項を述べよ。

解答:正しい方式ならAの1個の分散片だけでは秘密を復元できない。ただしB・Cの分散片や復元端末まで侵害された可能性は未確認。保管先、アクセス記録、分散片の複製を調べ、必要なら秘密を交換・再分散する。誤答『分散片が1個漏れたので必ず鍵が復元された』はしきい値を無視する。

10. 一次資料と確認先

以下は鍵ライフサイクル、暗号モジュール、エンベロープ暗号化、鍵版の更新、秘密分散の根拠です。製品ごとのAPI・ログ項目・失効状態は導入製品の仕様と実機で確認します。

NIST SP 800-57 Part 1 Rev. 5:鍵管理の全般的な指針

NIST FIPS 140-3:暗号モジュールの要件

NIST SP 800-38D:GCMと認証付き暗号

AWS KMS:鍵階層とデータ鍵の扱い

AWS KMS:ローテーションで変わるもの・変わらないもの

AWS KMS:暗号化コンテキストと監査

AWS KMS:最小権限での鍵利用許可

Google Cloud KMS:鍵更新後の既存データ再暗号化

Adi Shamir:How to Share a Secret(原論文)

この記事についてAIに深掘り質問する

ChatGPT、Claude、Perplexityにこの記事を参照させ、要点の確認や疑問点を自由に質問できます。

次におすすめの学習

編集・検証について

編集・検証:IT資格ラボ編集部

IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。

編集方針・情報源・訂正方針を見る
この記事を共有する