So I'm finally quite happy with my offline wallet setup, and I wanted to share it with others.
I have been using a Rapsberry Pi to run the offline instance of Armory. It was hooked up to my monitor through HDMI, and I had an extra keyboard around. When I wanted to perform an offline transaction, I would create it on my main computer, put it on a USB drive, plug the keyboard and USB drive into the Pi, run Armory, sign the transaction, transfer it back to the main computer, and broadcast it.
Last week, I purchased a
USB to TTL, and that whole process changed for the better. The cable provides power to the Pi and allows for a terminal login to the device, so I no longer need an HDMI cable, power cable, or keyboard. I merely keep it unplugged, and plug it in when I want to perform a transaction. I log in using screen (screen /dev/ttyUSB0 115200), then run
this script which does the following...
Opens a new file called armory.unsigned.tx in Nano, allowing me to paste in the ascii-serialized transaction
Runs
this script against the unsigned file
If the file was signed, then display it using Less (at which point I copy it and paste into the broadcast transaction form)
Shutdown the Pi
I'm pretty sure that the TTY device only allows for a single login at a time, so I don't think it would be possible, and certainly not feasible, for an attacker to steal bitcoins from the Pi during the short time that it's connected to my computer. Any thoughts?
Of course, I can't endorse it as a general solution, but it seems like an okay compromise for users that are knowledgeable and crave convenience. It sounds like the risks are:
(1) Remembering to disconnect the cable when you're done
(2) Making sure that your offline system username & password is not the same as online computer
or any of the saved logins in your browser.
(3) Keyloggers
Keyloggers should be bolded there, because that seems like a big risk. Once a keylogger gets your username and password, it would only take a couple seconds to login and fetch the wallet file. I guess, if you kept the wallet file in some non-standard location, such automated attacks wouldn't be so clean. Although, if your wallet encryption password is further different than online, offline, and all your browser-saved passwords, then this is considerably safer than an encrypted online wallet. If the encryption password is unique, then the encryption would really shine, as there's no real way to get that password from the host system (I assume you still have to explicitly type your password on the offline computer, not through the terminal... and assuming they didn't get a keylogger onto the offline machine, synchronized with the data transfer). Their only choice would be to brute force it, and that would take a very long time with the default key-stretching parameters.
But depending on how much BTC you hold and/or how paranoid you are, this could be a reasonable solution.