暗号化
データを第三者が読めない形式に変換し、機密性を保護する技術
暗号化とは
暗号化 (Encryption) は、平文 (Plaintext) を暗号文 (Ciphertext) に変換し、鍵を持つ者だけが復号できるようにする技術である。保存時の暗号化 (Encryption at Rest) と転送時の暗号化 (Encryption in Transit) がある。
対称鍵 vs 非対称鍵
対称鍵と非対称鍵の違いを以下にまとめる。
| 方式 | 鍵 | 速度 | 用途 |
|---|---|---|---|
| 対称鍵 (AES) | 暗号化と復号に同じ鍵 | 高速 | データの暗号化 |
| 非対称鍵 (RSA, ECDH, ECDSA) | 公開鍵と秘密鍵のペア | 低速 | 鍵交換 (RSA, ECDH)、デジタル署名 (RSA, ECDSA) |
TLS での組み合わせ
TLS での組み合わせを図で示す。
1. 非対称鍵で鍵交換 (TLS 1.3 は ECDHE/DHE のみ・TLS 1.2 では RSA 鍵輸送も可)
2. 共有された対称鍵でデータを暗号化 (AES-256-GCM)
→ 非対称鍵の安全性 + 対称鍵の速度を両立
鍵交換に使う鍵と署名に使う鍵は役割が別である。ECDSA は署名専用で鍵交換には使えず、楕円曲線で鍵交換を行うのは ECDH (TLS では一時鍵を使う ECDHE) である。TLS 1.3 (RFC 8446) では静的 RSA と静的 Diffie-Hellman の暗号スイートが削除され、鍵交換は前方秘匿性のある (EC)DHE のみになった。そのため TLS 1.2 時代の「RSA で鍵を送る」図は 1.3 では成り立たない。
AWS での暗号化
保存時の暗号化 (At Rest)
S3 は 2023 年 1 月 5 日以降、新規オブジェクトを既定で SSE-S3 (S3 マネージドキー) により暗号化する。鍵の管理を自分で握りたい場合は SSE-KMS・DSSE-KMS・SSE-C を選ぶ。DynamoDB は保存時の暗号化を無効化できず、鍵は AWS 所有キー (既定・追加料金なし)・AWS マネージドキー・カスタマー管理キーの 3 種から選ぶ。EBS は AES-256、RDS は AES-256 (KMS) で暗号化する。
転送時の暗号化 (In Transit)
ブラウザから CloudFront は TLS 1.2/1.3、CloudFront から ALB は TLS、Lambda から DynamoDB は TLS (自動) で暗号化される。
エンベロープ暗号化
エンベロープ暗号化を図で示す。
1. KMS がデータキー (平文 + 暗号化済み) を生成
2. 平文のデータキーでデータを暗号化
3. 平文のデータキーを破棄
4. 暗号化済みデータキー + 暗号化データを保存
復号:
1. 暗号化済みデータキーを KMS に送信
2. KMS がマスターキーでデータキーを復号
3. 復号されたデータキーでデータを復号
ハッシュ (一方向)
暗号化と異なり、ハッシュは復号できない。パスワードの保存には bcrypt、データの整合性検証には SHA-256、メッセージ認証には HMAC を使用する。
// ❌ パスワードを平文で保存
await db.put({ password: 'secret123' });
// ✅ bcrypt でハッシュ化して保存
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash('secret123', 10);
await db.put({ passwordHash: hash });
実務での活用方法は関連書籍にも詳しい。
この記事は役に立ちましたか?
関連用語
KMS
AWS の暗号鍵管理サービスで、データの暗号化 / 復号に使う鍵を安全に管理する
HTTPS / TLS
HTTP 通信を TLS で暗号化し、盗聴 / 改ざん / なりすましを防ぐプロトコル
シークレットローテーション
API キーやデータベースパスワードなどの秘密情報を定期的に自動更新するセキュリティプラクティス
量子コンピュータ
量子力学の原理を使い、従来とは異なる方法で計算する次世代コンピュータ
シークレット管理
パスワード、API キー、証明書などの機密情報を安全に保存 / 配布 / ローテーションする手法
コンプライアンス
法規制や業界標準への準拠を確保し、セキュリティと信頼性を維持する取り組み
関連する記事
本についてくるダウンロード素材を使い倒す
プログラミングの本には、サンプルコードや練習用データのダウンロード特典がついていることがあります。素材の探し方と、完成版コードの使い方を解説します。
エラーメッセージを読めるエンジニアは何が違うのか
エラーが出たときに冷静に原因を特定できる人と、パニックになる人。その差は経験だけでなく、読んできた本の種類にあります。デバッグ力を支える読書の傾向を分析します。
写経を超える - 技術書のコードを自分のプロジェクトに応用する方法
技術書のサンプルコードを写経するだけでは実力は伸びません。書籍のコードを自分のプロジェクトに応用し、実務で使える力に変える 5 つのステップを解説します。