鍵管理 - 暗号化全般

暗号化全般 | IT用語集

鍵管理とは

鍵管理(Key Management)は、暗号鍵のライフサイクル全体にわたって、鍵を安全に生成、配布、保管、使用、更新(ローテーション)、廃棄するための包括的なプロセスです。

「暗号の強度は鍵管理の強度で決まる」と言われるほど、鍵管理はセキュリティの根幹を成します。どれほど強力な暗号アルゴリズムを使用しても、鍵の管理が不適切であれば意味がありません。

鍵のライフサイクル

┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐
│  生成   │ → │  配布   │ → │  使用   │ → │ 保管    │
└─────────┘   └─────────┘   └─────────┘   └─────────┘
                                               │
┌─────────┐   ┌─────────┐   ┌─────────┐        ↓
│  破棄   │ ← │  失効   │ ← │ローテーション│←─────┘
└─────────┘   └─────────┘   └─────────┘

各フェーズの考慮事項

  • 生成:暗号論的に安全な乱数生成器を使用
  • 配布:暗号化されたチャネルで安全に転送
  • 使用:必要最小限のアクセス権限を付与
  • 保管:暗号化された状態で保存、HSMの利用
  • ローテーション:定期的な鍵の更新
  • 失効:漏洩時の即座の無効化
  • 破棄:復元不可能な方法での削除

AIエンジニアとしての実体験

マルチテナントAIサービスの開発で、テナントごとのデータを個別の鍵で暗号化する「エンベロープ暗号化」を実装しました。

# AWS KMSを使用したエンベロープ暗号化
import boto3
from cryptography.fernet import Fernet
import base64

kms = boto3.client('kms')

def encrypt_data(tenant_id: str, data: bytes) -> dict:
    # 1. KMSでデータ鍵を生成
    response = kms.generate_data_key(
        KeyId=f'alias/tenant-{tenant_id}',
        KeySpec='AES_256'
    )
    
    plaintext_key = response['Plaintext']
    encrypted_key = response['CiphertextBlob']
    
    # 2. データ鍵でデータを暗号化
    fernet = Fernet(base64.urlsafe_b64encode(plaintext_key))
    encrypted_data = fernet.encrypt(data)
    
    # 3. 平文の鍵はメモリから消去(実際にはより厳密な処理が必要)
    del plaintext_key
    
    return {
        'encrypted_key': base64.b64encode(encrypted_key).decode(),
        'encrypted_data': encrypted_data.decode()
    }

def decrypt_data(tenant_id: str, encrypted_key: str, encrypted_data: str) -> bytes:
    # 1. KMSで暗号化されたデータ鍵を復号
    response = kms.decrypt(
        CiphertextBlob=base64.b64decode(encrypted_key),
        KeyId=f'alias/tenant-{tenant_id}'
    )
    
    plaintext_key = response['Plaintext']
    
    # 2. データ鍵でデータを復号
    fernet = Fernet(base64.urlsafe_b64encode(plaintext_key))
    return fernet.decrypt(encrypted_data.encode())

自社サーバー運用への応用

鍵管理のベストプラクティス

  1. 鍵の分離:環境ごと(開発・本番)に異なる鍵を使用
  2. 最小権限の原則:必要なサービスのみに鍵へのアクセスを許可
  3. 監査ログ:すべての鍵操作を記録
  4. 自動ローテーション:手動操作を減らしヒューマンエラーを防止
  5. バックアップ:鍵の安全なバックアップと復旧手順の確立

主要な鍵管理ツール

ツール 特徴 用途
AWS KMS マネージドサービス、HSMバック AWSサービス統合
HashiCorp Vault オープンソース、多機能 マルチクラウド
Azure Key Vault Azure統合、証明書管理 Azure環境
Google Cloud KMS GCP統合、HSMオプション GCP環境

関連ブログ記事

最新動向(2026年)

BYOK(Bring Your Own Key)の普及

クラウドサービスに自社で管理する鍵を持ち込む「BYOK」が標準化されつつあります。これにより、クラウドプロバイダーからのデータアクセスを制限できます。

Crypto Agility

ポスト量子暗号への移行を見据え、暗号アルゴリズムを柔軟に切り替えられる「暗号アジリティ」の重要性が高まっています。

トラブル事例と対策

⚠️ 鍵のハードコーディング

問題:ソースコードに暗号鍵を直接埋め込み、GitHubに公開

対策:環境変数、シークレット管理サービス、git-secretsによるスキャン

⚠️ 鍵のローテーション未実施

問題:同じ鍵を何年も使い続け、漏洩リスクが増大

対策:自動ローテーションの設定、ローテーション手順の文書化

権威あるリソース

関連用語

この用語についてもっと詳しく

鍵管理に関するご質問やセキュリティ設計のご相談など、お気軽にお問い合わせください。