00Download & boot

Three steps, once. Then the machine is a signer.

All of this happens on the computer you are reading this on — getting the file, checking it, and writing it to a stick — except the last part, which happens in your computer's start-up menu. When you are through it, How to Use picks up at the signer's first screen.

01Get the image

Download it to start. Rebuild it to trust it.

There is a ready-made image, and it is the sensible way to try SignerOS this afternoon. But a file somebody else prepared is a signer you are trusting them with — and the checksum next to it was published by the same people as the file, so on its own it only proves the download did not get corrupted. Building it yourself is what settles the question: the build is designed so that everyone who compiles the same version gets a byte-for-byte identical result. Download it today; build it before the wallet matters.

LATEST RELEASE

signeros-1.3.0-x86_64.img

1.3.0 385 MiB WRITTEN ANY MODERN PC MIT
▼ Download the image

Also: every version and its release notes · the source code, which anybody is free to read.

What you get is a ready-made image of a complete USB stick — the startup files and the area your transaction files will live in are already in it. You do not format anything and you do not choose any settings; you write the image and the stick is done.

▲ The image we publish is not signed for Secure Boot, because that signature would have to be made with a key held by someone other than you. Step 03 is about what to do instead — and signing it with a key of your own takes a tenth of a second and no rebuild.

Check what you downloaded

The quick check: that the file arrived intact and is the one that was published. Run one command and compare the result with this, character by character.

2ee9695a41b2308a0dea173e2386192732b021decb6b90f535b3483c7a3a98d1

LINUX / MACOS

$ sha256sum signeros-1.3.0-x86_64.img

WINDOWS (POWERSHELL)

> Get-FileHash signeros-1.3.0-x86_64.img -Algorithm SHA256

✕ Not the same? Delete the file and download it again. Never start a computer from an image you could not confirm.

Do this before you sign anything. Signing the image changes it, so the number stops matching by design — and a check afterwards would prove nothing. Check first, then sign.

Rebuild it, and compare the payload

For when the wallet starts to matter. You need a Linux computer and some patience: everything is compiled from scratch, so the first run takes 30-90 minutes. You do not need the file you downloaded — this is the same source the released image was made from.

$ git clone https://github.com/signeros/signeros signeros && cd signeros
$ git checkout v1.3.0 && ./scripts/build.sh

THE NUMBER THAT MATTERS

Two numbers come out of a build and either one settles it. The disk image should match the one above, byte for byte. So should the file called bzImage, which is the whole of what the machine actually runs — and that one keeps matching even if you go on to sign the image with a key of your own, because the signature is added to a copy inside the image rather than to bzImage itself.

$ sha256sum output/images/signeros-1.3.0-x86_64.img output/images/bzImage

bzImage and its own checksum are published as assets on the release page — compare against those. The build prints the number for you when it finishes, so you do not have to go looking. Two people on two different computers should get the same one; if yours comes out different, say so publicly — that is the check doing its job.

▲ An honest exception: the numbers published for every version up to and including 1.0.3 cannot be matched by anybody, including us. Three separate faults made those images depend on the computer they were built on, and all three were found because somebody did exactly what this page asks and reported a disagreement. They are fixed from 1.0.4 on, each with a check the build now runs against itself. The full account is in the project's README. If you are comparing numbers, use 1.0.4 or later.

AND WATCH IT PROVE ITSELF

The first starts the real image in a simulated computer and puts it through the whole job: read a transaction, show it, sign it, save it — and refuse a transaction that lies about which address belongs to you. The second re-checks every signature with a second, completely separate implementation written from scratch for the purpose. Asking a program to confirm its own work proves nothing; two independent programs agreeing is evidence.

$ ./scripts/test_in_qemu.sh
$ ./scripts/host_selftest.sh --build-wally

✕ This kind of check lets you find out that something was tampered with, by comparing with other people. It cannot prevent it. That is exactly why the comparison is worth actually doing rather than assuming.

02Write the USB

Write it to a stick — five minutes, either OS.

