SAML令牌:为什么使用多个哈希/消化算法:SHA256和SHA1



我正在阅读此IBM开发人员作品SAML文章,您可以在下面看到两种不同的签名/消化算法:SHA1和SHA256。我很好奇为什么两者都被列出,以及哪种方法正在签名。该文章说:" [IDP]将哈希算法应用于断言元素的内容。"这似乎是SHA256,但是为什么要提到DigestMethod Sha1?如果这两种方法都在散列相同的内容,那么服务提供商(SP)如何使用SHA1是DigestMethod时使用SHA256验证签名的?

此stackoverflow发布了正确的解释吗?

... 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

XML元素SignedInfo是使用私钥和SHA-256签名的。未显示的是实际签名算法,但是如果查找RSA-SHA256,则会发现它使用PKCS#1 V1.5签名方案,而不是新的PSS。

SignedInfo包含对签名数据,转换(规范化)和签名数据的签名值的引用。这不是常规签名生成中数据的一部分;只能包含哈希值。因此,也签署了元信息。SignedInfo中可以有多种参考和不同的转换。

当然,参考文献本身必须与数据上的哈希签名;否则,例如,当两个数据块被哈希进行时,您可以将数据切换。

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

当然,可以从XML二核标准中检索更多信息。


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


我不会为使用SHA-1计算数据上的哈希(Hash)而感到遗憾。SHA-1已被打破,不应再使用;当然不是用于数据哈希或签名生成。

最新更新