2

私の調査では、このテーマに関するさまざまなメッセージを見つけたので、可変量のデータを暗号化するための最良のアプローチを説明する専門知識を探しています。

要件:

[編集:コメントに応じて要件#3を追加]

  1. 公開鍵/秘密鍵の暗号化スキームにRSAを使用したいので、データを暗号化する必要があるが、データを復号化する方法を知らないアプリケーションに公開鍵を配布できます。

  2. 16文字(クレジットカード番号)からキロバイト(シリアル化されたオブジェクト)以上のデータ長をサポートする必要があります。私が暗号化するデータのほとんどは小さいでしょう(クレジットカード、住所など)。

  3. これは、保存データを暗号化するためのものです。

私が知っているオプション:

  1. RSAのみ:RSACryptoServiceProvider公開鍵を使用してすべてのデータを暗号化するために使用します。キーサイズからパディングを差し引いたサイズよりも小さいブロックでデータを反復処理します。

  2. HYBRID:AesCryptoServiceProviderデータの暗号化、呼び出し .GenerateKey()、および.GenerateIV()ランダムキーとIVの生成に使用します。次に、RSACryptoServiceProviderを使用して、上記のキーとIVを暗号化し、それをデータに追加または追加します。

私のハイブリッドアプローチは、私に両方の長所を与えてくれるようです。強力なブロック暗号(AES)と分散公開鍵(RSA)。

これらのアプローチの長所と短所は何ですか?標準は何ですか?驚いたことに、私はこの主題に関する多くの意見や情報を見つけていません。あなたが持っているかもしれない参考文献をいただければ幸いです。

ボーナス: 私は企業のライセンス制限を含むさまざまな理由で自分自身を転がしていますが、C#用の優れた標準のオープンソースアプローチがあるかどうか興味があります。

4

2 に答える 2

2

ほとんどの場合、RSAは対称キーの暗号化に使用されます(IVを暗号化する必要はありませんが、ちょっと...)

(キーの代わりに)データの暗号化にRSAを使用すると、対称ブロック暗号のコンテキストで知られているECB(電子コードブックモード)の問題が発生する可能性があります。特定のキーについては、クリアテキストが常にマップされます。同じ暗号文に...それだけでは暗号化を破ることはできませんが、攻撃者はどのデータパッケージに同じクリアテキストが含まれているかを特定できるため、情報が漏洩する可能性があります

ハイブリッドアプローチを選択します。これは、任意のサイズのデータ​​に適しており、動作モードにECBを選択しない限りこの情報漏洩の傾向がないためです(CBC-サイファーブロックチェーンモード-が行う必要があります)

于 2012-11-07T16:36:42.707 に答える
0

RSAを使用して、キーのビット数よりも少ない少量のデータを格納する場合は、入力データに乱数を埋め込むことができます。https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Paddingにリストされているいくつかのパディングスキームがあります

于 2015-09-01T03:26:19.363 に答える