【问题标题】:SAML Token: Why use multiple Hash/Digest Algorithms: sha256 and sha1?SAML 令牌:为什么使用多个哈希/摘要算法:sha256 和 sha1?
【发布时间】:2017-12-04 11:25:47
【问题描述】:

我正在阅读此IBM Developer Works SAML article,您可以在其中看到以下两种不同的签名/摘要算法:sha1 和 sha256。我很好奇为什么两者都被列出以及通过哪种方法签名的内容。那篇文章说,“[IdP] 将散列算法应用于 Assertion 元素的内容。”那似乎是sha256,但是为什么要提到DigestMethod sha1呢?如果这两种方法都在散列相同的内容,那么当 sha1 是 DigestMethod 时,服务提供商 (SP) 如何知道使用 sha256 验证签名?

这是StackOverflow post的正确解释吗?

...DigestMethod Algorithm 元素引用其父 Reference 元素。您可以为多个参考元素使用不同的 DigestMethod 算法,并再次使用不同的 SignatureMethod 算法对所有参考进行散列和签名。

<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
      ID="Assertion1487321564650" IssueInstant="2017-02-17T08:52:44.650Z"
      Version="2.0"> 
    <saml2:Issuer>samlsso.sample.net</saml2:Issuer> 
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
      <ds:SignedInfo> 
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
        <ds:SignatureMethod
          Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> 
        <ds:Reference URI="#Assertion1487321564650"> 
          <ds:Transforms> 
            <ds:Transform
              Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> 
           </ds:Transforms> 
          <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
          <ds:DigestValue>nKYxEAMG1LY4H+LqR22KJ/vqyb8=</ds:DigestValue> 
        </ds:Reference> 
      </ds:SignedInfo> 
      <ds:SignatureValue> 
m5V44OFKU1PMdibileobvVVA8NVZMKRmKAauOin2f+Kr1WQ   [...]   Z/5JcU/qw== 
      </ds:SignatureValue> 
      <ds:KeyInfo> 
        <ds:X509Data> 
          <ds:X509Certificate> 
MIIDRzCCAi+gAwIBAgIEKa/crTANBgkq

【问题讨论】:

    标签: digital-signature saml-2.0


    【解决方案1】:

    XML 元素 SignedInfo 是使用私钥和 SHA-256 签名的内容。未显示实际的签名算法,但如果您查看 rsa-sha256,您会发现它使用 PKCS#1 v1.5 签名方案,而不是较新的 PSS。

    这个SignedInfo 包含对签名数据的引用、转换(规范化)和签名数据的签名值。这不是常规签名生成中数据的一部分;只能包含一个哈希值。所以元信息也被签名了。 SignedInfo 中可以有多个引用和不同类型的转换。

    当然,引用本身必须与数据的哈希一起签名;否则你可以例如在两个数据块被散列时切换数据。

    但是,您仍应验证哈希是否覆盖了应用程序中的正确数据。否则,您将验证 XML 中的某些数据,同时处理完全不同的数据。这当然应该由 SAML 实现来执行。

    更多信息当然可以从the XML-digsig standard获取。


    是的,链接到 StackOverflow 的帖子是正确的。


    我不会为使用 SHA-1 计算数据的哈希值而感到遗憾。 SHA-1 已损坏,不应再使用;当然不是用于数据散列或签名生成。

    【讨论】:

      猜你喜欢
      • 2020-11-05
      • 2012-03-28
      • 2012-02-09
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多