The AES crypto engine has access to a diverse set of key sources. Non-volatile key sources include eFUSEs, BBRAM, a PUF key encryption key (KEK), and a family key. These keys maintain their values even when the device is powered-down. Volatile key sources include an operational key and a key update register key.
The device key source selection is exclusively done by the CSU ROM based on the authenticated boot image header. A device key can be from any of the following sources (see This Figure).
In addition to the BBRAM and eFUSE key storage locations, the Zynq UltraScale+ MPSoC also allows for the device key to be stored externally in the boot flash. This key can be stored in its obfuscated form (i.e., encrypted with the family key) or in its black form (i.e., encrypted with the PUF KEK).
A device key (a key used to boot the device) is selected by the CSU ROM based on the authenticated boot header or the ENC_ONLY eFUSE setting. To use the device key post boot, the following conditions must be met.
•The device key is available post boot if the initial configuration files are encrypted or if the authentication only option is selected. See Hardware Root of Trust Only Boot (Auth_Only Option) for more information.
•The device key used during boot must be used for all image partitions. The key source used for partition decryption cannot be changed until the next POR. For example, it is not possible to encrypt some partitions with a BBRAM key and others with an eFUSE key. It is also not possible for some partitions to use the operational key and other partitions to not use the operational key.
•The device key can be changed to the PUF KEK if all of the conditions in the section are fulfilled. See Secure Non-Volatile Storage for more information.
Using only the device key post boot is not restricted. A user key can also be loaded into the KUP. The aes_key_src register can be used to select between the device key and the key update key. This Figure shows the key selection process and the protections in place.