Stanza encryption

This Page is NOT about XEP-0200: Stanza Encryption, but instead a place to discuss a new solution.

Motivation
So, lets finally do it and solve Stanza Encryption!

We probably agree that FULL stanza encryption is not really a good idea, since there is always information that needs to be accessible to the server (processing hints, delay tags, recipient and sender addresses (duh). So a better approach would be partial stanza encryption, which only encrypts parts of the stanza. You can imagine this as kind of an envelope element in which sensible extension elements are added and which is afterwards encrypted and appended to the message.

If we want to create a specification that follows this idea, we may want to take inspiration from XEP-0373: OpenPGP for XMPP, which uses exactly that mechanism. So a first step to get started would be to find a way to move OX's OpenPGP Content Elements out of OX into a new XEP which generalizes this idea for arbitrary E2EE encryption methods.

Also we need to specify a white-/blacklist which dictates which elements (don't) belong into the content element / message to prevent implementation mistakes.

Most importantly though we need experience in this field in order to get a better understanding of what pitfalls exist, so lets JUST DO IT!

Use Cases

 * Clients exchange messages that contain sensitive information with (multiple) other clients.
 * Clients might want to encrypt IQs between two (online) devices. Since there may be more than one consecutive IQ being exchanged within the same context, it might be worth to think about possibilities to establish some sort of longer standing session to reduce encryption overhead. This may be out of the scope of this document though.

Similar Proposals
There are some protocols that do slightly different approaches to the same problem.


 * XEP-0200: Stanza Encryption


 * XEP-0246: End-to-End XML Streams


 * XEP-XXXX: XMPP Transport Layer Security

Encryption Protocols
OpenPGP for XMPP (OX) comes with an enveloping mechanism.
 * XEP-0373: OpenPGP for XMPP


 * XEP-0384: OMEMO Encryption


 * XEP-0364: Current Off-The-Record Messaging Use


 * XEP-0116: Encrypted Session Negotiation


 * Simple Encryption for XMPP

Elements
This element is used to 'bundle' together the parts of the message that need to be protected.
 * Envelope Element:

 

* timestamp, padding etc.
 * CryptoSpecific Elements:

Whitelisting / Blacklisting
Its up to the implementation what to put into the envelope. An implementation should put all the stuff that the server usually ignores in the envelope.

Whitelist for decryption Use Registry for this

Things to think about: Delay Tags vs. timestamps