A hierarchy can be thought of as having parent and child keys, or ancestors and descendants. All parent keys are storage keys, which are encryption keys that can wrap (encrypt) child keys. The storage key thus protects its children, offering secrecy and integrity when the child key is stored outside the secure hardware boundary of the TPM. These storage keys are restricted in their use. They can't be used for general decryption, which could then leak the child's secrets.
The ultimate parent at the top of the hierarchy is a primary key. Children can be storage keys, in which case they can also be parents. Children can also be non-storage keys, in which case they're leaf keys: children but never parents.
Key Types and Attributes
Each key has attributes, which are set at creation. They include the following:
• Use, such as signing or encryption
• Overall type, symmetric or asymmetric, and the algorithm
• Restrictions on duplication
• Restrictions on use
Symmetric and Asymmetric Keys Attributes
TPM 2.0 supports a variety of asymmetric algorithms, unlike TPM 1.2, which was fixed to RSA. TPM 2.0 also introduces some entirely new key types.
A symmetric signing key can be used in TPM HMAC commands. TPM 2.0 can do symmetric signing (a MAC) with a key that is never in the clear outside the TPM.
The TPM library specification includes symmetric encryption keys that can be used for general-purpose encryption such as AES. It's uncertain whether TPM vendors will include these functions, due to potential export restrictions. The commands are optional in the PC Client platform specification. Historically, TPM vendors haven't implemented optional TPM features.
Duplication is the process of copying a key from one location in a hierarchy to another. The key can become the child of another parent key. The hierarchy or parent can be on the same or a different TPM. Primary keys can't be duplicated; they're fixed to one hierarchy on one TPM.
A primary use case for duplication is key backups. If a key were locked forever to one TPM, and the TPM or its motherboard failed, the key would be lost permanently. A second use case is the sharing of keys among several devices. For example, a user's signing key may be duplicated among a laptop, tablet, and mobile phone.
TPM 1.2 has a similar process called migration. The term migration implies that a key is moved: that is, that it would now exist at the destination location but no longer exist at the source. This implication was incorrect. After migration, the key could exist at both the destination and the source. For that reason, the TPM 2.0 term was changed to the more accurate duplication.
TPM 2.0 keys have two attributes that control duplication. At one extreme, a key may be locked to a single parent on a single TPM, and never duplicated. The opposite extreme is a key that may be freely duplicated to another parent on the same or another TPM.
The intermediate case is a key that is locked to a parent but that can be implicitly duplicated if the parent is moved. This case offers the possibility of duplicating an entire branch of a tree. If the parent is duplicated, all children wrapped to that parent are available at the destination, on down through all descendants.
The TPM specification talks of a duplication root and a duplication group. The root is a key that can be duplicated. The duplication process acts explicitly on that key. The group represents all descendants of that root. The entire duplication group duplicates implicitly when the root duplicates. The children, which aren't explicitly duplicated, remain with their parent. However, as the parent is copied, the children are implicitly copied with it.
The controlling key attributes are defined as follows:
• fixedTPM: A key with this attribute set to true can't be duplicated. Although the name seems to permit duplicating a key from one location in a hierarchy to another within a TPM, this isn't the case.
• fixedParent: A key with this attribute set to true can't be duplicated to (rewrapped to) a different parent. It's locked to always have the same parent.
These two boolean attributes define four combinations.
1. The easiest case to understand is fixedTPM true and fixedParent false, because it isn't permitted. A key with fixedTPM true can't be duplicated, whereas fixedParent false says it can be moved to a different parent The TPM checks for and doesn't allow this inconsistency.
2. fixedTPM true and fixedParent true defines an object that can't be duplicated, either explicitly or implicitly.
3. fixedTPM false and fixedParent true indicates a key that can't be directly duplicated. It's fixed to a parent. However, if an ancestor is duplicated, this key naturally moves with it. That is, it may be in a duplication group, but it isn't the root of a group.
4. fixedTPM false and fixedParent false indicates a key that can be duplicated. If it's a parent, a duplication root, its children move with it.
The fourth case is perhaps the most interesting, because the key may be a duplication root. For example, it permits backup of a group of keys, called a duplication group in the specification. That is, once this parent is duplicated, all descendants are immediately duplicated to the new location without the need to duplicate each child individually. It also simplifies the task of tracking the location of a key. You need only track the parent, not children with fixedParent true, which remain with their parent.
Observe also that these children are still wrapped by their original parent. The key being duplicated must have fixedParent false. The children can be loaded into the TPM where their parent is loaded, regardless of where their parent was originally loaded. fixedParent determines whether a key can be directly duplicated, not whether it can or can't be duplicated by implication when its parent is duplicated. In other words, the child wasn't duplicated through any operation involving the TPM. Once its parent is duplicated, the child can be simply moved to the new location (for example, with a file copy of the wrapped child key) and loaded.
A child can have more than one parent. The duplication process establishes a new parent-child relationship but doesn't destroy the old one.  The key is now a child of both the original parent and the new parent. A key can be part of more than one duplication group if more than one of its ancestors has fixedParent false. That is, a child key in a tree can have more than one ancestor that is a duplication root. If any root is duplicated, the child is duplicated.
The TPM puts a restriction on the relationship between parent and child. A child can only be created with fixedTPM true if:
1. Its parent also has fixedTPM true (the parent can't be explicitly duplicated).
2. Its parent has fixedParent true (the parent can't be implicitly duplicated).
The TPM enforces this restriction back to the primary keys, which are by nature fixed to their TPM.
-  It's for this reason that the TPM 1.2 term migration was changed to duplication. Migration implied that the old parent-child relationship was severed, which isn't true even in TPM 1.2.