本番システム向けAEADの選定
脅威モデルと性能要件に基づいて適切なAEAD方式を選ぶための判断フレームワークを適用します。
「本番システム向けAEADの選定」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
AES-GCM:デフォルトの選択肢
AES-GCMは、ほとんどの本番システムにおける適切なデフォルトAEADです。ほぼすべての最新のx86およびARM64プロセッサでAES-NIによるハードウェアアクセラレーションを利用でき、TLSスタックや暗号ライブラリで広くサポートされています。また、広範な暗号解析と実環境での豊富な導入実績があります。
AES-GCMのnonce制限
AES-GCMは96ビットのnonceを使用します。nonceをランダムに生成する場合、同じキーで約2^32個のメッセージを処理するとバースデー限界に達し、その時点でnonceが衝突する確率が無視できなくなります。大量のデータを扱うシステムでは、カウンターによるnonce管理、または2^32個のメッセージごとのキー更新が不可欠です。
ChaCha20-Poly1305:AES-NIがない場合
ChaCha20-Poly1305は、AES-NIを利用できない場合や、nonceの生成が信頼できない可能性がある場合に適した選択肢です。ソフトウェアで高速に動作し、設計上constant-timeであるためタイミングサイドチャネルに耐性があります。また、AESハードウェアをサポートしない環境では、TLS 1.3で必須の暗号スイートです。
nonceの安全性を確保するAES-GCM-SIV
nonceが再利用される可能性がある場合や、ステートレスサービスやキーラッピングなどでnonceを決定的に生成する必要がある場合は、AES-GCM-SIV(RFC 8452)が適切な選択肢です。標準のAES-GCMと比べて性能コストはわずかに増加しますが、nonce誤用耐性を提供します。
最大スループットを実現するAEGIS
すべてのデプロイ先でAES-NIの存在が保証され、暗号化の最大スループットが必要な場合は、AEGIS-128Lが適切な選択肢です。高帯域幅ネットワーク機器、VPNコンセントレーター、ストレージ暗号化システムは、AEGISによってAES-GCMを上回る意味のある性能向上が期待できる有力な候補です。
キーサイズの選択:128ビットと256ビット
AES-128は128ビットの安全性を提供し、現在および予想可能な将来の古典コンピューティングによる脅威に対して十分と考えられています。AES-256は将来の技術進歩に対する余裕をさらに確保でき、一部のコンプライアンスフレームワーク(NSA Suite BにおけるTOP SECRET分類など)で必要とされます。ほとんどのアプリケーションではAES-128で十分であり、わずかに高速です。
nonceサイズに関する考慮事項
AES-GCMは96ビットのnonceを使用し、AES-GCM-SIVも96ビットのnonceを使用します。一方、XSalsa20(libsodiumのsecretboxで使用)は192ビットのnonceを使用するため、同じキーでより多くのメッセージに対してもランダムなnonceを安全に生成できます。nonceを長くすると、大量のデータを扱うシステムで偶発的な再利用のリスクを減らせます。
推奨ライブラリ
プリミティブを直接実装するのではなく、実績のあるAEADライブラリを使用してください。libsodiumは、シンプルなAEAD API(crypto_aead_aes256gcm_encrypt、crypto_aead_chacha20poly1305_ietf_encrypt)を提供します。Google Tinkは、キーのローテーションとバージョン管理の機能を備えた形でAEADプリミティブをラップします。各言語のネイティブTLSライブラリは、トランスポートセキュリティ用のAEADを自動的に処理します。
AES-CBCからの移行
別個のHMAC-SHA256をEtM順序で使用するAES-CBCは許容できますが、レガシーな方式です。AES-GCMへ移行すると、2つのプリミティブを1つに置き換えて実装を簡素化でき、誤った組み合わせによるリスクもなくせます。CBC-HMACで暗号化された保存データは、計画されたキー更新の際にAES-GCMで再暗号化してください。
AEAD実装のテスト
AEAD実装は、NIST(AES-GCM)およびRFC 8439(ChaCha20-Poly1305)の公式テストベクトルを使ってテストしてください。認証タグの検証に失敗した場合、復号処理が部分的な平文を返さず、エラーを返すことを必ず確認してください。エラー処理の誤りは、実装でよく見られる欠陥です。
選択フローチャート
AES-NIが存在し、nonceが一意である場合はAES-GCMを選択します。AES-NIがない場合やnonceの信頼性が低い場合はChaCha20-Poly1305を選択します。nonceの再利用が懸念される場合はAES-GCM-SIVを選択します。AES-NIが保証されている環境で最大スループットを優先する場合はAEGISを選択します。新しいシステムで非AEADモードを選択してはいけません。
AEAD選択の確認
ステートレスなマイクロサービスを複数のレプリカにまたがってデプロイしており、データを暗号化する必要がありますが、共有nonceカウンターを調整できません。最も適切なAEADモードはどれでしょうか?
レッスンのまとめ:適切なAEADの選択
AES-GCMがデフォルトです。ChaCha20-Poly1305はAES-NIがない環境に対応します。AES-GCM-SIVはnonceの安全性を確保できない環境に対応します。AEGISは、AES-NIが保証されている場合に最大スループットを実現します。プリミティブを手動で組み合わせるのではなく、libsodiumやTinkなどのライブラリを使用してください。公式テストベクトルで必ずテストし、認証失敗が正しく処理されることを確認してください。
AI チューターと学ぶ Cryptology Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 67
- レッスン
- 261
よくある質問
「本番システム向けAEADの選定」レッスンは無料ですか?
はい。「本番システム向けAEADの選定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「本番システム向けAEADの選定」で何を学びますか?
脅威モデルと性能要件に基づいて適切なAEAD方式を選ぶための判断フレームワークを適用します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「本番システム向けAEADの選定」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。