サービスまたはライブラリは、関数decrypt( user_id, cypher_text)
を提供し、プレーンテキストを返します。関数の内部では、安全なボールトからAESキーをロードし、cypher_textを復号化して、プレーンテキストを返します。攻撃者がこの機能に単独でアクセスできても、有効な暗号文がわからない場合、攻撃を実行して特定のuser_idのAESキーを復元できますか?
明確にするために、「攻撃者は有効な暗号文を知らない」と言います。これは、一致する暗号化機能にアクセスできないだけでなく、暗号化された暗号文にもアクセスできないことを意味しますキーで。そのため、攻撃者は特別に細工された一連の攻撃用暗号文をフィードし、解読結果を検査して鍵を推測することしかできません。
そのような攻撃の名前を探しましたが、見つけることができませんでした。この場合、攻撃者はAESキーで暗号化する機能にアクセスできないため、「既知のプレーンテキスト」攻撃を使用できません。上記のシナリオを「解読機能に対する巧妙な暗号文攻撃」と表現します。したがって、私の質問は、AESがこのようなシナリオでのブルートフォース攻撃以外に対して安全かどうかです。
注:承認された回答によれば、これは選択された暗号文攻撃(CCA)であり、特定のバージョンのAESは問題ありませんが、他のバージョンは問題があります。 「表1:アルゴリズムの概要表」の W3C Web暗号化APIの暗号化アルゴリズムのセキュリティガイドライン は、「CCAで安全ではない」と右の列に説明しています。
これは 選択された暗号文攻撃 のように聞こえます。生のAESブロック暗号自体はそれに対して安全です。現代の設定で使用されていると思われるすべての暗号は、それに対して安全です。
実際に目にするいくつかのAES実装は、サイドチャネル攻撃に対して安全ではありません。つまり、送信された暗号文のクリアテキストではなく、関数の署名の一部ではない計算に関する情報を意味します。計算にかかった時間の長さが最も有名で、リモートネットワークの攻撃者が利用できる可能性があります。キャッシュと実行ポートの競合は、同じハードウェアで実行されているが別のプロセスまたはVMで実行されているコードに見え、クラウド環境での共有ハードウェアへの攻撃です。電気部品からのアコースティックノイズの測定は、同じ部屋のハードウェアへの攻撃となる可能性があります。ハードウェアからの電磁放射を実際に測定することは、スマートカードなどに対する攻撃です。
問題は、生のAESブロック暗号を決して使用しないことです。 1つのブロックよりも長いメッセージを暗号化する必要があり、順応性から保護する必要があります。 MAC-then-Encrypt AES-CBCは正しく実装することが非常に困難であることが判明したため、ワイルドに展開されたすべてのTLS実装を修正することは不可能と見なされ、TLS 1.3はそれらの暗号スイートを削除し、ワイルドでのTLSの使用計画はちょうどエージングすることですそれらすべての悪い実装を排除します。現代の設計でAEADを使用していない人は、当然のことながらばかげています。
したがって、たとえば、パディングOracleを含む認証されていないAES-CBCは簡単に壊れる可能性があります。これは、暗号化が微妙であることを非暗号化の人々に教えるための演習です。
ブロック暗号セキュリティの詳細については、cryptography.SEを参照してください。 security.SEでは、暗号学者にならずに問題を回避する方法を説明します。
EAXやGCMのような最新のAEADを使用するか、少なくともHMACをEncrypt-then-MACおよび対応するMAC-then-Decryptとともに使用します(CBCを使用する場合は、MACがIVをカバーしていることを確認してください。ただし、CTRを使用する必要があります) 。このようにして、巧妙に作成された暗号文を自分の鍵を持つAES回路に公開することはなく、そのことを心配する必要もありません。または、ChaCha20Poly1305を使用すれば、安全でないAES実装について心配する必要はありません(ハードウェアAESとビットスライスのみが安全であり、すべてのテーブル駆動型AES実装は安全ではありません。ビットスライスは遅いため、含まれていないハードウェア上のほとんどすべてのAES専用のAES回路は安全ではありません。そのため、ChaChaが発明されました。
本当に正しいことは、自分の暗号をロールバックせず、Google Tinkやlibsodiumなどの誤用に強いAPIを持つ高レベルのライブラリを使用することです。