Signing objects is very important. But the other issue is authenticating that the signed object is valid. One issue that is if a key is compromised, it can be used to sign statements that objects in the past are valid. One way to address this situation is to sign the current Merkle DAG that contains all the “produced” objects by that author. The tree structure of a Merkle DAG with selective split locations allow the tree to add additional objects w/o recalculating the entire tree.
This also allows rolling keys more simply, as the new key starts signing the new root, and once verification of the new key has been done, the objects are now authenticated again. When this happens, no old keys need be kept, and it’s encouraged to remove the old keys and only keep one, the current key, for each identity.
As this spec is geared toward JSON encoding, but
Objects: Identity
name: Note that it is recommended to ensure that this is unique among all the identities imported/trusted, and that work is done to present look alike names. Giving an option to rename an Identity locally is highly recommended to make it easier for the user. info: General information text about this identity. tree_hash: The multihash of the root of the object tree. sig: Note that keyId and publicKey should not be included, as the public key used to verify the signature MUST be the publick_key as specified by the public_key property of the Identity object.
ValidIdentity
It is yet to be decided if the ValidIdentity object will be used.
The tree_hash is a multihash. The data refered will be a JSON JCS encoded object or array. If it is an array, then each element of the array will be a multihash refering to an object that validated by the tree. The array MUST on contain unique multihashes, that is the array is the equivalent of a set. The array MUST be sorted, so that a binary search may be used over the array to find if a multihash is present or not. If the data is an object, it will contain a key to help locate the object, with the value being another multihash, refering to either an object or array again. In all cases, the order of objects MUST be: tree_hash -> [ object -> ]* array -> authenticated object. If objects are used, the keys SHALL be based upon the last modified date of the object. The first level MUST be year, then month, then day, then hour, then minute, then second, then milisecond, then microsecond. If the encoded array is longer than 256KiB, it MUST be broken up, and a new level of objects MUST be added.
Note that the contents of the multihash are NOT distributed w/ the Identity object. The entire tree may be very large, and a complete tree is NOT needed to verify a subset of the tree. It is expected that the parts will be hosted via IPFS, or another mechanism allowing the retrival of the data.
Questions:
05-13
.
Advantages, easier to split nodes. Actually, better will be to use
a proper B-tree style structure, where there’s a left node, and then
each key has all the values between it and the next node.Answered: