まず、暗号化、ハッシング、クラッキングなどについてはあまり知らないということから始めましょう。私は、多くの質問を持つ典型的なコンピュータマニア、プログラマ、および研究者です。
そのため、「分散クラッキング」と呼ばれるものが存在することを発見しました。これは、多くのシステムがクラスター化して単一のターゲットにブルートフォース処理を集中的に発射することです。
ターゲットがコンピュータ上のローカルファイルであり、十分な時間とリソースがある場合、ブルートフォースの成功率は100%だと思います。この仮定が誤っている場合は修正してください。
このシステムの唯一の依存オブジェクトは、暗号化されたソースファイルの復号化に使用されるソフトウェアです。ブルートフォースはコンテンツを解読するためにこのプログラムを通過する必要があります。
ブルートフォースから身を守るためにプログラムでできることはありますか?プログラムがターゲットの暗号化されたソースファイルを破壊し、その後のログイン試行の数が途方もなく高い数を超えると、自己破壊する可能性がありますか?ただし、これには、プログラムが失敗した試行の実行カウントを保持する必要がありますが、これはなりすましの可能性があります... どこかから値を読み書きする必要があります。この機能または自己破壊機能は、クラックされ再コンパイルされたバージョンでは完全に削除できます。
うまくいくとは思えない。
他のすべてが失敗した場合、途方もなく長いパスワードを持っているだけでまったく役に立ちますか? 500文字のようなもの?まだひびが入っていると思います。指数関数的に時間がかかります。しかし、方程式にクラッキングボットネットを追加するだけで、それを無効にすることができます。
ローカルで暗号化されたファイルに対してできる唯一の防御策は、ファイルの暗号化に使用されるパスワードの強度です。また、安全な暗号化アルゴリズムを使用することも重要です(現在、AESはかなり標準的です)。
力ずくのクラッキングが100%成功することは間違いありません。問題は、パスワードの解読にかかる時間にあります。安全なパスワードは非常に長くなり、大文字、小文字、数字、記号を組み合わせて使用します。その際、攻撃者に96文字のキースペースを与えます。 32文字のパスワードを使用するとします。つまり、合計で2,708,192,040,014,184,559,945,134,363,758,220,403,329,915,059,847,434,832,829,218,816の32文字のパスワードの可能な組み合わせになります。
もう1つの要因は、ブルートフォーシング時にコンピューターが各パスワードを生成する速度です。私のコンピューターでは、毎秒約50,000,000のMD5ハッシュを生成できます。同様に、WPA(wifi)キーの場合、約2,000しか生成できません。
試行されるパスワードの数が多すぎるときに「自己破壊」機能を備えたプログラムを作成するという考えは、パスワードのセキュリティよりもかなり弱いセキュリティです。たとえば、ディスク暗号化ソフトウェアのTruecryptを見てみましょう。 truecryptを使用すると、暗号化されたファイルコンテナーを作成できます。ただし、truecryptソフトウェアを使用せずに、truecrypt暗号化ボリュームをクラックするために特別に作成されたソフトウェアがあります。同じことが理論的なプログラムでも起こります。
つまり、ローカルで暗号化されたファイルの最良のセキュリティは、文字が混在した長いパスワードを使用し、コミュニティによって安全であると見なされている標準の暗号化を使用することです。
ファイルがファイルシステムから攻撃者のシステムに取得されると、ゲートウェイはなくなります。力ずくは何の障害もなく続けることができます。
より複雑なキーまたはパスワードは、ブルートフォースの時間/コストを増加させますが、「最終的に」(できれば宇宙の熱死の前に)、クラックされる可能性があります。
問題は、攻撃者があなたのプログラムを使用して復号を実行しなければならない理由がないことです。実際、速度を上げるために、攻撃者はほとんどの場合、暗号化に使用された元のプログラムではなく、ブルートフォースにカスタムプログラムを記述します。彼らがこれを行うことができるのは、事実上すべての評判のよい暗号化プログラム、さらには独自仕様のものでも、確立された広く知られたアルゴリズムを使用して暗号化を実行するためです。これにより、元のプログラムを使用するのではなく、復号化するカスタムプログラムを簡単に作成できます。したがって、元のプログラムでの総当たり攻撃による保護は役に立たないでしょう。
あなたは考えているかもしれません、なぜカスタム暗号化アルゴリズムを思いつくか、または既存のものにいくつかの微調整をして、人々が彼ら自身の解読プログラムを書くのを防ぐためにプログラムをクローズドソースのままにしますか?これが悪い考えである主な理由は、安全なアルゴリズムを入手するのが難しく、確立されテストされたアルゴリズムを微調整することが危険であるためです。誤ってバックドアを導入するのは非常に簡単です。加えて、それは一般的には嫌われている、あいまいさによるセキュリティです。最終的に、誰かが最終的にプログラムをリバースエンジニアリングして、追加した調整を理解し、これらの対策を役に立たなくする予定です。
したがって、実際には、ブルートフォース攻撃(理論的には)から完全に保護できるソフトウェア対策はありません。しかし実際には、長いパスフレーズと計算集約型のアルゴリズムは、最も強力なスーパーコンピューターでさえ、まったく不可能です。
Xの試行後にデータを消去することはできますが、ハードウェアレベルで実装する必要があります。つまり、ハードウェアを設計して、最初にロックを解除しないと暗号化データのコピーを取得できないようにします。次に、改ざん防止対策をハードウェアに追加します。 Ironkeyなどの一部の高セキュリティフラッシュドライブは、これを実行できると思います。
まず、あなたが正しいと言いますが、最終的にブルートフォースは暗号化スキームを解読します。暗号化キーの複雑さ、暗号化の強さなどにもよりますが、最終的には数百万年後になる可能性があります。実際には、オフラインでパスワードファイルを解読しようとすることに対する防御策がいくつかあります。
パスワードとハッシュがどのように機能するかは明確ではないとおっしゃっていたので、一般的なデータの暗号化にも当てはまるこれについて簡単に説明します。平文のパスワードが問題であると言われるのを聞いたことがあると思います。これに対する解決策は、ハッシュアルゴリズムを使用することです。
パスワードハッシュアルゴリズムには3つの重要な部分があります。常に同じテキストで同じハッシュが生成されるはずです。計算には計算コストがかかるはずです。これは一方向である必要があります。そうしないと、クリアテキストのパスワードリストと同じ問題が発生します。ハッシングが一般的になり始めると、攻撃者はすぐに適応しました。それらはRainbow tablesとして知られている一般的に使用されるパスワードのハッシュを生成し、これらのハッシュをデータベースのハッシュと照合します。これらのハッシュアルゴリズムは故意に低速であるため、各ハッシュをオンザフライで計算するよりも、計算コストがはるかに低くなります。
パスワードデータベースが最終的に攻撃者に盗まれる可能性があることを前提としています。攻撃者がパスワードを解読するのにかかる時間が長いほど、攻撃を検出して資格情報をリセットできる可能性が高くなります。これは、パスワードのローテーションに90日が推奨される理由でもあります。これにより、これらの資格情報を使用できる期間が短縮されます。とにかく、これらの防御の基本を概説して、このトピックと特に興味のある大胆な特定の単語について学習を続けることができるようにします。
まず、パスワードデータベースの暗号化スキームにはsaltを含める必要があります。ソルトを含むパスワード暗号化スキームの例はbcryptです。これは、この機能を実行するために何を探すかについての適切なベースラインです。各パスワードに対してソルトが生成され、Rainbow tablesを使用した攻撃の防止に役立ちます。レインボーテーブルは、事前に計算されたハッシュのリストを使用します。ソルトでは、サイズ要件が非常に厳しいため、これをディスクに格納することは現実的ではありません。
各ハッシュの計算を困難にする方法もあります。これにより、各検索が遅くなりますが、それでも十分高速であり、ユーザーを煩わせません。それはブルートフォース攻撃をはるかに遅くするだけです。 bcryptもこの良い例です。
3番目は、最も一般的に知られている防御であるパスワードのベストプラクティスです。ありふれたように見えますが、一般的なパスワード辞書の使用に基づく攻撃が失敗し、はるかに遅いブルースフォーステクニックを使用する必要があることを確認するのに役立ちます。