はじめに
AWSの試験勉強や実務で「PGP暗号化」「TLS」「デジタル署名」といったキーワードが出てきたとき、なんとなく理解しているようで、いざ問題を解くと手が止まる…という経験はありませんか?
私もSAPの勉強中にAWS Transfer Familyの問題を解いていて、なんとなくわかっているつもりになっていることを認識しました。
「PGPで暗号化されたファイルを自動復号したい。Secrets Managerには何を保存すればいい?公開鍵?秘密鍵?」
この記事では、公開鍵・秘密鍵の3つのユースケースを、AWSの実践的な文脈と合わせて整理します。
前提:公開鍵・秘密鍵とは
まず最低限の前提を整理します。
- 公開鍵(Public Key):誰に渡してもOKな鍵
- 秘密鍵(Private Key):絶対に外に出してはいけない鍵。自分だけが持つ
この2つはペアになっており、非対称暗号方式(Asymmetric Encryption)と呼ばれます。
「どちらの鍵で何をするか」がユースケースによって変わるのがポイントです。
ユースケース① 暗号化・復号(例:PGP, RSA)
基本の流れ
送信者 受信者
[公開鍵で暗号化] → 🔒暗号文 → [秘密鍵で復号] → 平文
公開鍵で暗号化し、秘密鍵で復号するのが基本です。
- 送信者は受信者の公開鍵を使って暗号化する
- 受信者だけが持つ秘密鍵でのみ復号できる
- 通信途中で盗聴されても、秘密鍵がなければ復号不可
AWSの実例:Transfer Family + PGP自動復号
以下のようなシナリオを考えます。
サードパーティからPGP暗号化されたファイルをS3に受け取り、自動で復号したい。
AWS Transfer FamilyのマネージドワークフローとSecrets Managerを使う構成。
この場合、Secrets Managerに保存すべきは秘密鍵です。
サードパーティ(送信者)
└─ 自社の公開鍵でファイルを暗号化して送信
↓
S3バケットに着信
↓
Transfer Family マネージドワークフロー
└─ Secrets Managerから秘密鍵を取得
└─ 名目上のステップ(Nominal Step)で復号処理
↓
復号済みファイル
よくある間違い:「公開鍵をSecrets Managerに保存すればいい」→ ❌ 公開鍵で復号はできません。
また、復号は正常系の処理なので「名目上のステップ(Nominal Step)」に追加します。エラー時の処理である「例外処理ステップ(Exception Step)」ではありません。
ユースケース② デジタル署名(例:コード署名、電子証明書)
暗号化・復号とは鍵の使い方が逆になります。
基本の流れ
送信者(本人) 受信者
[秘密鍵で署名] → 📄データ+署名 → [公開鍵で検証] → ✅本人確認OK
秘密鍵で署名し、公開鍵で検証するのがデジタル署名です。
- 秘密鍵は本人しか持っていない → 秘密鍵で作られた署名 = 本人の証明になる
- 受け取った側は公開鍵で署名を検証し、「本当にこの人が送ったか」「改ざんされていないか」を確認する
主な使用例
- メールの送信元確認(S/MIME)
- ソフトウェアの改ざん検知(コード署名)
- 電子契約・電子証明書
ユースケース③ TLS/SSL(HTTPS通信)
TLSは公開鍵暗号と共通鍵暗号を組み合わせた方式です。まず「共通鍵」について簡単に説明します。
共通鍵暗号とは
公開鍵方式とは別の暗号化方式で、暗号化も復号も同じ1つの鍵を使います。
送信者 ──[共通鍵で暗号化]──→ 受信者 ──[同じ共通鍵で復号]
- メリット:処理が非常に速い(ビット演算ベース)
- デメリット:最初に鍵をどうやって相手に安全に渡すか問題がある
「共通鍵を暗号化して送ろう」→「その暗号化の鍵はどうやって送る?」→無限ループになります。
そこで公開鍵暗号を使って共通鍵を安全に渡す
① ブラウザ → サーバー:「接続したい」
② サーバー → ブラウザ:「公開鍵(証明書)をどうぞ🔓」
③ ブラウザ:ランダムな共通鍵を生成し、公開鍵で暗号化して送信🔒
④ サーバー:秘密鍵で復号して共通鍵を取得🔑
⑤ 以降:共通鍵で高速に暗号化通信 ⚡
なぜ公開鍵暗号だけで通信しないのか?
公開鍵暗号(RSAなど)は、巨大な素数の計算を伴うため処理が重く、大量のデータを継続的に暗号化するには向きません。そこで、「共通鍵の安全な受け渡し」だけに公開鍵暗号を使い、実際の通信は高速な共通鍵暗号(AESなど)に切り替えます。
まとめ:鍵の使い方の対応表
| ユースケース | 秘密鍵の役割 | 公開鍵の役割 |
|---|---|---|
| 暗号化・復号(PGPなど) | 復号 | 暗号化 |
| デジタル署名 | 署名(作成) | 検証 |
| TLS/HTTPS | 復号・認証 | 暗号化・検証 |
ポイントは「署名では鍵の使い方が逆になる」という点です。暗号化・復号のイメージだけで覚えていると、署名の場面で混乱します。
おわりに
今回のAWS Transfer FamilyのPGP復号問題のように、「公開鍵 vs 秘密鍵」の使い分けは実際の試験や設計でも問われます。「復号したいなら秘密鍵」「本人証明なら秘密鍵で署名」と目的から逆引きできるようになると、迷わなくなります。
暗号化の仕組みを理解しておくと、AWSのセキュリティサービスの設計判断にも自信が持てるようになりますので、ぜひ参考にしてみてください。