web-dev-qa-db-ja.com

特定の鍵サイズで暗号化できるファイルの最大サイズ

1024ビットの秘密鍵はopenssl genrsa privateKey.pem 1024コマンド。

コマンドを使用して秘密鍵から公開鍵を抽出します

openSSl rsa -in privatekey.pem -pubout -out publickey.pem

私の秘密鍵と公開鍵のsizeを知りたいですか?

公開鍵で暗号化するファイルの最大サイズを知りたいですか?

そして最大サイズ秘密鍵で復号化したいですか?

10
sarra el filali

まず、1024ビットのRSAキーは小さすぎて快適ではありません。 RSAの現在の推奨事項は、3072または4096(セキュリティマージンの向上)と2048(パフォーマンスの向上)の間の議論です。見る:

公開鍵で暗号化するファイルの最大サイズを知りたいのですが。秘密鍵で復号化する最大サイズは?

ここでの制限は、実際の公開鍵暗号化がほとんど常に hybridcryptography であるため、RSA自体ではなく、実際にはRSA自体に起因します対称暗号化キーのカプセル化に使用され(通常、一部のAESベースのアルゴリズム用)、実際のデータはそれらで暗号化されます。したがって、暗号化できるファイルのサイズを実際に制限するのは、ファイルまたはメッセージ形式の設計です。たとえば AES-GCMを使用すると、64 GiBを超える個々のメッセージを暗号化することはできません 、および2つを超える暗号化はできません32 キーが1つのメッセージですが、実際には、大量のデータを暗号化するには、ソフトウェアがそれを小さなチャンクに分割し、それぞれを個別のメッセージとして暗号化し、チャンクの数を超えた後にキーをローテーションする必要があります。

(補足:ファイルが小さい場合でも、適度なサイズのチャンクで暗号化することをお勧めします。これにより、ソフトウェアは、出力を生成する前にファイル全体を復号化せずに偽造を拒否できます。たとえば、 EFailの脆弱性 は、GnuPGがオプションの偽造防止チェックを実行する前に偽造ファイルの復号を出力することです。)

これはほんの一例です。一般的な答えは、あなたが与える情報だけでは質問に具体的に答えることはできません。具体的な答えは、特定の暗号化ソフトウェアを調べて、それがどのように設計および実装されているかを確認することです。たとえば、 GnuPGのドキュメントでは、4ギガバイトを超えるファイルを暗号化してはならない対称アルゴリズムについて説明しています

1970年代の64ビットブロックサイズであるため、[3DES]を使用して約4Gbを超えるデータを暗号化しないでください。それを超えて、しかし、それは岩のようにしっかりしていて、GnuPGユーザーのほとんどがこれに問題に気づくことはありません。 4Gbを超えるデータを暗号化しない場合、自信を持って3DESを使用できます。

あなたがこのルールに違反した場合、私はすぐに失敗モードを見つけることができませんでした。また、何か悪いことをしたことを示すエラーが表示されるのか(当然のことですが)、黙って安全でない可能性のある出力ファイルを生成するだけなのか(私はひどいでしょう)は保証できません。 。買い手責任負担。

16
Luis Casillas

キーの1024ビットの数値は、メッセージの暗号化と復号化の一部として使用されるモジュラスを記述します( https://security.stackexchange.com/a/8914/29905 を参照)。公開鍵の公開指数と秘密鍵の秘密指数-実際には、メッセージは最初に公開指数eの累乗で解釈されます。またはプライベート指数d、その数値の係数と1024ビット[〜#〜] n [ 〜#〜]が見つかりました。 1024ビットの最上位ビット[〜#〜] n [〜#〜]は常に1なので、1023ビットの任意のブロックを暗号化できますとして[〜#〜] n [〜#〜]は常により大きい数になります-プレーンテキストが1024ビットで、最上位ビットが設定されている場合1、その数値が[〜#〜] n [〜#〜]より小さいことを確認する必要があります。質問に対する基本的な答えは、RSAが最大(キー長-1)ビットのメッセージを暗号化および復号化できるということです。ただし、メッセージは、パディング(各ブロックを統一された長さにし、非決定性を追加する)およびRSAで個別に暗号化できるように、十分に小さいサイズのブロックに分割できます。

キーのサイズについても尋ねました。キーは実際には2つの数値[〜#〜] n [〜#〜]eまたはdedは、互いにmodのモジュラ乗算逆であることによって関連していますλ(N)、すなわち(e * d)modλ(N)= 1。それらの長さは[〜#〜] n [〜#〜]のビット長に正確には関連していませんが、小さい方は、 e * d> N(注記e、d> 1)。したがって、複合キーのサイズは[〜#〜] n [〜#〜]のビット長にeまたはd、ここでeは一般的に小さな素数です。ただし、実際の実装では、大きなdは格納されず、代わりに、復号化ステップをより速く、より小さなサイズで実行できる特定の要素が格納されます計算中のメモリフットプリントなので、完全な秘密鍵の長さははるかに短くなります。

1
IllusiveBrian