Joyent unveils HTTP Signature auth scheme for REST APIs
joyeur.com
joyeur.com
It's too bad this couldn't model the Keystone token authentication API that OpenStack is doing:
http://keystone.openstack.org/
Or say, heck, don't like OpenStack, even just using OAuth2 would be fine:
http://datatracker.ietf.org/wg/oauth/charter/
It sounds cool, using SSH keys as your API signature, but really it isn't solving a problem that hasn't already been solved.
So when you say it's not solving a problem that hasn't already been solved, if you're talking about "the ability to sign a request" in the most generic sense, sure, it's already been solved N times.
Generally speaking though, in most of those schemes key management is an afterthought, and we didn't want it to be an afterthought. It's been solved by SSH, and that's what we wanted to leverage.; the point was not to reinvent the wheel, the point was to leverage an existing security mechanism.
Frankly, the blog post leaves a lot of questions and is short on links to answers. It would be easy to walk away from the post thinking Joyent's HTTP Signatures to be incompetently designed. It was almost enough to have me quip, "More like HTTPS Signatures," because the design in the blog post is only sensible over TLS. However, having found the above link, I see that it is the defaults that assume TLS, but that you can specify the signature contain all headers and the request line. This makes it possible to sign requests over HTTP.
I'd rather the defaults be reasonable for insecure transports (i.e., all headers + 'request-line'), since the TLS case is easily handled with just 'headers="date"'. If that's not to happen, I'd hope that implementations actively prevent the use of the defaults over insecure transports. Unfortunately, Joyent's reference implementation doesn't seem to do this.
With hash-based signature schemes, you know that your secret has to be stored in cleartext, which is why you can't choose your own signing token on any clouds.
As a solution for technical users, SSH-keys seem like a great idea: they're battle-tested, avoid a shared secret, are no less convenient than using long system-generated tokens, and have a much richer ecosystem (e.g. ssh-agent, password protection, the possibility to store it on hardware devices etc)
One of the things that's neat about, say, OAuth's MAC authentication, is that it works over plain old HTTP without TLS. Likewise for the AWS API's signature-based security scheme. Sounds like I erroneously assumed that this was aiming to do similarly.