ひとことで言うと
クライアント側でデータを暗号化・復号するためのオープンソースライブラリです。「どのアルゴリズムを使うか」「鍵をどう保護するか」を自分で設計しなくても、エンベロープ暗号化のベストプラクティスに従った実装を提供します。AWSアカウントは必須ではなく、AWS KMSを使う場合にのみ必要です。
要するに、鍵のかけ方の教科書ごと渡してくれるキットです。データごとに固有のデータキーを作り、そのデータキーをさらに別の鍵(ラッピングキー)で包む——この面倒な手順を、SDKが暗号化メッセージという1つの形式にまとめてくれます。
何に使うか
| 用途 | 中身 |
|---|---|
| エンベロープ暗号化 | データオブジェクトごとに固有のデータキーを生成し、1つ以上のラッピングキーで保護 |
| 鍵の可搬性 | 複数のラッピングキー(例: KMSキー+オンプレHSMの鍵)で同じデータキーを保護し、どちらでも復号可能に |
| 暗号化データの一体管理 | 暗号化データキーと暗号化データを1つのメッセージ形式にまとめて保存・受け渡し |
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| 「アプリ側で機密データを暗号化してから保存・送信したい」 | クライアント側暗号化を自前実装せずに標準的な方式で行いたい → AWS Encryption SDK | AWS KMS の Encrypt/Decrypt API 直接呼び出し(Encryption SDK が返す暗号化メッセージとは互換性がない別の形式) |
主役では出ません。 D3(データセキュリティとプライバシー)の文脈で、PII等の機密データを扱うパイプラインの暗号化手段の1つとして挙がります。
互換性の罠。 AWS Encryption SDK で暗号化したデータは、AWS KMS の Decrypt API では復号できません(逆も同様)。DynamoDB Encryption Client や Amazon S3 クライアント側暗号化とも暗号化メッセージの形式が異なり、相互に復号できません。暗号化と復号は同じライブラリで揃える必要があります。
取り違えやすいもの
| 迷う相手 | 切り分けの一言 |
|---|---|
| AWS KMS | KMS は鍵の生成・保管・アクセス制御を行う鍵管理サービス。Encryption SDK はクライアント側での暗号化処理そのものを担い、ラッピングキーとしてKMSを使うこともできる(対立ではなく組み合わせ) |
| AWS KMS の Encrypt/Decrypt API直接呼び出し | KMS APIを直接呼ぶ場合は暗号化データキーの管理を自分で行う必要がある。Encryption SDK はその管理(メッセージ形式・複数ラッピングキー対応)を肩代わりする |
想起チェック
Q1. AWS Encryption SDK で暗号化したデータを、AWS KMS の Decrypt API で復号できますか。
できません。 両者は異なる暗号化メッセージ形式を使うため、暗号化と復号は同じ方式(同じSDK)で揃える必要があります。