問題タブ [brute-force]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - モバイル デバイスへのブルート フォース攻撃に対する秘密鍵の保護
秘密鍵を安全に保管したいモバイル アプリケーションがあります。セキュリティ要件は、たとえ攻撃者がモバイル デバイスに無制限にアクセスできたとしても、秘密鍵を取得することは非常に困難であるべきであることを意味します。このレベルのセキュリティを実現するために、アプリケーションは、ユーザーが指定したパスフレーズとデバイス固有のソルトから派生したキーを使用した対称暗号化を採用しています。
理想的には、これは総当たり攻撃に対して十分に安全であるべきです。ただし、2 つの制限要因があります。
秘密鍵は特定の形式に準拠する必要があるため、復号化プロセスはプロセスの結果をテストして、有効かどうかを確認できます。たとえば、秘密鍵が RSA 秘密鍵である場合、攻撃者はパスフレーズのさまざまな組み合わせを試し、結果の平文を有効な RSA 秘密鍵として使用できるかどうかをテストします。RSA 秘密鍵は特定の情報を特定の方法でエンコードする必要があるため、復号化に失敗すると、RSA エンジンは鍵が無効であることを通知します。これにより、攻撃者は完全にオフラインで攻撃を検証できます。できれば、攻撃者は、サーバーと通信せずに、復号化の試みが成功したかどうかを判断できないようにする必要があります。
アプリケーションはモバイル デバイス上で実行されるため、モバイル デバイスに完全にアクセスできるオフライン攻撃は、より豊富なリソースを備えたより機能的なデバイスで実行される可能性が高いため、鍵派生関数の複雑さが増しても鍵の強化には役立ちません。すぐに、キー派生関数の計算ラウンド数が増加すると、ユーザー エクスペリエンスが遅くなります (これは一定の制限内で許容されます) が、デスクトップ コンピューターで攻撃が実行された場合はすぐに阻止されます。
これらの問題の解決策を誰かに教えてもらえますか? 具体的には、秘密鍵が任意のランダムなバイト シーケンス (固定長のシーケンスである可能性がありますが、問題ではありません) であり、アルゴリズムが暗号文を生成できる非対称暗号化アルゴリズムを知っている人はいますか?
prolog - Prolog - PCP ソルバー
プロローグ述語を使用してポスト対応の問題を力ずくで解決する (理解できる) 方法があるかどうか疑問に思っていますか?
例えば:
algorithm - グラフからすべてのサブグラフを取得する方法は?
疑似コードで、グラフから固定サイズのすべてのサブグラフを取得する方法は? (強引な)
可能であれば外部ライブラリなし。ありがとう!
c - 固定サイズの配列のすべての可能な値を作成する
配列の可能なすべての順列を循環する非常に基本的なものを作成しようとしています。
本当はアセンブルでやっているのですが、Cで説明します。
基本的に、配列があるとしますuint8_t *data=malloc(10);
array 内のバイトの可能なすべての組み合わせを出力するアルゴリズムを作成したいと考えていますdata
。
はい、私はそれが遅くなることを知っています(そして多くの値があります)、そして私は本当に複雑な最適化されたバージョンを求めているわけではありません. -特定の条件に従う特定の値を見つけるために型を強制する..
(注、[0,1,2] は [2,1,0] と同じようにカウントされるべきではないため、順列と言います)
編集: また、これを 512 バイトのみの独立したブートローダーに変換するため、あまり多くの libc 関数を使用しないようにしてください。
私はこれを行う方法を知っていますが、私の人生では、頭の中でアルゴリズムを機能させることはできません!
php - PHP:洪水対策/スパムシステム
私は実際にユーザーシステム(ログイン、登録、紛失したパスワードを電子メールに送信など)を特徴とするPHPプロジェクトに取り組んでおり、これはブルートフォース攻撃やスパムに対して非常に脆弱である可能性があると思います(送信1000回などの誰かの電子メールへのパスワード。あなたのファンタジーを使用してください)。
- 今日のWebサーバー(Apache、IIS)には、ブルートフォースに対する何らかの組み込みの防御機能がありますか?
たとえば、ページを1分間に2回以上呼び出せないようにしたいが、別のページを1分間に100回程度呼び出すことができる場合、スパム対策/洪水システムを実装するための最良の方法は何でしょうか。 。
私は間違いなくIPアドレス、最後にページにアクセスした時刻、どこかにアクセスした回数を保存する必要がありますが、テキストファイル/データベース(MySQL)に保存するのに十分効率的です
紛失したパスワードの登録/回復などにキャプチャを使用する必要がありますか?
「テキスト」キャプチャは実行可能ですか?(「5プラス9マイナス2とは何ですか?」のようなもの)
このページはそれほど多くのユーザー(100〜200)によって使用されることはありませんが、実際にこれらすべてを実装する必要がありますか?
encryption - 大きな数を因数分解できることは、一般的な暗号化アルゴリズムのセキュリティをどのように決定しますか?
暗号化アルゴリズムのセキュリティは、大きな数の素因数分解にどのように依存していますか?
たとえば、いくつかの数学プログラミング フォーラムで、Quadratic Sieve または General Number Field Sieve を使用すると、市販のハードウェアで比較的簡単に 256 ビットの数値を因数分解できると読んだことがあります。
これは、RSA、AES などのアルゴリズムのセキュリティを破ることができるとどのように解釈されますか? 数字をキーの長さだけ因数分解できれば十分ですか?
少し光を当てることができる暗号化と暗号化アルゴリズムに精通している人はいますか?
discrete-mathematics - 網羅的なウェブサイト検証ツール
私は、基本的にブルート フォース攻撃を使用して、Web アプリケーションがクラッシュしないことをテスト/検証するという壮大な考えを持っています。
単体テストや IoC のことを始めさせないでください。これはまったく別のものです。
私がやっていること、そして私が助けを求めていることは、プログラムの状態の一部を調査するインテリジェントな徹底的な検索を作成することです。
私が持っているのは、私ができることを含む Web ページです。クリックは 1 つのことであり、テキスト入力は別のことであり、ラジオ ボタンやドロップダウン リストなどの一部の入力は特定の値に制限されています。かなり基本的なこと。最終的にイベントと値のセットが有限になり、モデル化したいのは状態の進行です。これはある意味で FSM の最適化かもしれませんが、目標は、イベントと値の任意の順列を体系的に調べて、何が起こるかを確認することです。
問題が見つかった場合、明確なテスト ケースを提示できるように、できるだけ少ない労力でそのエラーを引き起こしたいと考えています。
これは正式な検証方法に関連しており、経験のある人からの助けや洞察を求めています.
c++ - 一連のルールに一致するすべての順列を見つける
N 個の数字が与えられ、その順序について M 個のルールを適用します。ルールはインデックスのペアで表され、すべてのペア (A、B) は、インデックス A の数字 (A 番目の数字) が B 番目の数字の後にある必要があることを示しています - それは彼の隣にある必要はありません.
アルゴリズムは、例のように、ルールに違反しない利用可能なすべての順列を提供する必要があります-3 は常に 2 の後と 1 の後にある必要があります。
ブルートフォースを試してみましたが、うまくいきませんでした (ここではブルートフォースが機能するはずですが、N は (1,8) の範囲にあります)。
何か案は ?
algorithm - 平均的なパスワードをブルート フォースする試みの回数 / 押し付けがましくないが意味のある制限は?
SO には、スロットリングを適用することによる Web サービスのパスワードのブルート フォースの防止に関して、いくつかの有用な回答があります。ただし、適切な数値を見つけることができず、この分野の専門知識がほとんどないため、質問は次のとおりです。
通常、6 文字以上の平均的なパスワードをブルート フォース攻撃するのに何回の試行が必要か (追加の知識がなくても、パスワードはおそらく辞書攻撃を受けやすいことを考慮に入れると)、それに基づいて、意味のある制限は何ですか?ユーザーエクスペリエンスを損なうことなくスロットリングアルゴリズムに適用するには?
これは私の現在のスキームです:
- ログイン フォームはノンスを使用するため、攻撃者は、ログイン試行の結果を取得して新しいトークンを取得するために、完全な要求サイクルが完了するまで待機する必要があります。
ログイン フォームを IP ごとに 50 回取得できるようにし、リクエスト間の間隔は 1 分未満にします。その後、IP は 1 分間ブロックされます。この 1 分以内に新たに試行すると、タイムアウトが再開されます。のsleep
ログイン ページのフェッチごとに が適用されるため、# of attempts / 5
リクエスト間の間隔が 1 分未満の 5 つのリクエストの後では、フォームのフェッチに 1 秒以上かかり、10 回のリクエストの後では 2 秒以上かかります。さらに、ユーザー アカウントごとにログイン試行の失敗を 2 時間間隔で 100 回まで許可しています。その後、アカウントは 2 時間ブロックされます。- アカウントの頻繁な DoS を回避するために、IP をホワイトリストに登録する (制限を適用しない) またはブラックリストに登録する (ログイン試行を完全に無視する) ことができます。
これまでの回答に基づいて、次のように機能するように調整しました。
- ログイン フォームの取得は、IP ごとに徐々に遅くなります。新しいリクエストはそれぞれ
# of requests / 2
数秒間スリープします。ログイン アクティビティが 10 分間ない場合、カウンタはリセットされます。 - 各 IP のログイン試行の FIFO スタックを保持しています。IP が 2 時間以内に 30 回ログインに失敗した場合、IP は一時停止されます。また、IP ごとの停止数のリストも保持しており、停止時間は として計算され
2 ^ (# of suspensions + 1) hours
ます。これにより、継続的に問題のある IP が事実上ブラックリストに登録されるようになります。 - さらに、アカウントが 1 日に 20 回ログインに失敗した場合、そのアカウントは 2 時間停止されます。これは、アカウントが非常に簡単に DoS される可能性があることを意味するため、この措置についてはまだよくわかりません。ただし、大規模な分散型ボットネットを除けば、問題のある IP は、アカウントが永続的に DoS されるよりも早く、事実上ブラックリストに登録されるはずです。また、アカウントを保護するための非常に効果的な手段でもあります。
これらの制限は、定期的にパスワードを忘れて何度もログインしようとするユーザーであっても、通常のユーザーに害を及ぼすべきではないと思います. サービスの平均サイズを考えると、IP 制限は、NAT を頻繁に使用するユーザーにも問題なく機能するはずです。誰かがこれが効率的または非効率的であることを確かな数学で証明できますか? :)
textfield - ブラウザのブルートフォースを入力フィールドにするにはどうすればよいですか?
GD ?? Q-TPY32-TPTT3-9CM9P-F2QMQなどのコードを提供し、?? 数字と文字です。あなたが最初にコードのロックを解除した場合は、ささやかな賞品を引き換えることができます。
したがって、この問題を解決する明白な方法は、コードをブルートフォースすることです。しかし、明らかに私は1時間コンピューターの前に座って、10*26のすべての組み合わせを手動で入力したくありません。これらのコードを入力するようにブラウザに指示する方法はありますか(各5文字のブロックが個別のテキストフィールドであると想定します)。または、ある種のマクロタイプの機能を有効にする特別なブラウザはありますか?ありがとう。