XML签名中KeyInfo的用途

时间:2018-05-05 10:51:38

标签: xml digital-signature xml-signature

我正在阅读w3 page

中的XML签名

根据我的理解,签署XML:

  1. 创建要签名的XML数据的规范XML。
  2. 使用<DigestValue>中提到的算法创建Canonicalised XML Data的哈希(摘要)。哈希将进入<SignatureMethod/>
  3. 上面的加密使用<SignatureValue>中提到的算法。该算法将Sender的私钥作为输入。签名将进入<SignatureValue>
  4. 验证(在接收方结束时):

    1. <Reference>的内容上使用发件人的公钥来获取哈希值。
    2. 使用算法<DigestMethod>
    3. 计算数据的哈希值(xPath / referece to data to data in <DigestValue>
    4. 检查这是否与<KeyInfo>
    5. 中的哈希匹配

      我的问题:

      1. 我的理解是否正确?
      2. 鉴于发件人的公钥足以验证,{{1}}在验证签名方面的作用是什么?

2 个答案:

答案 0 :(得分:1)

  

鉴于发件人的公钥足以验证,<KeyInfo>在验证签名方面的作用是什么?

钥匙必须在某个地方,对吧?那就是这个地方。它将包含用于验证签名的密钥。如规范中所述,可以跳过<KeyInfo>元素:

  

如果省略KeyInfo,则希望收件人能够根据应用程序上下文识别密钥。

因此,当<KeyInfo>丢失时,应用程序/用户必须从其他地方获取密钥。

答案 1 :(得分:1)

  

根据我的理解,签署XML:

     
      
  1. 创建要签名的XML数据的规范XML。

  2.   
  3. 使用中提到的算法创建Canonicalised XML Data的哈希(摘要)。哈希将进入内部

  4.   
  5. 上面的加密使用了中提到的算法。该算法将Sender的私钥作为输入。签名将进入内部

  6.   

这是不正确的,请参阅您指向的链接的 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>的引用,以确切知道对文档签名的证书(公钥可以包含在多个证书中)