Tomu

Related articles
Smartcards
Universal 2nd Factor
Yubikey
The
Tomu
is a family of open-source FIDO2 security keys. This article describes how to set up and use it. So far this page is limited to
The original Tomu
– help to expand it.
The original Tomu
Dependencies
To build Tomu images, you will need to
install
arm-none-eabi-gcc
and
arm-none-eabi-newlib
. To flash software on the Tomu, use
dfu-util
.
Verifying
Your Tomu should arrive with
dfu-util
installed. If you insert Tomu into the USB port and
toboot
starts, the green and red led should flash alternately. To check if your Tomu is running the boot loader
toboot
, and which version, run:
# dfu-util --list
...
Found DFU: [1209:70b1] ver=0101, devnum=19, cfg=1, intf=0, path="1-1.2", alt=0, name="Tomu Bootloader (5) v2.0-rc7", serial="UNKNOWN"
Note
Some Tomu programs – including the U2F code – set the
TOBOOT_CONFIG_FLAG_AUTORUN
flag, and start running immediately. They will then not (necessary) blink in this way and they will not be found by
dfu-util
! To enter Toboot on these devices, short out the two outer pins with tweezers while inserting Tomu into the USB port
[1]
.
Update the boot loader (toboot)
If the boot loader of your Tomu is not the
newest version
, you should update it. You can compile it yourself, or download a
prebuilt version
. Install the update like this:
# dfu-util -d 1209:70b1 -D toboot-booster.dfu
Installing other software
If you do
not
want to use Tomu as U2F token but use it for different purposes, you can find example applications
on GitHub
. They can be installed with
df-util
:
# dfu-util -d 1209:70b1 -D application.dfu
Installing U2F firmware (chopstx port)
The code for the U2F firmware for Tomu can be found
on GitHub
. Clone it with git and compile it:
$ git clone
https://github.com/im-tomu/chopstx.git
$ cd chopstx/u2f
$ make
You have two options:
Flash it without a key:
If flashed without a key, the firmware generates EC private key on its first boot and erases it when it enters the boot loader! You cannot create a backup. But this has the advantage that the key will never exist outside Tomu. Make sure to have an alternative second factor or recovery possibility. You cannot update the software without losing the private key.
Inject a private key:
Generate a key on your computer, inject it into the firmware and flash them together to the Tomu.
Injecting a private key (optional)
Generate your private key:
$ openssl ecparam -name prime256v1 -genkey -noout -outform der -out key.der
You may want to back it up encrypted and/or offline. Inject it to the build:
$ ./inject_key.py --key key.der
Flashing
You can flash the software to the device:
# dfu-util -v -d 1209:70b1 -D build/u2f.bin
When the flashing is successful, the LEDs should have stopped flashing. Remove it and plug it in again – with the U2F software the red LED should flash only very shortly and quickly.
Updating or restoring
If you have injected a private key, you can build the software again and inject the key. You must however set the counter to a value at least 1 higher than it was on the Tomu:
$ ./inject_key.py --key key.der --ctr 1001
If you still have the original Tomu (i.e. you want to update) you can find out the counter in the Yubikey demo site. Otherwise, set it to a value "big enough".
Usage
You can use
https://webauthn.io/
or the Yubikey demo site to test your U2F key or with
pamu2fcfg
on terminal:
Plug the Tomu in. When the application (for example your browser) asks you to press the button, the red LED on the Tomu starts to blink. You have now to press the "lower button". The capacitive buttons are the four contact areas on the end of the Tomu. The "lower" one is from watching at it from the side with the chip on it. Press it with your finger – it can be tricky to reach – in worst case use a metal screwdriver or similar. When you pressed it, the red LED stays on for a few seconds then the application receives the answer.