53

RSA暗号化を使用してopenSSLでデータを暗号化していますが、これは正常に機能します。RSA についての私の理解では、同じデータを同じ公開鍵で暗号化すると、常に同じ結果が得られます (ここまたはここに記載されているように)。

ただし、openssl を使用すると、暗号化を繰り返すたびに異なる結果が得られます。例えば:

➜  ~  echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin  | shasum
      11b6e058273df1ebe0be5e0596e07a6c51724ca0  -

➜  ~  echo '30' | openssl rsautl -encrypt -inkey pub.pem -pubin  | shasum
      05cb82595f7429ef196189f4e781088597d90eee  -

では、なぜ出力が一意ではないのでしょうか。RSA 暗号化を間違えたからですか、それとも openssl が追加の魔法を行ったからですか?

実際、私は RSA 暗号化データのみを格納するデータベースを設計しようとしています。暗号化された情報のハッシュサムを検索したいのですが、暗号化手順自体が一意でない場合、これは不可能です。

4

2 に答える 2

75

安全な RSA 暗号化は、ランダム性を含む適切なパディング スキームを使用して実装されます。詳細については、 PKCS#1またはOAEPを参照してください。

RSA 暗号化は、'0' とランダム ビットの文字列で埋められたメッセージを暗号化します。その過程で、ランダムな文字列は、暗号ハッシュと XOR によって暗号文に「隠され」ます。復号化の際、RSA 復号化は暗号文からランダムな文字列を復元し、それを使用してメッセージを復元します。これが、同じテキスト メッセージに対して openssl rsautl で異なる結果が得られる理由です。

于 2013-05-02T02:23:21.823 に答える
15

はい、分かりました。RSA 自体は決定論的です。ただし、セキュリティを強化し、攻撃者が暗号化された情報を推測できないようにするために、暗号化は純粋な「データ」ではなく、「データ」+「ランダムパターン」で行われます (ウィキペディアをもっと注意深く読むべきでした) 。

于 2013-05-01T19:57:03.053 に答える