Intel® Agilex™ Device Security User Guide

ID 683823
Date 11/22/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

3.3.4. Partial Reconfiguration Bitstream Encryption

You can enable bitstream encryption on some  Intel® Agilex® FPGA designs that use partial reconfiguration.

Partial reconfiguration designs utilizing the Hierarchical Partial Reconfiguration (HPR), or Static Update Partial Reconfiguration (SUPR) do not support the bitstream encryption. If your design contains multiple PR regions, you must encrypt all personas.

To enable partial reconfiguration bitstream encryption, follow the same procedure in all design revisions.

  1. On the Intel® Quartus® Prime File menu, select Assignments > Device > Device and Pin Options > Security.
  2. Select the desired encryption key storage location.
    Figure 6. Partial Reconfiguration Bitstream Encryption Setting

    After you compile your base design and revisions, the software generates a .sof file and one or more .pmsf files, representing the personas.

  3. Create encrypted and signed programming files from .sof  and .pmsf  files in a similar fashion to designs with no partial reconfiguration enabled.
  4. Convert the compiled persona .pmsf file to a partially encrypted .rbf file:
    quartus_pfg -c -o finalize_encryption_later=ON \ 
    -o sign_later=ON encryption_enabled_persona1.pmsf persona1.rbf
  5. Finalize bitstream encryption using the quartus_encrypt command line tool:
    quartus_encrypt --family=agilex \  
    --operation=ENCRYPT --key=aes_root.qek persona1.rbf encrypted_persona1.rbf
  6. Sign the encrypted configuration bitstream using the quartus_sign command line tool:
    quartus_sign --family=agilex --operation=SIGN \ 
    --qky=design0_sign_chain.qky \ 
    --pem=design0_sign_private.pem encrypted_persona1.rbf \ 
    signed_encrypted_persona1.rbf 
    quartus_sign --family=agilex --operation=SIGN \ 
    --module=softHSM --module_args="--token_label=agilex-token \
    --user_pin=agilex-token-pin --hsm_lib=/usr/local/lib/softhsm/libsofthsm2.so" \
    --qky=design0_sign_chain.qky --cancel=svnA:0 \
    --keyname=design0_sign encrypted_persona1.rbf signed_encrypted_persona1.rbf