Manually create a Public Key Infrastructure tree (PKI tree)

Before building a signed U-Boot image, several certificates (each one with its own key) must be generated. This is a manual process and the PKI tree must be in place before you configure your Digi Embedded for Android project for secure boot.

Each certificate has a different purpose and name:

Generate a Public Key Infrastructure (PKI) tree

  1. If you have not previously done so, download the NXP Code Signing Tool (CST) and include it in the Android sources directory. Note that you will need to register with the NXP website. You can find instructions in device/digi/common/trustfence/cst/README.txt.
Secure boot support
~~~~~~~~~~~~~~~~~~~
Digi Embedded for Android (DEA) uses NXP's Code signing Tool (CST) for the
High Assurance Boot library when generating secure firmware images. You must
download the CST tool and unpack it into this directory. Also, some patches
need to be applied before using it.
Basic instructions:
# cd dea-<version>/device/digi/common/trustfence/cst
# tar xf cst-2.3.2.tar.gz
# cd cst-2.3.2
# for i in ../patch/*.patch; do patch -p1 < $i; done
  1. If you already have a certificate that you want to use as CA, skip this step. Otherwise, create a plain text file called serial inside the <CST_path>/keys folder. The content of this file must be a positive 32-bit number that uniquely identifies the certificate per certification authority.
<CST_path>/keys/serial 
1234

Also, create a plain text file called key_pass.txt inside the <CST_path>/keys folder. This file defines the password (at least four characters long) to be used to protect all the generated private keys. The content of this file is the password repeated twice:

<CST_path>/keys/key_pass.txt 
my_pass_phrase
my_pass_phrase

The user is responsible for protecting the pass phrase for the private keys and the private keys themselves. 

Loss of the pass phrase or the private keys will result in not being able to sign code with the affected keys.

In order to customize the certificate information (company name, country, email, etc.), edit the configuration files under the ca folder. Refer to the OpenSSL documentation for more information about those files.

  1. Use the hab_pki_tree bash script to generate the PKI tree.
user:/dea-<version>/device/digi/common/trustfence/cst/cst-2.3.2/keys$ ./hab4_pki_tree.sh
(...)
Do you want to use an existing CA key (y/n)?: n
Do you want to use Elliptic Curve Cryptography (ECC) (y/n)?: n
Enter key length in bits for PKI tree: 2048
Enter PKI tree duration (years): 10
How many Super Root Keys should be generated? 4
Do you want the SRK certificates to have the CA flag set? (y/n)?:

You will be asked about the following parameters:

  • You can use an existing key as CA key by answering 'y' in the first question and then providing the path without extension of the certificate and the key for the certificate to be used as CA.
  • If asked about using ECC cryptography, answer 'n', as RSA is used for the signature.
  • The following key sizes are supported: 1024, 2048 and 4096.
  • The PKI duration is used to compute the expiration date for the certificates.
  • Note HAB4 does not take into account the expiration date. A signed U-Boot image will remain valid if its certificate has expired.

  • You must generate four keys (for key revocation purposes).
  • The last question regarding the “CA flag” in the SRK must be answered as 'y'.

The complete PKI tree is created. 

  1. Use the new generated keys to sign your artifacts. In to your localconfig.mk file located in your Android sources directory set the path to the generated keys:
TRUSTFENCE_SIGN_KEYS_PATH := "/path/to/generated/keys"

For more information about the PKI tree and the PKI tree generation process, see the documentation under the doc directory.

Note The CST folder to be used in Android should only contain one PKI tree and no other security-related files (keys, certificates, passwords, etc.) in any subfolder. Attempting to use a CST folder with several PKI trees or extra certificates or keys could fail.