[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: (Re-)opening the API discussion.
Summary: I implemented most of what George described here, and in the
process, found a couple of proposed tweaks. I do some handwaving in the
middle in reference to a large message I'm about to send out later in
the night that will talk about (and propose solutions for!) most of our
lingering end-to-end issues.
Folks-- if you agree with this, I'll try this weekend to solidify the
code that implements it.
On Tue, 2002-09-10 at 10:22, George Danezis wrote:
> Dear All,
>
> We have now a volunteer that would like to implement something that uses
> the MixMinion protocols and it made me thinking that it would be helpful
> is a standard API was provided to clients to perform 99% of the functions
> they might need (for the 1% hacking will always be needed).
Hm. I agree in principal, but I think that we shouldn't go calling this
an "API": those are usually language specific. Instead, this is really
a list of required primitive interfaces that every client implementation
must provide in order to be usefully embeddable.
[...]
> At the time we did not have yet a clear idea about what SURB's would look
> like or how they would be encoded. We were also thinking of implementing
> fragmentation at the minion layer that has since faded away (I would argue
> that it should be implemented above it, as TCP is above IP).
This is a separate discussion, but I think you are probably right.
> In the Nym-spec document I propose the following API to be presented to
> clients, and I would greatly appreciate comments:
>
> (An API for mixminion clients)
I've tried to code this up, so I can vouch for its realism.
>
> PROCEDURE: Create SURB
> Input: -
> Output: ID of the generated SURB.
> SURB data.
>
> The above procedure generates a SURB that is addressed to the local
> machine given the local configuration.
Not every SURB has a sensible ID. Stateless SURBs, for instance, have
no state. Also, you'll need to know what "Address" the SURB should
target. Finally, you'll need a range of dates during which the SURB
will be valid. I propose instead:
PROCEDUE: Create 'Stateful' SURB
Input: Address
List of valid dates
Output: ID of generated SURB,
Binary representation of generated SURB
PRODECURE: Create 'Stateless' SURB
Input: Address
password or long-term secret
List of valid dates
Output: Binary representation of generated SURB.
(See the end of this mail for more info on addresses.)
> PROCEDURE: Send Anonymous
> Input: Address as specified in the ``Routing information'' section of
> the mixminion spec.
> OR
> SURB provided by another user.
> Message to be encoded and sent.
> Output: -
>
> The above procedure sends a sender anonymous (and recipient anonymous
> if a SURB is provided) message.
This is good. It should have a way to do end-to-end payload encryption,
though:
PROCEDURE: Send Anonymous
Input: One of * an address, and optionally a public key
* a SURB.
Message to be sent.
Output: -
Also, we should have a way to generate a message and delay inserting it
into the system. [One of the experienced crypto folk wanted this; I
forget quite why.]
PROCEDURE: Encode Anonymous
Input: <Same as 'send anonymous'>
Date (or dates) when this message must be valid
Output: Encoded message to be sent
Routing info for first hop
PROCEDURE: Send MMTP
Input: <Same as output of Encode Anonymous>
Output: -
> PROCEDURE: Send
> Input: SURB provided by another user.
> Message to be encoded and sent.
> Output: -
>
> The ``Send'' procedure sends a normal (non-anonymous) message to an
> anonymous address.
This is fine. I'd rename it to something else, though: nonanonymity is
risky enough that it shouldn't pass unmentioned. "Send Open"? "Send
Identifiable?"
Analogous to above, I'd also add an 'encode' companion for this
procedure.
> PROCEDURE: Receive Anonymous
> Input: -
> Output: ID, the id of the SURB used to encode this message.
> Message, the message received (decoded)
I think we can do even better than this; see my next message. We can
probably get by with a simple "Recieve"!
On addresses: 'Addresses' are a little more complicated than we thought,
especially when you consider encrypted forward messages, and MBOX-style
delivery where recipients run their own non-public nodes.
See my next message for more information.
--
Nick