RSAを使用してプレーンテキストメッセージを暗号化する場合の最大バイト数はいくらですか。これは、適度に安全で効率的であり、AESは同じサイズのバイトでより良いでしょうか?ちなみに暗号化は公開である必要はありません。AESが短いメッセージでも大きなドキュメントと同じくらい優れているのかと疑問に思っています。基本的に、メッセージまたはドキュメントは暗号化されて送信されますが、キーは公開されません。これもRSAの目的に反することになると思いますが、RSAは短いメッセージに適し、AESは長いメッセージに適していることをオンラインで何度か読みました。
PKCS#1 で定義されるRSAは、制限されたサイズの「メッセージ」を暗号化します。一般的に使用される「v1.5パディング」と2048ビットのRSAキーを使用すると、RSAで暗号化できるデータの最大サイズは245バイトです。 。もういや。
「RSAでデータを暗号化」する場合、実際には、ランダム対称鍵をRSAで暗号化してから、サイズに制限のない対称暗号化アルゴリズムでデータを暗号化します。これは [〜#〜] ssl [〜#〜] 、 S/MIME 、 OpenPGP ...でどのように機能するかです。入力メッセージを245バイトのチャンクに分割し、それぞれを多かれ少なかれ個別に暗号化することによって、「RSAのみ」を実行することをお勧めします。これは悪い考えです:
nビットのブロックを使用する対称ブロック暗号でデータを暗号化する場合、単一のキーで暗号化されたデータの量が2に近づくと、セキュリティ上の懸念が生じ始めます。n/2ブロック、つまりn * 2n/2ビット。 AESでは、n = 128(AES-128、AES-192、およびAES-256はすべて128ビットブロックを使用します)。これは、2億5000万テラバイトを超える制限であることを意味します。これは、問題にならないように十分な大きさです。 AESがより一般的な(当時は)64ビットブロックではなく128ビットブロックで定義されたのはそのためです。これにより、データサイズが実質的に無制限になります。
2つを直接比較することは、トラクターを列車と比較することに少し似ています。両方とも車両ですが、機能と構造がまったく異なります。
RSAは非対称暗号です。公開鍵は誰でも知っているため、信頼されていないネットワークを介したメッセージの安全な交換に最適です。公開鍵で暗号化されたメッセージは、秘密鍵でのみ復号化できます。そのため、2人の当事者が互いの公開鍵を知っている場合は、安全にメッセージを交換できます。これは、秘密情報を送信する必要がないことを意味します-authenticityおよびintegrityが維持されている限り、安全です。ありがたいことに、RSAはsignaturesをデータに生成する方法を提供し、それが本物であることを証明するのに役立ちます。秘密鍵で署名されたメッセージが与えられると、対応する公開鍵を使用してその署名を検証することが可能です。
経験則として、RSAキー長と同じ大きさのデータのみを暗号化できます。したがって、4096ビットのRSA鍵がある場合、最大4096ビット長のメッセージしか暗号化できません。それだけでなく、それは信じられないほど遅いです。 RSAは、フルスピードのデータ転送暗号として設計されていません。
AESは対称ブロック暗号であり、信じられないほど高速です。平文はブロックと呼ばれるチャンクに分割され、各ブロックはチェーンで暗号化されます。これを行うにはさまざまな方法がありますが、一般的な方法は、Cipher Block Chaining(略してCBC)と呼ばれます。これにより、理論的には無限のメッセージサイズが可能になります。ただし、AESなどの対称暗号では、最初に秘密鍵を交換する必要があります。 RSAとは異なり、共有キーは攻撃者に知られていない必要があるため、信頼性、整合性、および機密性を提供する必要があります。それを直接行うことは困難です。
あなたが見つける傾向があるのは、RSAがAESのようなブロック暗号のキーを交換するために使用されるように、両方スキームが一緒に実装されるということです:
これはいくつかの要件を満たします。
セキュリティのlevelに関しては、RSAとAESを比較してもあまり意味がありません。彼らは異なる仕事をします。 現在 128ビットのAESキーは安全であり、2048ビットのRSAキーは安全であると想定していますが、これは個々のセキュリティ要件に完全に依存しています。 256ビットのAESおよび4096ビットのRSAキーを使用することは、実装が適切であると想定すれば、次の10年間は十分以上のはずです。
多くの注意点と詳細が含まれているため、これらすべてが単純化されていることに注意してください。また、「暗号化」としてのRSA交換の説明は厳密には正しくありませんが、これらすべては、 2種類の暗号化作業。
通常、RSAが大量のデータに使用されない理由の1つは、パフォーマンスが原因です。RSAとAESはどちらも(正しく実装されている場合)大量および少量のデータに対して安全ですが、RSAははるかに低速です。
公開鍵暗号は理にかなっているが、より高いパフォーマンスが必要な場合は、両方を活用する hybrid システムを実装できます。
GoLang暗号パッケージによると、「メッセージは、パブリックモジュラスから11バイトを引いた長さ以下でなければなりません」。 http://golang.org/pkg/crypto/rsa/#EncryptPKCS1v15
AESは対称鍵アルゴリズムです。 RSAは非対称です。どちらも暗号化用ですが、さまざまな方法で使用されることが多いため、効率または強度の点で比較することは困難です。暗号化が使用されます。
あなたはこの他の質問から始めたいかもしれません: 暗号化-私はRSAまたはAESを使用する必要がありますか?