質問
私は現している既存のものを探し出しの衝突とのメッセージにつながると同CRCのハッシュ.考えを使用していCRC32はありません短くすることができるのでリストのメッセージブログを書いていて思いました際はブルートフォース攻撃?
当ウェブサイトへのリンクとヒントがこのままご提供いただきました。いすぎるアルゴリズムをますなかで値が整数を見れば一致その他のハッシュ.
解決
それはあなたの「メッセージ」によって何を意味するかに完全に依存します。あなたは、メッセージのいずれかにちんぷんかんぷんの4つのバイトを追加することができます。 (すなわち、メッセージのコンテキスト内で意味を持たない4バイト。)それから、単語の本当の意味で自明となる。
CRC32状態機械を通って移動するビットの観点で考える。
CRC32をガロアフィードバックシフトレジスタに基づいており、その状態で、各ビットは、ペイロードデータから32ビットの誘導に置き換えられます。各ビットの誘導において、多項式で示される位置は、シフトレジスタの端部から観察された配列との排他的論理和であろう。シフトレジスタが満たされるまで、このシーケンスは、入力データの影響を受けない。
例として、我々は初期10000011多項式状態10101110、および未知のビットで埋め、Xが充填されたシフトレジスタを有している想像する。
Polynomial * ** |feedback (End of SR.)
State 10101110 0
State X1010111 1
State XX101000 0
State XXX10100 0
State XXXX1010 0
State XXXXX101 1
State XXXXXX01 1
State XXXXXXX1 1
State XXXXXXXX 0
SRが充填されるまで、フィードバックは、Xの面ではありません! だから、所定のチェックサムを使用してメッセージを生成するために、あなたは、あなたの新しいメッセージを取る、それはCRCだ生成し、それがフィードバックの次の32ビットだうまく。これは、あなたはCRC関数の32のステップで行うことができます。あなたは、このフィードバックは、シフトレジスタの内容に与える影響を計算する必要があります。
これを行うためのショートカットは4ゼロバイトでパッドへのメッセージで、その後、チェックサムを見てください。 (チェックサムは、4つのゼロバイトでパディング場合終わりに、SRの状態をフィードバックし、空のバイトの影響である。)
排他的論理和したいチェックサム値とその影響、その計算値を4バイトのトレーラーを交換し、チェックサムを再生成します。あなたはCRC32を生成する任意のプログラム、バイナリエディタ、および六角を扱うことができる電卓でこれを行うことができます。
あなたは両方とも完全な意味をなすと末尾のゴミを含まない2つのメッセージを生成する場合は、物事は少し難しくなります。あなたは正確に同じ長さで、もっともらしい代替案を書くことができるセクションの数を確認します。
例として、英語文章を使用。 「私はこれが働くことができると思います」 そして 「私は、このアプローチを信じています」 広く類似の意味、そして正確に同じ長さを持っています。
あなたのメッセージに十分な例を識別します(空白でカンニングする場合を除き!)トリッキーなビットであるCRC 32は線形で、データがメッセージ内の正しいオフセットを持って提供。そうCRC([messagea] [パディング])^ CRC([パディング] [messageb])= CRC([messagea] [messageb]) あなたが対処する必要がありますワードアライメントといくつかの注意点が一般的なヒントとして、あなたがメッセージの「固定」の部分に出て通路を拡張したい、があります。一般的なルールとして、あなたは、nはCRCの大きさであるnの選択肢* 1.5通路を、持っていると思います。
あなたは今、骨格メッセージが持っているCRCを計算することができ、それぞれの代替経路がそれに持っているし、各通過のための各選択肢が持っているであろう影響を比較した表を引くという印象。このとき、必要なCRCと一致するように、骨格CRCを修正する代替案を選択する必要があります。その問題は再びラウンド行き、そのビットは、あなたのCRCのために変更することの代替を選択し、それがCRCへの影響だフォールドする必要がある場合に一意に、ビットを変更する任意の選択肢を見つけるまず第一に、解決するために、実際には非常に楽しいです。それはあなたが検索する必要がある解空間を減らす必要があります。
これはアップコードとよくタフなことだが、それは非常に短い時間スパンであなたの衝突を生成します。
他のヒント
短陥っ微分積分学,確率の ない と見つかった衝突後のN試験で近似します以下のテーブル:
N Probability ------- ----------- 50,000 74.7% 77,000 50.1% 78,000 49.2% 102,000 29.8% 110,000 24.5% 128,000 14.8% 150,000 7.3% 200,000 0.95%
その確率を計算するための以200,000CRC32値 前 この複製は1%未満、または、確率の複製 前 に102,000試みは70.2%
ちなみにこの目覚しいものがあるのが一の衝突に、 のもの 200,000回の試みはまだ1/1000の1%((4M-200,0000)/4M)、そして見つかった衝突 前 の200,000回の試みは準の確実性、上記の99%とにかく). そのことを示しているのが、関心をもって、これを自己の支配のデータベース機能の集約を計算で.
しかで過ごす時間のCRC32アルゴリズムとその基礎となる数学は、そうとする試み メッセージが出CRC32衝突, が、比較的少数のを真にランダム試みを見つけるために必要な少なくとも一つの衝突準の確実性は、このような暗号解析アプローチにほとんどの価値は十分あります。例えば、仮にこの発見の方法を選択メッセージの10倍くっついている順序での約63,000倍に達する前に、99%のチャンスの少なくとも一つの衝突によ200,000が、まだ必要とほぼ同じタイプです。)
この場合にしたいと考え、この地域は、 を避けるメッセージよりも短4バイト長 (読んだのどこかにそのCRC32たbijectiveにこのメッセージはスペース) を避けるメッセージにも同様の (のみが異なるにつ文字)から後のCRC32の本来の目的は、検出および場合に自動補正などのわずかな違います。
そのため、表示されることの難しさ、配置するのではなく、との見方を計算CRC32sで熱速度が出来ないものとなっておりすると遅すぎることは全く 管理の迅速-searcheableデータベースの200,000メッセージ (またはメッセージ"キー"は、この下)とそれに関連付けられたCRC32値です。
数アイデアを全て実施するこ
- 必要な単純なSOMMA図書館、公式のDBMSの界面などのMySqlもSqlLite.
- による擬似乱数ジェネレータ(PRNG)を製造するメッセージを救うことができましのメッセージ キー (うたのPRNGを定のメッセージとし全体の保管 メッセージ.このデータベースに挿入し、検索をより効率的にリスクを正につPRNG(まるのではなく、メッセージ生成時のランダム番号)、つみ(最初の)メッセージがなんとなくCRC32-衝突...
- 方が良いでしょ仕事でバッチ、すなわち生産と言う1,000新しい機能の集約とその確認のための衝突および保管の代わりにやってこれらすべてのものにつCRCます。このいく必要があるのではないかと思を使用した場合は、DBMS
私はあなたの代わりに「キー」の「メッセージ」を意味していると仮定します。
あなたは、両方の「キー」を選択することが許可されている場合は、、その後、ブルートフォースは、理由の誕生日のパラドックスのとにかくかなり速いだろう。ランダムなメッセージを選択し、そのCRCを計算し、それらのすべてと関連したCRCを覚えていて、それぞれ新しいものは、彼らが蓄積するにつれて、既存のものと衝突するより多くのチャンスを持っています。率直に言って、私はこのアプローチは、CRC32が衝突することが知らアプローチを調べるよりも、現代のコンピュータで速いことを期待しています。
私はあなたがあなたのファイルの2つの異なる部分(長さを変えずに、その場で)修正するので、もしCRCのは、直線的であると信じて、<ストライキ>はCRCの違いは一緒にXOR処理されなければならない。ストライキ>
- 修正:それは非常に単純なように見えるしません。しかし、これはまだ私が衝突を構築しようとする際にかかるだろうタックの一種である - あなたは、
...私は今夜を行うことに傾いて私よりもより詳細に数学を実行する必要がありちょうど昨日この質問はSO の上でここにあった、ポインタのカップルは、あなたが役立つかもしれない言及しました。
ブルートフォース。例えば。 CRC32、N = 2 ^ 32、あなたは約160 000のメッセージ
を必要としますなりすましのは、まさにその作業を行います。これは、ブルートフォースを必要としません。