随机预言机模型下哈希函数碰撞的概率qi^2/q怎么来的
时间: 2024-06-03 15:10:22 浏览: 10
对于一个给定的哈希函数,我们可以假设它将任何输入散列到 0 到 q-1 的整数范围内。如果我们有 n 个关键字,那么每个关键字 k 可能被哈希到 q 个位置中的一个位置。随机指定两个关键字 k1 和 k2,它们分别被哈希到哈希表的位置 i1 和 i2,同时假设哈希函数是均匀随机的,则
Pr (i1 = i2) = 1/q
因此,碰撞的概率是:
Pr (k1 和 k2 碰撞) = Pr (i1 = i2) = 1/q
根据定义,随机预言机模型下的哈希函数预言的速度等同于根据概率计算。因此,概率 qi^2/q 表示对于它哈希表中的每个哈希值 qi,我们有 "冲突" n^2/qi 种情况,其中 n 是关键字的数量。所以我们对 qi 进行求和,得到总的冲突数量为 n^2/q。
相关问题
哈希函数碰撞的概率为qi^2/q的推导过程
### 回答1:
哈希函数的碰撞概率可以用公式p ≈ n²/2q来计算,其中n是哈希表中键的数量,q是桶的数量。
假设我们有q个桶,每个桶中放了k个键值对,那么总共有n=qk个键,每个键都有被映射到任意一个桶中的概率为1/q。
现在我们要计算这些键中至少有两个键被映射到同一个桶中的概率,也就是求碰撞的概率。我们可以用排列组合的方法来计算,假设我们取出两个键,它们被映射到同一个桶中的概率为1/q²,不被映射到同一个桶中的概率为(1-1/q)²。那么我们可以得到如下公式:
P(至少有两个键碰撞) = 1 - P(所有键都不碰撞)
= 1 - C(n,2)*(1/q²)*(1-1/q)^(n-2)
≈ 1 - n(n-1)/(2q) × 1/q² × (1-1/q)^(n-2)
≈ n²/2q, 当q趋向于无穷大时
综上所述,哈希函数碰撞的概率为n²/2q。
### 回答2:
哈希函数碰撞概率的推导过程是由概率论中的条件概率公式得出的。
假设有一个哈希函数H,将任意长度的输入数据映射为固定长度的哈希值,哈希值的长度可以用q来表示。
假设函数H的输出范围一共有M个可能的结果,即M = 2^q。
现在假设我们有n个输入数据,分别为x1, x2, ..., xn。那么对于这n个输入数据,我们想要计算出至少两个输入数据经过哈希函数H后得到相同的哈希值的概率。
首先,我们计算任意两个输入数据经过哈希函数H后得到不同哈希值的概率。对于第一个输入数据xi来说,它与其他n-1个输入数据经过哈希函数H得到不同哈希值的概率为(1-1/M)。那么对于n个输入数据,至少有两个输入数据经过哈希函数H后得到不同哈希值的概率为:
P(A) = 1 - P(A') = 1 - (1-1/M)*(1-1/M-1)*...*(1-1/M-(n-1))
其中,A表示至少有两个输入数据经过哈希函数H后得到不同哈希值的事件,A'表示所有输入数据经过哈希函数H后得到相同哈希值的事件。
接下来,我们计算至少有两个输入数据经过哈希函数H后得到相同哈希值的概率,即P(A')。
我们将任意两个输入数据经过哈希函数H后得到不同哈希值的概率记为qi,即:
qi = 1 - 1/M
那么有两个输入数据经过哈希函数H后得到相同哈希值的概率为1 - qi。
因此,至少有两个输入数据经过哈希函数H后得到相同哈希值的概率为:
P(A') = 1 - (1 - qi)*(1 - qi)*(1 - qi)*...*(1 - qi)
计算得到不同输入数据经过哈希函数H后得到相同哈希值的概率为:
P(A') = 1 - (1 - qi)^n
根据条件概率公式,我们可以得出哈希函数碰撞概率为:
P(A) = 1 - P(A') = 1 - (1 - qi)^n
代入qi = 1 - 1/M,即可得到哈希函数碰撞概率的推导公式。
### 回答3:
哈希函数碰撞的概率是指在给定哈希函数的情况下,对于任意的输入数据,通过哈希函数计算后所得到的哈希值相同的概率。假设哈希函数将输入数据均匀地映射到哈希值的空间,且共有q个可能的哈希值。
现在考虑有n个输入数据,用qi表示第i个输入数据计算出相同的哈希值的概率。对于第一个输入数据计算出相同的哈希值的概率是1/q,即每个可能的哈希值都有相同的概率。对于第二个输入数据,由于哈希函数的结果是独立的,所以其计算出相同的哈希值的概率还是1/q。同理,对于第三个、第四个...第n个输入数据,计算出相同的哈希值的概率仍然是1/q。因此,所有输入数据计算出相同的哈希值的概率可以表示为:
P = q×(1/q)×(1/q)×...×(1/q) = (1/q)^n = q^(-n)
其中,(1/q)的n次方表示每个输入数据计算出相同的哈希值的概率,并且共有q个可能的哈希值。
因此,哈希函数碰撞的概率为qi^2/q = q^(-n)。
这个结果也可以理解为:哈希函数计算出相同的哈希值的概率是随着输入数据的数量n增加而减小的。当n较大时,概率会趋近于0,即碰撞的概率较低,哈希函数的选择就越好。
字典哈希函数的碰撞实验
字典哈希函数的碰撞实验是通过构造不同的输入,计算它们的哈希值,并检查是否存在相同的哈希值来验证哈希函数的碰撞性。下面是一个简单的示例代码来演示字典哈希函数的碰撞实验:
```python
import hashlib
def find_collision(hash_func):
# 构造两个不同的输入
input1 = "hello"
input2 = "world"
# 计算输入的哈希值
hash1 = hash_func(input1)
hash2 = hash_func(input2)
# 检查是否存在碰撞
if hash1 == hash2:
print("碰撞发生!")
else:
print("没有发生碰撞。")
# 使用SHA256哈希函数进行碰撞实验
def sha256_hash(input):
return hashlib.sha256(input.encode()).hexdigest()
find_collision(sha256_hash)
```
在上面的代码中,我们使用了Python的hashlib库来计算SHA256哈希值。我们构造了两个不同的输入"hello"和"world",并计算它们的哈希值。然后我们比较这两个哈希值,如果它们相等,则说明发生了碰撞。
请注意,哈希函数的碰撞性取决于哈希函数的设计和输入的选择。在实际应用中,为了保证安全性,哈希函数需要具备抗碰撞性,即使在面对恶意攻击者构造的输入时也能保持较低的碰撞性。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)