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-の実装のために、一般的に与えられることができますか?
RSAで直接データを暗号化するのではなく、RSAで対称鍵を暗号化し、対称鍵でデータを暗号化してください。または、これを行う既存のライブラリを使用してください。 –
@ニック:あなたのコメントをありがとう。 SHA1-hashを暗号化します。この場合、ハイブリッド暗号化を使用する必要はないと思います。それどころか、私はそれが役に立たないオーバーヘッドだと思う。私は正しいですか、私は何かを忘れてしまったのですか? – HCL
いいえ、それは十分です - あなたは効果的に署名するのではなく、暗号化しています。私はまだ、自分でプリミティブを作成するのではなく、既存のライブラリを使うことを提案しています。 –