tezsign is a secure, air-gapped signing solution for Tezos consensus operations. It uses a dedicated hardware gadget (like a Raspberry Pi) connected via USB to a host machine, ensuring your keys remain isolated.
| Feature | TezSign | Russignol | BLS Signer | | :β | :β | :β | :β | | Supported Devices | π₯§ RPi Zero 2W, RPi4, Radxa Zero 3 | π₯§ RPi Zero 2W w/ PaperInk | π₯§ RPi Zero 2W w/ PaperInk | | Hardware Start Cost | < $20 USD * | ~$50 USD * | ~$50 USD * | | Tezbake Integration | Full | Partial | Partial | | Avg Signature Time | ~10ms | ~6ms | ~30ms | | Security | π High (Custom Wire Proto) | π High (Custom Image) | π‘οΈ Medium | | Power Loss Safe | β Yes | β Yes | β οΈ No | | Boot Time | β±οΈ 15s | π 1s | ~1.5m | | Multi-Device Support| β Yes | β No | β No | | Multi-Baker Support | β Yes | β No | β No | | Companion App | Required | Optional | No | | Physical Pinlock | β No (App-based) | π Yes (Touch Screen) | π Yes (Touch Screen) | | Auto Unlock on Boot| β Yes (Optional) | β No | β No | | Compressed Image Size | πΎ ~140MB | π¦ 7MB | π 1.95GB | | License | π SSPL | π MIT | π MIT |
Note: The comparison table above is accurate as of December 2, 2025.
Disclaimer: The values for other signers in the comparison table are provided by their respective providers or users and have not been independently verified by us. If you notice any inaccuracies, please let us know.
* * Shipping & taxes may apply.
Note on Power Loss: βYesβ indicates the device is hardened against corruption if power is suddenly cut.
NOTE: There is a known issue with the Raspberry Pi DWC2 USB driver that can cause USB stack failures. We have implemented a workaround to mitigate this, which can be found in our DWC2 patch. This is not an operational issue in itself, but you should be aware that the Linux kernel has been amended to address this.
tezsign consists of two parts:
tezsign command-line tool) which you use to control the gadget from your host machine.Note: If you want to run
tezsignas a standalonesystemdservice (not in conjunction withtezbake) on Linux or macOS, please refer to the ami guide for detailed instructions.
dev in their name.(Linux Hosts Only) Add udev rules:
Note: If you are installing with
tezbakeor using the ami, you do not need to install udev rules manually. Bothtezbakeand the ami handle this automatically duringsetup-tezsign.
To allow your host machine to communicate with the gadget without root privileges, you need to add a udev rule. Run the helper script (it writes /etc/udev/rules.d/99-tezsign.rules and reloads udev) to install the required rule:
sudo ./tools/add_udev_rules.sh
After running the script, make sure your user is part of the plugdev group:
sudo usermod -aG plugdev $USER
You will need to log out and log back in for this group change to take effect.
After the initial connection, the device will configure itself and reboot. This process takes approximately 30 seconds.
NOTE: The Radxa Zero 3 may encounter an issue where it fails to boot correctly after the initial configuration. If this occurs, wait until the LED diode stops blinking (indicating the configuration is complete), then unplug and reconnect the device. This issue appears to be related to certain SD cards, as some exhibit this behavior while others do not.
After about 30 seconds, your device should be ready. Itβs time to initialize it.
Assuming your host app is available in your path as tezsign:
./tezsign list-devices
./tezsign version
./tezsign init
Warning: It is not currently possible to change this password. Please choose wisely!
./tezsign new consensus companion
(You can use any aliases you like, not just βconsensusβ and βcompanionβ.)
./tezsign list
./tezsign status
BLpk) and a proof of possession. You can get these details using:
./tezsign status --full
Use the BLpk and proof of possession to register the keys as a consensus or companion key. You can use a tool like tezgov to do this comfortably.
./tezsign unlock consensus companion
(Use the same aliases you created in step 3.)
./tezsign run --listen 127.0.0.1:20090
If you want periodic host-to-gadget keep-alive frames when no writes happen, add --keep-alive:
./tezsign run --listen 127.0.0.1:20090 --keep-alive=100ms
Note: Keep-alive is optional and the minimum accepted value is
10ms. At this point,tezsignis ready for baking. Make sure your baker points to it when the registered keys activate, and it will sign baking operations automatically.
See security.md
See readme.dev.md