Improving OpenIDs use of cryptography 1 - using a MAC

Paul Crowley paul at ciphergoth.org
Wed Jun 1 19:07:16 PDT 2005


The main reason Brad asked me to look at OpenID was because as a 
cryptographer, I was always ragging on him to get the cryptography in 
these things right before setting them in stone.  OpenIDs use of 
cryptography doesn't lead to an immediate break, but it can definitely 
be brought much closer to best practice.  As I mentioned before, I'll 
break this into several emails.

The first change I'd propose is good news for implementors and for 
server CPUs.  OpenID doesn't need public-key cryptography at all and 
would be better off without it.  Instead of DSA signing the tokens 
passed between identity server and identity consumer via the user agent, 
we can authenticate them using a secret-key MAC such as HMAC-SHA1.  This 
will be vastly faster and much easier to implement.  Instead of 
connecting to the ID server to fetch the DSA public key, each ID 
consumer will agree their own MAC secret with the ID server.  Each MAC 
secret will have a unique name stored by the identity consumer and 
passed on as part of the authentication request.  The server doesn't 
really have to store a secret per consumer - it can use a strategy like 
LJ::get_secret to map MAC IDs onto MAC secrets using a secret function. 
  Generating or validating HMAC-SHA1 is over a thousand times faster 
than generating or validating DSA - and it sounds like DSA would be an 
implementation nightmare on lots of platforms too, while nearly 
everything provides a SHA-1 implementation.

At the moment OpenID looks like a PKI solution with a severely broken 
PKI.  Removing the only actual PK component would fix that.  If you 
later decide you want the assurance of SSL's PKI, just buy a certificate 
for your ID server and provide an https: URL for it - the PK of the SSL 
and the OpenID cryptography will complement each other perfectly.

Whether or not this suggestion is implemented, the way that ID consumers 
get authentication keys from ID servers needs to be part of the 
specification.
-- 
   __
\/ o\ Paul Crowley, paul at ciphergoth.org
/\__/ http://www.ciphergoth.org/


More information about the yadis mailing list