To: coderpunks@toad.com
Subject: non-interactive forward secrecy
From: Adam Back
Date: Fri, 6 Sep 1996 22:08:36 +0100
Cc: cypherpunks@toad.com
[This discussion is driven by the desirability of having forward
secrecy in mixmaster for the mix packets delivered by email where the
interactive nature of normal DH is incovenient]
Anyone have any ideas for a non-interactive forward secrecy protocol?
Aside from actually doing the DH key exchange via email (painful), I
have one suggestion for a protocol, perhaps people can improve on
this:
Assuming common prime p, and generator g:
Two remailers A and B. A wants to send messages to B without having to
wait for replies from B.
B generates ys (y0,y1,...,yn),
where y(i+1) = hash(y(i))
then computes Ys (Y0,Y1,...,Yn)
where Y(i) = g ^ y(i) mod p
B sends A Ys, and discards ys.
Now A can send B n consecutive packets with forward secrecy before
receiving any more packets from B.
(B keeps y0, and overwrites it with y1 = hash(y0), etc, so that all B
ever has to hand is the current y(i), and y(i-1) is hard to compute
from y(i) because of the hash functions properties.)
This isn't truly non-interactive, it just reduces the number of
interactions, to an interactive exchange in 1 out of n cases.
(you could randomly chose ys rather than having related ys, and delete
y(i) after use, but this has higher storage requirements (n rather
than 1 on the recipient)).
Heres the obvious construction for a truly non-interactive forward
secrecy protocol based on DH. (That is it only requires 1
interactive exchange).
Aside from the obvious of having a huge n, and the above protocol,
which would have large space requirements, what we're after is a way
to do this with negligable space requirements.
Say that we have the two parties Alice and Bob. Bob doesn't loose
much by having his secret (x) related as above.
1. x(i+1) = f1( x(i) )
2. X(i+1) = f2( X(i) )
3. f1 is non reversible
f1 should have hash-like properties (it should be non-reversible).
Do functions f1 and f2 satisfying 1, 2 and 3 exist? Is there another
way to achieve this?
(My closest attempt so far, based on the hardness of discrete square roots:
f1(x) = x^2 (mod p)
f2(X) = X^2 (mod p)
doesn't work because g^(x^2 mod p) mod p != g^(x^2) mod p)
Adam
--
#!/bin/perl -sp0777i