enigmastick

Small hardware. Open possibilities.

Cryptography,
in your hands.

Meet Enigma Stick. A homebrew USB hardware security module, built around the NXP SE051 secure element.

For developers, hardware enthusiasts, and the cryptographically curious.

Coming soon - pending hardware validation

Illustration of Enigma Stick: a green PCB with USB-C connector, secure element, buttons, and a shielded wireless module.
The hardware, uncovered.PCB v1.1 · Illustration

A little room to experiment

Give your code
a hardware counterpart.

A place to generate keys, try cryptographic operations, and explore what belongs on either side of the USB connection.

Explore the mechanisms

Generate & keep keys on the stick

RSA and EC key pairs, plus AES and HMAC keys. Customer private and symmetric key material stays inside the secure element.

Sign, encrypt & derive

Experiment with RSA-PSS, ECDSA, AES-GCM, HMAC, and ECDH followed by HKDF. Export public keys to work with your existing tools.

Build your own interface

Use the Rust host library, call its C API, or explore the binary USB protocol. Your application handles the experience; Enigma handles device operations.

From application to silicon

A short path to the secure element.

Keys & sessions
  1. On your computer

    Your application

    CLI, Seal, Keyring,
    or something you build.

  2. Host interface

    Rust library / C API

    Typed operations over
    the USB command protocol.

  3. On the stick

    ESP32-C3

    Commands, sessions,
    and key metadata.

  4. Over I²C

    NXP SE051

    Secret key storage
    and cryptographic operations.

Made for the stick

Three ways to put it to work.

All software
Device operations

CLI

Inspect device status, manage keys, and run cryptographic operations from your terminal.

Meet the CLI
File encryption

Seal

Encrypt files on your computer with a file encryption key protected by Enigma Stick.

Meet Seal
Local secret storage

Keyring

Keep encrypted secrets in a local database. Ask the stick to encrypt or decrypt their values.

Meet Keyring

Bring your own idea

Start with a connection.

The host library gives your software a direct interface to the stick. Start by opening a device and checking its state.

Rust
use enigma::Device;

fn main() -> Result<(), enigma::EnigmaError> {
    let mut stick = Device::open()?;
    let status = stick.status()?;

    println!("Token: {:?}", status.token);
    println!("Session: {:?}", status.session);
    stick.close()?;
    Ok(())
}

An open-source project, taking shape

Follow it from board to build.

The custom board is awaiting hardware validation. This site brings together the documentation and source links for the project. Firmware and the host library are available now; hardware designs and companion application repositories are coming soon.

Enigma Stick is a homebrew experiment in hardware-backed cryptography. It has not been independently security-audited.

Project & source