鍵ローテーション - 暗号化全般

暗号化全般 | IT用語集

鍵ローテーションとは

鍵ローテーション(Key Rotation)は、使用中の暗号鍵を定期的に新しい鍵に置き換えるセキュリティプラクティスです。これにより、鍵が漏洩した場合の影響を限定し、暗号解読のリスクを軽減します。

鍵ローテーションのメリット:

  • 被害範囲の限定:鍵漏洩時に影響を受けるデータを限定
  • コンプライアンス対応:PCI DSS、HIPAAなどの規制要件を満たす
  • 暗号解読リスクの軽減:同一鍵での暗号化データ量を制限
  • 鍵管理プロセスの確認:ローテーション作業を通じて手順を検証

ローテーションの種類

自動ローテーション

KMSなどのサービスが自動的に鍵を更新します。人為的ミスを防ぎ、確実にローテーションが実行されます。

# AWS KMSでの自動ローテーション有効化
aws kms enable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

# ローテーション状態の確認
aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

手動ローテーション

新しい鍵を生成し、アプリケーションを更新して新しい鍵を使用するよう切り替えます。より細かい制御が可能ですが、運用負荷が高くなります。

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

AIサービスのAPIキーのローテーションを自動化するシステムを構築しました。HashiCorp Vaultを使用して、アプリケーションを再起動せずに鍵を更新できる仕組みを実装しました。

# Vaultを使用した動的シークレット取得
import hvac

class SecretManager:
    def __init__(self):
        self.client = hvac.Client(url='https://vault.example.com')
        self.client.token = os.environ['VAULT_TOKEN']
        self._cache = {}
        self._last_refresh = 0
    
    def get_api_key(self, key_name: str) -> str:
        # TTLに基づいてキャッシュを更新
        if self._should_refresh():
            secret = self.client.secrets.kv.v2.read_secret_version(
                path=f'api-keys/{key_name}'
            )
            self._cache[key_name] = secret['data']['data']['value']
            self._last_refresh = time.time()
        
        return self._cache.get(key_name)
    
    def _should_refresh(self) -> bool:
        # 5分ごとに更新
        return time.time() - self._last_refresh > 300

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

推奨ローテーション間隔

鍵の種類 推奨間隔 備考
マスター鍵(KEK) 1年 AWS KMSは自動で年次ローテーション
データ暗号化鍵(DEK) 30-90日 アプリケーション依存
APIキー 90日 PCI DSS要件
TLS証明書 90日 Let's Encryptの有効期限
SSH鍵 1年 ユーザー退職時は即座に無効化

ダウンタイムなしのローテーション

古い鍵と新しい鍵を一定期間併用することで、サービス停止なしにローテーションできます。

# 複数バージョンの鍵をサポート
def decrypt_with_fallback(encrypted_data: bytes, key_versions: list) -> bytes:
    for key in key_versions:
        try:
            return decrypt(encrypted_data, key)
        except DecryptionError:
            continue
    raise DecryptionError("No valid key found")

関連ブログ記事

最新動向(2026年)

自動ローテーションの標準化

主要クラウドサービスでは、ほとんどの鍵タイプで自動ローテーションがデフォルトまたは推奨設定になっています。

ゼロダウンタイムローテーション

Kubernetesのシークレット管理やサービスメッシュと連携し、アプリケーションを再起動せずに鍵を更新する仕組みが普及しています。

トラブル事例と対策

⚠️ ローテーション後のデータ復号失敗

問題:古い鍵で暗号化されたデータが復号できなくなる

対策:鍵バージョン管理を実装し、古いバージョンでの復号をサポート

⚠️ キャッシュされた古い鍵の使用

問題:アプリケーションが古い鍵をキャッシュし続ける

対策:TTLベースのキャッシュ更新、またはイベント駆動での鍵リロード

権威あるリソース

関連用語

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

鍵ローテーションに関するご質問や実装のご相談など、お気軽にお問い合わせください。