I think it is possible to generate keys on an offline computer and sign. To create a transaction I need to input transactions detail, and somehow I have to transfer signed transaction from offline computer to a online computer to relay the transaction.

Is it possible to do this without using USB storage? I can use a keyboard, or barcode reader to transfer the input transaction hash to an offline computer and the signed transaction back to the online computer. So that private key stays with the offline computer.

What are step-by-step instructions to do this, with any required error check / correction?

  • As long as offline computer is able to sign message and generate a QR Code, the process should be very straightforward.
    – John Smith
    Mar 5, 2013 at 1:39

2 Answers 2


You're correct that the offline node needs to how to claim its funds, so it can't be totally isolated.

Currently, the most mature offline wallet solution is through a client called Bitcoin Armory. Here's what your workflow looks like with offline wallets:

Online node creates transaction -> USB key -> Offline computer signs transaction -> USB key -> Online node broadcasts transaction

You can use Windows, Linux, or Mac for your offline wallet, but I'd recommend Linux, as it's difficult to disable AutoRun/AutoPlay on Windows.


This page explains offline transactions in greater detail.

  • thanks for the reference. is it possible to skip "USB drive" part?
    – vi.su.
    Mar 4, 2013 at 11:23
  • @vi.su. You need some way to get the inputs/index onto the offline computer, and some way to get the signed transactions out. You could do it by manually typing them out, but that seems overly difficult.
    – Nick ODell
    Mar 4, 2013 at 15:56
  • I currently use a USB stick to copy unsigned transactions to an offline computer where I sign them, then use the same USB stick to copy them back to an online computer. But today I read arstechnica.com/security/2013/10/… which is pretty terrifying if true. I would like to find a way to use QRcodes to transmit the required information between computers rather than a USB stick to avoid this risk of infection. Oct 31, 2013 at 20:10
  • 2
    The unsigned raw transaction itself is small enough to fit into a QRcode, but the offline computer also needs access to the input transactions for the transaction it is trying to sign, which I currently provide by copying a wallet file over as well. Wallet files are too big to fit in a QRcode. Oct 31, 2013 at 20:11
  • 1
    The link to the explanatory page appears to be outdated again.
    – Murch
    Feb 27, 2015 at 15:35

I'm working on this right now. Currently, I have online and offline armory set up to use the USB key as has been described here before. I just created a new android app that will peer with the bitcoin network, and allow you to scan a QR code representing ANY signed transaction, and broadcast it to the peers. This makes it so you can do this:

  • Make an unsigned transaction in armory
  • Create a QR code from it
  • Scan it with phone (so far, QR Droid and Barcode Scanner work)
  • Take phone to offline wallet
  • Display QR code for unsigned transaction on phone (using history in QR droid works well)
  • Scan using webcam in offline wallet computer (I successfully did this with the zbar Linux application in Ubuntu - package details to follow)
  • Sign tx with offline armory
  • Display QR code for signed tx (more packages to follow)
  • Scan with new android app to broadcast

This is almost done - the app is currently peering with bitcoin nodes and will scan the QR code and send it to a broadcasting activity, but the broadcast part and the parsing of the armory format remains.

UPDATE: Implemented. Watch the video

Python code here

Android app code here

  • This explanation doesn't help the asker too much, could you expand on the "creating a transaction" and "signing tx with offline armory" bits?
    – John T
    Feb 9, 2014 at 3:49
  • 1
    I added a video demoing the entire process. It assumes you know how to make an offline transaction in armory, which is described here. All one has to do is convert the unsigned transaction text to a QR code (I used QREncoder from the App Store on my Mac to do this), then follow the steps in the video. I'll be posting the scripts soon and linking from the video and probably here.
    – Hank
    Feb 9, 2014 at 22:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.