0

rsa を使用して、公開鍵 e (対応する秘密鍵 d) を使用して小さなメッセージを暗号化しました。しかし、別の秘密鍵 d' で復号化すると、bad padding exception.
間違ったキーを使用したことをどのように知ることができますか?

4

3 に答える 3

3

パディング スキームを使用すると、解読者は、間違ったキーを使用しているか、破損したデータを扱っているかを判断できます。

パディング スキームには、平文の最終バイトの明確に定義されたセットがあります。間違ったキーで復号化している場合、結果の「平文」は基本的にランダムなガベージであるため、有効なパディング シーケンスで終了する可能性はほとんどありません。

于 2012-04-17T02:58:25.193 に答える
2

ほとんどの RSA ライブラリは、公開鍵の暗号化にデフォルトでPKCS#1 ブロック タイプ 2パディングを使用します。その場合、データはモジュラス サイズより少なくとも 11 バイト小さくなければならず、平文は次のようにパディングされます。

00 02 r 1 r 2 r 3 r 4 ... r M ... 00 [あなたの平文バイト]

ここで、M >= 8 および r iはランダムな正のバイトです。これらはすべてゼロではありません。

これは、法を法として e乗した実際の値です。したがって、復号化すると、復号化者は結果が次のようになることを確認できます。

  1. 上位バイトは0
  2. 上位バイトの次は 2
  3. 少なくとも次の 8 バイトは非ゼロ
  4. この後どこかでゼロバイトが発生
于 2012-04-18T00:57:27.740 に答える
0

メカニズムは実際にはシンプルであると同時に巧妙です。

正確に 8 バイトのブロックを暗号化するブロック暗号を想像してください。各平文メッセージを 8 バイトのグループに分割し、各グループを単一のブロックとして暗号化します。最後のブロックに関しては、次の 2 つの可能性があります。

  1. ブロックは 8 バイトより短く、正確に 8 バイトになるまでパディングする必要があります。この場合、いくつかのバイト数nをブロックに追加する必要があります。これらの各バイトには、同じバイナリ値nがあります。したがって、最後のブロックは次のいずれかのようになります。ここで、dは 1 バイトのデータです。

    dddddddd 1
    dddddd 2 2 dddddd
    3 3 3
    . . .
    日 7 7 7 7 7 7 7

  2. ブロックの長さは正確に 8 バイトです。この場合、ブロック全体がメッセージに追加されるため、最後の 2 つのブロックは次のようになります。

    8 8 8 8 8 8 8 8

これで、メッセージが復号化されると、デクリプターは削除するパディングのバイト数を明確に判断できます。nそして、最後のブロックがバイナリ値の文字で終わらない場合n、メッセージが破損しているか、間違ったキーで復号化されていることがわかります。


このパディングを、メッセージの先頭を変更するために使用される初期化ベクトル (IV) と混同しないでください。パディングの目的は、メッセージに完全なブロックのみが含まれるようにし、復号化プログラムがキーを検証できるようにすることです。IV はランダムなバイト シーケンスであり、同じ平文を同じキーで何度も暗号化できるようにしますが、毎回異なる暗号文を生成します。

于 2012-04-18T01:13:07.633 に答える