I repurposed an old laptop into an offline Linux computer because I wanted to learn what self-sovereignty actually requires: how to create, secure, use, and recover my own keys without trusting anyone else with the process. People trust Bitcoin because it requires zero trust. This is the procedure I am documenting for myself and for the next careful person trying to figure it out.
00
The architecture
Three jobs. Three trust boundaries.
Online
Sparrow computer
Builds transactions, watches balances, and talks to Bitcoin. It exchanges public wallet information and transactions with SeedSigner by QR code. It never receives the seed.
QR codesAir-gapped
SeedSigner
Creates or loads the seed, verifies addresses, reviews transactions, and signs. Secrets exist only in volatile memory while powered.
microSD cardOffline
Linux build computer
Verifies downloaded software and writes the SeedSigner image to a microSD card. That card boots the signer; it does not carry the seed.
What I used: an older MacBook converted to Ubuntu with full-disk encryption and its Broadcom Wi-Fi hardware removed. The exact laptop is not important. What matters is a clean installation, verified software, no radios, and a decision that the machine will remain offline.
01
Prepare
Gather the parts and define the rules.
Do not improvise in the middle of seed creation. Obtain and test the hardware first. Print blank worksheets before any secret exists, or draw the grids by hand.
SeedSigner
Raspberry Pi Zero v1.3, preferably with headers
Waveshare 1.3-inch LCD HAT, exactly 240 × 240 pixels
Pi Zero camera using the OV5647 sensor
MicroSD card and reader
Case and a power-only USB cable
Entropy and recovery
Six-sided dice
Pen and paper for the temporary roll log
Paper seed backup, later reinforced with metal
Blank 24-word SeedQR template
Two secure, physically separate storage locations
Computers
Normal online computer with a webcam
Dedicated offline Linux computer
Dedicated transfer drive or SD card
Sparrow Wallet on the online computer
Stop if: any component arrives altered, the Pi model is uncertain, the display is not the 240 × 240 model, or you cannot explain which machine will ever see the seed. Resolve that before continuing.
02
Offline Linux
Build the clean workbench.
Download Ubuntu LTS from Canonical on a connected computer. Download its SHA256SUMS and signature files from the same official release directory.
Verify before writing the installer. Follow Canonical’s current signature and checksum procedure. A matching checksum proves the ISO arrived unchanged. Signature verification helps establish who published that checksum.
Write the verified ISO to a USB installer using a trusted imaging tool. Boot the future offline computer from it and erase the internal drive.
Install Ubuntu with full-disk encryption. Use a long, unique disk passphrase and a generic local account name. Do not store Bitcoin secrets in the account profile.
Update once, then sever networking. Complete needed operating-system updates before the machine becomes permanent offline infrastructure. Power down, remove or physically disable Wi-Fi and Bluetooth hardware, disconnect Ethernet, then boot again and confirm no network interface can connect.
Label its role. This machine verifies packages and writes removable media. It never stores the seed, and it never goes back online without being rebuilt from scratch afterward.
Ubuntu verification pattern
Use the exact filenames and signing-key instructions shown on Canonical’s current verification page. The core checks on Linux follow this pattern:
Continue only when the signature is valid and the ISO reports OK. A checksum by itself does not identify the publisher, so do not skip the signature and fingerprint checks.
Confirm the board says Raspberry Pi Zero v1.3, not Zero W or Zero 2 W. Version 1.3 has no Wi-Fi or Bluetooth hardware.
If the board does not have GPIO headers, solder the 40-pin header before installing the screen. If you are not comfortable soldering, buy the version with headers already installed.
Connect the camera ribbon with the contacts oriented correctly. Seat the Waveshare LCD HAT evenly on all 40 pins.
Fit the parts into the case without pinching the camera ribbon. Do not power the Pi until the verified image is on the microSD card.
These commands match SeedSigner release 0.8.7, current when this page was reviewed. Before using them, check the official release page. If the version changed, use the filenames and verification instructions published with that release.
On the online computer, download the Pi Zero image, plaintext SHA-256 manifest, manifest signature, and seedsigner_pubkey.gpg from the official SeedSigner project.
Transfer those four files to the offline Linux computer. Import the project key locally, then independently compare its fingerprint with the fingerprint published through official SeedSigner sources.
From the directory containing the files, verify the signed manifest, then verify the image against it:
The final command must report the Pi Zero image as OK. “Good signature” is not enough by itself. Compare the signing fingerprint through another official channel. Stop on a bad signature, fingerprint mismatch, or failed hash.
Use Raspberry Pi Imager or Balena Etcher on the offline Linux computer to write the verified pi0.img file to the microSD card. Let the imaging tool complete its read-back verification.
Insert the card, power the SeedSigner, and wait for the logo. Test the screen, joystick/buttons, and camera before generating anything valuable.
Once SeedSigner has loaded, the microSD may be removed. The seed will exist in RAM only and disappears when power is removed.
The 100-roll SHA-256 process I previously used was for a Nostr key. SeedSigner’s Bitcoin workflow is different. For a 24-word BIP-39 seed, SeedSigner’s documented process uses 99 rolls of a six-sided die.
Work alone in a private room with no cameras, phones, voice assistants, or windows overlooking the work surface.
On SeedSigner choose Seeds → Create a seed → Dice rolls → 24 words. Follow the current on-screen menu if labels have changed.
Roll honestly. Enter every result from 1 through 6 exactly as it lands. Do not discard inconvenient rolls and do not “improve” the randomness.
With ten distinguishable dice, your familiar rhythm still works: roll ten at a time and enter them in a fixed left-to-right order. After nine batches you have 90 rolls. Enter only the first nine dice from batch ten to reach 99. Mark the tenth position as unused before rolling so there is no ambiguity.
Confirm SeedSigner shows 99 valid rolls and generates a 24-word seed. Write the words by hand, in numbered order, twice checking spelling against the BIP-39 list shown by the device.
Never: use an online dice generator, photograph the rolls, dictate them to a phone, paste them into ChatGPT, or use the Nostr key script for Bitcoin. The raw roll log becomes sensitive once it is used. Destroy it only after the recovery drill succeeds and your intended backups are verified.
06
Recovery material
Back up the seed without digitizing it.
Use SeedSigner’s Verify Backup flow to re-enter or confirm the 24 words before trusting the copy.
Create a SeedQR by hand using SeedSigner’s guided transcription flow: Backup Seed → Export as SeedQR. For a standard 24-word SeedQR, use the official 29 × 29 template.
Use Confirm SeedQR on SeedSigner to scan and verify the hand-drawn QR. SeedSigner should be the only camera that ever sees it.
Make a durable metal copy of the 24 words for fire and water resistance. Verify every position again. Do not invent abbreviations unless the backup system explicitly documents them.
Store the copies in separate secure places. Anyone who finds either the words or SeedQR can spend the bitcoin. Do not store the seed beside instructions identifying the amount or wallet.
SeedQR is the seed. It is not a convenient public wallet QR. Never scan it with Sparrow, a phone camera, a normal webcam, or a generic QR application.
On the online computer, download Sparrow, its signed manifest, and the installer from sparrowwallet.com. Verify the manifest signature and the installer hash before installation.
Current Linux verification commands for Sparrow 2.5.5 are:
Confirm the signing fingerprint through Sparrow’s official download page. The installer must report OK. Use the current version’s filenames when the project updates.
In Sparrow select File → New Wallet. Give it a non-sensitive name. Choose Single Signature and Native Segwit (P2WPKH).
On SeedSigner, load the seed from your hand-entered words or SeedQR. Use Seeds → select seed → Export Xpub → Single Sig → Native Segwit → Sparrow. Displaying the xpub as QR is safe for spending authority, but it is privacy-sensitive because it reveals the wallet’s addresses and history.
Scan the xpub QR into Sparrow. Compare the master fingerprint and derivation path shown on both devices. Apply the wallet settings and protect the Sparrow wallet file with a strong, unique password.
Back up Sparrow’s wallet file and exported public descriptor as privacy-sensitive recovery aids. They cannot spend without the seed, but they reveal wallet structure and activity.
Select Public Server and allow Sparrow to choose one, or select a known server.
Click Test Connection.
Understand the tradeoff: the operator can associate queried addresses with your IP address. Your keys remain safe, but your financial privacy is shared.
Useful for learning and small amounts. Sparrow itself advises against a public server for significant funds.
Path B / stronger privacy
Your Bitcoin Core node
Download and verify Bitcoin Core from the official project. Install it on the Sparrow computer or a dedicated machine.
Allow the node to complete its initial synchronization before relying on wallet results.
For a local node, add server=1 and blockfilterindex=1 to bitcoin.conf, restart Core, then select Bitcoin Core in Sparrow’s Server settings.
For a node elsewhere on your LAN, bind RPC only to the node’s private LAN address, allow only the Sparrow computer’s exact IP, and use a unique RPC credential. Never expose Bitcoin Core RPC port 8332 to the public internet.
In Sparrow enter the node address and authentication method, then click Test Connection.
A direct Core connection improves privacy and lets you verify the chain yourself. A private Electrum server is a later upgrade for better indexing and remote use.
Minimal local Bitcoin Core configuration
server=1
blockfilterindex=1
The file is named bitcoin.conf. Sparrow documents its usual locations as ~/.bitcoin on Linux, %AppData%/Bitcoin on Windows, and ~/Library/Application Support/Bitcoin on macOS.
In Sparrow open Receive and create a fresh address. Label it with its purpose or source before using it.
Do not trust the computer screen alone. Export or display the wallet descriptor/address QR from Sparrow, load the seed in SeedSigner, and use SeedSigner’s address verification flow.
Compare the complete address on SeedSigner with Sparrow and with the withdrawal screen of the exchange or sender. Check the first, middle, and final characters, not only the ends.
Send a small test amount. Wait for confirmation, then confirm Sparrow shows the expected transaction and balance.
Use a new receive address for each later payment. Address reuse unnecessarily links activity.
10
First spend
Build online. Review and sign offline.
In Sparrow select Send. Paste or scan the destination, then verify it independently. Enter the amount, label, and fee rate.
Review the selected inputs, recipient output, change output, and fee. Click Create Transaction, then Finalize Transaction for Signing.
Choose Show QR. Sparrow displays an animated QR containing the unsigned partially signed Bitcoin transaction, or PSBT.
On SeedSigner select Scan QR. Scan the animated PSBT. Review the recipient, amount, change, and network fee on the SeedSigner screen itself.
If anything differs, reject it. If it is correct, approve and sign. SeedSigner displays a new animated QR containing the signed transaction.
In Sparrow close the original QR window, choose Scan QR, and scan the signed result from SeedSigner. Confirm the expected signature appears.
Broadcast from Sparrow. Power off SeedSigner to clear the seed from memory.
The signature is the point of control. Sparrow can prepare anything, including something malicious if the online computer is compromised. SeedSigner’s screen is where you independently decide whether the actual transaction is acceptable.
11
Recovery drill
Prove the backup before trusting it.
After the small test receive, record the wallet master fingerprint and one verified receive address. These are not secret, but keep them private.
Power off SeedSigner. This deliberately wipes the loaded seed from RAM.
Reload the seed using the hand-written words. Confirm the same master fingerprint and address appear.
Power off again. Reload using the SeedQR and repeat the comparison.
Complete the small test spend using the restored seed. A readable backup is not enough. Recovery has succeeded only when the restored signer can reproduce the wallet and authorize the expected transaction.
Only after both recovery methods pass should you destroy the temporary dice-roll log and consider moving more funds.
12
Ongoing discipline
Keep the process boring.
Every receive
Generate a new address
Verify it on SeedSigner
Label the source
Test before a large transfer
Every spend
Verify the destination separately
Review recipient, change, and fee on SeedSigner
Reject unexplained differences
Power off after signing
Every update
Use official project pages
Verify signatures and hashes
Check release notes
Preserve the previous working card until the new one is tested
Periodically
Inspect backups without exposing them
Repeat a recovery drill
Review physical access
Make sure heirs can find instructions, not necessarily the seed itself
Single-signature with no passphrase is the deliberate starting point here. Passphrases and multisig can reduce some risks while creating new ways to lose access. Add complexity only after this procedure is routine and the recovery consequences are understood.
Primary references
Verify this guide against the projects.
Wallet software changes. Menu labels, versions, fingerprints, and recommended commands can change with it. Use this page as a map, then confirm the current release instructions before generating or moving real funds.
Procedure and software versions reviewed September 20, 2026
This is an educational record of one self-custody path, not a security audit or guarantee. Verify current project documentation, practice with a small amount, and never share a seed phrase or private key.