タグ付けされた質問 「hash-function」

4
整数のコレクション(つまり、マルチセット)に、理論的に十分な保証があるハッシュ関数はありますか?
理想的には、次のプロパティを持つ整数のマルチセットのハッシュを保存する方法があるかどうか興味があります。 O(1)スペースを使用します O(1)時間での挿入または削除を反映するように更新できます 2つの同一のコレクション(つまり、同じ多重度を持つ同じ要素を持つコレクション)は常に同じ値にハッシュする必要があり、2つの異なるコレクションは高い値で異なる値にハッシュする必要があります(つまり、関数は独立またはペア独立です) これの最初の試みは、個々の要素のハッシュのランダムな素数を法として積を格納することです。これは1と2を満たしますが、それまたは密接なバリエーションが3を満足するかどうかは明らかではありません。 最初にこれをStackOverflowに投稿しました。 *プロパティ1と2は、たとえばO(log n)または小さな部分線形多項式に少し緩和することができます。ポイントは、複数のセットを識別し、要素自体を保存せずに同等性を確実にテストできるかどうかを確認することです。

3
2番目のプリイメージ攻撃と衝突攻撃の違いは何ですか?
ウィキペディアでは、2番目のプリイメージ攻撃を次のように定義しています。 固定メッセージm1が与えられた場合、hash(m2)= hash(m1)となるような別のメッセージm2を見つけます。 ウィキペディアでは、衝突攻撃を次のように定義しています。 hash(m1)= hash(m2)となるような2つの任意の異なるメッセージm1およびm2を見つけます。 私が見ることができる唯一の違いは、2番目のプリイメージ攻撃では、m1がすでに存在し、攻撃者に知られていることです。ただし、それは重要だとは思いません。最終的な目標は、同じハッシュを生成する2つのメッセージを見つけることです。 2回目のプリイメージ攻撃と衝突攻撃の実行方法の本質的な違いは何ですか?結果の違いは何ですか? (余談ですが、この質問に適切にタグ付けすることはできません。「暗号化セキュリティプリイメージコリジョン」タグを適用しようとしていますが、十分な評判がありません。誰かが適切なタグを適用できますか?)


1
ブルームフィルターハッシュ:もっと多い?
ブルームフィルターの実装では、従来のアプローチでは複数の独立したハッシュ関数が必要です。 KirschとMitzenmacherは、実際には2つしか必要とせず、残りを線形結合として生成できることを示しました。 私の質問は、2つのハッシュ関数と2倍のエントロピーを持つハッシュ関数の違いは何ですか? これは、ハッシュ関数の出力で実際に何をするかを見ることに由来します。(たとえば)64ビットのハッシュ値を取得して、ビットベクトルのサイズにスケーリングします。64。これは明らかにエントロピーを失う変換です(まれに、ハッシュサイズとフィルター容量が完全に一致する場合を除きます)。フィルターのエントリが2 32未満であると仮定して、64ビットハッシュ値を2つの32ビットハッシュに分割し、それらの線形結合を取得するのを止めるものは何ですか?またはそれを使用してPRNGをシードしますか? 言い換えれば、標準の偽陽性率を確実に保持するために、ブルームフィルターに挿入する各要素について、実際にどれだけの情報を知る必要がありますか?またはより一般的には、要素をどれだけうまく区別できるか(それらを記述するために使用するビット数)とブルームフィルターのパフォーマンスとの関係は何ですか? 確かに、フィルタサイズがmの場合、ビット、または同等に2 (lg (− n ln p)− 2 lg (ln 2 ))ビットでn個の要素を偽陽性の確率で格納できるようですp ....2 lg(m )2lg⁡(m)2\lg(m)mmm2 (lg(− n lnp)−2lg(ln2 ))2(lg⁡(−nln⁡p)−2lg⁡(ln⁡2))2(\lg(-n\ln{p}) - 2\lg(\ln2))nnnppp

