Transactions on Cryptographic Hardware and Embedded Systems 2026
Racing against the clock:
side-channel leakage from crossing asynchronous clock domains
README
Support files for paper "Racing against the clock: side-channel leakage from crossing asynchronous clock domains"
Note that results will differ slightly each time (and from the tables in the paper) due to outlier removal using a random sampling approach to establish the median, and standard numerical precision.
How to run
Clone/extract the repository. Then, in the src folder, create and activate a virtual environment, install the requirements, and run the runall.sh script to generate all figures (as PNG) and a markdown representation of the tables.
cd src
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./runall.sh
This has been tested on MacOS 15, Python 3.13.5.
Items covered:
initial_investigation.py
- Fig 2/3/16/17: comparison of activity against RAPL, clock ratio, CLOCK_MONOTONIC, RDTSC
- Table 1: Comparison of spin and sha
instructions
- Table 2: Comparison of pairwise t-values for different instructions
Operands
- Table 3: Comparison of multiplication by all-0 vs. all-1
imx_original
- Figure 4: Leakage behaviour on i.MXRT1166 processor - Violin plot and correlation progression
fpga_frequencies
- Figure 8: Experiments on FPGA over different memory clock frequencies - variability and t-values
- Table 4: Comparison of different frequencies on FPGA with significant leakage
- Figure 9: Distribution of measurements for HW0 (blue) and HW8 (orange) at different frequencies, highlighting substantial difference at asynchronous clock
fpga_cpa
- Figure 10: CPA convergence traces for toy-cipher on FPGA platform
dma_timer_nop_add.py
- Figure 11: Timer delta capture through DMA over time for NOP and ADD
covert_channel.py
- Figure 12: Average of 10 000 interpolated traces after filtering, showing the ability to make a covert channel
modexp_attack.py and modexp_attack_plot.py
- Figure 13: Attack on sections of 512-bit key. The correct key bits are annotated at the bottom of each plot.
imx_tiny_aes.py
- Figure 15: CPA convergence on first SubBytes over 545 000 traces on i.MX RT1166x