数字签名是对特定数据的哈希值进行运算生成的,与原始数据紧密绑定。攻击者若篡改原始数据,接收方重新计算的哈希值将发生变化,与签名中保护的原始哈希值不一致,验签直接失败。攻击者若试图在篡改数据后重新生成合法签名,则必须持有发送方的私钥,而私钥的保密性正是整个签名体系的安全基石。因此,在没有私钥的前提下,任何数据篡改行为都会被发现。
攻击者可能试图将合法签名从一个文件"平移"到另一个篡改后的文件上,使验签通过。这一攻击之所以失败,是因为签名保护的是特定数据的哈希值,不同数据的哈希值不同,用 A 文件的签名无法通过 B 文件的验签。某些签名标准(如 RSA-PSS)还在签名结构中引入随机化因子,使同一数据每次签名的结果不同,进一步防止签名被重复利用或平移。
除防止内容篡改外,数字签名体系还通过时间戳和序列号防止"重放攻击"(攻击者截获合法签名数据后重复发送)。发送方在签名数据中嵌入当前时间戳或递增序列号,接收方验签时检查时间戳是否在合理范围内、序列号是否已被使用,从而识别并拒绝重放的数据包。这一机制常结合 nonce(一次性随机数)使用,确保每次签名都是唯一的。