通常128ビットから256ビットの長さの小さなメッセージをたくさん送信する必要があります。各メッセージは個別の128ビットAESキーで暗号化されます。したがって、キーを使用して各メッセージを送信するには、256〜384ビットのデータが必要になります。メッセージが129ビット長の場合でも、暗号化には2つのAESブロックが必要で、キーを含むメッセージサイズは384ビットに増加します。
このため、AESをストリーム暗号として使用することでスループットを向上できると考えています。私が思いついた解決策は、AESとCTRのような適切な非認証暗号化モードを使用して、鍵を使用してすべて0のメッセージを最も近い128ビットに切り上げたサイズで暗号化することです。次に、暗号化されたゼロを取り、XORそれらを平文と一緒にして、同じサイズの暗号文を取得します。平文と暗号文が与えられると、ストリームを回復できるため、各キーは一度だけ使用できることに気付きます、しかし、各キーは1回しか使用されないため、これは私の状況では問題になりません。私の質問は、この方法は安全であり、前述の平文攻撃などの他の注意事項はありますか?
CTRモード は、キーに依存する疑似ランダムストリームを生成し、それをデータとXORすることによってデータを暗号化することです。つまり、実際に説明するのはCTRモードであり、XOR自分で行う必要はありません。そうでない場合は、ゼロの束を暗号化し、実際のデータで結果をXORすることにより、不要な余分なXORをゼロで実行しています。
(暗号化モードの設計を完全に習得していない場合、自分で暗号化モードを発明しようとすることは強く推奨されています、およびareこのような設計を実行する資格がある場合は、実際に確実に適切にジョブを実行できない場合でも、賢明に検討してください。)
CTRモードはキーの再利用に対して非常に脆弱であるため、キーの値をnever再利用しないようにしてください。または、「十分に異なるIV」を使用する場合、キーを再利用できます(CTRはカウンターの連続する値を暗号化することで機能するため、カウンター値を再利用しない限り、キーを再利用しても問題はありません)。 IVは送信者と受信者の両方に認識されている必要があり、これは一部のユースケースで問題になる可能性があります(各メッセージに明示的なIVを追加するとサイズが大きくなります。メッセージが失われる可能性がある場合や受信者がステートレスの場合、メッセージ数などの暗黙のIVは必ずしも使用できません)。 。それとは別に、認証されていないモードには、実際には認証されないという一般的な弱点があります。アクティブな攻撃者がローミングしている場合は非常に面倒です(パッシブのみの攻撃者がいるシナリオは現実的ではない傾向があります)。また、CTRモードはパディングがないことを意味するため、暗号化されたデータの長さはプレーンテキストのデータ長と同じです。問題。
上記の制限内で、CTRモードはそのようなことができるのと同じくらい良いです。