文章
· 十月 22 阅读大约需 1 分钟

第五十三章 安全元素的详细信息 - Signature 详情

第五十三章 安全元素的详细信息 - 详情

<Signature>的目的是携带可由消息接收者验证的数字签名。可以使用数字签名来检测消息更改,或者只是验证消息的某个部分是否确实由列出的实体生成。与传统的手写签名一样,数字签名是对文档的附加,只能由文档的创建者创建,并且不易伪造。

以下显示了部分示例:

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
   <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
      </CanonicalizationMethod>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256"></SignatureMethod>
      <Reference URI="#Timestamp-48CEE53E-E6C3-456C-9214-B7D533B2663F">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>waSMFeYMruQn9XHx85HqunhMGIA=</DigestValue>
      </Reference>
      <Reference URI="#Body-73F08A5C-0FFD-4FE9-AC15-254423DBA6A2">
         <Transforms>
            <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform>
         </Transforms>
         <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
         <DigestValue>wDCqAzy5bLKKF+Rt0+YV/gxTQws=</DigestValue>
      </Reference>
   </SignedInfo>
   <SignatureValue>j6vtht/[parts omitted]trCQ==</SignatureValue>
   <KeyInfo>
      <SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <Reference URI="#SecurityToken-411A262D-990E-49F3-8D12-7D7E56E15081" 
                    ValueType="[parts omitted]oasis-200401-wss-x509-token-profile-1.0#X509v3">
         </Reference>
      </SecurityTokenReference>
   </KeyInfo>
</Signature>

详情

该元素的各部分如下:

  • <SignedInfo> 指示消息中由此签名签名的部分,并指示这些部分在签名之前是如何处理的。

IRIS 中,可以指定摘要方法(由 <DigestMethod>Algorithm 属性显示)。请参阅指定摘要方法。

还可以指定用于计算签名的算法(由 <SignatureMethod>Algorithm 属性显示)。请参阅指定签名方法。

  • <SignatureValue 保存实际签名。在本例中,签名为 6vtht/[parts divided]trCQ==

该值是通过加密签名部分的连接摘要计算得出的。加密由发送者的私钥执行。

  • <KeyInfo> 标识用于创建签名的密钥。在 IRIS 中,<KeyInfo> 包含 <SecurityTokenReference>,它具有以下几种形式之一:
    • WS-Security 标头中前面的 <BinarySecurityToken> 的引用,如上例所示。在本例中,使用相应的私钥来创建签名。
    • 用于识别证书的信息,该证书可能是消息接收者先前收到并存储的。例如, <SecurityTokenReference> 可以包含证书的 SHA1 指纹,如下所示:
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
   <KeyIdentifier EncodingType="[parts omitted]#Base64Binary" 
                  ValueType="[parts omitted]#ThumbprintSHA1">
      maedm8CNoh4zH8SMoF+3xV1MYtc=
   </KeyIdentifier>
</SecurityTokenReference>

与前一种情况一样,使用相应的私钥来创建签名。

- 对 WS-Security 标头中先前的 <DerivedKeyToken>  的引用。例如:
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
   <Reference URI="#Enc-BACCE807-DB34-46AB-A9B8-42D05D0D1FFD"></Reference>
</SecurityTokenReference>

在这种情况下,签名是由该令牌指示的对称密钥创建的。

- 对隐含的 <DerivedKeyToken> 的引用。例如:
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd" 
              s01:Nonce="mMDk0zn8V7WTsFaIjUJ7zg==" 
              xmlns:s01="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512">
   <Reference URI="#Id-93F97220-568E-47FC-B3E1-A2CF3F70B29B"></Reference>
</SecurityTokenReference>

在这种情况下,<Reference> 中的 URI 属性指向用于生成 <DerivedKeyToken>,的 <EncryptedKey>元素,而 Nonce 属性指示所使用的 nonce 值。

与前一种情况一样,派生密钥用于加密数据。

消息中的位置

如果有的话,<Signature> 元素应包含在<Security>中,位于其使用的 <BinarySecurityToken> or <DerivedKeyToken> 之后。

讨论 (0)1
登录或注册以继续