0

学校の課題として ECB (Electronic Code Book) を使用して RSA アルゴリズムを実装する必要があります。私は ECB が悪いことを知っており、実生活でそのようなものを使用するべきではありませんが、ここでは他に選択肢がありません (最終的には CBC に変更し、次に AES に移行しますが、現時点では ECB を使用する必要があります)。

暗号化されたブロックの連鎖に関する問題に遭遇しました。サイズが 256 ビットのキーがあり、その結果、各ブロック サイズを 256 ビット (ブロック サイズ = キー サイズ) に設定したとします。また、サイズが小さい場合に備えて、最後のブロックを必ずパディングします。問題は、暗号化されたブロックの結果サイズがさまざまであるため、結果をチェーンする方法がわからないため、データを復号化すると、ブロックの開始時刻とブロックの終了時刻が正確にわかります。そのようなイベントで行う一般的なことは何ですか? 各ブロック間に何らかの区切り文字を入れることを考えましたが、それはお粗末な解決策だと思います。

4

2 に答える 2

2

RSAは内部パディングを使用するため、入力をパディングする必要はありません。RSA暗号化は通常、OAEPとPKCS#1.5の2つの異なるパディングモードで実行できます。どちらも、各ブロックに実質的なパディングを追加します。これは、たとえば、暗号化される最後のブロックでのみパディングが実行されるAESパディングとは異なります。また、RSAのセキュリティはパディングに大きく依存しているため、実行する必要があることも異なります。

現在、各ブロックはパディングされているため、ブロックに収まるプレーンテキストは明らかにキーサイズ(モジュラスのサイズ)よりも小さくなります。つまり、ブロックサイズはキーサイズよりも小さくなります。PKCS#1.5の場合、キーサイズより11バイト小さくなります(少なくともバイト境界にある場合)。ただし、セキュリティに関しては、わずかに大きい(たとえば、最大19バイト)ブロックサイズを維持する方が適切ですが、8バイトのパディングは(安全な)ランダムバイトである必要があります。

Javaを使用すると、実際にオブジェクトからブロックサイズを尋ねることができCipher、RSAの場合、キーサイズからオーバーヘッドを正しく差し引くことができます。それ以外の場合は、自分で計算する必要があります。前述のように、最後のブロックのパディングは必要ありません。ブロックのパディングによって最後のブロックが埋められます。

RSA PKCS#1仕様は無料でダウンロードできることに注意してください。したがって、(よりタフな)OAEPパディングの計算を自分で行うことができます。あなたの特定の割り当てのために、私は1.5パディングを維持します。

于 2012-12-24T22:11:14.567 に答える
0

ECB は、ブロック暗号操作モードですRSAはブロック暗号ではなく公開鍵暗号方式であるため、「ECB モードの RSA」はあまり意味がありません。あなたの元の任務とここでのあなたの説明との間で何かが混同されたに違いないと思います。

いずれにせよ、実際のブロック暗号の出力長は常に一定です (入力ブロック長と同じです)。混乱を招く可能性があることの 1 つは、暗号化された出力に null バイトが含まれることがあるため、null で終わる文字列として扱うことができないことです。出力をバイナリ データの固定長ブロックとして扱うだけで問題ありません。

于 2012-12-24T21:37:18.343 に答える