SOAP Security Scenarios

Proposal 06 September 2001

This version:
...
Latest version:
...
Previous version:
/
Editors
Joseph Reagle <reagle@w3.org>
Authors
Contributors

Abstract

This document demonstrates the use of XML Encryption with SOAP.

Status of this document

This document is an informal proposal with no standing.

Table of Contents


1 Introduction

2 Encryption and SOAP

2.1. Nested SOAP messages

This scenario is akin to a cypherpunk anonymous remailer: I want to send Alice a secret message, but I don't want anyone to know I sent her that message and I know her email is being watched. What can I do? I know Bob can send Alice a message without much note, but I don't want him to read the secret message. So I encrypt my message to Alice in her key, and then I encrypt that and Alice's address to Bob. This can be chained such that I encrypt this and Bob's address in Carol's key, and send the message to her: For N hops, recipient [N-x] receives an encrypted message to send to [N-x-1].

In this example, I'm only sending my secret message to my recipient (Alice) through a single hop (Bob). I'm also sending some header information asking Bob to send the message within 5 days: he mi ght not send it out immediately to confound traffic analysis -- though this information should be encrypted just as well, but I want to use a env:Header.

Example 2.1.1
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> 
 <env:Header env:actor="http://example.org/xmlsec/Bob">
  <n:forward xmlns:n="http://example.org/xmlsec/forwarding">
   <n:window>120</n:window>
  </n:forward>
 </env:Header>
 <env:Body>
  <env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> 
   <env:Header env:actor="http://example.org/xmlsec/Alice"/>
   <env:Body>
     <secret xmlns="http://example.org/xmlsec/message">
      The black squirrel rises at dawn</secret>
   </env:Body>
  </env:Envelope>
 </env:Body>
</env:Envelope>
A SOAP Message containing a header for the intermediary, and a body for the recipient.

Example 2.1.2
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> 
 <env:Header env:actor="http://example.org/xmlsec/Bob">
  <n:forward xmlns:n="http://example.org/xmlsec/forwarding">
   <n:window>120</n:window>
  </n:forward>
 </env:Header>
 <env:Body>
  <env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> 
   <env:Header env:actor="http://example.org/xmlsec/Alice"/>
   <env:Body>
    <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
     Type="http://www.w3.org/2001/04/xmlenc#Element"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#3des-cbc"/>
      <ds:KeyInfo xmlns:ds='http://www.w3.org/2000/09/xmldsig#'>
        <ds:KeyName>Alice<ds:KeyName>
      </ds:KeyInfo>
      <CipherData><CipherValue>1DEADBEEF</CipherValue></CipherData>
    </EncryptedData>
   </env:Body>
  </env:Envelope>
 </env:Body>
</env:Envelope>

The secret to Alice has been encrypted in her key.

Example 2.1.3
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope"> 
 <env:Header env:actor="http://example.org/xmlsec/Bob">
  <n:forward xmlns:n="http://example.org/xmlsec/forwarding">
   <n:window>120</n:window>
  </n:forward>
 </env:Header>
 <env:Body>
   <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
    Type="http://www.w3.org/2001/04/xmlenc#Element"/>
     <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#3des-cbc"/>
     <ds:KeyInfo xmlns:ds='http://www.w3.org/2000/09/xmldsig#'>
       <ds:KeyName>Bob<ds:KeyName>
     </ds:KeyInfo>
     <CipherData><CipherValue>2DEADBEEF</CipherValue></CipherData>
   </EncryptedData>
 </env:Body>
</env:Envelope>

The SOAP Body to Bob is encrypted in his key.

Questions

  1. If I have multiple header and bodies, how do I show a correspondance, or is it ok to nest SOAP messages as I did here?
  2. Are actors supposed to be node unique, or abstract concepts (like next?)


Last Modified: $Date: 2001/07/09 13:39:15 $ UTC