README: 2007 Feb 27 - 2008 Jan 14

Description

femtocomment: An attempt at a "least reasonable" comment system. Anonymity being a priori "not reasonable"...

Mon Jan 14 22:47:00 2008

The README-blog has enough content that it is starting to pick up traffic about random topics, even with only email and zephyr backchannels. femtocomment got sidetracked into being an OpenID playground, which made sense a year ago, but looking at http://openid.net/ today, it's a lot more real, and I should start focusing on the comment side of the story again.

(I'll probably start with something that works off of a simple hand-set cookie just to get it off the ground, but that's not inconsistent with having an OpenID interface, it's just a shortcut path.)

Inputs:

Outputs:

Constraints:

This is probably enough to start slinging bits around and see what it looks like :-)

Footnotes:

Sun Apr 8 03:08:00 2007

Some random browsing (specifically, a mention of Mark Novak from Microsoft doing a lightning talk at Ignite Seattle on OpenID Security, via planet python, and my subsequent attempts to find things about it) led me to notice the January 2007 "Implementors Draft 11" of OpenID 2.0.

This draft fixes a lot of my complaints about the form of the 1.1 spec:

All in all a much better effort at "phrasing your RFC in the form of an RFC."

Given that, I think it's worth the effort to discard the 1.1 experiments and try again with 2.0draft11 versions; given the flaws in some of the 1.1 paths I clearly don't want to support it anyway, so I'm not losing anything by only looking at 2.0 from here on out.

Footnotes:

Thu Mar 29 01:09:00 2007

Today we grind through "association". This sets up a shared secret between the Consumer and the Identity Provider, up front. It's not really spontaneous, since you don't actually know of the existance of the Identity Provider until you get some user to tell you about it, though 3.4.1 points out that you can cache them, and they do expire.

Looks like checkid_immediate always results in another browser redirect, to the approve.bml page, but that may be specific to the livejournal implementation (and kind of makes sense in the "must approve" case, to redirect instead of just showing the query, for implementation rather than spec reasons.)

More spec flaws:

More useful python tools:

Apparently I've just executed "smart mode" ("pre-associated", so I could use the result of checkid_immediate directly) without doing any further actual crypto - just verifying an HMAC using a plaintext key. This is vulnerable to a "modern" variant of the Zanarotti attack (or "over-shared secrets"):

If we assume the attacker isn't a full MITM - can't disrupt connections initiated by others, or spontaneously, but can interpose responses to connections it instigates - the attacker can

Note that this isn't a flaw in OpenID by itself - just an indication that 4.1.3 needs to explicitly forbid using plaintext-association mode, or perhaps that mode should be removed from the spec, as it can not really be said to provide repeated authentication, which is the whole point.

Next time, we move on to association with openid.session_type set to DH-SHA1 and see how it does against weak-MITM.

Footnotes:

Wed Mar 28 01:32:00 2007

The Kathy Sierra mess got me to put some more effort into this (after not touching it for a month.) I've successfully, if crudely, "Consumed" (via the "dumb" path) a livejournal-based OpenID identity.

It took a while to grok the workflow, partly because the spec is weak on actually defining terms consistently (it makes one appreciate the effort that goes into real RFCs that much more.) Specific flaws include:

That said, there are a good collection of python tools to handle the pieces:

In "smart" ("pre-associated") mode I'd also use hmac.new, among others.

So in stateless/dumb mode, it looks like the "tracer bullet" path is

One reason that "stateless" may be the wrong name for this mode is that the check_authentication pass does involve the Consumer waiting around for a response from the Identity Provider - still stateless in the traditional "web app" sense in that you didn't need to preserve anything across User-Agent to Consumer transactions (http requests), but you still need to handle waiting for the Identity Provider, and in an asynchronous system that's going to be explicit state, even if it's bounded.

Next step will be to walk through the "pre-associated" mode and compare the complexity (especially relative to the possible security benefits.) After that, safety-armoring and a prototype comment page...

Footnotes:

Wed Feb 28 02:59:00 2007

Looks like the best way to understand OpenID is going to be a "drunken walk" through the spec... implementing a minimum identity-consumer so that I can get a good handle on what the problem points are. For example, the first thing the identity-consumer does is fetch the url the user handed them; I wonder how many implementations get unhappy if they're fed a youtube video, in spite of the suggestions in 3.3.1.

I'll probably go back and look at one of the other implementations too, but I expect that they'll make a lot more sense after this exercise.

Tue Feb 27 02:51:00 2007

Enough of my README-blog entries include questions that an in-line comment system seems worthwhile, and I've been looking for an excuse to "do something" with http://openid.net for a while now.

I don't happen to believe in giving people "options" when I can instead provide something simple and "right" :-)

Thus, femtocomment, from the SI prefix for 1e-15 (microcomment and nanocomment being already in use.)

The constraints are fairly basic -

I suppose the truly minimal version would support

Later improvements could include

The first implementation choice is whether to use an existing openid library, or to implement enough of the spec to learn something useful about it...