shared secret using diffie-hellman
Jason Nelson
Jason at nterface.com
Sat Jun 4 19:50:49 PDT 2005
The recent security insight to the protocols been very cool; I'm glad this
is occurring before the protocols widespread deployment.
The DiffieHellman agreement algorithm's seems to provide a good balance
between security, performance, while being readily apart of the major
language libraries (or as a managed class for .NET). I've seen no major
concerns presented that will impediment a .NET implementation of the
protocol.
+1
The conversations in this list have brought forward a lot of good insight
while the core concerns have been kept intact!
Keep up the good work guys! I'm excited to see this specification near its
1.0 christening and widespread adoption their after. Go Internet 2.0.
Rock n Roll,
Jason Nelson
Software Architect / President
nterface, LLC
-----Original Message-----
From: yadis-bounces at lists.danga.com [mailto:yadis-bounces at lists.danga.com]
On Behalf Of Brad Fitzpatrick
Sent: 06/04/2005 6:34 PM
To: yadis at lists.danga.com
Subject: shared secret using diffie-hellman
Here's how I'd see the shared secret setup as outlined before (and
corrected by Paul), but using diffie-hellman for finding the shared
secret, instead of passing it in the clear.
Props to Ben Trott for telling me about DH. Anybody correct me if I
understand it wrong.
Diffie-Hellman:
1) If consumer doesn't have shared secret handle:
consumer --> idserver (no UA involved, not that it'd matter)
openid.mode=get_dh_params
idserver -> consumer
p = prime
g = base
pub_key = ....
secret_handle = opaque string (probably
"p/g/pub_key/last_privkey_gen_time/nonce/hmac-of-it-all")
expiry = 86400
consumer then maps that secret_handle to p, g,
pub_key_idserver, and its own priv_key it then generates. at
this point, the consumer knows the shared secret before the
identity server does, but the identity server did the harder
part of finding p and g. (design req: consumers dumber than
servers)
2) Once it has that, it works mostly as before:
consumer --> UA -> idserver
openid.mode = checkid_immediate
openid.secret_handle = <that opaque string>
openid.pub_key = <consumer's public key for that secret_handle>
(now the idserver knows the shared secret, since it sees the
consumer's public key. after it parses/validates secret_handle is
valid too, of course, based on the hmac-of-it-all.)
idserver -> UA (redirect) -> consumer
openid.mode = id_res
openid.secret_handle = <that opaque string>
openid.hmac = HMACSHA1( shared_secret(secret_handle), plain )
It's no more HTTP requests than the plain-text exchange, it makes
people happy, and the only addition req on consumers is bigint
support (widely available). No primality testing, etc.
Thoughts?
- Brad
_______________________________________________
yadis mailing list
yadis at lists.danga.com
http://lists.danga.com/mailman/listinfo/yadis
More information about the yadis
mailing list