[cap-talk] Webkeys vs. the web
James A. Donald
jamesd at echeque.com
Sun Jun 7 17:16:45 EDT 2009
Chip Morningstar wrote:
> Approach #1 is to never leave one's home page, but have all navigation take
> place via scripted fetches of particular bundles of data. That preserves the
> capability model but it breaks the web nature -- I can't, in this scenario,
> bookmark things I go to (remember, I didn't say we couldn't use bookmarks, just
> that we can't rely on the user making particular bookmarks) or snapshot the
> URLs of pages to have links to pass to others.
>
> Approach #2 is to have every page in this system include a "powerbox module"
> and use a session cookie so that when I load the powerbox module, the backend
> populates it with my stuff but when you load it it populates it with your
> stuff. The session cookie in this scenario ends up being, in essence, a webkey
> that is held in a cookie (and handed around like a cookie), which makes me very
> queasy. The key thing the cookie is providing is a bit of short-term memory
> state that survives page load.
>
> I'm thinking we have no choice but to go with option #2, but it makes me really
> uncomfortable, given all the various issues cookies have.
In the browser, possession of authority is normally represented to the
user as the state of being logged on to a particular domain, which under
the hood is represented by a transient secret cookie that will be
presented to all web pages in that domain and only in that domain.
Unfortunately it is easy for a site to present as a false domain,
thereby leaking the secret. Obviously the state of being logged on
should be represented by a transient shared secret which is *not* handed
to the server, but rather both parties prove possession of the secret
without revealing it by encrypting their communications to the shared
secret.
https makes this leakage somewhat less likely, by providing a true name
map to public keys.
The problem is that the underlying protocol does not represent the state
of being logged in, does not have a concept of a logged in relationship.
User authority concepts do not map directly to low level browser
authority concepts, and the resulting gaps cause insecurity, making
people reluctant to store and transfer promises and representations of
value over the internet.
If the underlying communication protocol *did* represent the state of
being logged in as a shared encryption secret, and authority bearing
urls logged you in, and if the user agent knew that authority bearing
urls were different, so that it refrained from indiscriminately putting
authority bearing urls in headers, and transformed authority bearing
urls to greatly attenuate authority when passing them around, then the
browser would work as the basis of a capability system.
As the browser is, it does not actually work as the basis of a
capability system.
However, with https cookies, leakage of login state is not too severe.
Https cookies are a workaround for cookie secret leaking, and #urls are
a workaround for for the propensity of the browser to indiscriminately
pass out urls in headers. With these workarounds (authority bearing
#urls that log you in to a particular sub sub sub domain), the browser
does work as a capability system, though in a cumbersome, inefficient,
and dangerously complicated way.
More information about the cap-talk
mailing list