2011-10-28 6 views
0

RSACryptoServiceProviderを使用して小さなデータブロックを暗号化しています。私が取り組んでいるソリューションでは、ソースデータの同じ部分が同じ公開鍵で2回暗号化されている場合、結果(暗号化されたデータブロック)は同じではないことが重要です。RSA暗号化の結果はランダムであることが保証されています

私はこれを例で確認しましたが、期待したように機能しました。私の質問は、この動作が設計上のもので、保証されている場合、または同じデータを持つデータブロックが暗号化後にもはや一致しないことを保証するためにソースデータにランダムな部分を追加する必要があるかどうかです。ここで

は一例です:

byte[] data=new byte[]{1,7,8,3,4,5}; 
RSACryptoServiceProvider encrypter = cert.PublicKey.Key as RSACryptoServiceProvider; 
byte[] encryptedData = encrypter.Encrypt(data,true); 

// encryptedData has always other values in, although the source data is always 
// 1,7,8,3,4,5 and the certificate is always the same (loaded from disk) 

具体的な質問は、.NETのためですが、それは仕様であれば多分答えは、すべてのRSA-の実装のために、一般的に与えられることができますか?

+0

RSAで直接データを暗号化するのではなく、RSAで対称鍵を暗号化し、対称鍵でデータを暗号化してください。または、これを行う既存のライブラリを使用してください。 –

+0

@ニック:あなたのコメントをありがとう。 SHA1-hashを暗号化します。この場合、ハイブリッド暗号化を使用する必要はないと思います。それどころか、私はそれが役に立たないオーバーヘッドだと思う。私は正しいですか、私は何かを忘れてしまったのですか? – HCL

+0

いいえ、それは十分です - あなたは効果的に署名するのではなく、暗号化しています。私はまだ、自分でプリミティブを作成するのではなく、既存のライブラリを使うことを提案しています。 –

答えて

4

テキストブックRSAの暗号化アルゴリズムが決定論的である:

ciphertext = plaintext^encryption-exponent mod modulus 

(ここで^mod剰余演算、整数累乗である。)

しかし、あなたが述べて、これは優れたセキュリティを提供しません。平文を推測できる攻撃者は、それを自分で暗号化して結果を比較することで、この推測を単純に検証できます。このため

、公式RSAの仕様(とも実際に使用されるすべての実装)一部(一部はランダム)詰め物が含まれ、私たちは実際にplaintextを暗号化しますが、pad(plaintext)ません:

ciphertext = pad(plaintext)^encryption-exponent mod modulus 

復号化:

このパディングRSAは実際には安全な暗号化方式です。

シグネチャの簡単な偽造を避けるため、RSA署名にも同様のパディングが使用されています。

+0

+1あなたの答えをありがとう。パディングアルゴリズムは一般的に使用されているアルゴリズムですか、あるいはすべてのプラットフォームに独自のパディングとパディングなしロジックを実装していますか? – HCL

+1

あなたの他の質問への答えにちょうど言及されているように、基本的に2つのパディングスキームが使用されています:[OAEP](http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding)(データを完全に混合する)と[PKCS1 -v1_5](http://tools.ietf.org/html/rfc3447#section-7.2.1)(基本的にランダムなバイトを最初に追加します)。 –

+0

二度聞いて申し訳ありませんが、私はこのコメントを書いた時点で、私は第二の質問(+1)にあなたの答えを見ていません。私は暗号化のノブですが、学習しようとしていますが、インターネットリソースからの特定の質問に対する明確な答えを得ることはむしろ複雑です。多くの情報が存在しますが、ほとんどの情報は同じことを他の言葉で説明していますが、このような詳細な質問のためにはむしろ不完全です。たぶんそれは間違った方法で検索するので私のせいです。とにかく、あなたの詳細な答えをどうもありがとう。私はそれらを多く感謝します。 – HCL

関連する問題