1
線形探査のための5つの独立したハッシュ関数の再利用
線形探査によって衝突を解決するハッシュテーブルでは、期待されるパフォーマンスを確保するために、ハッシュ関数が5つの独立したファミリからのものであることが必要かつ十分です。(充足性:「一定の独立性を持つ線形探査」、Paghほか、必要性:「線形探査と最小賢明な独立性に必要なk独立性について」、PătraşcuおよびThorup)O (1 )O(1)O(1) 最速の既知の5独立家族が集計を使用していることは私の理解です。そのようなファミリから関数を選択するのは高価になる可能性があるため、Crosby and Wallachの「Denial of Service by Algorithmic Complexity Attacks」で説明されているアルゴリズムの複雑さの攻撃を防ぎながら、その回数を最小限に抑えたいと思います。私はタイミング攻撃(つまり、ストップウォッチを持つ敵)についてあまり心配していません。同じ機能を再利用するとどのような結果になりますか: いっぱいになったハッシュテーブルを成長させるとき? 十分ではないハッシュテーブルを縮小する場合 「削除」ビットが多すぎるハッシュテーブルを再構築する場合 では共通していくつかのキーが含まれていてもよい異なるハッシュテーブル?kkk では共通には、キーを含まない別のハッシュテーブル?kkk

3
連想ハッシュミキシング
純粋に機能的な設定で、一重にリンクされたリストを検討してください。その賞賛は山頂から歌われており、今後も歌われ続けます。ここでは、その多くの長所のうちの1つと、それをツリーに基づく純粋に機能的なシーケンスのより広いクラスに拡張する方法の問題に取り組みます。 問題は次のとおりです。強力なハッシュを使用して、O(1)時間のほぼ一定の構造的同等性をテストする必要があります。ハッシュ関数が構造的に再帰的である場合、つまり、hash(x:xs)= mix x(hash xs)の場合、リストのハッシュ値を透過的にキャッシュし、要素が既存のリストに結合されたときにO(1)でそれらを更新できます。リストをハッシュするためのほとんどのアルゴリズムは構造的に再帰的であるため、このアプローチは実際に非常に有用です。 しかし、一重リンクリストの代わりに、O(log n)時間で長さO(n)の2つのシーケンスの連結をサポートするツリーベースのシーケンスがあるとします。ここでハッシュキャッシングを機能させるには、ツリーが同じ線形シーケンスを表す際に持つ自由度を尊重するために、ハッシュミキシング関数を連想的にする必要があります。ミキサーは、サブツリーのハッシュ値を取得し、ツリー全体のハッシュ値を計算する必要があります。 これは、6か月前、この問題を熟考して調査するのに1日費やした場所です。データ構造に関する文献では注目されていないようです。暗号化からTillich-Zemorハッシュアルゴリズムに出くわしました。これは、ビット0と1がガロア体のエントリを持つ部分代数の2つの生成器に対応する2x2行列乗算(連想)です。 私の質問は、私が逃したものは何ですか?私の検索で見つけられなかった暗号とデータ構造に関する文献の両方に関連性のある論文がなければなりません。この問題についてのコメントと探求する可能性のある場所は大歓迎です。 編集:スペクトルのソフトと暗号の両方の強みに関するこの質問に興味があります。よりソフトな側面では、衝突を回避する必要があるが壊滅的ではないハッシュテーブルに使用できます。強い面では、同等性テストに使用できます。

1
個別のチェーンにはどの程度の独立性が必要ですか?
ボールがランダムにn個のビンに均等に配置されている場合、最も負荷の高いビンには、O (lg n / lg lg n )ボールが含まれている可能性が高くなります。では、「シンプル集計ハッシュの力」、PătraşcuとThorup言及その「限定された独立したアプリケーションのためのチャーノフ-Hoeffdingは境界」(ミラー)ボールがで配布されている場合は、最も重いロードされたビンの人口にバインドこれも保持していることを示していますΩ (lg n / lg lg n ) -独立したハッシュ関数。nnnnnnO (lgn / lglgn )O(lg⁡n/lg⁡lg⁡n)O(\lg n/\lg \lg n)Ω (lgn / lglgn )Ω(lg⁡n/lg⁡lg⁡n)\Omega(\lg n/\lg \lg n) 「ボールとビン:小さいハッシュ家族と高速評価」、セリスら。ハッシュ関数のファミリーがあるかどうかは知られていないことに注意してください ハッシュ関数はビットのスペースで表すことができますO (lgn )O(lg⁡n)O(\lg n) ハッシュ関数は時間で評価できますO (1 )O(1)O(1) 最大負荷は、高い確率でです。O (lgn / lglgn )O(lg⁡n/lg⁡lg⁡n)O(\lg n / \lg \lg n) 定数がある場合はなどあらゆるもののk#3のために非依存性のファミリーで十分で、それはの多項式建設K非依存性の家族は#1と#2を満たしています。kkkkkkkkk kに依存しないハッシュを使用した最も負荷の大きいビンにはどのような境界がありますか?kkk …