The image is a picture of a finished stick, not a file you copy onto one. Everything is already inside it, so you do not format anything and you do not pick any settings — you write the image over the whole stick and it is ready. Unpack the download first if it arrived compressed.

◆ANY USB STICK OF 1 GB OR MORE ◆WRITTEN WHOLE, NOT COPIED AS A FILE ◆TAKES ABOUT FIVE MINUTES ◆THE STICK IS COMPLETELY ERASED

Linux → the project's own script

If you have the source — because you built the image, or just downloaded the source — the script that writes the stick comes with it. It reads the make and size of the drive back to you and asks you to confirm before touching it, then writes the image and reads it back to check the stick is correct.

$ sudo ./scripts/flash_usb.sh /dev/sdX --expand-data

It writes output/images/signeros.img by default. For an image you downloaded instead, point it at the file:

$ sudo IMAGE=~/Downloads/signeros-1.3.0-x86_64.img ./scripts/flash_usb.sh /dev/sdX --expand-data

--expand-data gives the rest of the stick over to your transaction files afterwards, which is what you want on anything bigger than the image itself.

◆ NO SOURCE CODE, OR PREFER TO CLICK?

balenaEtcher needs nothing but the image file: choose it, choose the USB device, press Flash. It handles this kind of image correctly and refuses to write over your computer's own disk — you just do not get the read-back check, or the leftover space handed to your files.

Windows → Rufus or Etcher

Download the image, or build it on Linux (or in WSL) and copy output/images/signeros.img across. Back up anything on the stick first; it will be wiped.

  1. Download Rufus from rufus.ie — a single free file, nothing to install.
  2. Insert your USB stick and start Rufus. Under Device, pick that stick — and read the model and size twice.
  3. Click SELECT and choose signeros.img.
  4. Rufus recognises this kind of image and switches to DD Image mode by itself. Leave it there, and ignore the partition-scheme and file-system boxes — they do not apply, because the image already contains everything.
  5. Press START, accept the “all data will be destroyed” warning, and wait for the green READY.
  6. Click CLOSE, then eject the stick safely. It is now a SignerOS drive.

◆ ALLERGY TO TECHNICAL DETAILS?

Use balenaEtcher instead: pick the image → pick the USB → press Flash. Three clicks, works on Windows and Linux, no settings to think about.

// Afterwards the stick shows up with a drive named PSBT_DATA on Windows, macOS and Linux alike. That is where your transaction files go — loose on it, not inside a folder. Whatever you do, do not reformat the stick “to fix it”: the part you would be erasing is the part that starts the computer.

03Boot it

Three honest ways in. Pick the one your firmware allows.

Secure Boot is a setting in your computer's start-up menu that lets it run only software carrying a signature it has been told to trust. Out of the factory it trusts Microsoft and nobody else, and SignerOS is not signed by Microsoft. So the question is never "is SignerOS trusted" — it is "how do you tell this machine to trust it", and that depends entirely on what its start-up menu lets you do.

Try them in this order. The first is the best and most machines allow it. The second is for the ones that do not. The third always works and asks something of you in return.

A · BEST Sign it yourself, then enrol your key

The machine ends up running your signer because you vouched for it, and it still refuses everything else. Nothing about Secure Boot is weakened.

  1. Make yourself a signing key — one command, once ever. It never leaves your computer.
    $ ./scripts/make_sb_keys.sh
  2. Sign the image you already downloaded. This takes about a tenth of a second and needs no rebuild, because the signature covers one single file inside the image.
    $ ./scripts/sign_image.sh signeros-1.3.0-x86_64.img
  3. Copy keys/SignerOS_db.cer onto the stick so the start-up menu can find it, and write the signed image to the stick.
  4. In the start-up menu find Secure Boot Key Management, usually under Security or Advanced. Switch it from Factory Default to Custom.
  5. Choose db — the list of things the machine is willing to run — then Enroll key from file, and pick your certificate. Check the long number it shows against the one the key-making command printed.
  6. Save & Exit, and start the stick with Secure Boot still switched on.

// If you are a Linux user reaching for mokutil: that tool manages a different list, and nothing consults it here. This has to be done from the start-up menu.

