Skip to content

crosscon/UC1.1-Manifest

Repository files navigation

UC1.1 Manifest

This repository contains instructions on how to build and run a Proof of Concept (PoC) Trusted Service for secure PUF Authentication based on the ZK-PUF scheme.

For Trusted service itself, theoretical background and verification please take a look at crosscon/ZK-PUF-Zephyr-Demo (PUF_VM).

Requirements

  • python3-venv
  • make
  • LinkServer
  • arm-none-eabi-objdump
  • lua
  • (optional) tio v3.8

Workaround for A3 Revision of LPC55S69

As of now the demo fails to start on A3 revision of LPC55s69, more details about the issue here. To run the project on this revision use the following command after everything has been built and flashed:

lpcbuilder/run.sh bash -c 'scripts/gdb_start.sh'

This command launches gdb inside a Docker container, as the NXP LinkServer is required for debugging.

Due to NXP’s software license restrictions, redistribution of their binaries and packages is not permitted. You must manually provide the respective NXP software components for the Docker image

All-in-one

To install dependencies, build everything, and flash the image to the board in one command:

Important: Ensure the LPCxpresso55S69 board is connected via the P6 Debug Link port before running this command, as both enrollment and flashing steps require an active connection.

make all

Building

Prerequisites

After cloning the repository, initialize the virtual machines (VMs), the enrollment app, and the hypervisor submodules:

git clone https://github.com/crosscon/UC1.1-Manifest.git
cd UC1.1-Manifest
git submodule update --init --recursive

To not install west utility requirements globally using a python virtual environment is suggested. This can be overriden by passing USE_VENV=0 to make.

python3 -m venv .venv
source .venv/bin/activate

To install python dependencies and Zephyr SDK run:

make install-deps

And to fetch required code for all zephyr targets run:

make update

Enrolling

The PUF implementation for the LPCxpresso55S69 requires two non-secret values to reconstruct the PUF response:

  • Activation Code
  • Key Code

For this reason a Enrollment App has been created. It extracts these values and prints them over a serial connection, after which they are saved and transformed into binaries for use in the final PUF_VM image.

Important: For this step connect the LPCxpresso55S69 board to your host machine using a USB cable through the P6 Debug Link port.

make enroll

Two scripts are provided within this step that are chosen based on users environment and input:

Expected Output

(...)
Activation code hex saved to /tmp/activation_code.hex
Activation code bin saved to /tmp/activation_code.bin
Intrinsic key hex saved to /tmp/intrinsic_key.hex
Intrinsic key bin saved to /tmp/intrinsic_key.bin
renamed '/tmp/activation_code.bin' -> '/home/user/UC1.1-Manifest/build/enrollment_data/activation_code.bin'
renamed '/tmp/activation_code.hex' -> '/home/user/UC1.1-Manifest/build/enrollment_data/activation_code.hex'
renamed '/tmp/intrinsic_key.bin' -> '/home/user/UC1.1-Manifest/build/enrollment_data/intrinsic_key.bin'
renamed '/tmp/intrinsic_key.hex' -> '/home/user/UC1.1-Manifest/build/enrollment_data/intrinsic_key.hex'
Output moved to build/enrollment_data/

Enrollment must be performed once per device. The resulting binaries will be reused in all future builds. Re-enrolling the device will make all previous $COM$ values obsolete as PUF response will differ thus authentication won't be possible with previously used data.

Building

To build all components, apply the enrollment data and align VM start-points within hypervisor:

make build

Cleaning

To clean build output simply run:

make clean

Flashing

Connect the LPCxpresso55S69 board to your host machine using a USB cable through the P6 Debug Link port. Currently the script works only with the LinkServer utility. Then simply run:

make flash

Running

GUEST_VM occupies flexcomm 3/UART 3 while PUF_VM occupies flexcomm 2/UART 2.

  • UART 2
    • RX - P1_24
    • TX - P0_27
  • UART 3
    • RX - P0_3
    • TX - P0_2

Pictures

License

See LICENSE file.

Acknowledgments

The work presented in this repository is part of the CROSSCON project that received funding from the European Union’s Horizon Europe research and innovation programme under grant agreement No 101070537.