Field separators
Paul Crowley
paul at ciphergoth.org
Sun Jun 5 13:39:32 PDT 2005
Brad Fitzpatrick wrote:
> \n as seperator is fine too. We'll just have to be careful to define it
> either as a seperator or as a field ending, to avoid the ambiguity of
> whether there's a newline at the end.
Actually I've been having second thoughts about this one!
In email I mentioned that we'll probably never need the protocol version
number, because all our formats are so flexible. But we've introduced
an inflexibility just where our formats are hardest to change. If we
ever want to add a field to what we sign, it will be very hard: the
client must tell the server whether it can accept the new field, and the
server must say if it is present. If there is more than one new field,
an attacker could substitute one from the other by mis-reporting what
fields the server asserted are present, unless we add more complication
to handle that.
Here's one possible fix: we use x-www-form-urlencoding to encode the
payload, and send it as a single parameter, with another parameter for
the signature. Then we can check the signature before we begin to parse it.
token_contents contains the following as an x-www-form-urlencoding form
* openid.mode = 'assert_identity'
* openid.assert_identity = OpenID URL
* openid.return_url = return URL
* openid.valid_from = UTC date
* openid.valid_to = UTC date
idserver redirect -> UA -> consumer:
* GET return URL
* openid.mode = 'id_res'
* openid.token = token_contents
* openid.auth_type = 'hmac-sha-256'
* openid.secret_handle = HMAC secret handle
* openid.sig = HMAC( secret(secret_handle)), token_contents )
The contents end up being doubly-URL-encoded, and the return URL is sent
twice, and you have to be able to decode x-www-form-urlencoding on
something that isn't directly a GET request, but it means that you've
got a simple assertion of "here's what was authenticated, and here's the
authentication" - you don't have to piece together what was
authenticated yourself. And it means if we want to add more to that
assertion, we can.
There are things not to like about this proposal, so if anyone can come
up with a simpler/easier way that we can vary the fields in what is
authenticated without breaking everything I'm keen to know...
--
__
\/ o\ Paul Crowley, paul at ciphergoth.org
/\__/ http://www.ciphergoth.org/
More information about the yadis
mailing list