github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/go/support_libraries/protected_objects/README.md (about)

     1  The protected_object library consists of a number of commonly used routines to maintain a key protection
     2  hierarchy.  Key hierearchies are rooted in a master key (like the primary sealing key for a CloudProxy
     3  Program).  
     4  
     5  This library maintains an in memory (or serialized to storage protobuf) list of objects.
     6  Objects represent things like files or keys.  All objects have universal names, object types,
     7  validity periods, status, values and epochs.  Values are object dependent.  For keys, the value is the
     8  key and parameters.  For files, the value may be the file contents or a pointer to a storage object.
     9  
    10  The library also maintains a list of "protected objects" consisting of a protector name, epoch and type and
    11  a protected object consisting of name, epoch and type as well a value for the protected object.  When the
    12  protected object is a key, the value is the key object encrypted and integrity protected by the key of the
    13  protector object.  When the protected object is a file, the value is (or points to) the file contents
    14  encrypted and integrity protected with the protector key.
    15  
    16  A chain of protected objects terminating, say, in a file object gives a recipie for decrypting an object
    17  given the key at the top of a heierarchy.  For example, the top level program sealing key, may be the root
    18  protector object, protecting a zone key which, in turn protects a file key which protects a file.
    19  
    20  Library functions can construct a chain of such protected objects or find all descendent objects protected
    21  directly or indirectly by a given object or all objects protecting, directly or indirectly by a given object.
    22  This is useful when decrypting objects or adding or rotating keys.  The model is "active" objects can
    23  encrypt or decrypt or be read or written, "retired" objects can decrypt or be read and "inactive" objects
    24  can no longer be used.
    25