[E-Lang] Hash Chaining & Capabilities, Proposal #2a:
Active O ff-Line Messages
Mark S. Miller
markm@caplet.com
Sun, 22 Oct 2000 01:39:11 -0700
At 05:57 PM 10/18/00, Karp, Alan wrote:
>> From: Mark S. Miller [mailto:markm@caplet.com]
>> 3) The infamous do-not-delegate bit. We need to eradicate
>> this and then
>> find a strong cleanser to remove its stench. (For those new
>> to this list,
>> see http://www.erights.org/elib/capability/conspire.html .)
>
>Although you can control rights amplification in other ways, I believe this
>bit makes it simpler to get it right.
From previous correspondence, I believe we have the same "other ways" in mind:
Let's say X brought together with Y would cause rights amplification. For
example, let's say X is like the Envelope/Can and Y is like the
Unsealer/CanOpener of
http://www.erights.org/elib/capability/ode/ode-capabilities.html#rights-amp .
But let's say that both objects have other uses besides participating in
rights-amplification. Now, Alice wishes to give Bob, not X itself, but
something that provides all the use-value of X without the
amplification-value of X. She also wishes to give Dana the use value of Y
without the amplification value of Y. In SPKI, she can do this by giving
Bob X itself, but with a do-not-delegate constraint, and likewise give Dana
Y with a do-not-delegate constraint. Now, either Bob or Dana can engage in
the proxying attack to proxy the use-value of X and Y, but that's not what
Alice was worried about. Since neither Bob nor Dana can arrange for any one
party to appear authorized to both X and Y, any amplification that results
only from demonstrating such simultaneous authorization has been prevented.
While this works, and is a very cool result, it has bad software engineering
consequences. Good programs are like good writing -- it says what it means.
Alice's actions above bring about her desired effects in an obscure manner.
By contrast, in a pure capability system, the way she gives Bob X's
use-value but not X's amplification value is to wrap X in a transparent
forwarder that forward use messages but intercepts those messages whose
purpose is to bring about rights amplification. Bob is then given the
forwarder. This is the identical technique used everywhere else in the
system to create an "unforseen facet" -- a thinning of rights to an existing
object, where that object wasn't already designed with that thinning in mind.
Also, the issue only comes up when the same object has both use-value and
amplification value, so it's not clear this issue even comes up for well
designed object patterns. In E, Envelopes and Unsealers have no use besides
rights-amplification; and everything else in E uses these by composition, not
by subtyping, in order to do rights amplification.
So, although you can do prevent rights amplification either way, I disagree
about which way "makes it simpler to get it right".
>There is also the problem of
>multi-level security. Since SPKI certificates can be passed out of band, it
>is difficult to control their passing between security levels. This bit
>reduces the danger of honoring an invalid request.
I don't know why, but I've just never been able to wrap my head around MLS,
so I leave this issue to others on the list.
>> So let's say that the Certificate's Authorization field contains, not
>> <VatID(C), swissNumber(Carol)>, but <VatID(C),
>> hash(swissNumber(Carol))>.
>> Since we assume hashes are strongly irreversible, knowledge of
>> hash(swissNumber(Carol)) provides no knowledge of
>> swissNumber(Carol), and
>> only the latter is a secret that provides authority. This
>> representation
>> also makes it easier to see how to interface between the
>> bearer and the
>> certificate worlds:
>
>This approach seems to solve one of the problems with using SPKI
>certificates as capabilities, naming the object. Since there is no control
>over where these certificates go, there is no way to revoke them other than
>a CRL or time expiration. That means that the name in the certificate can
>not be reused as long as a live certificate may exist. In most systems,
>that's a burden, since certificates often have long lifetimes. However, the
>(VatID,swissNumber) pair provide sufficient uniquification.
Thanks. That's a good observation.
>Does hashing
>them remove the problem of someone in your trust domain issuing a
>certificate for one of your objects?
I don't think I understand the question, and it seems very important. Could
you please expand on the problem scenario you're worried about? Thanks.