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

Kevin Reid kpreid at mac.com
Thu Mar 22 16:26:39 CDT 2007


On Mar 22, 2007, at 16:16, Tyler Close wrote:

> I'm looking at implementing a sealer / unsealer pair for
> Joe-E/ref_send using cryptography, instead of object references. The
> result would be the crypto brand we've discussed in the past.
>
> I'm currently at the requirements gathering stage of development and
> have found even this step to be pretty challenging and worthy of
> discussion.
>
> I think the first step is enumeration of all the security properties
> of a brand implemented using object references. This list provides the
> minimum requirements for the crypto implementation. In building this
> list of security properties, I am using the brand API defined at:
>
> http://waterken.sourceforge.net/javadoc/org/ref_send/brand/package- 
> summary.html

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.

Most Authority <-----------> Least Authority
                   Sealer
                     /\
                    /  \
[Sealer,Unsealer] /    \  elib.sealing.Brand
    (your Brand)   \    /
                    \  /
                     \/
                   Unsealer

The elib.sealing.Brand (from a client's perspective) reliably  
identifies the group without giving any other authority; it is  
available everywhere your protocol offers its "label".

> I've composed an initial list of security properties. I'd like us to
> criticize: the completeness of the list, the terminology used in the
> list and the definitions used in the list.
>
> For a brand A, the following security properties must hold:

   ? def [sealer, unsealer] := <elib:sealing.makeBrand>("A")
   # value: [<A sealer>, <A unsealer>]

   ? def brand := sealer.getBrand()
   # value: A

> Spoofability
>     Without possession of Unsealer A , it is not possible to determine
> if a Box is an authentic Box A.

In E-on-Java, possession of the brand is sufficient:

   ? 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.

> 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. A crypto- 
sealed box in E would, however, require that its contents be Data  
(immutable and serializable).

   ? def box := sealer.seal([].diverge())
   # value: <sealed by A>

   ? unsealer.unseal(box).push(1)
   ? unsealer.unseal(box)
   # value: [1].diverge()

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



More information about the cap-talk mailing list