AES-GCM暗号化とは
AES-GCMは暗号化と改ざんの検証を組み合わせる方式です。nonce・認証タグの役割、他の方式との違い、アプリでの保護範囲を解説し、ブラウザで検証失敗を試せます。
更新:2026年9月9日。NIST・IETF・Appleの一次資料と、シンプルメモ公開版5.8.26の実装を確認しました。筆者はシンプルメモの開発者です。
暗号文・nonce・タグは何をする?
AESは共通鍵暗号、GCMはその動作モードです。AES-GCMは、暗号化する本文と、暗号化せずに認証する追加データ(AAD)を扱うAEADです。たとえば本文を隠しながら、形式のバージョン番号を本文と結び付けて検証できます。AAD自体は秘密になりません。
nonce(IV)は暗号化ごとの値で、同じ鍵では再利用しない設計が必要です。秘密の鍵とは役割が異なり、暗号文と一緒に保存できます。認証タグは復号時の検証に使います。検証に失敗したデータは採用せず、エラーとして扱います。
方式の定義:NIST SP 800-38D。入力とnonceの条件:RFC 5116。
暗号文を変えると、どうなる?
このページ内で用意した例文だけを、ブラウザのWeb Crypto APIで処理します。まず暗号化して元に戻せることを確認し、次に暗号文のコピーを1ビット変えて検証します。アプリの暗号化処理を監査するデモではありません。
例文: Review the draft at 10:00.
最初のボタンから試せます。
処理中…
検証成功:元の例文に復号できました。
検証失敗:変更した暗号文は拒否され、平文は返りませんでした。
処理を完了できませんでした。最初のボタンからやり直せます。
この環境ではデモを実行できません。HTTPS対応ブラウザとJavaScriptが必要です。
- nonce(12バイト)
- 元の暗号文(16進数)
- 認証タグ(16バイト)
実行するたびに新しい256ビット鍵とnonceを作ります。デモは鍵や結果の保存・送信を行いません。タブを再読み込みすると結果はリセットされます。仕組み:Web Cryptography APIのAES-GCM。
AES-CBC・ChaCha20-Poly1305との違い
方式の違いは次のとおりです。速度は端末や実装で変わり、この表は実測ランキングではありません。CBCを使っているという情報だけで、認証を組み合わせた製品全体の安全性は判断できません。
| 項目 | AES-GCM | AES-CBC | ChaCha20-Poly1305 |
|---|---|---|---|
| 暗号化と認証 | 一体型(AEAD) | CBC単体は暗号化のみ | 一体型(AEAD) |
| AESの使用 | 使用する | 使用する | 使用しない |
| 設計で確認すること | 鍵・nonce・タグ・利用量の上限 | 認証との組み合わせ・IV・パディング処理 | 鍵・nonce・タグ・利用量の上限 |
TLS 1.3はAES-GCMだけの規格ではありません。RFC 8446 §9.1はAES-128-GCMの実装を必須とし、AES-256-GCMとChaCha20-Poly1305も推奨しています。ChaCha20-Poly1305の仕様はRFC 8439を参照してください。
シンプルメモでは、どのデータを守る?
確認した公開版のローカル保存処理は、AppleのCryptoKitによるAES-GCMとKeychain管理の鍵を使います。新規に生成する鍵は256ビットです。Outboxは送信待ちデータの保管場所であり、この暗号化を根拠に「メールも送信先までE2E暗号化される」とは言えません。
この実装は対称鍵をKeychainから読み出して使います。Keychainに保存した鍵と、Secure Enclave内で生成・利用する秘密鍵は同じ説明ではありません。AppleのCryptoKit鍵の保存とSecure Enclaveの鍵が、使い分けを説明しています。
メール送信ではアプリの中継処理と配送事業者を経由し、受信側にもコピーが残ります。暗号化方式と合わせて、プライバシーポリシー、宛先設定と到着確認、端末・メールアカウントの管理を確認してください。Outboxから項目が消えることと、あらゆるコピーの完全消去は別です。
よくある質問
AES-256-GCMの「256」は何ですか?
AESの鍵の長さが256ビットという意味です。nonceや認証タグの長さ、端末全体の安全性を表す数字ではありません。
nonceは秘密にする必要がありますか?
nonceは秘密鍵とは異なり、暗号文に添えて保存できます。重要なのは、同じ鍵で暗号化するときにnonceを再利用しないことです。
タグの検証に失敗したら、本文を表示してよいですか?
検証に失敗した結果を正しい平文として使ってはいけません。破損・違う鍵・変更されたデータなどを切り分け、認証エラーを扱います。
AES-GCMを使えばE2E暗号化になりますか?
方式名だけでは決まりません。誰が鍵を持ち、どこで復号されるかを含むシステム全体の設計が必要です。端末内のOutbox暗号化と、メールの配送・受信先での保存は別の範囲です。
Keychain保存なら鍵はSecure Enclaveから出ませんか?
そうとは限りません。このアプリの確認した実装は、Keychainから対称鍵のデータを読み出して使います。Secure Enclave内で秘密鍵の演算をするAPIと同じものではありません。