我正在阅读w3 page
中的XML签名根据我的理解,签署XML:
<DigestValue>
中提到的算法创建Canonicalised XML Data的哈希(摘要)。哈希将进入<SignatureMethod/>
<SignatureValue>
中提到的算法。该算法将Sender的私钥作为输入。签名将进入<SignatureValue>
验证(在接收方结束时):
<Reference>
的内容上使用发件人的公钥来获取哈希值。<DigestMethod>
<DigestValue>
)
<KeyInfo>
我的问题:
答案 0 :(得分:1)
鉴于发件人的公钥足以验证,
<KeyInfo>
在验证签名方面的作用是什么?
钥匙必须在某个地方,对吧?那就是这个地方。它将包含用于验证签名的密钥。如规范中所述,可以跳过<KeyInfo>
元素:
如果省略
KeyInfo
,则希望收件人能够根据应用程序上下文识别密钥。
因此,当<KeyInfo>
丢失时,应用程序/用户必须从其他地方获取密钥。
答案 1 :(得分:1)
根据我的理解,签署XML:
创建要签名的XML数据的规范XML。
使用中提到的算法创建Canonicalised XML Data的哈希(摘要)。哈希将进入内部
- 醇>
上面的加密使用了中提到的算法。该算法将Sender的私钥作为输入。签名将进入内部
这是不正确的,请参阅您指向的链接的 3.1.2签名生成部分。
<SignatureValue>
是根据<SignedInfo>
节点的规范化内容计算得出的,其中包括<SignatureMethod>
,<CanonicalizationMethod>
和参考。 <Reference>
元素包含<DigestMethod>
和<DigestValue>
文档未加密,使用私钥进行签名。它涉及类似的加密操作,但填充机制不同。见https://crypto.stackexchange.com/questions/15997/is-rsa-encryption-with-a-private-key-the-same-as-signature-generation
鉴于发件人的公钥足以验证,
<KeyInfo>
在验证签名方面的作用是什么?
它包含与用于签署文档的私钥对应的签名证书。
验证方可以使用签名者的公钥验证签名,而无需从<KeyInfo>
元素中提取签名,但这意味着接收者已经存储了每个签名者的公钥。验证方通常拥有可信任的证书颁发机构列表,并检查签名证书是否已由其中一个机构颁发。
请注意,<KeyInfo>
部分中还包含对<SignedInfo>
的引用,以确切知道对文档签名的证书(公钥可以包含在多个证书中)