2013-05-01 31 views
21

RSA暗号化を使用してopenSSLでデータを暗号化しています。 RSAの私の理解は、同じ公開鍵で同じデータを暗号化すると常に同じ結果(as stated hereまたはhere)が与えられることです。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暗号化データのみを格納するデータベースを設計しようとしています。私は、暗号化された情報のハッシュサムを検索したいと思います。それは、暗号化の手順自体が一意でない場合は不可能です。

+0

FWIWでは、rsautilは[pkeyutil](http://www.openssl.org/docs/apps/pkeyutl.html)の方が償却されています –

答えて

38

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

RSA暗号化では、「0」とランダムビットの文字列が埋め込まれたメッセージが暗号化されます。このプロセスでは、ランダムな文字列が暗号ハッシングと排他的論理和によって暗号文に隠されます。解読時に、RSA解読は暗号文からランダムストリングを回復し、それを用いてメッセージを回復する。このため、同じテキストメッセージに対してopenssl rsautlと異なる結果が得られます。

5

[OK]を取得しました。 RSA自体は決定論的です。 しかし、より良いセキュリティを実現し、攻撃者が暗号化された情報を推測するのを防ぐために、暗号化は純粋な「データ」ではなく「データ」+「あるパターン」(I should have read wikipedia more carefully

+0

暗号化された情報を推測するだけではありません。たとえ適切な埋め込みスキームを使用しない情報が推測できない(たとえば128ビットのキー)場合でも、重大な弱点につながります。依然として依然として普及しているPKCS#1 v1.5スキームは弱いです。 – CodesInChaos

関連する問題