DB 暗号化 - DB 暗号化
データベースに保存されたデータを暗号化し、不正アクセスやメディアの物理的な盗難からデータを保護する技術。
概念図
実例
PostgreSQL でのカラムレベル暗号化
bash
-- PostgreSQL: pgcrypto によるカラムレベル暗号化
INSERT INTO users (email_encrypted)
VALUES (pgp_sym_encrypt('user@example.com', 'encryption_key'));
SELECT pgp_sym_decrypt(email_encrypted, 'encryption_key') FROM users;MySQL の TDE 設定
bash
-- MySQL: TDE(透過的データ暗号化)の有効化
ALTER TABLE sensitive_data ENCRYPTION='Y';DB 暗号化の種類
データベースの暗号化にはレベルに応じた手法があります。
- 透過的データ暗号化(TDE): ディスク上のデータファイルを暗号化する。アプリケーションの変更が不要。ストレージの物理的な盗難やファイルコピーからデータを保護する
- カラムレベル暗号化: 特定のカラム(クレジットカード番号、個人情報など)を個別に暗号化する。アプリケーション層での暗号化・復号処理が必要
- 通信の暗号化: DB サーバーとクライアント間の通信を TLS で暗号化する
- バックアップの暗号化: バックアップファイルを暗号化し、バックアップメディアの紛失・盗難によるデータ漏洩を防ぐ
TDE はディスク上のデータを保護するが、DB にログインできればデータは平文で見えるため、アクセス制御との併用が必要です。
暗号鍵の管理
暗号化の強度は鍵の管理に依存します。
- 鍵とデータの分離: 暗号化鍵をデータベースと同じサーバーに保存しない。外部の KMS(Key Management Service)を使用する
- 鍵のローテーション: 定期的に暗号化鍵を更新する。古い鍵で暗号化されたデータを新しい鍵で再暗号化するプロセスを自動化する
- 鍵の階層化: マスター鍵でデータ暗号化鍵を暗号化する二層構造(エンベロープ暗号化)を採用する
- バックアップ鍵の保護: 鍵のバックアップを安全な場所に保管し、鍵の消失によるデータ喪失を防ぐ
- アクセス制御: 鍵へのアクセスを厳格に制御し、監査ログを取得する
