I've been doing this with Electrum. It's a little tricky, but not too bad. With a brainwallet, you can mostly ignore the seed/deseed instructions.
I'll try and see if I can remember all of my steps.
Preparing the offline wallet:1) Prepare an offline Linux distro. I have a USB version of Xubuntu that I boot once with networking to install PythonQt/Electrum and download a few tools, such as the Electrum wiki page (
https://en.bitcoin.it/wiki/Electrum) for documentation and brainwallet.org for offline use. Then I physically disconnect my networking and reboot. Networking will never be connected again. Of course, you could prepare the packages in advance and NEVER use networking at all, or use a clean-install never-networked Windows PC, etc.
2) Once booted without networking, I open Firefox in Private Browsing Mode and use the downloaded brainwallet.org to generate my Bitcoin address. I save the address on my USB drive and send coins to it for safekeeping from my live system.
Watching Wallet with Electrum:1) On my live networked computer, I set up a new wallet with Electrum and then generate a rubbish address pair with brainwallet.org. I then import it to my new wallet with a command like:
electrum import 1FqroyWA2FVRsiAeAeaWjpq4kHqHucxVF9:5J5N8wd4UDgGDWsBDRAcUpiNaCZZzpWGDCUnzf26n5oUKjJNpMQ
2) I then edit electrum's wallet file (electrum.dat by default), find 'imported_keys' and replace the rubbish address (1FqroyWA2FVRsiAeAeaWjpq4kHqHucxVF9 in this case) with my real offline address. You can leave the private key as it is or erase it. I just erase it and leave the field as ''.
3) I start electrum and freeze the offline wallet address. Now I can see funds as they come in but can't try to spend them (Electrum would throw an error if I did anyway since it doesn't have the private key)
Creating an Offline Transaction1) I copy the wallet file to my offline USB, reboot without networking and put it in place (~/.electrum/electrum.dat). I then use brainwallet.org offline in Private Browsing mode to create the correct private key and paste it into the wallet file. To create a transaction, the syntax is:
electrum mktx [-s sourceaddr] [-c changeaddr] [-f fee]
Which spits out the raw transaction. You sent it into a text file to use later, for example:
electrum mktx -s 1FqroyWA2FVRsiAeAeaWjpq4kHqHucxVF9 -c 1FqroyWA2FVRsiAeAeaWjpq4kHqHucxVF9 -f 0.001 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T 100 > tx.txt
Which would send 100 BTC from 1FqroyWA2FVRsiAeAeaWjpq4kHqHucxVF9 to 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T with a fee of 0.001 BTC and all change returning back to the same brainwallet. I usually test the output first before writing it to the text file.
4) Copy the text file to your USB stick (or separate stick if you don't have rw access). For good measure, I delete bash history, etc. then reboot.
5) Now that I have the raw transaction, I can paste it into a website that will send it, or just send it with electrum:
electrum sendtx
6) MOST IMPORTANT STEP. I destroy the USB drive by shredding followed by incineration. The computer's hard drive gets the sledge hammer. Sometimes I burn the house down for good measure. A little time consuming, a little expensive, but in the end... it's all worth it to protect my bits!