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