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