Freemail channels are designed so as to maximum privacy, anonymity, and reliability. Use of the Freenet architecture allows cultivation of anonymous identities with widespread reputations. The locations of mail messages within Freenet are constructed and transmitted in such a way that only the parties involved are aware of the source, destination, and even transmission of the messages. Eavesdropping is prevented by the use of strong encryption (Diffie- Hellman negotiated symmetric keys). Forgery is prevented by the use of Freenet's secure subspace key concept and cryptographic signatures. Freemail relies on the robustness of Freenet's secure key subspaces to prevent denial-of-service attacks on established channels.
The reference implementation of Freemail is written in Java. Encryption functionality is provided by the Java Cryptography Engine. XML parsing and serialization is provided by the Apache Xerces library (by way of IBM's xml4j).
Currently, Freemail requires Sun's Java 2 v1.4 Runtime Environment. The implementation has been tested on Linux, Solaris, and Windows.
The channel initiation protocol specifies how one party (the "requester") can establish a channel with another party (the "requestee") who is known to the requester. It is unnecessary for the requestee to have any previous knowledge of the requester. All messages transmitted during channel initiation are secured with Triple-DES keys as specified below, preventing eavesdropping on the channel parameters. These parameters are required before an attacker may even detect the transmission of mail messages. The following phases define the creation and secure, reliable exchange of channel parameters.
This method has the usual disadvantages associated with slot-based KSK boxes (also used in Frost in FMB, for instance). In particular, this method is susceptible to message loss (where a requester publishes a request in a slot that was once filled but whose request subsequently disappeared from Freenet), and denial-of-service attacks (where an attacker fills the slotbox with garbage requests, forcing both the requestee and requesters to search through many slots unnecessarily).
This channel is fairly reliable under normal circumstances (depending on Freenet conditions), and highly unreliable under attack. However, the reliability degrades over time as early requests disappear from the network.
This method makes denial of service attacks more difficult, as an attacker must constantly follow the moving proposal window in order to flood it. However, the extra layer of redirection decreases the reliability of this method. Additionally, a persistent attacker may still hinder establishment of new channels.
Compared to the fixed-window method, this method is less reliable under normal circumstances, much more reliable under sustained attacks, and less reliable under unsustained attack. Unlike the fixed-window method, however, this method does not suffer from a decay in reliability over time.
This method is highly reliable; in fact, provided a receipt can be transmitted through Freenet, its success is guaranteed. However, it is not applicable to anonymous introductions. For parties who would like to migrate existing communications to Freemail, this is the preferred method.
This method is slightly less reliable than external transmission, as an extra message is required. In all other regards it is identical.
NOTE: Some portions of these DTDs are out of date pending further revision.
<!DOCTYPE mailstore [ <!ELEMENT mailstore (version,alias,publicSSKKey,privateSSKKey, privateDHKey,publicDHKey,dhParamSpecG,dhParamSpecP,cryptoParams, lastIndexProposal,inbox*,outbox*)> <!ELEMENT version (#PCDATA)> <!ELEMENT alias (#PCDATA)> <!ELEMENT publicSSKKey (#PCDATA)> <!ELEMENT privateSSKKey (#PCDATA)> <!ELEMENT privateDHKey (#PCDATA)> <!ELEMENT publicDHKey (#PCDATA)> <!ELEMENT dhParamSpecG (#PCDATA)> <!ELEMENT dhParamSpecP (#PCDATA)> <!ELEMENT cryptoParams (#PCDATA)> <!ELEMENT lastIndexProposal (#PCDATA)> <!ELEMENT inbox (alias,senderPublicSSKKey,channelName,secretKey, cryptoParams,lastMessageIndex)> <!ELEMENT outbox (alias,channelName,recipientPublicSSKKey,secretKey, cryptoParams,lastMessageIndex)> <!ELEMENT senderPublicSSKKey (#PCDATA)> <!ELEMENT recipientPublicSSKKey (#PCDATA)> <!ELEMENT channelName (#PCDATA)> <!ELEMENT secretKey (#PCDATA)> <!ELEMENT lastMessageIndex (#PCDATA)> ]>
<!DOCTYPE identity [ <!ELEMENT identity (version,alias,recipientPublicSSKKey, dhParamSpecG,dhParamSpecP,recipientPublicDHKey,cryptoParams)> <!ELEMENT version (#PCDATA)> <!ELEMENT alias (#PCDATA)> <!ELEMENT recipientPublicSSKKey (#PCDATA)> <!ELEMENT dhParamSpecG (#PCDATA)> <!ELEMENT dhParamSpecP (#PCDATA)> <!ELEMENT recipientPublicDHKey (#PCDATA)> <!ELEMENT cryptoParams (#PCDATA)> ]>
<!DOCTYPE request [ <!ELEMENT request (version,requesterAlias,ee2erChannelName, ee2erSecretKey,ee2erCryptoParams,receiptAddress,negotiationSecretKey?, negotiationCryptoParams?)> <!ELEMENT version (#PCDATA)> <!ELEMENT requesterAlias (#PCDATA)> <!ELEMENT ee2erChannelName (#PCDATA)> <!ELEMENT ee2erSecretKey (#PCDATA)> <!ELEMENT ee2erCryptoParams (#PCDATA)> <!ELEMENT receiptAddress (#PCDATA)> <!ELEMENT negotiationSecretKey (#PCDATA)> <!ELEMENT negotiationCryptoParams (#PCDATA)> ]>The elements are defined as follows:
Note that there may be more than one content section; these should be concatenated by the receiving client.
<!DOCTYPE message [ <!ELEMENT message (version,content+,id,toAddress,fromAddress)> <!ELEMENT version (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ELEMENT id (#PCDATA)> <!ELEMENT toAddress (#PCDATA)> <!ELEMENT fromAddress (#PCDATA)> ]>
Document revision: $Author: athomasonx $ $Header: /cvsroot/freenetmail/freenetmail/docs/specification.html,v 1.3 2002/06/09 23:39:19 athomasonx Exp $ $Revision: 1.3 $ $Date: 2002/06/09 23:39:19 $ $Log: specification.html,v $ Revision 1.3 2002/06/09 23:39:19 athomasonx Added XML DTDs. Merged David Wei's dynamic dropbox spec. Revision 1.2 2002/05/30 20:00:39 athomasonx Added second stage protocol. Added mail sending to usage example. Revision 1.1 2002/05/29 01:48:56 athomasonx Initial version.