业余人士,不当之处请指教。
首先,碰撞概率与计算散列(Hash)值的样本数量有关,对10000个文件计算 SHA-1,任意两个发生碰撞的概率当然大于「只对10个文件计算 SHA-1」。
假设一个散列函数完全符合散列值的平均分布,那么求碰撞概率的问题就可以看作生日问题(
wikipedia.org:生日攻击:)。
但对于现在的散列函数来说,上百位的输出长度不适合用传统的方法计算碰撞概率,题主可以自己去查看有哪些近似的算法。最后可以得出如下的表格(来自
wikipedia.org: Birthday attack):
<img src="https://i-blog.csdnimg.cn/blog_migrate/6c9b193d5e803a840c08d53cd2638134.png" data-rawwidth="1858" data-rawheight="540" class="origin_image zh-lightbox-thumb" width="1858" data-original="https://pic2.zhimg.com/fd45368ea8f758f871f38f42e3349b2d_r.png">
SHA-1 函数产生 160 位的输出,所以各个碰撞概率需要的样本数介于 128 位和 256 位之间。