バイナリファイルを暗号化したい。私の目標は、パスワードを持っていない人がファイルを読み取れないようにすることです。
同じキー長のAESまたはBlowfishのどちらがより良い解決策ですか?攻撃者はファイルを解読するための優れたリソース(ソフトウェア、知識、お金)を持っていると推測できます。
バイナリファイルを暗号化したい。私の目標は、パスワードを持っていない人がファイルを読み取れないようにすることです。
同じキー長のAESまたはBlowfishのどちらがより良い解決策ですか?攻撃者はファイルを解読するための優れたリソース(ソフトウェア、知識、お金)を持っていると推測できます。
おそらくAES。BlowfishはTwofishの直接の前身でした。Twofishは、AESを作成したコンテストへのブルースシュナイアーのエントリーでした。これは、AESになったRijndaelという名前のエントリより劣っていると判断されました。
興味深いことに、コンテストのある時点で、すべての参加者は、暗号がどのようにランク付けされているかについて意見を述べるように求められました。各チームが独自のエントリを最高のものとして選んだのはおそらく驚くことではありませんが、他のすべてのチームがRijndaelを2番目に良いものとして選んだのです。
とは言うものの、BlowfishとAESの基本的な目標にはいくつかの基本的な違いがあり、絶対的なセキュリティの観点からBlowfishを(おそらく)支持することができます。特に、Blowfishは、キーの初期設定をかなり遅くすることで、ブルートフォース(キーの枯渇)攻撃を困難にしようとします。通常のユーザーの場合、これはほとんど重要ではありませんが(1ミリ秒未満です)、1秒あたり数百万のキーを試してそれを破ろうとしている場合、その違いはかなり大きくなります。
しかし、結局のところ、それが大きな利点だとは思いません。私は一般的にAESをお勧めします。次の選択肢は、おそらくSerpent、MARS、Twofishの順です。フグはそれらの後にどこかに来るでしょう(私がおそらくフグの前に推薦する他のいくつかがありますが)。
ブロック暗号のブロックサイズも重要なセキュリティ上の考慮事項であるということは、あまり認識されていない事実です(ただし、キーサイズほど重要ではありません)。
Blowfish(および3DESやIDEAなどの同じ時代の他のほとんどのブロック暗号)のブロックサイズは64ビットであり、最近一般的な大きなファイルサイズ(ファイルが大きく、ブロックサイズが小さい)には不十分であると考えられています。 、暗号文でブロックが繰り返される可能性が高くなります。このような繰り返しブロックは、暗号解読に非常に役立ちます)。
一方、AESのブロックサイズは128ビットです。この考慮事項だけでも、Blowfishの代わりにAESを使用することが正当化されます。
アルゴリズム自体に関しては、私はAESを使用します。単純な理由は、AESがNISTに受け入れられており、何年にもわたってピアレビューと暗号分析が行われるためです。ただし、実際のアプリケーションでは、政府が秘密にしておきたいファイルを保存している場合を除いて(この場合、NSAはAESとBlowfishの両方よりも優れたアルゴリズムを提供する可能性があります)、これらのアルゴリズムのいずれかを使用することをお勧めします。あまり違いはありません。すべてのセキュリティが重要であり、これらのアルゴリズムは両方ともブルートフォース攻撃に耐性があります。Blowfishは、16ラウンド全体を使用しない実装でのみ弱いことが示されています。AESは新しいものですが、その事実により、BlowFishに傾倒するはずです(年齢のみを考慮している場合)。このように考えてください、
これが私があなたに提起するものです...これらの2つのアルゴリズムを見て、アルゴリズムのどちらかを選択しようとする代わりに、あなたはあなたの鍵生成スキームを見てみませんか。ファイルを復号化しようとする潜在的な攻撃者は、そこに座って使用できる理論上のキーセットを考え出し、数か月かかる可能性のあるブルートフォース攻撃を実行することはありません。代わりに、サーバーハードウェアを攻撃したり、アセンブリをリバースエンジニアリングしてキーを確認したり、キーが含まれている構成ファイルを見つけようとしたり、友人にブラックメールを送信してコンピューターからファイルをコピーしたりするなど、他の何かを悪用しようとしています。 。これらは、アルゴリズムではなく、最も脆弱な場所になります。
AES。
(私はまた、あなたが2匹の魚を意味していると仮定していますが、それほど古くて弱いブローフィッシュではありません)
どちらも(AESとtwofish)は優れたアルゴリズムです。ただし、それらが等しいか、twofishが技術的なメリットでわずかに進んでいたとしても、私はまだAESを選択します。
なんで?宣伝。AESは政府の暗号化の標準であるため、他の何百万ものエンティティもAESを使用しています。才能のある暗号解読者は、AESの欠陥を見つけるために、より多くの「大金を稼ぐ」ことができます。
あいまいさは暗号化の保護を提供しません。アルゴリズムを探し、研究し、調査し、攻撃するより多くの体は常により良いです。可能な限り最も「精査された」アルゴリズムが必要であり、現在はAESです。アルゴリズムが徹底的かつ継続的な精査の対象にならない場合は、その強度の信頼度を低くする必要があります。確かにtwofishは危険にさらされていません。それは暗号の強さのせいなのか、それとも単に十分な数の人が詳しく調べていないからなのか.....まだ
アルゴリズムの選択はおそらくそれほど重要ではありません。研究が進んでいるので、AESを使用します。さらに重要なのは、適切な操作モードと鍵導出関数を選択することです。
高速ランダムアクセスが必要な場合は、インスピレーションを得るためにTrueCrypt形式の仕様を確認することをお勧めします。ランダムアクセスが必要ない場合、XTSには弱点があるため、他のモードにはない弱点があるため、XTSは最適なモードではありません。また、ある種の整合性チェック(またはメッセージ認証コード)も追加することをお勧めします。
この答えがあなたの質問の条件に違反していることは知っていますが、あなたの意図に対する正しい答えは単にこれだと思います。最も長い鍵長を許可するアルゴリズムを使用してから、本当に良い鍵を選択するようにしてください。最もよく評価されているアルゴリズムのパフォーマンスのわずかな違い(暗号的および時系列的)は、キーのいくつかの余分なビットによって圧倒されます。
両方のアルゴリズム(AESとtwofish)は非常に安全であると見なされます。これは他の回答で広く取り上げられています。
ただし、AESは2016年に広く使用されているため、ARMやx86などのいくつかのプラットフォームで特にハードウェアアクセラレーションが行われています。ハードウェアアクセラレーション前のtwofishよりも大幅に高速ではありませんが、専用のCPU命令のおかげで、AESははるかに高速になりました。