B No key menu? Boot through shim instead

Plenty of laptops simply do not offer the menu that A needs — it is missing, greyed out, or hidden behind a mode the vendor never shipped. This route does not need the firmware's cooperation at all. It uses shim, a small loader that Microsoft signs and every machine therefore already trusts, and tells shim to accept one exact file: yours.

  1. Rearrange the stick's start-up files. The script takes the image or the written stick and borrows the shim already installed on your Linux machine. It needs 1.2.0 or later: older images lack a small piece of metadata shim insists on, and refuse in a way that looks like a signing problem.
    $ ./scripts/shim_kit.sh signeros-1.3.0-x86_64.img
  2. Start from the stick with Secure Boot on. A blue screen says Verification failed: (0x1A) Security Violation. That is expected on the first start, not a fault. Press Enter.
  3. "Press any key to perform MOK management" appears with a short countdown. Press a key before it runs out.
  4. Choose Enroll hash from disk — the hash, not the key.
  5. Pick the volume SIGNEROS, then EFI, then BOOT, then grubx64.efi. The list is not in alphabetical order, so read the names rather than counting rows. That file is SignerOS; the name is shim's, not ours.
  6. Choose View key 0 and compare what it shows with the number below. This is the step that matters. Everything else is menu navigation; this is where you decide what the machine will trust.
    8A108AAC F1A6F646 64665B7D 67698997 9A86AE30 1FDE9A00 F5986AD9 FC17EB2A

    This is not the checksum from step 01 and it is not sha256sum of anything. It is the Authenticode hash, which skips the three parts of the file a signature would change — so it is the same number whether or not you signed the image, which is why one published number is right for everybody. shim_kit.sh prints it too, and python3 scripts/authenticode_hash.py --groups output/images/bzImage recomputes it from a build of your own.

  7. Continue → Enroll the key(s)? → Yes → Reboot.

// Why the hash and not your key: a key tells that machine to trust anything signed with it, forever. A hash trusts exactly one file — the one you just checked. A new SignerOS version has different contents and needs this again, on purpose: every new version passes in front of you.

▲ What this costs, plainly: the first thing your computer runs is then a small program this project did not write and cannot withdraw, and the choice is remembered in your computer's own memory until you delete it (Delete MOK, in the same menu). Route A has neither property, which is why it is first.

C Secure Boot off — then treat the stick as single-use

Always available, nothing to enrol, and it gives up one specific protection: with Secure Boot off, nothing checks that the stick still holds what you put on it. So take that job back by hand.

  1. Restart and press the setup key repeatedly as the screen lights up (table below).
  2. Set Secure Boot → Disabled, Save & Exit, and start the stick.
  3. Write the stick again before each session that matters. A freshly written stick, from an image whose number you checked, cannot be carrying a swap somebody made last month. This is the whole of what you are giving up, and rewriting takes five minutes.
  4. When you are finished, switch Secure Boot back on — for your everyday system's sake, not for SignerOS.

THE SETUP KEY, BY MAKE

DellF2 / F12
LenovoF1 / F2 (or Fn+F2)
HPF10 / Esc
ASUSF2 / Del
AcerF2
MSIDel — boot menu is F11

// On HP machines, permission to start from a USB stick is a separate setting from Secure Boot, and both have to allow it. On MSI, if the stick does not appear in the boot menu at all, turn Fast Boot off — it skips USB entirely. And SignerOS needs a computer made in roughly the last decade.

⚠

Add your key. Never clear the existing ones.

The key menu usually offers Clear All Secure Boot Keys right next to Enroll, and it does exactly what it says: it throws away the trust your own Windows or Linux installation depends on, and the machine stops starting up normally. Add yours to the list; do not replace the list. If you do press the wrong thing, Restore Factory Keys is in the same menu and undoes it — nothing here can permanently break a computer.

04Next

The machine is a signer now.

Everything from here happens on the screen in front of you, on a machine with no network and no way to get one. There are three things it can do, and the next page walks through each of them the way they actually appear.