PSA Crypto KDF

This example uses the PSA Crypto API to perform the Key Derivation Function (KDF) on the supported device.

In cryptography, a key derivation function is a cryptographic hash function that derives one or more secret keys from a secret value such as a master key, a password, or a passphrase using a pseudo-random function. KDFs can be used to stretch keys into longer keys or to obtain keys of a required format, such as converting a group element that is the result of an ECDH key exchange into a symmetric key for use with AES.

The example redirects standard I/O to the virtual serial port (VCOM) of the kit. By default, the serial port setting is 115200 bps and 8-N-1 configuration.

Except for the Series 1 Cortex-M0+ device, the example has been instrumented with code to count the number of clock cycles spent in different operations. The results are printed on the VCOM serial port console. This feature can be disabled by defining PSA_CRYPTO_PRINT=0 (default is 1) in the IDE setting (Preprocessor->Defined symbols).

Key Storage

The following key storages are supported in this example:

Key Derivation Algorithm

The following key derivation algorithms are supported in this example:

In this example, the ECDH key agreement is based on SECP256R1 if the PSA_ALG_KEY_AGREEMENT algorithm is used.

Hash Algorithm (HKDF)

The following hash algorithms (HMAC) are supported in this example:

Derived Key Size

The following derived key sizes are supported in this example:

Derived Key Algorithm

The following derived key algorithms are supported in this example:

The default derived key algorithm is PSA_ALG_CTR, it is defined in app_process.h.

The PSA_ALG_CHACHA20 and PSA_ALG_CHACHA20_POLY1305 can only use a 256-bit key.

PSA Crypto API

The following PSA Crypto APIs are used in this example:

Getting Started

  1. Upgrade the kit’s firmware to the latest version (see Adapter Firmware under General Device Information in Simplicity Studio 5 Users Guide).
  2. Upgrade the device’s SE firmware to the latest version when Series 2 device is used (see Secure Firmware under General Device Information in Simplicity Studio 5 Users Guide).
  3. Open any terminal program and connect to the kit’s VCOM port (if using Device Console in Simplicity Studio 5, Line terminator: must be set to None).
  4. Create this platform example project in the Simplicity IDE (see Examples in Simplicity Studio 5 Users Guide, check Platform() checkbox to browse the platform examples).
  5. Build the example and download it to the kit (see Simple Build and Flash Programmer in Simplicity Studio 5 Users Guide).
  6. Run the example and follow the instructions shown on the console.

Additional Information

  1. The example uses the CTR-DRBG, a pseudo-random number generator (PRNG) included in Mbed TLS to generate the random number. If the example is running on a device including a TRNG (True Random Number Generator) hardware module, the TRNG will be used as an entropy source to seed the CTR-DRBG. If the device does not incorporate a TRNG, the example will use RAIL or ADC as the entropy source.
  2. If an algorithm is not supported in the hardware accelerator of the selected device, the PSA Crypto will use the software fallback feature (if enable) in Mbed TLS.
  3. Change the BASE_KEY_ID and DERIVE_KEY_ID values in app_process.h if these key IDs had already existed in NVM3.
  4. The master key and derived key must be in the same format, either plain or wrapped.
  5. The PSA_ALG_KEY_AGREEMENT algorithm does not apply to the wrapped key.
  6. The default optimization level is Optimize for debugging (-Og) on Simplicity IDE and None on IAR Embedded Workbench.

Resources

AN1311: Mbed TLS to PSA Crypto Porting Guide