XML签名通过规范化+分段摘要+SignedInfo整体签名的闭环验证保障完整性。具体为:对每个Reference数据规范化后计算摘要,比对DigestValue;再规范化SignedInfo并验证SignatureValue,任一不匹配即失败。
XML签名(XML Signature)是一种基于标准的数字签名机制,专门用于保障XML文档或其中部分内容的完整性、真实性和不可否认性。它不是简单地把整个XML文件哈希后加密,而是支持灵活选择签名目标(比如某个元素、多个节点,甚至外部资源),并能抵抗XML格式差异带来的干扰。
一个典型的XML签名包含在元素中,主要由三部分构成:
)及其摘要值(DigestValue);SignedInfo规范化后的结果,用私钥加密生成的数字签名;完整性不是靠“一次哈希”完成的,而是一套闭环验证逻辑:
指定的数据,先做规范化(Canonicalization),消除空格、换行、属性顺序等无关差异;DigestValue比对——不一致说明该部分被篡改;SignedInfo块也做规范化+摘要,并用公钥解密SignatureValue,两者匹配才确认签名本身未被伪造;1000改成1001),所有相关摘要都会失效,验证直接失败。适应不同使用场景:
元素本身不参与签名(通过enveloped-signature变换自动排除);中,适合打包传输;光有流程不够,细节决定成败:
http://www.w3.org/2001/10/xml-exc-c14n#),否则两端计算的摘要永
远对不上;KeyInfo可信性检查——要校验证书链、有效期、吊销状态;基本上就这些。XML签名不是黑盒,它的力量来自可验证、可组合、可细粒度控制的设计,但每一步都得走稳。