Attributes describe facts about an identity.

Examples:

Each attribute has:

attribute = {
  name,              // machine key
  type,              // scalar, enum, boolean, reference
  issuer,            // gov, institution, protocol, self
  value,             // encrypted in the Vault
  valid_from?,
  valid_until?,
  attestation_proof?
}

Attributes live in the Merkle Attribute Tree:

attributes_root = MerkleRoot([
  leaf(attribute_1),
  leaf(attribute_2),
  ...
])

The root is committed into the Identity Commitment.