파생 키 토큰
보안 컨텍스트를 설정한 후 및 보안이 설정된 후(인증됨) 파생 키를 사용하여 메시지 레벨 보호를 제공하기 위해 SOAP 메시지를 서명하고 암호화할 수 있습니다. 그런 다음 보안 컨텍스트에서 사용되는 각 키에 대해 파생 키를 사용할 수 있습니다.
애플리케이션 메시지 서명 및 암호화를 위한 보안 키에서 파생된 대칭 키를 사용하여 WS-SecureConversation(Web Services Secure Conversation)을 사용할 수 있습니다.
WS-SecureConversation을 사용하면 초기화 프로그램은 수신인이 포함된 WS-Trust(Web Services Trust) 프로토콜을 사용하여 보안 컨텍스트 토큰을 설정할 수 있습니다. 보안 컨텍스트 토큰은 공유 비밀을 내포하거나 포함합니다. 공통 시크릿을 사용하여 다른 키 파생이 정의될 수 있습니다. 그런 다음 보안 컨텍스트 토큰을 사용하여 <wsc:DerivedKeyToken> 토큰은 공유 시크릿, 키 또는 키 자료를 포함하는 모든 보안 토큰에서 키를 파생할 수 있습니다. 이 시크릿은 메시지를 서명 또는 암호화하는 데 사용되지만 보안 컨텍스트와만 연관된 메시지 서명 및 암호화에 파생 키가 사용되도록 권장됩니다.
<wsc:DerivedKeyToken> 요소의 구문
<wsc:DerivedKeyToken> 요소는 특정 참조에 대한 키가 함수에서 생성되며 명시적 보안 토큰, 시크릿 또는 키 자료가 자주 교환되지 않도록 합니다. 파생 키 토큰은 키 ID 또는 ID 이름을 사용하는 참조는 지원하지 않습니다. 모든 참조는 wsu:Id 속성의 ID를 사용하거나 URI 참조 <wsse:Reference>를 보안 컨텍스트 토큰의 <wsc:Identifier> 요소에 대해 사용해야 합니다.
<wsc:DerivedKeyToken> 요소의 구문은 다음과 같습니다.
<wsc:DerivedKeyToken wsu:Id="...">
<wsse:SecurityTokenReference>...</wsse:SecurityTokenReference>
<wsc:Label>...</wsc:Label>
<wsc:Nonce>...</wsc:Nonce>
</wsc:DerivedKeyToken>
http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/dk
난스(nonce)는 2진 옥텟 시퀀스로 처리됩니다(base64 인코딩 이전의 값). 난스(nonce) 시드는 필수이며 하나 이상의 통신 파티로 생성되어야 합니다. 별도의 난스(nonce)를 사용하고 요청 및 응답에 대한 서명 및 암호화에 독립적으로 생성된 키를 포함하십시오. 새 키는 각 메지지에 대해 파생되며 이는 이전 난스(nonce)가 재사용되면 안되는 것을 나타냅니다.
내재된 파생 키 생성
내재된 파생 키는 특정 유형의 파생 키 참조에 대한 단축 메커니즘을 정의합니다. 특히, @wsc:Nonce 속성은 WS-Security 스펙에 정의되는 보안 토큰 참조(STR)에 추가 가능합니다. 표시되는 경우 내재된 파생 키는 키가 참조된 토큰에는 없지만 대신 키 또는 참조된 토큰의 시크릿에서 파생된 키임을 표시합니다. <wsc:DerivedKeyToken> 요소에서 내재된 파생 키는 사용하지 않도록 권장됩니다.
다음 예는 두 개의 파생 키를 사용하여 전송되는 메시지를 설명하며 하나는 서명용이고 다른 하나는 암호화용입니다.
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu="..."
xmlns:xenc="..." xmlns:wsc="..." xmlns:ds="...">
<S11:Header>
<wsse:Security>
<wsc:SecurityContextToken wsu:Id="ctx2">
<wsc:Identifier>uuid:...UUID2...</wsc:Identifier>
</wsc:SecurityContextToken>
<wsc:DerivedKeyToken wsu:Id="dk2">
<wsse:SecurityTokenReference>
<wsse:Reference URI="#ctx2"/>
</wsse:SecurityTokenReference>
<wsc:Nonce>KJHFRE...</wsc:Nonce>
</wsc:DerivedKeyToken>
<xenc:ReferenceList>
...
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#dk2"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
...
</xenc:ReferenceList>
<wsc:SecurityContextToken wsu:Id="ctx1">
<wsc:Identifier>uuid:...UUID1...</wsc:Identifier>
</wsc:SecurityContextToken>
<wsc:DerivedKeyToken wsu:Id="dk1">
<wsse:SecurityTokenReference>
<wsse:Reference URI="#ctx1"/>
</wsse:SecurityTokenReference>
<wsc:Nonce>KJHFRE...</wsc:Nonce>
</wsc:DerivedKeyToken>
<xenc:ReferenceList>
...
<ds:KeyInfo>
<wsse:SecurityTokenReference>
<wsse:Reference URI="#dk1"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
...
</xenc:ReferenceList>
</wsse:Security>
...
</S11:Header>
<S11:Body>
...
</S11:Body>
</S11:Envelope>