1
SHA-1衝突攻撃に関する研究の現状
SHA-1セキュリティは、衝突を検出するためのアルゴリズムがCRYPTO 2004で最初に公開され、その後改善されて以来議論されてきました。 ウィキペディアにはいくつかの参考文献がリストされていますが、このテーマに関する公開された(そして後に取り下げられた)最新の研究は2009年に行われたようです(Cameron McDonald、Philip Hawkes、Josef Pieprzyk "Differential Path for SHA-1 with complex O(2 ^ 52)" )。 それ以来、SHA-1に対するハッシュコリジョン攻撃の労力を削減する上で大きな進展がありましたか? 短い要約を伴う特定の研究へのリンクをいただければ幸いです。

1
「再帰的」ハッシュアルゴリズムは存在しますか?
理論的または実用的なハッシュアルゴリズムのクラスはありますか。そのクラスのアルゴリズムは、以下に示す定義に従って「再帰的」と見なされます。 hash1 = algo1( "入力テキスト1") hash1 = algo1( "入力テキスト1" + hash1) +演算子は、アルゴリズム(algo1)がまったく同じ結果を生成するように、出力(hash1)を結合して入力(「input text 1」)に戻す連結またはその他の指定された操作です。すなわち、入力と入力+出力の衝突。+演算子は両方の入力全体を結合する必要があり、アルゴは入力の一部を破棄しない場合があります。 アルゴリズムは、出力で高いエントロピーを生成する必要があります。出力を1つまたは両方の可能な入力に戻すのは暗号的に難しいかもしれませんが、そうする必要はありません。 私は数学者ではありませんが、良い答えには、このようなクラスのアルゴリズムが存在できない理由の証明が含まれる場合があります。ただし、これは抽象的な質問ではありません。システムにこのようなアルゴリズムが存在する場合、そのアルゴリズムを使用することに本当に興味があります。 これは、https://stackoverflow.com/questions/4823680/reflexive-hashに最初に投稿された質問の複製です

2
関数型辞書のデータ構造を選択するにはどうすればよいですか?
次のデータ構造について少し読みました。 バグウェルの理想的なハッシュトライ Larsonの動的ハッシュテーブル 赤黒木 パトリシアの木 ...そして他にもたくさんの人がいると思います。私はそれぞれが何に適しているのか、あるいはなぜ私が他のものを選ぶのかについてはほとんど見たことがありません。したがって、これらの行に沿っていくつかの質問があります: 知っておくべき重要な関数型辞書のデータ構造は何ですか? これらのアプローチの長所と短所は何ですか? より命令的なデータ構造を使用するのはいつ意味がありますか? 2と3の番号がより重要です。:-)

2
包含テスト用の整数のハッシュセット
AがBに含まれている場合、R(H(A)、H(B))になるようなセットH(。)および関係R(。、。)のハッシュ関数を探しています。もちろん、R(。、。)は検証が容易(一定時間)でなければならず、H(A)は線形時間で計算する必要があります。 HとRの一例は次のとおりです。 H(A)=⋁x∈A1&lt;&lt;(h(x)modk)H(A)=⋁x∈A1&lt;&lt;(h(x)modk)H(A) = \bigvee_{x\in A} 1 << (h(x) \mod k)、ここでkは固定整数、h(x)は整数に対するハッシュ関数です。 R(H(A)、H(B))=((H(A)&H(B))== H(A)) 他に良い例はありますか?(良い定義は難しいですが、R(H(A)、H(B))であれば直感的に、whp AがBに含まれます)。 後で編集: ハッシュ関数のファミリーを探しています。私はたくさんのセットを持っています。各セットに3〜8個の要素。それらの90%は3つまたは4つの要素を持っています。私が挙げたハッシュ関数の例は、このケースではあまりよく分散されていません。 H(。)(この例ではk)のビット数は小さくなければなりません(つまり、H(。)は整数または長さに収まる必要があります)。 Rの1つの優れた特性は、H(。)にkビットがある場合、R(。、。)が(3 ^ k-2 ^ k)/ 4 ^ kペアに対して真であることです。非常に少数のペア。 ブルームフィルターは、大規模なセットに特に適しています。この問題にBFを使用してみましたが、最適な結果は1つの関数のみでした。 (stackoverflowからのクロスポスト、十分な回答が得られませんでした)

2
と準線形空間におけるほぼ普遍的な文字列ハッシュ
ここでは文字列のハッシュ関数の2人の家族がいる:x⃗ =⟨x0x1x2…xm⟩x→=⟨x0x1x2…xm⟩\vec{x} = \langle x_0 x_1 x_2 \dots x_m \rangle pppxi∈Zpxi∈Zpx_i \in \mathbb{Z_p}h1a(x⃗ )=∑aiximodpha1(x→)=∑aiximodph^1_{a}(\vec{x}) = \sum a^i x_i \bmod pa∈Zpa∈Zpa \in \mathbb{Z}_p∀x≠y,Pa(h1a(x)=h1a(y))≤m/p∀x≠y,Pa(ha1(x)=ha1(y))≤m/p\forall x \neq y, P_a(h^1_a(x) = h^1_a(y)) \leq m/p 用、のための。LemireとKaserは、「非常に普遍的な文字列ハッシュは速い」で、このファミリが2独立であることを示しました。これは、ことを意味しxi∈Z2bxi∈Z2bx_i \in \mathbb{Z}_{2^b}h2a⃗ =⟨a0a1a2…am+1⟩(x⃗ )=(a0+∑ai+1ximod22b)÷2bha→=⟨a0a1a2…am+1⟩2(x→)=(a0+∑ai+1ximod22b)÷2bh^2_{\vec{a} = \langle a_0 a_1 a_2 \dots a_{m+1}\rangle}(\vec{x}) = (a_0 + \sum a_{i+1} x_i \bmod 2^{2b}) …

1
クヌースはどのようにしてAを導き出したのですか?
キーを自然数として解釈する場合、次の式を使用できます。 h(k)=⌊m(kAmod1)⌋h(k)=⌊m(kAmod1)⌋\begin{equation} h(k) = \lfloor m (kA\bmod{1}) \rfloor \end{equation} 私が理解できないのは、Aの値をどのように選択するかです。 0&lt;A&lt;10&lt;A&lt;1\begin{equation} 0 < A < 1 \end{equation} Knuthによると、最適値は次のとおりです。 A≈(5–√−1)/2=0.6180339887...A≈(5−1)/2=0.6180339887...\begin{equation} A \thickapprox (\sqrt{5} - 1) / 2 = 0.6180339887... \end{equation} だから私の質問は、どのようにしてKnuthがこれに到達し、どのようにして特定のデータの最適値を計算できるのかということです。

1
SHA-224とSHA-256が異なる初期値を使用するのはなぜですか?
ウィキペディア-SHA-2によると SHA-224はSHA-256と同じですが、次の点が異なります。 初期変数値h0からh7は異なります。 出力はh7を省略して作成されます。 RFC3874-224ビットの一方向ハッシュ関数:SHA-224は言います 異なる初期値を使用すると、切り捨てられたSHA-256メッセージダイジェスト値が、同じデータで計算されたSHA-224メッセージダイジェスト値と間違われることがなくなります。 私の質問: 上記の理由は、SHA-224とSHA-256が異なる初期値を使用する唯一の理由ですか? SHA-256メッセージダイジェスト値をSHA-224メッセージダイジェスト値と間違えないようにすることが重要なのはなぜですか? 両方のハッシュ関数に同じ初期値を使用すると、どちらかのハッシュ関数のセキュリティが低下しますか?はいの場合、どのように?

2
マップのツリーに最適なデータ構造は何ですか。
私はデータ構造を探しています。これは基本的にマップのツリーです。各ノードのマップには、親ノードのマップ内のエレメントだけでなく、いくつかの新しいエレメントが含まれています。ここでのマップとは、STLのマップやPythonのdictのような、キーと値を含むプログラミングマップを意味します。 たとえば、ルートノードがあるとします。 root = {'car':1, 'boat':2} と2つの子、それぞれが親マップに要素を追加 child1 = {'car':1, 'boat':2, 'jet':35} child2 = {'car':1, 'boat':2, 'scooter':-5} これを可能な限りスペース効率の良いものにしたいのです。つまり、結果のマップの完全なコピーを各ノードに保存したくありませんが、理想的にはルックアップはO(log N)であり、Nはツリー全体ではなく、ノードの要素。 私はおそらくこれに使用できるスマートなハッシュ関数があると考えていましたが、何も思いつきませんでした。 単純なアプローチでは、新しく追加されたエントリを各ノードのマップに格納し、何も見つからない場合はツリーを上に移動します。木の深さに依存するので、私はこれが好きではありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.