From what I understand about Bitcoin, a wallet is really just a pair of public/private keys.

So, if someone needs to send me Bitcoins, all I need to do is just generate a pair or public/private keys using OpenSSL or some other tool, and send the public key to that person, without actually downloading a Bitcoin client (which will download a 12 GB block chain), or saving a wallet.dat.

Am I correct?

  • 2
    Take a look at bitaddress.org. Actually generating usable bitcoin addresses is somewhat complicated
    – aland
    Commented Dec 17, 2013 at 11:58
  • Is bitaddress.org a reputable site?
    – sashoalm
    Commented Dec 17, 2013 at 12:35
  • Judging from [source code](github.com/pointbiz/bitaddress.org], it generates address with JavaScript on your PC, so the server can not get your private key anyway.
    – aland
    Commented Dec 17, 2013 at 12:45

1 Answer 1


You are almost correct ;-)

You can create a public/private key using OpenSSL (in fact, some wallets use OpenSSL libaries to generate the keys). However, the bitcoin address is not your public key but a function of such public key. The exact function is defined here https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses

So, once you generate your pair of keys and compute the bitcoin address from your public key, you can receive bitcoins in such bitcoin address.

  • Thanks for the answer. Are there reputable tools available that are lightweight (say less than 100kb download) and can create a wallet? I've heard that the official bitcoin client tries to download 12 GB of data.
    – sashoalm
    Commented Dec 17, 2013 at 12:36
  • 2
    Try the github repository for the bitaddress.org code. Whilst the fact that it is a javascript program to be executed by a browser may not evoke great trust, the code is public, well-publicized, widely used, and reasonably readable.
    – user6049
    Commented Dec 17, 2013 at 12:47
  • You can try the python source github.com/richardkiss/pycoin where some basic functions are implemented. For instance, the function public_pair_to_bitcoin_address is clearly defined. I'm not aware of its reputation, but python is really easy to follow and you can check the part of the code you want to use.
    – jordi
    Commented Dec 17, 2013 at 14:28
  • @sashoalm: vanitygen can also be used conveniently for this purpose. Note that while you can receive Bitcoins this way, in order to spend them again, you will have to install a wallet client. Commented Dec 17, 2013 at 18:25
  • 1
    This is the clearest example I've seen of this - gist.github.com/colindean/5239812
    – matja
    Commented Dec 17, 2013 at 22:14

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.