Zack Weinberg: HTTP application layer integrity/authenticity guarantees |
Note: These are half-baked ideas I’ve been turning over in my head, and should not be taken all that seriously.
Best available practice for mutually authenticated Web services (that is, both the client and the server know who the other party is) goes like this: TLS provides channel confidentiality and integrity to both parties; an X.509 certificate (countersigned by some sort of CA) offers evidence that the server is whom the client expects it to be; all resources are served from https://
URLs, thus the channel’s integrity guarantee can be taken to apply to the content; the client identifies itself to the server with either a username and password, or a third-party identity voucher (OAuth, OpenID, etc), which is exchanged for a session cookie. Nobody can impersonate the server without either subverting a CA or stealing the server’s private key, but all of the client’s proffered credentials are bearer tokens: anyone who can read them can impersonate the client to the server, probably for an extended period. TLS’s channel confidentiality assures that no one in the middle can read the tokens, but there are an awful lot of ways they can leak at the endpoints. Security-conscious sites nowadays have been adding one-time passwords and/or computer-identifying secondary cookies, but the combination of session cookie and secondary cookie is still a bearer token (possibly you also have to masquerade the client’s IP address).
Here are some design requirements for a better scheme:
The cryptographic primitives we need for this look something like:
And here are some preliminary notes on how the protocol might work:
perhaps?)I know all of this is possible except maybe the dirt-cheap asymmetric MAC, but I don’t know what cryptographers would pick for the primitives. I’m also not sure what to do to make it interoperable with OpenID etc.
https://www.owlfolio.org/htmletc/http-application-layer-integrityauthenticity-guarantees/
Комментировать | « Пред. запись — К дневнику — След. запись » | Страницы: [1] [Новые] |