大量のデータを暗号化する必要があるものに取り組んでいます。
これは、RSA のような公開鍵暗号化システムではなく、AES のような対称鍵暗号化システムを使用して行う必要があることはわかっていますが、データを小さな断片に分割し、それぞれを同じ公開鍵。
パフォーマンスの考慮事項は別として、この方法は安全ですか? この暗号化方式は簡単に破ることができますか?
大量のデータを暗号化する必要があるものに取り組んでいます。
これは、RSA のような公開鍵暗号化システムではなく、AES のような対称鍵暗号化システムを使用して行う必要があることはわかっていますが、データを小さな断片に分割し、それぞれを同じ公開鍵。
パフォーマンスの考慮事項は別として、この方法は安全ですか? この暗号化方式は簡単に破ることができますか?
いいえ、安全ではありません。
おそらくこの場所で対称暗号を使用する必要があるとすでに述べたように、基本的にRSAをブロック暗号として使用しています。
また、@ Jamesが指摘しているように、平文のチャンク/ブロックを互いに独立して暗号化するこのスキームは、本質的に、ブロック暗号の電子コードブック(ECB)モードの操作に似ています。
他に何も使用しない場合、提案されたスキームは、少なくとも2つの攻撃に対して脆弱です。
メッセージの再利用を防ぐためにスキームに追加情報を含めない場合は、リプレイ攻撃。たとえば、攻撃者がアリスと銀行の間の暗号化されたすべてのストリームを記録し、彼女が自分のアカウントから$100.00を引き出したとします。
この場合、攻撃者はストリームを複数回再生することで、ストリームを銀行に何度も送信することでアリスを破産させることができます。これは問題ありません。
本当に、自分の暗号を考え出すのは楽しいですが、セキュリティを正しくするのは難しいです。整合性/認証なしでさらに。
注:私の元の投稿の「他に何も使用せずに」という部分を多くの人が見逃しているように思われるため、私の答えは反対され続けています。
上記は「純粋なRSA」または「教科書RSA」の使用に関するものであり、RSA暗号を使用するためのランダムなパディング(「その他」)は含まれていません。
実際のアプリケーションでは、 PKCS#1標準の新しいバージョンに組み込まれているように、 「その他」はOAEP (元のメッセージにランダムなビットを単純にパディングする「より強力な形式」 )の使用です。
一般的なアドバイスは次のとおりです。実際にセキュリティを気にする場合は、新しい暗号システムを発明しないでください。または、必要に応じて、少なくとも真面目な暗号研究者による公開の査読を受けてください。
とはいえ、私が得た最善のことは、RSAを一種のブロック暗号として扱っているように聞こえるので、おそらく標準のブロック暗号モードを使用したいということです. 各ブロックを同じキーで個別に暗号化するという明白なことは、安全ではない電子コードブック (ECB) モードと同じように聞こえます。おそらく、CBC と RSA のようなより優れたモードの 1 つを使用できますか?
実際のパフォーマンスの問題を無視しているので、別の実際的な考慮事項を指摘します。RSA への入力は 0<= <m
の範囲内である必要があります。ここで、 は公開鍵パラメーターの 1 つです。の値は2 つの異なる素数の積でなければならないため、2 のべき乗になることはありません。そのため、大きなメッセージを RSA への入力に収まるチャンクに分割するのは少し混乱します。m
n
n
n
また、RSA で暗号化する各メッセージをパディングすることも忘れないでください。
要するに、実際のプロジェクトではやらないでください。しかし、これはきちんとした思考実験です。:-)
公的に審査された API を使用している限り、問題はありません。ただし、一般的には、RSA 公開鍵を使用して対称鍵 (AES など) のみを暗号化し、その対称鍵を使用して各メッセージ フラグメントをブロック暗号化する必要があります。