Cryptology Academy · レッスン

本番システム向けAEADの選定

脅威モデルと性能要件に基づいて適切なAEAD方式を選ぶための判断フレームワークを適用します。

レッスン 4/413 ステップ

「本番システム向け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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Encrypt-Then-MACがMAC-Then-Encryptに勝る理由
  2. SIVモード:Nonce誤用耐性を持つAEAD
  3. AEGIS:高速な認証付き暗号
  4. 本番システム向けAEADの選定
← Cryptology Academyに戻る