在一个新系统上,我们需要一个单向哈希来计算二进制输入的数字签名(例如,一千字节的文本,或更大的文本和二进制文件)。需求类似于 Scons(构建系统)如何散列命令行和源文件,以及 Git(版本控制系统)如何散列文件以计算存储/同步的签名。
回想一下,Scons 使用 MD5,而 Git 使用 SHA-1。
虽然 MD5 和 SHA-1 已被“破坏”,但 Scons 和 Git 都没有专门使用它们的哈希值来确保安全(例如,它不用于存储密码),因此一般实践仍然认为这些算法可以用于该用途。(当然,由于采用传统,这部分是合理化的。)
问题:您会在新系统中使用 SHA256(不是 MD5 或 SHA-1)作为(非加密/安全)单向哈希吗?
担忧是:
- MD5 和 SHA-1 的采用历史悠久
- SHA256 相对较新(没有太多历史),但目前似乎推荐用于新工作(但我的应用程序并不特别需要“更强”的算法强度)
- SHA256 计算起来更耗时
- SHA256 生成一个更长的密钥(这些将用作目录/文件名,并存储在索引文件中),但我想我可以截断生成的密钥(哈希不太强,但应该足够了),或者只是假设存储很便宜并且文件系统可以处理它。
我会对与 Scons 或 Git 社区一致的答案特别感兴趣,“我们将永远保留我们的!” 或“我们希望尽快转移到新的哈希!” (我不确定他们的计划是什么?)