How Hardware Gets Hacked (Part 10): The 'Birthday Problem' Attack
A 32-bit nonce gives over 4.3 billion possible values, which sounds like plenty, until the "birthday problem" shows that an attacker with a table of recorded (nonce, response) p...
A living archive of consulting work, conference presentations, technical articles, and educational content. Filter by type, subject, or venue below.
A 32-bit nonce gives over 4.3 billion possible values, which sounds like plenty, until the "birthday problem" shows that an attacker with a table of recorded (nonce, response) p...
A hands-on exercise in securing the eCTF key fob's feature-enabling process: review the design, identify the missing security requirements, forge a feature file, and defend agai...
Turning from the now-hardened unlock process to the eCTF key fob's pairing pin, which falls to a brute force attack in hours and to a timing attack in under a hundred guesses, t...
How to build the minimal breadboard circuit for an STM32C0 microcontroller for only a few dollars in parts. Discusses the five key design considerations for any microcontroller ...
Slides from Teardown Portland 2026: a tour of an attacker's menu of options against physical hardware, from a free datasheet read to focused ion beam edits on bare silicon.
Workshop materials from Teardown Portland 2026: building up a badge-and-reader access control system from a bare UID check to mutual authentication with derived keys and session...
Breaking the eCTF key fob's rolling-counter-plus-MAC defense with RollJam, forced rollback, and forced rollover attacks, then closing the gap with a challenge-response nonce sch...
MicroPython, the Zephyr shell, Lua, and Forth, evaluated head-to-head on an STM32 Nucleo board for time to a working REPL, compiled footprint, execution speed, and how hard each...
Replacing the eCTF key fob's broken PRNG-based unlock scheme with a rolling counter and a real MAC — AES-CMAC — so the car can verify an unlock message came from a paired fob wi...
Why stepping away from a hard bug — a walk, a shower, doing the dishes — often gets you to the fix faster than staring at the screen for one more hour.
Exploiting the eCTF key fob's completely unauthenticated unlock message via a literal replay attack, then building — and breaking — a PRNG-based defense that looks secure right ...
The first complete attack/defense cycle in this eCTF series: reading device secrets over an unlocked debug port, disabling it, and formalizing what was learned as a threat model...
Workshop slides, recording, and exercise files from the Embedded Online Conference 2026: hands-on differential power analysis and fault injection using the ChipWhisperer Nano.
Part 3 is about reconnaissance: a four-step framework for building an attacker's understanding of the target before attempting any exploit.
I got to be on the Embedded.fm podcast again! We talked about hardware security, motivation, conference talks, and writing.
Part 2 rebuilds the eCTF project in four progressive builds — simulator, test commands, real hardware, automated tests — and examines what information attackers can and cannot s...
Part 2 works through the race conditions in the double-buffer scheme from Part 1, categorizes three types of critical sections, and applies three tools to protect them — then no...
Naive printf calls from ISRs or RTOS threads produce garbled output or worse. Part 1 works through three solutions — disabling interrupts, a mutex, and a double buffer — each be...
Microchip's Configurable Logic Block gives you programmable digital logic inside your microcontroller — fast enough for hardware-speed tasks, flexible enough for Manchester enco...
Printf adds over 4 kB of flash just for a single call. This article benchmarks a range of techniques for shrinking that footprint, from compiler flags already on by default to s...
I got to be on the Embedded.fm podcast again! We talked about Elecia and Chris's annual performance review and raised money for Elevate Tutoring.
A project log for building outdoor addressable LED Christmas lights using the Pixelblaze ESP32-based controller — covering power delivery, weatherproofing, mounting, and the har...
Introduction to the series: the MITRE Embedded Capture the Flag competition, the insecure car-and-key-fob system that serves as the target, and what flags are at stake across it...
A survey of hardware attack techniques organized as six levels of cost and invasiveness — from researching a device online to decapping its IC and editing the silicon with a foc...
Slides from Hackaday Supercon 2025: a survey of practical techniques for running embedded firmware on a desktop computer, from simple printf/scanf stubs all the way to virtual h...
Part 3 replaces human-readable text with binary serialization, reaching 38.9k–117.8k messages per second using MessagePack, FlatBuffers, and bitproto — a 274–829× improvement ov...
Part 2 pushes from 140 µs to 88 µs per debug message using asynchronous transmission and buffered USB — roughly 80× faster than the original baseline, though with significantly ...
A 16-bit ADC doesn't always give you 16 bits of useful information — noise can reduce effective resolution dramatically. This article shows how to measure it and recover lost bi...
Workshop slides from Embedded Systems Summit 2025: hands-on differential power analysis and fault injection using the ChipWhisperer Nano.
Slides and recording from JawnCon 0x2: a survey of hardware attack techniques organized as a spectrum from cheap and easy reconnaissance all the way to focused ion beam surgery ...
A Python function for parsing GCC dependency files becomes a case study in what separates "barely working" code from simple code — and why simplicity is worth pursuing deliberat...
Part 1 of a three-part series: hardware settings and one library swap reduce a 22-character debug message from 7,030 µs to 140 µs on a Nucleo-F042K6 — a 50× speedup with three c...
A step-by-step walkthrough of differential power analysis (DPA) — using an oscilloscope and statistics to extract a private AES128 key from a running device — with practical cou...
Two additions that make printf debugging significantly more useful: automatic source location tagging via C macros, and severity-level filtering with compile-time removal of the...
Slides and recording from Teardown Portland 2025: a data-driven case that the super loop has a much bigger place in multitasking firmware than we give it credit for — and that p...
The case for printf debugging as a complement to single-step debugging, not an inferior substitute — and the class of problems where it's actually the better tool.
Why passing large structs by pointer instead of by value saves memory copies and instruction cycles in RTOS task communication — and the three ownership patterns that make it sa...
Workshop slides and recording from the Embedded Online Conference 2025, covering how to cleanly and simply detect, propagate, and handle exceptions in embedded C/C++.
I got to be on the Embedded.fm podcast again! We talked about my proposal for a computer architecture book based on a 4-bit computer (the Hackaday Supercon 2022 badge, affection...
A call for engineers to pay forward the experiences that first drew them to the field — a short list of organizations giving more young people access to coding and electronics e...
Two more sophisticated simulation options: virtual hardware tools (Wokwi, Renode, QEMU, Proteus) that mimic the MCU itself, and a PyQt GUI as a richer front end — with practical...
The case for simulating your embedded project on a desktop machine — and how to do it with the simplest possible approach: swapping hardware I/O for printf and scanf, with pract...
A candid personal essay about struggling with perfectionism and overachievement in graduate school — and the unexpected lessons it unlocked about motivation, limits, and what it...
Two graphical tools every embedded engineer should be using — software block diagrams for system architecture and flowcharts for algorithm logic — plus a tour of free tools (Mer...
The concluding installment: implementing mailboxes, queues, counting semaphores, and the Observer pattern on top of the Superduperloop, plus a dispatch-queue scheduler — complet...
Workshop slides from Teardown Portland 2024: an introduction to the Voja4 retro computer badge, its 4-bit architecture and instruction set, and hands-on assembly programming.
Slides and recording from Teardown Portland 2024: how to add a lightweight command-line interface to an embedded system over UART, from parsing input to dispatching commands and...
A survey of ready-to-use cooperative schedulers — Protothreads, ULWOS2, cocoOS, SST0/QV — alongside a walkthrough of how to implement thread flags, binary semaphores, and event ...
Three targeted improvements to the basic superloop — task priorities, interrupt-driven tasks, and finite state machines — that bring worst-case response time close to a preempti...
Slides from the Embedded Online Conference 2024: what happens when you think of an array as a fixed-size O(1)-access structure rather than just a collection of values — and how ...
The case for the humble superloop as a serious scheduler — how to measure task deadlines and worst-case execution times, determine schedulability, and assign priorities before r...
A curated survey of skill roadmaps for embedded systems engineers — from ACM curriculum guidelines to book recommendations — to help practitioners assess their current knowledge...
Slides and recording from Hackaday Supercon 2023: an exploration of the elegant architecture behind the Voja4, the custom 4-bit retro computer badge designed by Voja Antonić.
A tour through Alan Turing's 1936 thought experiments — what a "Turing machine" is, why it matters, and what it actually means when a programming language or system is called "T...
Workshop materials from Teardown Portland 2023: guided assembly and programming of HackerBox #0040, a PIC microcontroller kit with a PICkit 3 programmer, LCD display, and GPS mo...
Slides and recording from Teardown Portland 2023: the five things every MCU board needs, why the minimal circuit is simpler than you think, and how to source, lay out, and build...
I got to be on the Embedded.fm podcast! We talked about building command line interfaces, good design practices in C, creating MCU boards, wielding the PIC of destiny, and going...
Slides from the Embedded Online Conference 2023: how to add a lightweight command-line interface to an embedded system over UART, from parsing input to dispatching commands and ...
Slides from the Embedded Online Conference 2023: a systematic tour of OOP techniques in C, from opaque structs and singletons through compile-time and link-time polymorphism, up...
Workshop materials from Hackaday Supercon 2022: a hands-on introduction to STM32 development with CubeIDE and the HAL, aimed at makers comfortable with Arduino who want to step ...
A complete undergraduate computer architecture course built around the LC-3 and designed to take students from logic gates all the way to a working 16-bit computer with I/O and ...