SIVモード:Nonce誤用耐性を持つAEAD
Synthetic IV(SIV)モードと、壊滅的なNonce再利用から保護する仕組みを学びます。
「SIVモード:Nonce誤用耐性を持つAEAD」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
ノンスの再利用:致命的な障害
AES-GCMなどのCTRモードに基づくAEAD暗号では、暗号化するたびに一意のノンスが必要です。同じ鍵で同じノンスを再利用すると、攻撃者は2つの暗号文をXORして、2つの平文のXORを復元でき、機密性が直ちに破られます。
GCMのノンス再利用は認証鍵を漏らします
AES-GCMでのノンス再利用は、単純なCTRモードの場合よりもさらに深刻です。同じノンスと鍵を使って2つのメッセージを暗号化すると、攻撃者はGHASH認証鍵H全体を復元できます。Hが知られると、攻撃者は任意の認証済みメッセージを偽造できます。
Synthetic IVモードの導入
RFC 5297で定義されたSynthetic IV(SIV)モードは、ノンス再利用の脆弱性を排除するために設計されました。ランダムなノンスやカウンターベースのノンスを必要とする代わりに、SIVは疑似乱数関数を使用して平文自体からIVを合成的に導出するため、決定論的であり、ノンスの誤用に対する耐性を持ちます。
SIVのノンス導出メカニズム
SIVでは、ノンス(synthetic IVと呼ばれます)をSIV = PRF(key, plaintext, associated_data)として計算します。次に、このIVをCTRモード暗号化のカウンターとして使用します。IVは平文から導出されるため、同じ平文を暗号化すると常に同じ暗号文が生成されます。
SIVにおけるnonce再利用の結果
SIVで同じ平文を2回暗号化したためにnonceが再利用された場合、観測者に分かるのは、同一のメッセージが2回送信されたということだけです。平文の内容自体は隠されたままです。これは、nonceの再利用によって平文のXORが明らかになるCTRベースのAEADと比べて、大幅な改善です。
AES-SIVの構成
AES-SIV(RFC 5297)は、S2V関数(AES-CMACをベースとする連鎖型PRF)を使用してsynthetic IVを生成し、その後、第2のサブキーでAES-CTR暗号化を行います。AESキーを2つ必要とするため、単一キーのAEADモードよりもキー管理がやや複雑です。
AES-GCM-SIV:現代的な代替方式
AES-GCM-SIV(RFC 8452)は、GCMの性能とSIVに似た安全性を組み合わせるように設計された、より効率的なnonce誤用耐性AEADです。nonceからメッセージごとのサブキーを導出し、Polyval認証子を使用することで、nonce誤用耐性を維持しながらAES-SIVより優れた性能を実現します。
2回のパスによる性能コスト
SIVでは、データを2回処理する必要があります。1回目はsynthetic IVの計算、2回目は暗号化に使用します。そのため、AES-GCMのような1回のパスで処理するAEADモードと比べて、計算コストはおよそ2倍になります。レイテンシーやスループットが重視されるアプリケーションでは、このオーバーヘッドを考慮する必要があります。
GCMよりSIVを優先する場面
nonceの生成が信頼できない場合、アプリケーションがステートレスでnonceカウンターを維持できない場合、または決定的暗号化が必要な場合は、SIVが適しています。たとえば、インデックス作成のために同じ値から常に同じ暗号文を生成したいデータベースフィールドの暗号化などです。
ステートレスサービスと決定的暗号化
レプリカ間でnonceの状態を調整できないステートレスなマイクロサービスは、SIVモードの有力な候補です。グローバルカウンターによる偶発的なnonce再利用のリスクを負う代わりに、SIVなら安全性が自動的に確保されます。キーラッピング(RFC 3394)でも、決定的なキー暗号化のためにSIVの原則が使用されています。
実際のSIV
AES-SIVは、libsodium(最近のバージョンではcrypto_aead_aes256gcm_sivとして利用可能)やGoogle Tinkなど、主要な暗号ライブラリで利用できます。AES-GCM-SIVはBoringSSLとGo標準ライブラリでサポートされています。nonce管理が難しい場合、これらは標準のAES-GCMより安全なデフォルト選択肢です。
SIVのnonce誤用チェック
AES-SIVで同じキーを使って同じ平文を2回暗号化すると、何が起こるでしょうか?
レッスンのまとめ:nonceを安全にするSIV
SIVモードは、平文自体からIVを導出することで、nonce再利用による壊滅的な問題を防ぎます。nonceを再利用しても、同一のメッセージが送信されたことだけが分かり、内容までは分かりません。AES-GCM-SIV(RFC 8452)は、ステートレスな暗号化や決定的暗号化が必要な現代のアプリケーションに、効率的なnonce誤用耐性を提供します。
よくある質問
「SIVモード:Nonce誤用耐性を持つAEAD」レッスンは無料ですか?
はい。「SIVモード:Nonce誤用耐性を持つAEAD」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「SIVモード:Nonce誤用耐性を持つAEAD」で何を学びますか?
Synthetic IV(SIV)モードと、壊滅的なNonce再利用から保護する仕組みを学びます。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「SIVモード:Nonce誤用耐性を持つAEAD」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Encrypt-Then-MACがMAC-Then-Encryptに勝る理由
- SIVモード:Nonce誤用耐性を持つAEAD
- AEGIS:高速な認証付き暗号
- 本番システム向けAEADの選定