Hi list!
I'm developing a messaging application based on XMPP [1], focusing on
community, privacy and security.
What I want to discuss here is I've decided to use OpenPGP keys to
encrypt data between users. Also it would be optimal to use those keys
to authenticate against servers too.

I started by implementing a very simple (and unsafe) SASL mechanism, a
simple challenge/response method (like SSHv1). But things are getting
a little more complicated, and since this application is targeted
mostly to mobile devices, authenticating in-band of an XML stream
would be a huge waste of network traffic. A server-side working
implementation based on Twisted can be found on xmppserver repository
[2].

Before even considering a SASL mechanism, I bumped into RFC 6091 [3],
namely "Using OpenPGP Keys for Transport Layer Security (TLS)
Authentication". This protocol would save bandwidth but lacks of
implementations (only GnuTLS implements this - and only the mainstream
C version, so no bindings).

Because Kontalk aims to target multiple platforms, this RFC will
require many implementations to be written (e.g. Android would require
- for example - a separate Bouncycastle implementation).
On the other hand, a SASL mechanism requires an application level
implementation (that is, it's already part of the XML stream, easier
to implement - but no standard present yet).

Another option would be put into a X.509 certificate the PGP key as a
blob (quite a workaround eh?), but I prefer not to consider that :-)

The question is: SASL or TLS?

Bye

[1] https://code.google.com/p/kontalk/
[2] https://code.google.com/p/kontalk/source/browse/?repo=xmppserver
[3] http://datatracker.ietf.org/doc/rfc6091/

-- 
Daniele

Reply via email to