【问题标题】:Purpose of KeyInfo in XML signatureXML 签名中 KeyInfo 的用途
【发布时间】:2018-05-05 10:51:38
【问题描述】:

我正在阅读来自 w3 page 的 XML 签名

据我了解,签署 XML:

  1. 创建要签名的 XML 数据的规范 XML。
  2. 使用<DigestMethod/> 中提到的算法创建规范化 XML 数据的散列(摘要)。哈希将进入<DigestValue>
  3. 上面的加密使用<SignatureMethod/> 中提到的算法。该算法将 Sender 的私钥作为输入。签名将进入<SignatureValue>

验证(在接收者端):

  1. <SignatureValue>的内容上使用发件人的公钥获取哈希。
  2. 使用算法<DigestMethod>计算数据的哈希值(xPath/引用数据可以在<Reference>中找到)
  3. 检查这是否与<DigestValue> 中的哈希匹配

我的问题:

  1. 我的理解正确吗?
  2. 鉴于发件人的公钥足以进行验证,<KeyInfo> 在验证签名中的作用是什么?

【问题讨论】:

  • 您好@SKG,如果任何答案有帮助或正确,您可以投票、接受或提供反馈。这不是强制性的,但有助于维护网站并获得更好的答案。

标签: xml digital-signature xml-signature


【解决方案1】:

据我了解,签署 XML:

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

  2. 使用 .哈希将进入

  3. 上面的加密使用了 .该算法将 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> 部分中,以准确了解哪个证书签署了文档(一个公钥可以包含在多个证书中)

【讨论】:

  • 感谢您的回答。我被其他一些事情困住了。
【解决方案2】:

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

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

如果KeyInfo 被省略,接收者应该能够根据应用程序上下文识别密钥。

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

【讨论】:

  • 不是公钥。它是接收者给出的某种签名证书。
猜你喜欢
  • 2017-05-24
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多