[Telepathy] Fwd: GSoC Project: Add OTR support to Telepathy/Empathy for XMPP
Christian Anderson
christian at avtok.com
Wed May 25 19:29:08 PDT 2011
Thanks for working on this! I'm just an Empathy user who would like e2e
encryption, not an expert on anything. But I want to follow up on what
Will said and throw some ideas out there that might have already been
discussed out of band.
On 05/25/2011 02:24 PM, Will Thompson wrote:
> I'm inclined to think the key storage should be outside the CMs. There
> has to be UI for presenting keys to the user *anyway*. Plus, this allows
> the cache to work across protocols, if the same key can be used by a
> user for both their Jabber account and their MSN account, say. (Is this
> done in OTR? Or maybe keys are tied to the account.)
OTR keys can definitely be used between different accounts. I agree that
the should be handled outside the CM.
On a similar note, the proposed spec stores OTR policy in
Connection.I.OTR, but I think it might make more sense to have the
client specify an OTR policy when creating a channel. The policy can be
stored at the channel level. Let me justify this more after I discuss
policy.
Your three policy flags are Enabled, AutoStart and AutoAccept. Why not
directly support the policies from the OTR protocol [1]? These are
currently: ALLOW_V1, ALLOW_V2, REQUIRE_ENCRYPTION, SEND_WHITESPACE_TAG,
WHITESPACE_START_AKE, and ERROR_START_AKE. AutoStart could be
implemented at channel creation time by setting the REQUIRE_ENCRYPTION
flag on a channel if we have an OTR key stored for the handle we are
connecting with. AutoAccept could be implemented by turning on ALLOW_V*,
WHITESPACE_START_AKE, and ERROR_START_AKE. Your spec doesn't offer the
functionality of SEND_WHITESPACE_TAG which is important to OTR.
The advantage of implementing policy at the channel level is that a few
things work more naturally: One of them is AutoStart. Another is that
the user can click a lock icon to indicate that he wants his chat with
Bob to be encrypted. This toggles the channel state to
REQUIRE_ENCRYPTION but doesn't transmit any data to Bob.
I have taken the spec from your previous email and updated it below to
reflect this new way of implementing policy. I have also tried to expand
on the methods and properties of the channel to include everything that
I think the OTR protocol requires. Whereas your spec hides the details
of OTR beneath the interface, the below draft takes the other extreme
and reveals most of them. It's just a draft that appeals to me and might
not reflect the wisdom of what you guys have come up with separately.
I included support for the socialist millionaire protocol as present in
OTR version 3 (everything labeled SMP). But this support can be taken
out without damaging anything else.
I've never worked with a D-bus before. Sorry for rookie mistakes.
[1] http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html
christian
==ofdT.Channel.Interface.OTR
This interface is only applicable to channels of type Text.
-Methods
StartSession () -> nothing
//Send an OTR query message on the channel
EndSession () -> nothing
HandleKey (b: Accept) -> nothing
//Called in response to the KeyReceived signal
//Lets the CM know if the key is accepted or rejected
StartSMP () -> nothing
AbortSMP () -> nothing
-Signals
MessageStateChanged (u: State, u: Reason)
AuthenticationStateChanged (u: State, u: Reason)
KeyReceived (o: Key)
//Broadcast during AKE when we receive the public key
SMPRequested ()
SMPConcluded (b: Success)
-Properties
Policy u(Policy_Flags) Read/Write
Key o Read/Write
//The key that we use to identify ourself on this channel.
//Set by the client
MessageState u(Message_State) Read only
AuthenticationState u(Authentication_State) Read only
SMPState u(SMP_State) Read only
-Types
Policy_Flags Flags u
//ALLOW_V1, ALLOW_V2, REQUIRE_ENCRYPTION,
//SEND_WHITESPACE_TAG, WHITESPACE_START_AKE,
//ERROR_START_AKE
Message_State Enum u
//PLAINTEXT, ENCRYPTED, FINISHED
Message_State_Reason Enum u
Authentication_State Enum u
//NONE, AWAITING_DHKEY, AWAITING_REVEALSIG
//AWAITING_SIG, V1_SETUP
Authentication_State_Reason Enum u
SMP_State Enum u
//EXPECT{1,2,3,4}
More information about the telepathy
mailing list