[cap-talk] Non-Delegatable Authorities in Capability Systems

Kevin Reid kpreid at mac.com
Sat Dec 8 23:19:40 EST 2007


On Dec 6, 2007, at 7:24, Toby Murray wrote:

> "Non-Delegatable Authorities in Capability Systems"
> By Toby Murray and Duncan Grove
> (to appear in the Journal of Computer Security)
>
> http://web.comlab.ox.ac.uk/oucl/work/toby.murray/papers/NDA.pdf

I would like to point out two non-fatal problems and some other minor  
issues:


1. The NDA system in Figure 3 succeeds only if the protocol of the  
target object is such that it does not reveal itself (or other  
capabilities to be protected from delegation) in responses. This is  
the same requirement as for use of a generic caretaker (as in  
org.erights.elib.facet.makeCaretaker).

This would be avoidable by using what is to Figure 3 as a membrane is  
to a caretaker.


2. In section 1.4, you state:

> Importantly, in many object-capability systems the authority to  
> reply is not delegatable. Examples include systems such as E [15],  
> W7 [23] and the Annex Capability System [8] that never reify this  
> authority, making it impossible to delegate. Another example is any  
> capability-based IPC system that does not allow the receiver of a  
> message to transfer the capability used to send back the reply. The  
> EROS operating system is a counterexample, since it allows the  
> receiver to transfer the resume capability that is used for sending  
> back the reply [25].


If I understand what an EROS resume capability is, then this is false  
for E. A resolver (eventual) or ejector (immediate) is precisely a  
"capability used to send back the reply" -- and under CapTP,  
pipelining means that the response resolver can be resolved to  
(delegating to) a promise which lives in some other vat, and may  
therefore outlast the confused delegator.

   # simple reification, eventual
   to foo() {
     def [p, r] := Ref.promise()
     leak <- (r)
     p
   }

   # simple reification, immediate
   to bar() {
     leak(__return)
   }

   # possibly-outlasting-myself delegation
   to baz() {
     return leak <- ()
   }

However, an important characteristic of resolvers (and resume  
capabilities, IIUC) is that they are /use-once/: at most one response  
can be delegated, and so (in the preceding scenario) that response  
must be to a request made of Alice while she was confused (or she  
would not have leaked that particular resolver).

Therefore, while the claim as written is false (no-delegation-of-a- 
reply), a more relevant property (no-delegation-of-future-replies)  
exists in E (and possibly EROS as well).


Minor comment: I expect that the actual results in a "buggy  
delegator" scenario depend on the exact mechanism used for upgrading  
the buggy program (what level of the system is replaced); i.e. the  
examples, containing no upgrade hooks, are unrealistic. Some upgrade  
hooks might defeat the no-delegation-of-future-replies property.

Minor comment: What you call "method name" is properly called "verb"  
in E. The distinction is that methods are part of the / 
implementation/ of the object; verbs are parts of the messages it  
understands, the interface.

Minor comment, section 2.3: If accountability, but not non- 
delegation, is desired, then the Horton system serves that purpose  
with less indirection, if I recall it correctly.

-- 
Kevin Reid                            <http://homepage.mac.com/kpreid/>




More information about the cap-talk mailing list