問題タブ [rainbowtable]
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.
encryption - 塩は明確化を実践します
最近、Jeff Six 著の Application Security For The Android Platform を読んでいて、不可解な記述に出くわしました。ソルトとハッシュ関数を説明する際の暗号化セクションで、このステートメントが作成されました
IV [Initialization Vector] と同様に、salt 値はランダムである必要がありますが、秘密にしておく必要はありません。
これは本当ですか?ソルトとハッシュ関数についての私の理解は、このステートメントは間違っており、ソルトが解放された場合、ソルトを不要にする新しいレインボーテーブルを生成できるため、ソルトを保護する必要があるということでしたか? これは正しいです?それとも、塩を秘密にしておく必要は本当にないのでしょうか? それはなぜですか?
c# - 私の RainbowTable-Generator を改善するにはどうすればよいですか?
以下に示すように、レインボーテーブルを生成します。
今2つの質問:
- bigint を使用せずに (たとえば、2 つのネストされた for ループ) 、順序を保持しながらこれを行うにはどうすればよいですか (つまり、アルファベット 0-9 は 2 桁で 0 から 99 までカウントされます)。
- すべてのプロセッサスロットとすべてのコアを利用して、ハッシュテーブルをより高速/最も効率的に生成するさまざまな方法は何ですか?
2) では、範囲をさまざまなグループに分割し、これをスレッドで実行します。
ただし、.NETが自動的にそれを行わない限り、これは異なるコアを使用しません(私はそれぞれ2つのコアを持つ4つのプロセッサを持っています)。
( https://github.com/ststeiger/RainbowTableGeneratorのプロジェクト全体)
c - レインボーテーブルの実装
GSM ネットワーク KASUMI 暗号にレインボー テーブル攻撃のオンライン フェーズを実装しようとしています。
私は完全な 128 ビットのキースペースを 32 ビットのみ使用していません。以下は私の実装です。2 25行と各行に 2 7.88チェーン リンクを含む単一のレインボー テーブルを生成しました。これにより、73% の成功率が得られるはずです。
スペースを節約するために、エンドポイントのみを保存します。テーブルはバイナリ ファイルとして保存されます。終点がテーブル内のどの位置にあるかを確認することで、始点を見つけることができます。したがって、3 番目のエンドポイントの開始点は md5 が 3 であり、4 番目のエンドポイントは md5 が 4 というようになります。
問題は、ランダムなキーでテストすると、成功率が 10 ~ 15% になることです。適切なチェーンを生成することを確認するために、開始点をキーとして使用しました。ここでは、期待される 100% の成功が得られます。
エンディアンと関係があるのではないかと心配していますが、よくわかりません。
c - 関数の並列化
この関数に並列処理を実装しようとしています。できるだけ多くのスレッドを取り、結果をファイルに書き込みたいです。
結果は増分順にファイルに書き込む必要があるため、最初の結果を最初に、2 番目の結果を 2 番目に、というように書き込む必要があります。
keyGen 関数は、各チェーンの開始点として使用される整数 m の MD5 です。Reduction32 はリダクション関数で、最初の 8 バイトに t を加算してその値を返します。チェーンがエンドポイントに到達すると、バイナリ ファイルに格納されます。
これを並列にするスマートな方法はありますか? エンドポイントが保存されている順序を台無しにすることなく?
hash - レインボー テーブル - 開始プレーンテキストの選択方法
1000 個の SHA1 ダイジェストとそれに対応するパスワード (それぞれ 24 ビットまたは 6 桁の 16 進数) が与えられる割り当てを実装しています。ディスク上に<2MBのレインボーテーブルを構築する必要があり、Javaでは、チェーンの長さが192を超えると検索プロセスが遅くなりすぎることがわかります。
要件は、このレインボー テーブルが少なくとも 45% (または 450) のハッシュを解決し、パスワードを返す必要があることです。リダクション関数は単純です - ハッシュから最上位の 32 ビット (d0、d1、d2 としましょう) を取得し、チェーンの現在の長さ (i は 0 から 191 になります) を d0 のみに追加します (以下のように)。 :
コード (ハッシュとリデュース) 関数が正しいと確信しています。しかし、この方法では、対応するパスワードに対して約 250 個のハッシュ (25% の精度) しか解決できません。
チェーンの数を増やすと、解決されたハッシュの対応する数の利益が減少することがわかります。チェーンの数を 2 倍にしても精度は 2 倍にはなりませんが、レインボー テーブルのサイズは既に 2MB を超えています (8MB のようです)。
最初の単語については、0 から始めて (全範囲は 0 から 2^24 になります)、1 ずつ増やしてみました。または、この範囲の間でランダムにしようとしました。レインボー テーブルにはループがなく、リダクション関数でいくつかの衝突が発生したとしても (リダクション関数が上記のように異なるのと同じ深さで)、エンドポイントが既にテーブルにあるチェーンは受け入れません。
精度を 45% に上げるために私ができることについてアドバイスをいただければ幸いです。
hash - Sha256 salted レインボーテーブルを使用して「復号化」する機会はありますか?
ソルトが既にわかっている場合、ソルトハッシュでレインボーテーブルを使用する可能性はありますか? まず、そのハッシュの仕組みを紹介したいと思います。
これはそれぞれ、3 つの異なる入力の SHA-256 ハッシュを使用して計算されます。まず、サーバーシードです。これは、過去のある時点で生成された事前計算値です。シードは、今日のシードが明日のシードのハッシュになるようにチェーンで生成されます。
シード 0 => シード 1 => シード 2 => シード 3
次に、サーバー シードは、ニューヨークの宝くじの 5 勝目の結果でソルト (スクランブル) されます。毎日東部標準時午後 11 時 21 分に抽出されたこれらの結果 (0 で埋められたもの) は、翌日使用するためにサーバー シードに追加されます。
最後に、各ロールは一意のラウンド ID でソルトされ、ロールごとに異なるハッシュが保証されます。
ラウンドのハッシュは SHA256("serverseed-lottery-roundid") を使用して生成されます。結果のハッシュの最初の 8 桁の 16 進数を取得して 10 進数に変換すると、0 ~ 4294967295 の整数が得られます。モジュロ 15 を取ると、範囲 0 ~ 14 の最終ロールが得られます。
そして、これらの種子と塩の例を時系列でいくつか追加します。
1 # 08659e6ef7759d68c4a4d8b214217394c5f2b1a539cc51cc5f89be1f55ab737b
2# 6d7ef31d654c30b2113019de67b0bc5bd400c41fc1d916937f2aee378772480c
3# 37e9469b09afca5a985170684d18ece4e881bea5d5f22af8df1049129351b976
塩:
1# 0406161724
2# 1020273438
3# 0111293436
種子の数は塩の数を指し、1# は 19.01.2016 から始まります
最後に、これはこれらの入力を使用した PHP の実装です。
$シード = "39b7d32fcb743c244c569a56d6de4dc27577d6277d6cf155bdcba6d05befcb34";
$ソルト = "0422262831";
$round_id = "1";
$hash = hash("sha256",$seed."-".$salt."-".$round_id);
$roll = hexdec(substr($hash,0,8)) % 15;
echo "ラウンド $round_id = $roll";
あなたがこれらの声明で私を助けてくれれば、私は感謝します:)
hash - ハッシュ テーブルとレインボー テーブルについて
だから私はハッシュテーブルとレインボーテーブルをよりよく理解しようとしており、読んでいるとコツをつかみ始めているように感じます. 次のような理解度チェックの質問があります。
「sha-256 パスワードを格納するハッシュ テーブルがあり、テーブル全体をメモリに格納する必要があり、4GB のメモリがある場合、いくつのパスワードをクラックできますか? 各チェーンに 20 個のパスワードがあるレインボー テーブルを使用する場合、何個のパスワードをクラックできますか? (パスワードを 10 文字と仮定して)"
これは、私が読んでいたものについて何か知っているかどうか、完全に疑問に思いました。これが私がこれまでに思いついたものです。
すべての ShaA-256 ハッシュのサイズが常に 256 ビットであり、1 メガバイトに 8388608 ビットが含まれていることがわかっている場合、1 メガバイトあたり 32768 個の SHA-256 パスワードに相当します。4000 メガバイトなので、32768 に 4000 を掛けると、131072000 個のパスワードがメモリに保存されます。
しかし、それをレインボー テーブルの 20 個のチェーン パスワードに適用するにはどうすればよいでしょうか? レインボー テーブルにはハッシュとその逆が格納されているので、より多くのスペースを占有する一方で、はるかに高速に解決できると考えました。失うスペースの量と、失うパスワードの数を決定するための公式または何かはありますか?
どんな助けや知識も大歓迎です。あなたの時間と知恵に感謝します。:)
dictionary - レインボー テーブルと暗号化
Bruce Schneiderの本でこの問題に遭遇しました。
格納されたハッシュに対して Rain bow テーブルを使用できることがわかっています。次のスキームを使用して、ファイル (英語のテキスト) がパスワードを使用して暗号化されているとします。
パスワードはハッシュされ、ハッシュは AES 経由でファイルを暗号化するために使用されます。暗号は保存され、パスワードとハッシュは破棄されます。説明: 1. 辞書攻撃を使用してパスワードを回復する方法。2. なぜレインボー テーブルが使えないのですか? 3. ファイルに既知の標準ヘッダーがある場合、どのようにレインボー テーブルを使用できるか。
1問目と2問目は理解できましたが、3問目は理解できませんでした。助けてください。
python - Python マルチプロセスが終了しない
私はpythonマルチプロセスを初めて使用し、コードが終了しない理由(おそらくゾンビまたはデッドロック)とその修正方法を理解したいと考えています。関数はcreateChain
for ループも実行し、タプルを返します: (value1, value2)
. 関数内createChain
には、他の関数への他の呼び出しがあります。createChain
その関数内でマルチプロセスに関して何かをしていないため、関数コードを投稿しても役に立たないと思います。プロセスをデーモンとして作成しようとしましたが、それでも機能しませんでした。奇妙な考えは、ie の値maxChains
を 500 または 100 に減らすとうまくいくということです。
プロセスにいくつかの重いタスクを実行させ、結果をデータ型に入れたいだけです。
私のpythonのバージョンは2.7です