暗号化
データを第三者が読めない形式に変換し、機密性を保護する技術
暗号化とは
暗号化 (Encryption) は、平文 (Plaintext) を暗号文 (Ciphertext) に変換し、鍵を持つ者だけが復号できるようにする技術である。保存時の暗号化 (Encryption at Rest) と転送時の暗号化 (Encryption in Transit) がある。
対称鍵 vs 非対称鍵
対称鍵と非対称鍵の違いを以下にまとめる。
| 方式 | 鍵 | 速度 | 用途 |
|---|---|---|---|
| 対称鍵 (AES) | 暗号化と復号に同じ鍵 | 高速 | データの暗号化 |
| 非対称鍵 (RSA, ECDSA) | 公開鍵と秘密鍵のペア | 低速 | 鍵交換、デジタル署名 |
TLS での組み合わせ
TLS での組み合わせを図で示す。
1. 非対称鍵で鍵交換 (RSA/ECDHE)
2. 共有された対称鍵でデータを暗号化 (AES-256-GCM)
→ 非対称鍵の安全性 + 対称鍵の速度を両立
AWS での暗号化
保存時の暗号化 (At Rest)
S3 は SSE-S3 または SSE-KMS、DynamoDB は AWS マネージドキーまたは CMK、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 キーやデータベースパスワードなどの秘密情報を定期的に自動更新するセキュリティプラクティス
コンプライアンス
法規制や業界標準への準拠を確保し、セキュリティと信頼性を維持する取り組み
TLS 終端
ロードバランサーや CDN で TLS を復号し、バックエンドとの通信負荷を軽減する構成パターン
Base64
バイナリデータを ASCII テキストに変換するエンコーディング方式で、メールや JSON でのバイナリ転送に使われる
関連する記事
ペアプロ相手が本を読んでいると会話の密度が変わる
ペアプログラミングやモブプログラミングで、相手が技術書を読んでいるかどうかで議論の質が変わります。共通の語彙がある場合とない場合の差と、チームの読書文化が開発効率に与える影響を考えます。
ペアプログラミングのように本を読む - 2 人 1 組の輪読術
ペアプログラミングの手法を読書に応用する「ペアリーディング」を紹介します。1 人がナビゲーター、1 人がドライバーの役割で本を読むと、理解の質が劇的に変わります。
本についてくるダウンロード素材を使い倒す
プログラミングの本には、サンプルコードや素材のダウンロード特典がついていることがあります。この特典を活用するだけで、学習効率が大きく変わります。