In Spartan UltraScale+ FPGAs asymmetric authentication of the PDI is done using post-quantum cryptography (PQC) or in some devices ECDSA P-384. See Table 1 for details. The primary public key (PPK) is only used for verifying the signature of the secondary public key (SPK), while the SPK is used to authenticate hash block. The hash block contains hashes of the boot header, PLM, and the programmable logic bitstream. The authenticated hashes in the hash block are used to validate the boot header, PLM, and the bitstream. The following table lists the characteristics of each public key type.
| Public Key | Number | Location | Revocable |
|---|---|---|---|
| Primary (PPK) | up to 3 | External memory with hash in eFUSEs | Yes |
| Secondary (SPK) | 96 | Programmable device image (PDI) | Yes |
To reduce the number of eFUSEs required in the device, the full public key is stored in the PDI while the hash (either SHA3-256 or SHA3-384) of each key is securely stored inside the device using eFUSEs. During the secure configuration process, the internal configuration logic and firmware first validates the integrity of the full public key stored externally by hashing it and then taking that hash and comparing it against the value stored in eFUSEs. There are also 96 SPKs available, each of which are also revocable. The SPK is delivered inside the authenticated PDI and is signed by the PPK, which is the primary purpose of the PPK. The SPK is intended to authenticate everything else.
If authentication passes, the configuration goes to completion
through the startup cycle. Pulsing the PROGRAM_B
signal or power-on reset is required to reset the configuration interface.