数据完整性的保证源于哈希函数的确定性和抗碰撞性。签名时,发送方对原始数据计算哈希值 H1,并对 H1 进行签名。验签时,接收方对收到的原始数据用相同哈希算法重新计算,得到哈希值 H2。若数据在传输过程中被篡改,H2 将与 H1 完全不同,验签失败。由于哈希函数的抗碰撞性,攻击者很难构造出两个不同的数据使其哈希值相同,从而无法在不被发现的情况下篡改数据。
哈希函数对输入数据的任何改动都极为敏感,无论是修改文件内容、替换交易金额、还是插入恶意代码,都会导致重新计算的哈希值与原始哈希值不匹配。这一特性使数字签名验签能够检测出数据中的任何篡改行为,包括非常微小的改动。在某些增强方案中,还会对数据的元数据(如时间戳、序列号)一并计算哈希,防止攻击者替换整个数据包或重放旧数据。
数据完整性的密码学保障最终依赖于哈希算法的抗碰撞能力。目前 SHA-256、SM3、SHA-3 等主流哈希算法的抗碰撞强度均在 2^128 量级或以上,意味着找到两个不同输入使其输出相同哈希值的概率在计算上不可行。MD5 和 SHA-1 的抗碰撞能力已被攻破,使用这些弱哈希算法会使完整性保障失效,因此在安全场景中必须禁用 MD5 和 SHA-1。