web-dev-qa-db-ja.com

公開鍵暗号が処理できるデータのサイズの制限は何ですか?

誰かが 非対称暗号化はバルクデータには適切でない可能性がある と述べ、100バイトのRSAの例を示しました。もちろん、それは大まかな例であることは理解しています。しかし、それは私を不思議に思いました-一般に、さまざまな公開鍵暗号で処理できるデータのサイズと、特にOpenPGP.jsなどのJavaScriptライブラリで処理できるデータの量。後者の場合、ブラウザ環境により制限が追加されますか?

追加
データサイズの制限に関して、さまざまな公開鍵暗号の議論/比較がある評判の高いオンラインリソースはありますか?

5
Sam

あなたの質問に答えるために、あなたの誤解は最初に訂正されなければなりません。ほとんどの場合、RSAのパディングにより、メッセージに11バイトが追加されます。したがって、 1024ビットのキーを使用すると、117バイトのメッセージが利用可能になります 。 RSAがメッセージの暗号化に通常使用されないのはそのためです。RSAは主に、メッセージの暗号化に使用される対称鍵の暗号化に使用されます。これは ハイブリッド暗号システム と呼ばれます。

たとえば、PGPでは、対称鍵(sK)が作成され、メッセージはsK、次にsKは公開鍵、およびその両方(暗号化されたメッセージと暗号化されたsK)が受信者に送信されます。受信者は自分の秘密鍵を使用してsKを復号化し、それを使用してメッセージを復号化します。

技術的に言えば、PGP(したがって、 OpenPGP.js )が処理できるメッセージのサイズに制限はありません。制限は、使用可能なメモリの量、ブラウザが使用できるメモリの量などに起因する可能性があります。

10
Adi

各アルゴリズムには独自の制限があります。 @Adnanが引用しているように、RSA(PKCS#1 v1.5パディングを使用)は、RSAモジュラスサイズよりも11バイト少なくなっています。他のアルゴリズムは異なる特性を持っているかもしれません。

特に、 Diffie-Hellman を使用すると、暗号化はまったく行われませんが、それでも非対称暗号化に使用できます。 DHを検討する1つの方法は、DHが非対称暗号化アルゴリズムであり、暗号化する対象を選択できないことです。アルゴリズムを実行すると、暗号化を行う当事者は、最終的に、実際に「暗号化」した内容を学習します。それでもハイブリッド暗号化にはこれで十分です。共有シークレットは、対称暗号化のキーとして使用するのに最適です。このプロセスは、独自の名前で正式化されています: [〜#〜] ies [〜#〜] (ECIESと呼ばれる楕円曲線バリアントを使用)。

データの機密性を維持したいため、encryptであることに注意してください。機密性が重要なほとんどの攻撃モデルは、integrityである攻撃モデルでもあります。重要です(パッシブのみの攻撃者はまれです)。暗号化だけでは完全に機能するわけではないため、いずれにしても、通常はアルゴリズムの組み合わせが必要になります。

4
Tom Leek