我正在开发一个“开放的分布式云存储系统”。
开放是指任何人都可以参与文件托管。
我当前的设计使用文件内容的 sha1 哈希作为全局文件 ID。
假设客户端已经知道这个哈希值并从“带宽捐助者”接收文件。
客户端现在需要通过生成哈希并将其与预期值进行比较来验证文件确实是正确的。
但是我担心有人可能会故意修改文件以产生相同的哈希值。据我所知,这对于 CRC 系列的散列很容易实现。周围的一些“谷歌搜索”揭示了许多声称对于 MD5 来说同样容易的说法。
现在我的问题是:是否有满足beeing标准的散列算法
- 快速处理大量数据
- 在散列范围内分布良好(又名“唯一”)
- 有足够的目标范围(“位长”)
- 可以抵抗故意的碰撞攻击
我能想到实现满足我需要的设置的所有其他方式都涉及秘密组件,例如秘密 openssl 密钥或散列函数的共享秘密盐。
不幸的是,我无法使用它。