Invoice address: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[File:PubKeyToAddr.png|thumb|right|Conversion from ECDSA public key to Bitcoin Address]] | [[File:PubKeyToAddr.png|thumb|right|Conversion from ECDSA public key to Bitcoin Address]] | ||
A '''Bitcoin address''', or simply '''address''', is | A '''Bitcoin address''', or simply '''address''', is an identifier of approximately 33 alphanumeric characters, always beginning with the number 1, that represents a possible destination for a Bitcoin payment. Addresses can be generated at no cost by any user of Bitcoin. For example, using the Bitcoin software, one can click "Get Address" and be assigned an address. An example of a Bitcoin address is ''175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W''. | ||
Like e-mail, you can send Bitcoins to a person by sending Bitcoins to their address. Somewhat unlike e-mail, one person can have an unlimited number of different Bitcoin addresses. A unique address for each transaction is recommended as a best practice, and enhances anonymity when using the system. | Like e-mail, you can send Bitcoins to a person by sending Bitcoins to their address. Somewhat unlike e-mail, one person can have an unlimited number of different Bitcoin addresses. A unique address for each transaction is recommended as a best practice, and enhances anonymity when using the system. | ||
Creating addresses can be done without any contact with the Bitcoin network. | Creating addresses can be done without any contact with the Bitcoin network. | ||
For every visible address, there is a corresponding secret number known as a [[private key]]. When using a Bitcoin client, private key numbers are typically stored in the [[wallet file]]. The private key has a special purpose - it is mathematically needed to create transactions acceptable to the Bitcoin network that respend the funds originally sent to the address. If the private key to an address is lost (for example, in a hard drive crash and the user didn't have backups of the wallet file), any associated Bitcoins are lost forever. | |||
==Technical background== | |||
A Bitcoin address is a 160-bit hash of the public portion of a public/private [[Wikipedia:Elliptic_Curve_DSA|ECDSA]] keypair. Using some mathemagic, you can "sign" data with your private key and anyone who knows your public key can verify that the signature is valid. See the [[Wikipedia:Public-key_cryptography|Wikipedia article]] for more information about how this works. See [[Protocol_specification#Addresses|protocol specification]] for details on how a bitcoin address is formed. | |||
A new keypair is generated for each receiving address. Bitcoin addresses (the public keys) and their associated private keys are stored in the [[wallet]] data file. This is the only file you need to [[backup|back up]]. A "send" transaction to a specific Bitcoin address requires that the corresponding private key exist in the recipient's wallet. This has the implication that if you create a receiving address and receive coins to that address, then restore the wallet from an earlier backup, before the address was generated, then the coins associated with that address are lost. Addresses are added to an address [[key pool]] prior to being used for receiving coins. If you lose your wallet entirely, all of your coins are lost and can never be recovered. | A new keypair is generated for each receiving address. Bitcoin addresses (the public keys) and their associated private keys are stored in the [[wallet]] data file. This is the only file you need to [[backup|back up]]. A "send" transaction to a specific Bitcoin address requires that the corresponding private key exist in the recipient's wallet. This has the implication that if you create a receiving address and receive coins to that address, then restore the wallet from an earlier backup, before the address was generated, then the coins associated with that address are lost. Addresses are added to an address [[key pool]] prior to being used for receiving coins. If you lose your wallet entirely, all of your coins are lost and can never be recovered. |
Revision as of 16:49, 22 November 2011
A Bitcoin address, or simply address, is an identifier of approximately 33 alphanumeric characters, always beginning with the number 1, that represents a possible destination for a Bitcoin payment. Addresses can be generated at no cost by any user of Bitcoin. For example, using the Bitcoin software, one can click "Get Address" and be assigned an address. An example of a Bitcoin address is 175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W.
Like e-mail, you can send Bitcoins to a person by sending Bitcoins to their address. Somewhat unlike e-mail, one person can have an unlimited number of different Bitcoin addresses. A unique address for each transaction is recommended as a best practice, and enhances anonymity when using the system.
Creating addresses can be done without any contact with the Bitcoin network.
For every visible address, there is a corresponding secret number known as a private key. When using a Bitcoin client, private key numbers are typically stored in the wallet file. The private key has a special purpose - it is mathematically needed to create transactions acceptable to the Bitcoin network that respend the funds originally sent to the address. If the private key to an address is lost (for example, in a hard drive crash and the user didn't have backups of the wallet file), any associated Bitcoins are lost forever.
Technical background
A Bitcoin address is a 160-bit hash of the public portion of a public/private ECDSA keypair. Using some mathemagic, you can "sign" data with your private key and anyone who knows your public key can verify that the signature is valid. See the Wikipedia article for more information about how this works. See protocol specification for details on how a bitcoin address is formed.
A new keypair is generated for each receiving address. Bitcoin addresses (the public keys) and their associated private keys are stored in the wallet data file. This is the only file you need to back up. A "send" transaction to a specific Bitcoin address requires that the corresponding private key exist in the recipient's wallet. This has the implication that if you create a receiving address and receive coins to that address, then restore the wallet from an earlier backup, before the address was generated, then the coins associated with that address are lost. Addresses are added to an address key pool prior to being used for receiving coins. If you lose your wallet entirely, all of your coins are lost and can never be recovered.
"Generate" transactions happen in the same way as a send transaction: each batch of 50 generated coins is "sent" to a unique address that you generate just for that purpose. These addresses are also stored in your wallet, but they are not shown in the "your receiving addresses" section.
Bitcoin allows you to create as many addresses as you want, and each one is completely separate. There is no "master address": the "Your Bitcoin address" area in the Bitcoin UI has no special importance. It's only there for your convenience, and it will change automatically from time to time to enhance your anonymity. All of your other addresses will continue to work forever. They're listed in the "your receiving addresses" section. Each address takes up only about 500 bytes, so having a large number of addresses in your wallet is generally not a problem.
Bitcoin addresses contain a built-in check code, so it's generally not possible to send Bitcoins to a mistyped address. However, if the address is well-formed but no one owns it (or the owner lost their wallet.dat), any coins sent to that address will be lost forever.
Addresses can contain all alphanumeric characters except 0, O, I, and l. Normal addresses currently always start with 1, though this might change in a future version. Testnet addresses usually start with m or n. Mainline addresses can be 25-34 characters in length, and testnet addresses can be 26-34 characters in length. Most addresses are 33 or 34 characters long, though.
It is also possible to send Bitcoins directly to an IP address.
Since Bitcoin addresses are basically random numbers, it is possible, although extremely unlikely, for two people to independently generate the same address. This is called a collision. If this happens, then both the original owner of the address and the colliding owner could spend money sent to that address. It would not be possible for the colliding person to spend the original owner's entire wallet (or vice versa). If you were to intentionally try to make a collision, it would currently take 2^107 times longer to generate a colliding Bitcoin address than to generate a block. As long as the signing and hashing algorithms remain cryptographically strong, it will likely always be more profitable to collect generations and transaction fees than to try to create collisions.
How to create Bitcoin Address
1 - Take a public key (65 bytes, 1 byte 0x04, 32 bytes corresponding to X coordinate, 32 bytes corresponding to Y coordinate)
04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f
2 - Perform SHA-256 hashing on the public key
261c1eb21fc4708c6acbe1cfc6d4565652e9e768b620782898936b93000a6c02
3 - Perform RIPEMD-160 hashing on the result of SHA-256
62e907b15cbf27d5425399ebf6f0fb50ebb88f18
4 - Add network byte in front of RIPEMD-160 hash (0x00 for Main Network)
0062e907b15cbf27d5425399ebf6f0fb50ebb88f18
5 - Perform SHA-256 hash on the extended RIPEMD-160 result
9b90f16de7f0e580c07735dac15ffe23e2f8f8e103914e509aa91913ffdb9fb6
6 - Perform SHA-256 hash on the result of the previous SHA-256 hash
c29b7d937e3049e279391e62fdf00c12def7444013ddf6215808d10e9f2d5996
7 - Take the first 4 bytes of the second SHA-256 hash. This is the address checksum
c29b7d93
8 - Add the 4 checksum bytes from point 7 at the end of extended RIPEMD-160 hash from point 4. This is the 25-byte binary Bitcoin Address.
0062e907b15cbf27d5425399ebf6f0fb50ebb88f18c29b7d93
9 - Convert the result from point 8 into base58 string. This is the most commonly used Bitcoin Address format
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa