Questions tagged «hash-function»

4
对于具有良好理论保证的整数集合(即多集)是否存在哈希函数?
我很好奇是否有一种方法可以存储具有以下属性的多组整数的哈希,理想情况下: 它使用O(1)空间 可以对其进行更新以反映O(1)时间的插入或删除 两个相同的集合(即具有相同元素且具有相同多重性的集合)应始终散列为相同的值,而两个不同的集合应以较高的概率散列为不同的值(即,函数是独立的或成对独立的) 对此的一种初步尝试是将乘积以各个元素的哈希的随机素数模存储。满足1和2,但尚不清楚它是否满足3。 我最初将此内容发布在StackOverflow上。 *属性1和2可以放宽到O(log n)或小的次线性多项式。关键是要看我们是否可以识别多集合并可靠地测试相等性而无需存储元素本身。

3
第二次原像攻击和碰撞攻击有什么区别?
维基百科将第二次原像攻击定义为: 给定固定消息m1,找到另一个消息m2,使hash(m2)= hash(m1)。 维基百科将碰撞攻击定义为: 找到两个任意不同的消息m1和m2,使hash(m1)= hash(m2)。 我可以看到的唯一区别是,在第二次原像攻击中,m1已经存在并且为攻击者所知。但是,这并不使我感到意义重大-最终目标仍然是找到两个产生相同哈希值的消息。 第二次原像攻击和碰撞攻击的执行方式有何本质区别?结果有什么不同? (顺便说一句,我无法正确标记该问题。我试图应用标签“密码学安全性映像前冲突”,但我的信誉不足。有人可以应用适当的标签吗?)


1
布隆过滤器哈希值:更多还是更大?
在实现布隆过滤器时,传统方法需要多个独立的哈希函数。 Kirsch和Mitzenmacher表明您实际上只需要两个,并且可以将其余部分作为线性组合生成。 我的问题是:两个散列函数和一个具有两倍熵的散列函数之间的区别是什么? 这是通过查看您对散列函数的输出实际执行的操作得出的:您将采用(例如)64位散列值并将其缩放为位向量的大小,该值可能明显小于2 64。显然,这是一种失去熵的转换(在极少数情况下,散列大小和过滤器容量完全一致)。假设我的过滤器具有少于2 个32个条目,那是什么使我无法将64位哈希值拆分为两个32位哈希并采用线性组合呢?还是用它来播种PRNG? 换句话说,为确保标准误报率成立,我实际上需要了解多少信息才能插入到Bloom过滤器中?或更笼统地说,我如何区分元素(使用多少位来描述元素)与Bloom过滤器的性能之间有什么关系? 似乎可以将位用于过滤器大小,或者等效地使用位来存储元素的误报概率为 ....2 升(米)2lg⁡(米)2\lg(m)米米m2 (lg(− n lnp)-2LG(ln2 ))2(lg⁡(-ñln⁡p)-2lg⁡(ln⁡2))2(\lg(-n\ln{p}) - 2\lg(\ln2))ññnppp

1
重用5个独立的哈希函数进行线性探测
在通过线性探测解决冲突的哈希表中,为了确保期望的性能,哈希函数来自5个独立家族是必要且充分的。(充分性:“具有恒定独立性的线性探测”,Pagh等人,必要性:“关于线性探测和最小独立性要求的k独立性”,Pătraşcu和Thorup)O(1)O(1)O(1) 据我了解,已知最快的5个独立家庭使用列表。从这样的家族中选择一个功能可能会很昂贵,因此我想尽量减少这样做的次数,同时仍要防止算法复杂性攻击,如Crosby和Wallach的“通过算法复杂性攻击拒绝服务”中所述。我不太担心计时攻击(即带有秒表的对手)。重用相同功能的后果是什么: 当散列表太满时? 缩小不够完整的哈希表时? 重建具有太多“已删除”位设置的哈希表时? 在不同的哈希表中可能包含一些共同的键?ķķk ķķk

3
关联哈希混合
考虑纯功能设置中的单链链接。它的赞美声从山顶传来,并将继续传给人们。在这里,我将讨论其众多优势之一,以及如何将其扩展到基于树的更广泛的纯功能序列类别的问题。 问题如下:您想通过强哈希在O(1)时间内测试几乎某些结构相等性。如果哈希函数在结构上是递归的,即哈希(x:xs)=混合x(哈希xs),则可以将哈希值透明地缓存在列表中,并在元素被限制在现有列表中的情况下,在O(1)时间更新它们。大多数哈希列表算法在结构上都是递归的,因此这种方法在实践中非常有用。 但是,假设您不是基于单链列表,而是具有基于树的序列,该序列支持在O(log n)时间内连接两个长度为O(n)的序列。为了使散列缓存在这里起作用,散列混合函数必须具有关联性,以便尊重树在表示相同线性序列时所具有的自由度。混合器应获取子树的哈希值,并计算整个树的哈希值。 这是六个月前的一天,当时我花了一天时间思考并研究这个问题。在有关数据结构的文献中似乎没有引起注意。我确实遇到了来自密码学的Tillich-Zemor哈希算法。它依赖于2x2矩阵乘法(关联),其中位0和1对应于在Galois字段中具有条目的子代数的两个生成器。 我的问题是,我错过了什么?我在搜索中找不到的关于密码学和数据结构的文献中必定有相关的论文。任何对此问题的评论以及可能探索的场所将不胜感激。 编辑:我对频谱的软性和加密性强端都对这个问题感兴趣。在较软的方面,它可以用于哈希表,在该表中应避免冲突,但不会造成灾难性的后果。从更有利的方面,它可以用于相等性测试。

1
单独链接需要多少独立性?
如果将球随机均匀地放入仓中,则最重的装载仓中很有可能会出现球。Pătraşcu和Thorup 在“简单列表散列的威力”中提到,“独立性有限的应用程序的切尔诺夫-霍夫廷界”(镜像)表明,如果球以一定的距离分布,则最重的装载箱上的该界也成立。独立的哈希函数。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) Celis等人在“ Balls and Bins:较小的哈希表族和更快的评估”中。请注意,尚不清楚是否存在哈希函数系列 哈希函数可以用位空间表示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) 如果有一个恒定的使得任何为#3不依赖家庭就足够了,那么它的多项式建设不依赖家庭将达到#1和#2。kkkkkkkkk 什么必然做我们有最重的负载箱非依赖性哈希?kkk 使用“切尔诺夫-霍夫定界...”定理4.3.1和联合界,我想我可以得到最重的装箱whp的重量的界O(n2/k)O(n2/k)O(n^{2/k}) 可以使用其他技术将其简化为吗?O(lgcn)O(lgc⁡n)O(\lg ^c n)

1
SHA-1碰撞攻击的研究现状
自从CRYPTO 2004首次发布用于发现冲突的算法以来,就一直讨论SHA-1的安全性,并随后对其进行了改进。 Wikipedia列出了一些参考文献,但是,有关该主题的最新研究似乎是在2009年发表的(后来被撤回了)(Cameron McDonald,Philip Hawkes和Josef Pieprzyk“具有复杂度O(2 ^ 52)的SHA-1的差分路径”)。 )。 从那时起,在减少SHA-1上的哈希冲突攻击方面是否取得了重大进展? 与特定研究的链接以及简短摘要将不胜感激。

1
是否存在“自反”哈希算法?
是否存在一类哈希算法,无论是理论上的还是实用的,因此根据以下给出的定义,该类中的算法可以被认为是“自反的”: hash1 = algo1(“输入文字1”) hash1 = algo1(“输入文字1” + hash1) +运算符可以是串联或任何其他指定的操作,以将输出(hash1)组合回输入(“输入文本1”),以便算法(algo1)将产生完全相同的结果。即输入和输入+输出冲突。+运算符必须合并两个输入的全部,并且算法不得舍弃部分输入。 该算法必须在输出中产生高熵。在密码上很难将输出反转回一个或两个可能的输入,但不一定如此。 我不是数学家,但是一个很好的答案可能包括为什么这样一类算法不存在的证明。但是,这不是一个抽象的问题。我真的有兴趣在系统中使用这种算法(如果确实存在)。 这是一个问题的重复副本,该问题最初发布于/programming/4823680/reflexive-hash

2
如何选择功能字典数据结构?
我已经阅读了一些有关以下数据结构的信息: Bagwell的理想哈希尝试 Larson的动态哈希表 红黑树 帕特里夏树 ...我敢肯定还有很多其他人。对于每个人都更适合的方式,或者为什么我会选择一个而不是另一个,我很少见。因此,以下是这些方面的一些问题: 重要的是要了解哪些功能词典数据结构? 这些方法的优缺点是什么? 什么时候使用更命令性的数据结构有意义? 数字2和3是最重要的数字。:-)

2
散列整数集以进行包含测试
我正在寻找一组H(。)和关系R(。,。)的哈希函数,以便如果A包含在B中,则R(H(A),H(B))。当然,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)),那么b中会包含whp A)。 以后编辑: 我正在寻找一系列哈希函数。我有很多套;每组3-8个元素;其中90%具有3或4个元素。在这种情况下,我给出的示例哈希函数分布不佳。 H(。)(在我的示例中为k)的位数应较小(即H(。)必须为整数或长整数)。 R的一个不错的特性是,如果H(。)具有k位,则对于(3 ^ k-2 ^ k)/ 4 ^ k对,即R(。,。)为true。几双。 布隆过滤器特别适合大型设备。我尝试使用BF解决此问题,但最佳结果只有一个功能。 (来自stackoverflow的交叉报道,我没有收到足够好的答案)

2
和亚线性空间中的几乎通用字符串哈希
这是字符串上的两个哈希函数族:X⃗ = ⟨X0X1个X2…X米⟩x→=⟨x0x1x2…xm⟩\vec{x} = \langle x_0 x_1 x_2 \dots x_m \rangle 对于素数和,对于\ in \ mathbb {Z} _p。Dietzfelbinger等。在“多项式哈希函数可靠”中显示\ forall x \ neq y,P_a(h ^ 1_a(x)= h ^ 1_a(y))\ leq m / p。pppX一世∈žpxi∈Zpx_i \in \mathbb{Z_p}H1个一个(X⃗ )= ∑一个一世X一世模pha1(x→)=∑aiximodph^1_{a}(\vec{x}) = \sum a^i x_i \bmod p一∈žpa∈Zpa \in \mathbb{Z}_p∀ X ≠ ÿ,P一个(H1个一个(x )=H1个一个(y))≤ 米/ p∀x≠y,Pa(ha1(x)=ha1(y))≤m/p\forall x …

1
Knuth是如何得出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是总数节点上的元素,而不是整个树。 我当时在想也许有一个智能哈希函数可以用于此目的,但是什么也没想出来。 天真的方法是将新添加的条目存储在每个节点的映射中,然后在未找到任何内容的情况下向上移动树。我不喜欢这样,因为它取决于树的深度。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.