Components of rustBoot
At its core, rustBoot
is comprised of 4 components
- the core bootloader
- a minimal hardware abstraction layer
- fast and safe crypto drivers
- rustBoot firmware interface
The core bootloader
- has a tiny trusted computing base i.e. its less than
32KB in size
when compiled to an executable. - this includes signature-based authentication, reliable firmware updates with rollbacks and protections against downgrades attacks.
A minimal hardware abstraction layer
rustBoot provides abstractions for the following hardware classes i.e. it exposes a tiny API for you to easily integrate the following types of hardware.
- flash memory controllers: NVMC, SPI-flash, EMMC block devices etc.
- TrustZone: Cortex-M or Cortex-A
- serial interfaces: UART(s), GPIO(s)
Note: To minimize integrational complexity and enhance security, we already provide a number of different hardware drivers written in safe-rust. So, you can use
your own drivers using rust-ffi
or use existing ones from the repo.
Fast and safe crypto drivers
hardware secure elements or accelerators:
again, rustBoot offers drivers for crypto hardware or you can use your own.- examples of supported vendor-specific crypto modules include
ATECC608a
.
- examples of supported vendor-specific crypto modules include
software implementations of crypto-libraries:
rustBoot uses theRustCrypto
project as its software crypto provider.- This includes all crates in the rustcrypto project - hashing, signing, verification, encryption etc.
rustBoot firmware interface
- rustBoot complies with a key requirement of the IETF-SUIT standard and does not include a networking stack, instead networking is offloaded to the underlying firmware/OS.
- Firmware updates are downloaded and stored in non-volatile storage.
- In order to trigger the update, rustBoot provides a simple API that can be called from within bare-metal firmware or linux.
Note: In the above context, firmware refers to either linux or bare-metal firmware.