暗号化および署名への派生キー・トークンの使用
InterSystems IRIS は、WS-SecureConversation 1.4 で定義されているように <DerivedKeyToken> 要素をサポートします。前の 3 つのトピックで説明した方法の代替として、暗号化および署名に <DerivedKeyToken> 要素を作成して使用できます。
通常、暗号化と署名の両方を実行します。このトピックでは、説明を簡単にするために、これらのタスクを別々に説明します。暗号化と署名の組み合わせに関する詳細は、"暗号化と署名の組み合わせ" を参照してください。
概要
<DerivedKeyToken> 要素は、同じ対称鍵を生成するために、送信者と受信者が独立して使用できる情報を保持するためのものです。両者は、この対称鍵を使用して、SOAP メッセージの指定の部分の暗号化、署名、または両方のアクションを実行できます。
<DerivedKeyToken> を生成して使用するには、以下の手順を実行します。
-
一時的に使用する対称鍵を生成します。
-
メッセージの送信先のエンティティの公開鍵を使用して、対称鍵を暗号化します。これにより、<EncryptedKey> 要素が作成されます。
公開鍵は、そのエンティティからの要求メッセージに含まれている X.509 証明書から取得できます。または、事前に取得することができます。
-
P_SHA1 アルゴリズムを使用して、元の対称鍵から新しい対称鍵を計算します。
これにより、<EncryptedKey> 要素を参照する <DerivedKeyToken> 要素が作成されます。
-
新しい対称鍵を使用して暗号化または署名を行います。
分析するデータを最小化するために、これらのアクティビティには異なる対称鍵を使用することをお勧めします。
-
<EncryptedKey> 要素と <DerivedKeyToken> をメッセージに含めます。
InterSystems IRIS では、ある派生キー・トークンが別の派生キー・トークンに基づくこともできます。
<DerivedKeyToken> の作成と追加
参考として、このセクションでは、後述の各セクションで必要な一般的なアクティビティについて説明します。また、<DerivedKeyToken> を作成し、これを WS-Security ヘッダに追加する方法について説明します。以下の手順または各サブセクションで説明するバリエーションを使用できます。
-
必要に応じて、%soap.inc インクルード・ファイルを組み込みます。このファイルには、使用する可能性のあるマクロが定義されています。
-
メッセージの送信先のエンティティの資格情報セットを取得します。"プログラムによる資格情報セットの取得" を参照してください。
以下はその例です。
Set x509alias = "servernopassword" Set credset = ##class(%SYS.X509Credentials).GetByAlias(x509alias)
-
資格情報セットに基づいて、暗号化キーを作成します。そのためには、%XML.Security.EncryptedKeyOpens in a new tab の CreateX509() クラス・メソッドを呼び出し、2 番目の引数に $$$SOAPWSEncryptNone を指定します。以下はその例です。
set enckey=##class(%XML.Security.EncryptedKey).CreateX509(credset,$$$SOAPWSEncryptNone)
このメソッドは、対称鍵を生成し、<EncryptedKey> ヘッダ要素を表す %XML.Security.EncryptedKeyOpens in a new tab のインスタンスを返します。このヘッダ要素には、指定された資格情報セット内にある公開鍵で暗号化された対称鍵が含まれます。
派生キーの基盤として使用する暗号化キーを作成する場合、常に $$$SOAPWSEncryptNone または "" を CreateX509() の 2 番目の引数として指定します。
-
必要に応じて、別のアルゴリズムを使用するように暗号化キーのインスタンスを変更します。"ブロック暗号化アルゴリズムの指定" および "鍵転送アルゴリズムの指定" を参照してください。
-
WS-Security ヘッダ要素に <EncryptedKey> 要素を追加します。そのためには、Web クライアントまたは Web サービスの SecurityOut プロパティの AddSecurityElement() メソッドを呼び出します。追加する要素について、%XML.Security.EncryptedKeyOpens in a new tab のインスタンスを指定します。
以下はその例です。
do ..SecurityOut.AddSecurityElement(enckey)
-
暗号化キーに基づいて、派生キー・トークンを作成します。これには、%SOAP.WSSC.DerivedKeyTokenOpens in a new tab の Create() メソッドを呼び出します。このメソッドは、以下の 2 つの引数を取ります。
-
基盤として使用する暗号化キー。
-
派生キーがその暗号化キーを参照する方法を指定する参照オプション。この基本的な手順では、$$$SOAPWSReferenceEncryptedKey を使用します。
以下はその例です。
set refopt=$$$SOAPWSReferenceEncryptedKey set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(enckey,refopt)
このメソッドは、<DerivedKeyToken> 要素を表す %SOAP.WSSC.DerivedKeyTokenOpens in a new tab のインスタンスを返します。
-
-
WS-Security ヘッダ要素に <DerivedKeyToken> 要素を追加します。そのためには、Web クライアントまたは Web サービスの SecurityOut プロパティの AddSecurityElement() メソッドを呼び出します。追加する要素に対して、%SOAP.WSSC.DerivedKeyTokenOpens in a new tab のインスタンスを指定します。
以下はその例です。
do ..SecurityOut.AddSecurityElement(dkenc)
-
SOAP メッセージを送信します。"セキュリティ・ヘッダ要素の追加" の一般的な手順を参照してください。
バリエーション :暗黙的な <DerivedKeyToken> の作成
暗黙的な <DerivedKeyToken> も作成できます。これは、<DerivedKeyToken> を参照する簡単な方法です。この方法は、以下のようになります。
-
<DerivedKeyToken> は、メッセージに含まれません。
-
<DerivedKeyToken> を使用する要素内において、<SecurityTokenReference> 要素は、Nonce 属性を指定します。この属性には、<DerivedKeyToken> に使用される Nonce の値が含まれます。これは、派生キー・トークンが暗黙的に使用され、参照されたトークンから派生していることをメッセージの受信者に示します。
暗黙的 <DerivedKeyToken> を作成するには、前述した一般的な手順を使用します。ただし、2 つ変更点があります。
-
派生キー・トークンのインスタンスに対して、Implied プロパティを 1 に設定します。
以下はその例です。
set dkt.Implied=1
-
WS-Security ヘッダ要素に <DerivedKeyToken> 要素を追加しないでください。
<DerivedKeyToken> がメッセージに含まれている場合とまったく同じようにこのトークンを使用します。
バリエーション :<EncryptedKey> の SHA1 ハッシュの参照
このバリエーション (Web サービス上でのみ使用可能) では、送信者は、メッセージに <EncryptedKey> 要素を含めませんが、代わりにこのキーの SHA1 ハッシュを参照します。Web サービスは、着信メッセージで受信した <EncryptedKey> 要素を参照できます。
前述の一般的な手順を使用しますが、以下の変更点があります。
-
手順 2–4 はオプションです。
-
手順 5 を省略します (<EncryptedKey> は追加しないでください)。
-
手順 6 で、Create() を使用して派生キー・トークンを作成するとき、クライアントから受信した <EncryptedKey> を使用するために、最初の引数を省略します。または、<EncryptedKey> を作成済みの場合、これを最初の引数として使用します。
2 番目の引数に $$$SOAPWSReferenceEncryptedKeySHA1 を指定します。
例えば、Web クライアントから受信したメッセージの最初の <EncryptedKey> 要素を使用するには、以下のようにします。
set refopt=$$$SOAPWSReferenceEncryptedKeySHA1 set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(,refopt)
暗号化への <DerivedKeyToken> の使用
暗号化に <DerivedKeyToken> を使用するには、以下の手順を実行します。
-
1 つ以上のセキュリティ・ヘッダ要素を暗号化する場合、そのセキュリティ・ヘッダ要素を作成します。
-
"<DerivedKeyToken> の作成と追加" の説明に従って、<DerivedKeyToken> を作成し、これを WS-Security ヘッダに追加します。
この手順では、<DerivedKeyToken> の基盤になっている <EncryptedKey> 要素も作成および追加されることに注意してください。
-
暗号化する各要素に対して、その要素に基づいて <EncryptedData> 要素を作成します。そのためには、%XML.Security.EncryptedDataOpens in a new tab の Create() クラス・メソッドを呼び出します。この手順では、以下の引数を指定します。
-
派生キー・トークン。
-
暗号化するアイテム。本文を暗号化するには、この引数を省略します。
-
<EncryptedData> 要素が <DerivedKeyToken> を参照する方法を指定するマクロ。このシナリオで現在サポートされている値は $$$SOAPWSReferenceDerivedKey のみです。
例えば、<UsernameToken> を暗号化するには、以下のようにします。
set refopt=$$$SOAPWSReferenceDerivedKey set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,refopt)
または、本文を暗号化するには、以下のようにします。
set refopt=$$$SOAPWSReferenceDerivedKey set encryptedData=##class(%XML.Security.EncryptedData).Create(dkenc,,refopt)
-
-
<ReferenceList> 要素を作成します。そのためには、%XML.Security.ReferenceListOpens in a new tab クラスの %New() メソッドを呼び出します。以下はその例です。
set reflist=##class(%XML.Security.ReferenceList).%New()
-
この <ReferenceList> 内で、<EncryptedData> 要素を指す <ReferenceList> を作成します。そのためには、各 <EncryptedData> に対して、以下の手順を実行します。
-
%XML.Security.DataReferenceOpens in a new tab の Create() クラス・メソッドを呼び出し、暗号化されたデータのインスタンスを引数として指定します。このメソッドは %XML.Security.DataReferenceOpens in a new tab のインスタンスを返します。
-
参照リストのインスタンスの AddReference() メソッドを呼び出し、データ参照のインスタンスを引数として指定します。
以下はその例です。
set dataref=##class(%XML.Security.DataReference).Create(encdata) do reflist.AddReference(dataref) set dataref2=##class(%XML.Security.DataReference).Create(encdata2) do reflist.AddReference(dataref2)
-
-
WS-Security ヘッダ要素に <ReferenceList> 要素を追加します。そのためには、Web クライアントまたは Web サービスの SecurityOut プロパティの AddSecurityElement() メソッドを呼び出します。追加する要素に対して、参照リストのインスタンスを指定します。
以下はその例です。
do ..SecurityOut.AddSecurityElement(reflist)
-
セキュリティ・ヘッダ要素を暗号化した場合、これらを WS-Security ヘッダ要素に追加します。そのためには、Web クライアントまたは Web サービスの SecurityOut プロパティの AddSecurityElement() メソッドを呼び出します。この場合、以下の 2 つの引数が必要です。
-
セキュリティ・ヘッダ要素 (この要素から生成した %XML.Security.EncryptedDataOpens in a new tab ではありません)。
-
参照リストのインスタンス。2 番目の引数は、最初の引数が指定するアイテムの配置場所を指定します。引数が A,B の場合、InterSystems IRIS は、A が B の後であることを確認します。これを指定して、受信側が参照リストを最初に処理し、これに依存する暗号化されたセキュリティ・ヘッダ要素を後で処理するようにします。
以下はその例です。
do client.SecurityOut.AddSecurityElement(userToken,reflist)
SOAP 本文のみを暗号化した場合、<EncryptedData> 要素が <Body> の子として自動的に含まれます。
-
-
SOAP メッセージを送信します。"セキュリティ・ヘッダ要素の追加" の一般的な手順を参照してください。
例えば、以下のクライアント側のコードは、SOAP 本文と <UsernameToken> の両方を暗号化します。
// Create UsernameToken
set userToken=##class(%SOAP.Security.UsernameToken).Create("_SYSTEM","SYS")
// get credentials for encryption
set cred = ##class(%SYS.X509Credentials).GetByAlias("servercred")
// get EncryptedKey element to encrypt <UsernameToken)
// $$$SOAPWSEncryptNone means that this key does not encrypt the body
set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred,$$$SOAPWSEncryptNone)
//add to WS-Security Header
do client.SecurityOut.AddSecurityElement(enckey)
// get derived key to use for encryption
// second argument specifies how the derived key
// refers to the key on which it is based
set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(enckey,
$$$SOAPWSReferenceEncryptedKey)
//add to WS-Security Header
do client.SecurityOut.AddSecurityElement(dkenc)
// create <EncryptedData> element to contain <UserToken>
set encdata=##class(%XML.Security.EncryptedData).Create(dkenc,userToken,
$$$SOAPWSReferenceDerivedKey)
// create <EncryptedData> element to contain SOAP body
set encdata2=##class(%XML.Security.EncryptedData).Create(dkenc,"",
$$$SOAPWSReferenceDerivedKey)
// create <ReferenceList> with <DataReference> elements that
// point to these two <EncryptedData> elements
set reflist=##class(%XML.Security.ReferenceList).%New()
set dataref=##class(%XML.Security.DataReference).Create(encdata)
do reflist.AddReference(dataref)
set dataref2=##class(%XML.Security.DataReference).Create(encdata2)
do reflist.AddReference(dataref2)
// add <ReferenceList> to WS-Security header
do client.SecurityOut.AddSecurityElement(reflist)
// add encrypted <UserName> to security header;
// 2nd argument specifies position
do client.SecurityOut.AddSecurityElement(userToken,reflist)
// encrypted SOAP body is handled automatically
このクライアントは、次のようなメッセージを送信します。
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope [parts omitted]>
<SOAP-ENV:Header>
<Security xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="Id-658202BF-239A-4A8C-A100-BB25579F366B">
<EncryptionMethod Algorithm="[parts omitted]#rsa-oaep-mgf1p">
<DigestMethod xmlns="http://www.w3.org/2000/09/xmldsig#"
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1">
</DigestMethod>
</EncryptionMethod>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<KeyIdentifier EncodingType="[parts omitted]#Base64Binary"
ValueType="[parts omitted]#ThumbprintSHA1">5afOHv1w7WSXwDyz6F3WdM1r6cM=
</KeyIdentifier>
</SecurityTokenReference>
</KeyInfo>
<CipherData>
<CipherValue>tFeKrZKw[parts omitted]r+bx7KQ==</CipherValue>
</CipherData>
</EncryptedKey>
<DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512"
xmlns:wsc="[parts omitted]ws-secureconversation/200512"
wsu:Id="Enc-943C6673-E3F3-48E4-AA24-A7F82CCF6511">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Reference URI="#Id-658202BF-239A-4A8C-A100-BB25579F366B"></Reference>
</SecurityTokenReference>
<Nonce>GbjRvVNrPtHs0zo/w9Ne0w==</Nonce>
</DerivedKeyToken>
<ReferenceList xmlns="http://www.w3.org/2001/04/xmlenc#">
<DataReference URI="#Enc-358FB189-81B3-465D-AFEC-BC28A92B179C"></DataReference>
<DataReference URI="#Enc-9EF5CCE4-CF43-407F-921D-931B5159672D"></DataReference>
</ReferenceList>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="Enc-358FB189-81B3-465D-AFEC-BC28A92B179C"
Type="http://www.w3.org/2001/04/xmlenc#Element">
<EncryptionMethod Algorithm="[parts omitted]#aes256-cbc"></EncryptionMethod>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Reference URI="#Enc-943C6673-E3F3-48E4-AA24-A7F82CCF6511"></Reference>
</SecurityTokenReference>
</KeyInfo>
<CipherData>
<CipherValue>e4//6aWGqo1dIQ7ZAF[parts omitted]KZcj99N78A==</CipherValue>
</CipherData>
</EncryptedData>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="Enc-9EF5CCE4-CF43-407F-921D-931B5159672D"
Type="http://www.w3.org/2001/04/xmlenc#Content">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc">
</EncryptionMethod>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Reference URI="#Enc-943C6673-E3F3-48E4-AA24-A7F82CCF6511"></Reference>
</SecurityTokenReference>
</KeyInfo>
<CipherData>
<CipherValue>Q3XxuNjSan[parts omitted]x9AD7brM4</CipherValue>
</CipherData>
</EncryptedData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
別の例として、以下の Web サービスは、着信メッセージで <EncryptedKey> を受信し、これを使用して、応答の部分を暗号化するために使用する <DerivedKeyToken> を生成します。
// create <DerivedKeyToken> based on first <EncryptedKey> in inbound message;
// refer to it with SHA1 thumbprint
set refopt=$$$SOAPWSReferenceEncryptedKeySHA1
set dkenc=##class(%SOAP.WSSC.DerivedKeyToken).Create(,refopt)
do ..SecurityOut.AddSecurityElement(dkenc)
// create <EncryptedData> element to contain SOAP body
set encdata=##class(%XML.Security.EncryptedData).Create(dkenc,"",
$$$SOAPWSReferenceDerivedKey)
// create <ReferenceList> with <DataReference> elements that
// point to the <EncryptedData> elements
set reflist=##class(%XML.Security.ReferenceList).%New()
set dataref=##class(%XML.Security.DataReference).Create(encdata)
do reflist.AddReference(dataref)
// add <ReferenceList> to WS-Security header
do ..SecurityOut.AddSecurityElement(reflist)
この Web サービスは、次のようなメッセージを送信します。
<SOAP-ENV:Envelope [parts omitted]>
<SOAP-ENV:Header>
<Security xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512"
xmlns:wsc="[parts omitted]ws-secureconversation/200512"
wsu:Id="Enc-D69085A9-9608-472D-85F3-44031586AB35">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd"
s01:TokenType="[parts omitted]#EncryptedKey"
xmlns:s01="h[parts omitted]oasis-wss-wssecurity-secext-1.1.xsd">
<KeyIdentifier EncodingType="[parts omitted]#Base64Binary"
[parts omitted]#EncryptedKeySHA1">
U8CEWXdUPsIk/r8JT+2KdwU/gSw=
</KeyIdentifier>
</SecurityTokenReference>
<Nonce>nJWyIJUcXXLd4k1tbNg10w==</Nonce>
</DerivedKeyToken>
<ReferenceList xmlns="http://www.w3.org/2001/04/xmlenc#">
<DataReference URI="#Enc-0FF09175-B594-4198-9850-57D40EB66DC3"></DataReference>
</ReferenceList>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="Enc-0FF09175-B594-4198-9850-57D40EB66DC3"
Type="http://www.w3.org/2001/04/xmlenc#Content">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc">
</EncryptionMethod>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<SecurityTokenReference xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Reference URI="#Enc-D69085A9-9608-472D-85F3-44031586AB35"></Reference>
</SecurityTokenReference>
</KeyInfo>
<CipherData>
<CipherValue>NzI94WnuQU4uBO[parts omitted]xHZpJSA==</CipherValue>
</CipherData>
</EncryptedData>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
署名への <DerivedKeyToken> の使用
署名に <DerivedKeyToken> を使用するには、以下の手順を実行します。
-
任意のセキュリティ・ヘッダ要素に署名する場合、そのセキュリティ・ヘッダ要素を作成します。
-
"<DerivedKeyToken> の作成と追加" の説明に従って、<DerivedKeyToken> を作成し、これを WS-Security ヘッダに追加します。
この手順では、<DerivedKeyToken> の基盤になっている <EncryptedKey> 要素も作成および追加されることに注意してください。
-
派生キー・トークンに基づいて、<Signature> 要素を作成します。そのためには、%XML.Security.SignatureOpens in a new tab の Create() クラス・メソッドを呼び出します。以下はその例です。
set dsig=##class(%XML.Security.Signature).Create(dkt)
このメソッドは、<Signature> ヘッダ要素を表す %XML.Security.SignatureOpens in a new tab のインスタンスを返します。シグニチャ値は、HMAC-SHA1 ダイジェスト・アルゴリズムを使用し、<DerivedKeyToken> によって暗黙的に使用される対称鍵を使用して計算されます。
<Signature> 要素は、メッセージの既定の部分に適用されます。また、異なる部分を指定できます。
-
WS-Security ヘッダ要素にデジタル・シグニチャを追加します。そのためには、Web クライアントまたは Web サービスの SecurityOut プロパティの AddSecurityElement() メソッドを呼び出します。引数に、前の手順で作成したシグニチャ・オブジェクトを指定します。以下はその例です。
do ..SecurityOut.AddSecurityElement(dsig)
例えば、以下のクライアント側のコードは、SOAP 本文に署名します。
// get credentials
set cred = ##class(%SYS.X509Credentials).GetByAlias("servercred")
// get EncryptedKey element that does not encrypt the body
set enckey=##class(%XML.Security.EncryptedKey).CreateX509(cred,$$$SOAPWSEncryptNone)
//add to WS-Security Header
do client.SecurityOut.AddSecurityElement(enckey)
// get derived key & add to header
set dksig=##class(%SOAP.WSSC.DerivedKeyToken).Create(enckey,$$$SOAPWSReferenceEncryptedKey)
//add to WS-Security Header
do client.SecurityOut.AddSecurityElement(dksig)
// create a signature and add it to the security header
set sig=##class(%XML.Security.Signature).Create(dksig,,$$$SOAPWSReferenceDerivedKey)
do client.SecurityOut.AddSecurityElement(sig)
このクライアントは、次のようなメッセージを送信します。
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope [parts omitted]>
<SOAP-ENV:Header>
<Security xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"
Id="Id-6188CA15-22BF-41EB-98B1-C86D4B242C9F">
<EncryptionMethod Algorithm="[parts omitted]#rsa-oaep-mgf1p">
<DigestMethod xmlns="http://www.w3.org/2000/09/xmldsig#"
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod>
</EncryptionMethod>
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<SecurityTokenReference
xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<KeyIdentifier EncodingType="[parts omitted]#Base64Binary"
ValueType="[parts omitted]#ThumbprintSHA1">5afOHv1w7WSXwDyz6F3WdM1r6cM=
</KeyIdentifier>
</SecurityTokenReference>
</KeyInfo>
<CipherData>
<CipherValue>VKyyi[parts omitted]gMVfayVYxA==</CipherValue>
</CipherData>
</EncryptedKey>
<DerivedKeyToken xmlns="[parts omitted]ws-secureconversation/200512"
xmlns:wsc=[parts omitted]ws-secureconversation/200512"
wsu:Id="Enc-BACCE807-DB34-46AB-A9B8-42D05D0D1FFD">
<SecurityTokenReference
xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Reference URI="#Id-6188CA15-22BF-41EB-98B1-C86D4B242C9F"></Reference>
</SecurityTokenReference>
<Offset>0</Offset>
<Length>24</Length>
<Nonce>IgSfZJ1jje710zadbPXf1Q==</Nonce>
</DerivedKeyToken>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
</CanonicalizationMethod>
<SignatureMethod Algorithm="[parts omitted]#hmac-sha1"></SignatureMethod>
<Reference URI="#Body-B08978B3-8BE8-4365-A352-1934D7C33D2D">
<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>56gxpK1mSVW7DN5LUYRvqDbMt0s=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>aY4dKX17zDS2SF+BXlVTHcEituc=</SignatureValue>
<KeyInfo>
<SecurityTokenReference
xmlns="[parts omitted]oasis-200401-wss-wssecurity-secext-1.0.xsd">
<Reference URI="#Enc-BACCE807-DB34-46AB-A9B8-42D05D0D1FFD"></Reference>
</SecurityTokenReference>
</KeyInfo>
</Signature>
</Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body wsu:Id="Body-B08978B3-8BE8-4365-A352-1934D7C33D2D">
[omitted]
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>