GitHunt
LE

Ledger-Donjon/silicon-toaster

SiliconToaster

SiliconToaster

SiliconToaster is an open-source hardware electromagnetic fault injection device, designed for hardware security research. It has the following features:

  • Software programmable voltage, from 0 V to 1000 V.
  • Stored energy: 1 J at 1000 V.
  • Capable of multiple fault injection.
  • Dual socket coil mounting, for polarity selection.
  • USB-only powered.

Warning: this device is experimental and for research purpose only. High-voltage is exposed on the PCB, which can present electrical hazard. Use with caution and at your own risk. Beware that the coil body is connected to the high potential, NOT at the ground. Also, the exposed capacitor bank stores an important amount of energy.

Building the firmware

To build the firmware, rust shall be installed on your system (see instructions for installation).

The rust toolchain for Armv6-M Thumb must be installed:

rustup target add thumbv6m-none-eabi

The firmware can then be compiled using cargo:

cd firmware
cargo objcopy --release --bin silicontoaster -- -O binary silicontoaster.bin

To flash the device, stm32flash utility is required. The MCU bootloader can be enabled by shorting the header close to the USB connector using a jumper, before connecting the PCB on USB. Then the following command will flash the MCU (replace /dev/ttyUSB0 with the serial device in your situation):

stm32flash -w silicontoaster.bin -v -g 0 /dev/ttyUSB0

Alternatively, a makefile can run those steps:

cd firmware
make all
make flash

To enable device recognition, the FTDI USB-serial converter must be flashed using ftdi_eeprom tool. Warning: be sure no other FTDI device is connected before running this command!

cd ftdi
bash flash.sh

Running the software

To use the device, run python3 silicontoaster/tool.py. This will run a graphical interface that allows setting the operating voltage and display in real-time the voltage in the capacitors bank.

When running for the first time, configure the charge pump PID settings to Kp, Ki and Kd to 1. Be sure to have the jumper J5 installed (position closest to the USB).

The provided calibration values should work fine by default, it is not necessary to calibrate the device by yourself unless you want more accurate measurements.

Publication

This work was published in our Paper and presented during Hardwear.io 2020 conference.

Licensing

SiliconToaster is released under GNU Lesser General Public License version 3 (LGPLv3). See LICENSE and LICENSE.LESSER for license detail.

Languages

Rust49.3%Python45.7%HTML2.2%Linker Script1.1%Makefile0.8%CSS0.6%Shell0.3%

Contributors

GNU Lesser General Public License v3.0
Created June 4, 2023
Updated March 19, 2026