[cap-talk] Implementing a crypto brand: What are the security requirements?

Kevin Reid kpreid at mac.com
Thu Mar 22 17:44:13 CDT 2007


On Mar 22, 2007, at 17:57, Tyler Close wrote:
> On 3/22/07, Kevin Reid <kpreid at mac.com> wrote:
>> Looking at this page, I note that it uses the term "Brand" in the
>> opposite sense that E does. The "brand" of E's built-in sealing
>> system is the facet of minimal authority; yours is the maximal.
>
> In my opinion, the term "brand" in E is overloaded. I think it could
> be interpreted as describing the return of the getBrand() method, or
> the return of the makeBrand() method. For clarity, I chose to give it
> a single meaning, the return of the makeBrand() method and use the
> term "label" for the other meaning.

I have no objection to this renaming if MarkM agrees. However, if I  
were renaming things I would rename the constructor rather than the  
"label".

...
>>    ? def SealedBox := <type:org.erights.e.elib.sealing.SealedBox>
>>    # value: SealedBox
>>
>>    ? (sealer.seal("foo") :SealedBox).getBrand() == brand
>>    # value: true
>>
>> I do not know whether this or its lack is a desirable property, nor
>> whether it is possible to implement in a cryptographic system. This
>> property could be removed from E by hiding the SealedBox guard.
>
> As I discussed above, the E-on-Java implementation does currently
> implement spoofability, since any object with the E Brand can
> masquerade as an authentic Box. Your comments above confirm that this
> fact is subtle and easily missed. In the above E code, "sealer" could
> refer to an object that creates a SealedBox of a different E Brand,
> but that claims to be of the "brand" Brand.

No; SealedBox is a Java class, and the SealedBox guard accepts only  
instances of that class. Instances of SealedBox are known to report  
their brands correctly.

To expand on my example:

    ? def verified :SealedBox := something
    # value: <sealed by A>

    ? verified.getBrand() == brand
    # value: true

It is now known that 'verified' is a genuine box sealed by A.

>>> Integrity
>>>     The content of a Box A cannot be mutated.
>>
>> This is not a property of the sealing system provided by E. The box
>> cannot be mutated, but its contents do not lose mutability.
>
> E-on-Java does implement Integrity as I've defined it. Your second
> sentence above is the crucial one needed to understand the precise
> meaning. You can seal a reference to a mutable object in a Box, but
> you can't change which reference is in the Box once sealed. Using your
> example below, you can seal a mutable list in a box, but you can't
> make a box point to a different mutable list.

In the terminology I was using, making the box point to a different  
object is "mutating the box", or "replacing the content of the box".  
"mutating the content of the box" is mutating that mutable list.

>> A crypto-sealed box in E would, however, require that its contents  
>> be Data (immutable and serializable).
>
> I don't think so. For mutable box content, I think the E  
> implementation would seal a representation of a live ref.

No such representation can exist; it would have to create a SturdyRef.

I think it would be reasonable to allow SturdyRefs in a crypto-sealed  
box; creating SturdyRefs to represent live refs would not be, as the  
lifetime of the SturdyRef could not be correctly managed.

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




More information about the cap-talk mailing list