<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.bitcoin.it/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doca</id>
	<title>Bitcoin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.bitcoin.it/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Doca"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/wiki/Special:Contributions/Doca"/>
	<updated>2026-04-14T22:21:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29889</id>
		<title>Vanitygen</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29889"/>
		<updated>2012-08-20T05:18:48Z</updated>

		<summary type="html">&lt;p&gt;Doca: /* Expected keysearch rate */ see also Fistbits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vanitygen is a command-line vanity bitcoin address generator.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address.  Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjL.  Alternatively, vanitygen can be used to generate random addresses offline.&lt;br /&gt;
&lt;br /&gt;
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys.  Vanitygen&#039;s search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.&lt;br /&gt;
&lt;br /&gt;
The example below illustrates a session of vanitygen.  It is typical, and took about 10 sec to finish, using my Core 2 Duo E6600 CPU on x86-64 Linux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./vanitygen 1Boat&lt;br /&gt;
Difficulty: 4476342&lt;br /&gt;
Pattern: 1Boat                                                                 &lt;br /&gt;
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT&lt;br /&gt;
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen).  Both can be built from source, and both are included in the Windows binary package.  Also included is oclvanityminer, the vanity address mining client.  Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu&#039;s vanity pool.&lt;br /&gt;
&lt;br /&gt;
Current version: 0.20&lt;br /&gt;
&lt;br /&gt;
Windows x86+x64 binaries [https://github.com/downloads/samr7/vanitygen/vanitygen-0.20-win.zip here].  PGP signature [http://insight.gotdns.org/~samr7/vanitygen-0.20-win.zip.asc here].&lt;br /&gt;
&lt;br /&gt;
Get the source from [https://github.com/samr7/vanitygen GitHub].  Includes Makefiles for Linux and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Main discussion at [https://bitcointalk.org/index.php?topic=25804.0 BitCoinTalk]&lt;br /&gt;
&lt;br /&gt;
== Expected keysearch rate ==&lt;br /&gt;
Main article: [[Vanitygen keysearch rate]]&lt;br /&gt;
&lt;br /&gt;
What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As vanitygen performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Firstbits]]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Firstbits&amp;diff=29888</id>
		<title>Firstbits</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Firstbits&amp;diff=29888"/>
		<updated>2012-08-20T05:17:32Z</updated>

		<summary type="html">&lt;p&gt;Doca: reference to vanitygen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Firstbits&#039;&#039;&#039; refers to the practice of abbreviating a [[Bitcoin address]] such that only enough of the initial characters of the address are given so that the full address can be identified from the [[block chain]].  It also refers to the website http://www.Firstbits.com.&lt;br /&gt;
&lt;br /&gt;
The term Firstbits was popularized by the Firstbits website, which was provided with the intent of a &amp;quot;Bitcoin address shortener&amp;quot;, working similar to a URL shortener.  Firstbits.com performs a lookup service, giving the full address from the block chain from the initial portion of an address.  Anyone with access to a complete copy of the block chain can independently perform the same lookup done by Firstbits.com.&lt;br /&gt;
&lt;br /&gt;
Any time a Bitcoin address is used for transactional purposes and appears in the block chain, its firstbits - or the prefix that uniquely identifies that address within the block chain - are considered assigned at that time.  If another address is created and used with the same prefix at a later time, the firstbits of that new address will be at least one character longer, as the shorter prefix remains reserved for the address that used it first.  No action on the part of any user is required for firstbits to be assigned - any transaction activity (receiving or sending) for an address for the first time results in firstbits becoming automatically assigned.&lt;br /&gt;
&lt;br /&gt;
Unlike Bitcoin addresses, firstbits are deemed assigned in a &#039;&#039;&#039;case-insensitive&#039;&#039;&#039; manner.&lt;br /&gt;
&lt;br /&gt;
The firstbits of the very first address to be used by [[Satoshi]] in the [[genesis block]] of the [[block chain]] will have been &#039;&#039;&#039;&amp;quot;1&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Criticism==&lt;br /&gt;
Firstbits is generally considered to be a bad idea because it encourages transaction spam.&lt;br /&gt;
This position is held by most, if not all, of Bitcoin developers.{{Citation needed}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[vanitygen]]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen_keysearch_rate&amp;diff=29886</id>
		<title>Vanitygen keysearch rate</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen_keysearch_rate&amp;diff=29886"/>
		<updated>2012-08-20T04:55:01Z</updated>

		<summary type="html">&lt;p&gt;Doca: initial real test data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As [[vanitygen]] performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keysearch Rates ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! CPU !! GPU !! keys/s !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| Core2 Duo 6600 || nVidia GTX 285 || 3.5 Mkey/s || 100% CPU / 90% GPU [https://bitcointalk.org/index.php?topic=25804.msg378114#msg378114]&lt;br /&gt;
|-&lt;br /&gt;
| Sempron 140 || AMD 5830 || 5.5 Mkey/s || 100% CPU / 60% GPU [https://bitcointalk.org/index.php?topic=25804.msg378114#msg378114]&lt;br /&gt;
|-&lt;br /&gt;
| Core i5 750 @2.67 GHz || nVidia GTS 250 || 1.54 Mkey/s || 110% CPU [https://bitcointalk.org/index.php?topic=25804.msg378820#msg378820]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen_keysearch_rate&amp;diff=29885</id>
		<title>Vanitygen keysearch rate</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen_keysearch_rate&amp;diff=29885"/>
		<updated>2012-08-20T04:20:53Z</updated>

		<summary type="html">&lt;p&gt;Doca: backlink to vanitygen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As [[vanitygen]] performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen_keysearch_rate&amp;diff=29884</id>
		<title>Vanitygen keysearch rate</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen_keysearch_rate&amp;diff=29884"/>
		<updated>2012-08-20T02:32:59Z</updated>

		<summary type="html">&lt;p&gt;Doca: initial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As vanitygen performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29883</id>
		<title>Vanitygen</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29883"/>
		<updated>2012-08-20T02:32:32Z</updated>

		<summary type="html">&lt;p&gt;Doca: /* Expected keysearch rate */ typo corrected&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vanitygen is a command-line vanity bitcoin address generator.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address.  Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjL.  Alternatively, vanitygen can be used to generate random addresses offline.&lt;br /&gt;
&lt;br /&gt;
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys.  Vanitygen&#039;s search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.&lt;br /&gt;
&lt;br /&gt;
The example below illustrates a session of vanitygen.  It is typical, and took about 10 sec to finish, using my Core 2 Duo E6600 CPU on x86-64 Linux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./vanitygen 1Boat&lt;br /&gt;
Difficulty: 4476342&lt;br /&gt;
Pattern: 1Boat                                                                 &lt;br /&gt;
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT&lt;br /&gt;
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen).  Both can be built from source, and both are included in the Windows binary package.  Also included is oclvanityminer, the vanity address mining client.  Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu&#039;s vanity pool.&lt;br /&gt;
&lt;br /&gt;
Current version: 0.20&lt;br /&gt;
&lt;br /&gt;
Windows x86+x64 binaries [https://github.com/downloads/samr7/vanitygen/vanitygen-0.20-win.zip here].  PGP signature [http://insight.gotdns.org/~samr7/vanitygen-0.20-win.zip.asc here].&lt;br /&gt;
&lt;br /&gt;
Get the source from [https://github.com/samr7/vanitygen GitHub].  Includes Makefiles for Linux and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Main discussion at [https://bitcointalk.org/index.php?topic=25804.0 BitCoinTalk]&lt;br /&gt;
&lt;br /&gt;
== Expected keysearch rate ==&lt;br /&gt;
Main article: [[Vanitygen keysearch rate]]&lt;br /&gt;
&lt;br /&gt;
What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As vanitygen performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29882</id>
		<title>Vanitygen</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29882"/>
		<updated>2012-08-20T02:32:02Z</updated>

		<summary type="html">&lt;p&gt;Doca: /* Expected keysearch rate */ reference to vanitygen keysearch rate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vanitygen is a command-line vanity bitcoin address generator.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address.  Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjL.  Alternatively, vanitygen can be used to generate random addresses offline.&lt;br /&gt;
&lt;br /&gt;
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys.  Vanitygen&#039;s search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.&lt;br /&gt;
&lt;br /&gt;
The example below illustrates a session of vanitygen.  It is typical, and took about 10 sec to finish, using my Core 2 Duo E6600 CPU on x86-64 Linux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./vanitygen 1Boat&lt;br /&gt;
Difficulty: 4476342&lt;br /&gt;
Pattern: 1Boat                                                                 &lt;br /&gt;
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT&lt;br /&gt;
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen).  Both can be built from source, and both are included in the Windows binary package.  Also included is oclvanityminer, the vanity address mining client.  Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu&#039;s vanity pool.&lt;br /&gt;
&lt;br /&gt;
Current version: 0.20&lt;br /&gt;
&lt;br /&gt;
Windows x86+x64 binaries [https://github.com/downloads/samr7/vanitygen/vanitygen-0.20-win.zip here].  PGP signature [http://insight.gotdns.org/~samr7/vanitygen-0.20-win.zip.asc here].&lt;br /&gt;
&lt;br /&gt;
Get the source from [https://github.com/samr7/vanitygen GitHub].  Includes Makefiles for Linux and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Main discussion at [https://bitcointalk.org/index.php?topic=25804.0 BitCoinTalk]&lt;br /&gt;
&lt;br /&gt;
== Expected keysearch rate ==&lt;br /&gt;
Main article: [Vanitygen keysearch rate]&lt;br /&gt;
&lt;br /&gt;
What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As vanitygen performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29880</id>
		<title>Vanitygen</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29880"/>
		<updated>2012-08-20T01:13:00Z</updated>

		<summary type="html">&lt;p&gt;Doca: keysearch rate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vanitygen is a command-line vanity bitcoin address generator.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address.  Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjL.  Alternatively, vanitygen can be used to generate random addresses offline.&lt;br /&gt;
&lt;br /&gt;
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys.  Vanitygen&#039;s search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.&lt;br /&gt;
&lt;br /&gt;
The example below illustrates a session of vanitygen.  It is typical, and took about 10 sec to finish, using my Core 2 Duo E6600 CPU on x86-64 Linux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./vanitygen 1Boat&lt;br /&gt;
Difficulty: 4476342&lt;br /&gt;
Pattern: 1Boat                                                                 &lt;br /&gt;
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT&lt;br /&gt;
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen).  Both can be built from source, and both are included in the Windows binary package.  Also included is oclvanityminer, the vanity address mining client.  Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu&#039;s vanity pool.&lt;br /&gt;
&lt;br /&gt;
Current version: 0.20&lt;br /&gt;
&lt;br /&gt;
Windows x86+x64 binaries [https://github.com/downloads/samr7/vanitygen/vanitygen-0.20-win.zip here].  PGP signature [http://insight.gotdns.org/~samr7/vanitygen-0.20-win.zip.asc here].&lt;br /&gt;
&lt;br /&gt;
Get the source from [https://github.com/samr7/vanitygen GitHub].  Includes Makefiles for Linux and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Main discussion at [https://bitcointalk.org/index.php?topic=25804.0 BitCoinTalk]&lt;br /&gt;
&lt;br /&gt;
== Expected keysearch rate ==&lt;br /&gt;
What key search rate can I expect from hardware X?&lt;br /&gt;
&lt;br /&gt;
Detailed list forthcoming.  Some ballpark estimates are listed below.&lt;br /&gt;
&lt;br /&gt;
 Dual-core desktop CPUs, 32-bit mode: 100-250 Kkey/s.&lt;br /&gt;
 Dual-core desktop CPUs, 64-bit mode: 150-450 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 32-bit mode: 200-400 Kkey/s.&lt;br /&gt;
 Quad-core desktop CPUs, 64-bit mode: 300-750 Kkey/s.&lt;br /&gt;
 NVIDIA GT200 GPUs: up to 6.5 Mkey/s&lt;br /&gt;
 AMD Radeon 58XX, 68XX GPUs: up to 23.5 Mkey/s.&lt;br /&gt;
 AMD Radeon 69XX GPUs: up to 19.5 Mkey/s.&lt;br /&gt;
&lt;br /&gt;
As vanitygen performs a lot of large integer arithmetic, running it in 64-bit mode makes a huge difference in key search rate, easily a 50% improvement over 32-bit mode.  If you are using a 64-bit edition of Windows, and not using a GPU, be sure to use vanitygen64.exe.&lt;br /&gt;
&lt;br /&gt;
Radeon 58XX outperforms Radeon 69XX by a very comfortable margin.  Oclvanitygen is sensitive to integer multiply throughput, and Radeon 58XX can multiply concurrently with other operations.  At similar clocks, a hobbled Radeon 5830 will outperform a Radeon 6970.&lt;br /&gt;
&lt;br /&gt;
In custom builds, CPU performance will be less than expected if the OpenSSL library is an older version (&amp;lt;1.0.0d) or is not built with the appropriate optimizations enabled.&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29879</id>
		<title>Vanitygen</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29879"/>
		<updated>2012-08-20T01:10:28Z</updated>

		<summary type="html">&lt;p&gt;Doca: links to windows binaries, PGP signature, GitHub repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vanitygen is a command-line vanity bitcoin address generator.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address.  Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjL.  Alternatively, vanitygen can be used to generate random addresses offline.&lt;br /&gt;
&lt;br /&gt;
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys.  Vanitygen&#039;s search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.&lt;br /&gt;
&lt;br /&gt;
The example below illustrates a session of vanitygen.  It is typical, and took about 10 sec to finish, using my Core 2 Duo E6600 CPU on x86-64 Linux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./vanitygen 1Boat&lt;br /&gt;
Difficulty: 4476342&lt;br /&gt;
Pattern: 1Boat                                                                 &lt;br /&gt;
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT&lt;br /&gt;
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen).  Both can be built from source, and both are included in the Windows binary package.  Also included is oclvanityminer, the vanity address mining client.  Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu&#039;s vanity pool.&lt;br /&gt;
&lt;br /&gt;
Current version: 0.20&lt;br /&gt;
&lt;br /&gt;
Windows x86+x64 binaries [https://github.com/downloads/samr7/vanitygen/vanitygen-0.20-win.zip here].  PGP signature [http://insight.gotdns.org/~samr7/vanitygen-0.20-win.zip.asc here].&lt;br /&gt;
&lt;br /&gt;
Get the source from [https://github.com/samr7/vanitygen GitHub].  Includes Makefiles for Linux and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Main discussion at [https://bitcointalk.org/index.php?topic=25804.0 BitCoinTalk]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Armory&amp;diff=29877</id>
		<title>Armory</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Armory&amp;diff=29877"/>
		<updated>2012-08-20T01:06:23Z</updated>

		<summary type="html">&lt;p&gt;Doca: /* Features */ vanitygen link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An open-source, python-based, wallet-management application for the Bitcoin network.&lt;br /&gt;
&lt;br /&gt;
At the alpha-level stage, Armory is a proof-of-concept release.  It is very resource-intensive and thus will not be usable by everyone.  The beta version of the project is being crowdfunded&amp;lt;ref&amp;gt;[http://www.rockethub.com/projects/6056-armory-bitcoin-development-funding Armory Bitcoin Development Funding]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Available for Windows and Linux. Armory can be built for OS X but does not (yet) have OS X binaries.&lt;br /&gt;
&lt;br /&gt;
Armory is licensed under the AGPL.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
* Encrypted wallet (optional)&lt;br /&gt;
* Maintain offline wallets for 100% security from online attackers.  &lt;br /&gt;
* Import addresses created with [[vanitygen|VanityGen]] or sweep funds from Casascius physical Bitcoins.&lt;br /&gt;
* Toggle between “Standard” and “Advanced” modes to guarantee an appropriate set of options and information.&lt;br /&gt;
And more -- see the [http://bitcointalk.org/index.php?topic=56424.0 project&#039;s forum thread] for full details.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
The Armory project was announced January 3rd, 2012&amp;lt;ref&amp;gt;[http://bitcointalk.org/index.php?topic=56424.0 Armory - The most advanced Bitcoin Client in existence!]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Thin Client Security]]&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
* [http://bitcoinarmory.com Amory]] Project page&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Clients]]&lt;br /&gt;
[[Category:Open Source]]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BIP_0015&amp;diff=29876</id>
		<title>BIP 0015</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BIP_0015&amp;diff=29876"/>
		<updated>2012-08-20T01:05:02Z</updated>

		<summary type="html">&lt;p&gt;Doca: /* FirstBits */ link to vanitygen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{bip}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  BIP: 15&lt;br /&gt;
  Title: BIP Aliases&lt;br /&gt;
  Author: Amir Taaki &amp;lt;genjix@riseup.net&amp;gt;&lt;br /&gt;
  Status: Deferred&lt;br /&gt;
  Type: Standards Track&lt;br /&gt;
  Created: 10-12-2011&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using vanilla bitcoin, to send funds to a destination, an address in the form 1Hd44nkJfNAcPJeZyrGC5sKJS1TzgmCTjjZ is needed. The problem with using addresses is they are not easy to remember. An analogy can be thought if one were required to enter the IP address of their favourite websites if domain names did not exist.&lt;br /&gt;
&lt;br /&gt;
This document aims to layout through careful argument, a bitcoin alias system. This is a big modification to the protocol that is not easily changed in the future and has big ramifications. There is impetus in getting it correct the first time. Aliases have to be robust and secure.&lt;br /&gt;
&lt;br /&gt;
== Schemes ==&lt;br /&gt;
&lt;br /&gt;
Here are a few different proposals and the properties of each system.&lt;br /&gt;
&lt;br /&gt;
=== FirstBits ===&lt;br /&gt;
&lt;br /&gt;
FirstBits is a proposal for using the blockchain as an address book.&lt;br /&gt;
&lt;br /&gt;
When bitcoins are sent to an address, that address becomes recorded in the blockchain. It is therefore known that this address exists or did exist by simply seeing that there was a payment to that address. FirstBits is a method to have a memorable alias. One first converts the address to lower-case, then takes the first few unique characters. This is your FirstBits alias.&lt;br /&gt;
&lt;br /&gt;
As an example, brmlab hackerspace in Prague has an address for purchasing food or drink, or making donations:&lt;br /&gt;
&lt;br /&gt;
  1BRMLAB7nryYgFGrG8x9SYaokb8r2ZwAsX&lt;br /&gt;
&lt;br /&gt;
Their FirstBits alias becomes:&lt;br /&gt;
&lt;br /&gt;
  1brmlab&lt;br /&gt;
&lt;br /&gt;
It is enough information to be given the FirstBits alias &#039;&#039;1brmlab&#039;&#039;. When someone wishes to make a purchase, without FirstBits, they either have to type out their address laboriously by hand, scan their QR code (which requires a mobile handset that this author does not own) or find their address on the internet to copy and paste into the client to send bitcoins. FirstBits alleviates this impracticality by providing an easy method to make payments.&lt;br /&gt;
&lt;br /&gt;
Together with [[vanitygen|Vanitygen (vanity generator)]], it becomes possible to create memorable unique named addresses. Addresses that are meaningful, rather than an odd assemblage of letters and numbers but add context to the destination.&lt;br /&gt;
&lt;br /&gt;
However FirstBits has its own problems. One is that the possible aliases one is able to generate is limited by the available computing power available. It may not be feasible to generate a complete or precise alias that is wanted- only approximates may be possible. It is also computationally resource intensive which means a large expenditure of power for generating unique aliases in the future, and may not scale up to the level of individuals at home or participants with hand-held devices in an environment of ubiquitous computing.&lt;br /&gt;
&lt;br /&gt;
FirstBits scales extremely poorly as the network grows. Each indexer or lookup node needs to keep track of every bitcoin address ever in existence and provide a fast lookup from the aliases to those addresses. As the network grows linearly, the number of addresses should grow exponentially (assuming a networked effect of (n-1)*(n-2)/2) rapidly making this scheme unfeasible.&lt;br /&gt;
&lt;br /&gt;
Light clients of the partial merkle root types become dependent on a trusted third party for their alias lookups. The cost of storing every bitcoin address is too high considering their typical use-case on low-resource devices. This factor more than the others, means this scheme is sub-optimal and must be rejected.&lt;br /&gt;
&lt;br /&gt;
=== DNS TXT Records ===&lt;br /&gt;
&lt;br /&gt;
DNS allows TXT records to be created containing arbitrary data. In a bitcoin alias system, a custom format mutually agreed upon by a BIP standard would be used to store mappings to bitcoin addresses from domain names. How such a format would look is out of the scope of this document.&lt;br /&gt;
&lt;br /&gt;
An issue is that it requires people who wish to create such mappings to be familiar with configuring DNS records, and be able to run the necessary toolsets to insert the correct data. Although not a huge concern, it is a usability issue.&lt;br /&gt;
&lt;br /&gt;
Security wise, DNS is unsafe and insecure by design. It is possible to spoof records by being on the same network as another host. A number of revisions to mitigate the issue under the guise of DNSSEC have been in the works since the 1990s and are still being rolled out.&lt;br /&gt;
&lt;br /&gt;
As of Dec 2011, DNSSEC is still not yet a defacto standard on the internet. Should a participant in the bitcoin network wish to use DNS TXT records, they would in addition to having to configure DNS, be able to setup DNSSEC. This may not be feasible, especially where some registrars provide access to DNS through a web interface only.&lt;br /&gt;
&lt;br /&gt;
The disadvantage of DNS TXT records is that updating a record takes time. This encourages people to not use new addresses per transaction which has certain security issues.&lt;br /&gt;
&lt;br /&gt;
=== Server Service ===&lt;br /&gt;
&lt;br /&gt;
Aside from using DNS TXT records, another possibility is using the domain name system to lookup hosts and then contact a service running on a predefined port to get the bitcoin address.&lt;br /&gt;
&lt;br /&gt;
# User wishes to send to foo@bar.net&lt;br /&gt;
# Client uses DNS to find the IP address of bar.net: 123.123.123.123&lt;br /&gt;
# Client connects to port 123.123.123.123:4567 and requests the bitcoin address for the user &#039;&#039;foo&#039;&#039;&lt;br /&gt;
# Server responds with the address or error code and terminates the connection.&lt;br /&gt;
# Client sends the funds to the address&lt;br /&gt;
&lt;br /&gt;
The service would be responsible for providing the mechanisms for changing and storing the mappings on their service. A front-end web interface could be provided to users wishing to use the service and customise their accounts on the server.&lt;br /&gt;
&lt;br /&gt;
This approach has the positive aspect of providing the best flexibility for the implementer to store the records however they wish in a database or plaintext file, and then serve them up quickly using a small server side daemon typically written in C. This approach is highly scalable.&lt;br /&gt;
&lt;br /&gt;
However this approach also suffers the problem of being reliant on DNS and hence also being vulnerable to spoofing. Hence DNSSEC is also required. This approach is slightly better than the DNS TXT records though since it makes inserting new users and modifying aliases very easy which allows people to run these server services more cheaply.&lt;br /&gt;
&lt;br /&gt;
=== HTTPS Web Service ===&lt;br /&gt;
&lt;br /&gt;
HTTPS provides an additional layer of security by encrypting the connection, providing much needed privacy for users. Together with using Certificate Authorities, it fixes the issue with using DNSSEC since an error would be thrown up were someone to try to spoof a domain name on the local network.&lt;br /&gt;
&lt;br /&gt;
When trying to send to:&lt;br /&gt;
&lt;br /&gt;
  genjix@foo.org&lt;br /&gt;
&lt;br /&gt;
The request is broken into the handle (genjix) and domain (foo.org) at the last occurrence of the @. The client then constructs a request that will query for the address.&lt;br /&gt;
&lt;br /&gt;
  https://foo.org/bitcoin-alias/?handle=genjix&lt;br /&gt;
&lt;br /&gt;
bitcoin-alias has been chosen as the query suffix because it allows this system to co-exist easily within another web root without the fear of name clashes.&lt;br /&gt;
&lt;br /&gt;
The query will then return an address which is used to make the payment.&lt;br /&gt;
&lt;br /&gt;
  1Hd44nkJfNAcPJeZyrGC5sKJS1TzgmCTjjZ&lt;br /&gt;
&lt;br /&gt;
The details of whether a unique address is returned per query, whether an address is fetched from a pre-existing pool of addresses, and so on is an implementation detail unique to every server. How alias to address mappings are setup is dependent on the site which could have a web-interface and be providing a free service to users or be a private customised service serving pre-existing addresses. This is left up to sysop policy, and deliberately not defined here.&lt;br /&gt;
&lt;br /&gt;
A web service is trivial to setup and the cost is low. There are many free out of the box providers on the net that allows anyone with the most basic knowledge of web technologies to create their own website. By providing users with a package, anybody can quickly set themselves up with a bitcoin alias. It could be something as simple as a PHP script that the user edits with their custom settings and uploads themselves to their website.&lt;br /&gt;
&lt;br /&gt;
It also scales reasonably- anybody wishing to run a naming service can attach a backend with a variety of database technologies then provide a web frontend for users to customise and create their own aliases.&lt;br /&gt;
&lt;br /&gt;
A naive implementation is provided below as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// resolv.h&lt;br /&gt;
#ifndef NOMRESOLV_H__&lt;br /&gt;
#define NOMRESOLV_H__&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;quot;curl/curl.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using std::string;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
This class resolves against a server to lookup addresses.&lt;br /&gt;
To not conflict with the bitcoin addresses, we refer here to people&#039;s handles.&lt;br /&gt;
A handle is of the form:&lt;br /&gt;
&lt;br /&gt;
   genjix@foo.org&lt;br /&gt;
&lt;br /&gt;
Most characters are valid for the username + password (and handled accordingly), but the domain follows usual web standards. It is possible to affix a path if needed,&lt;br /&gt;
&lt;br /&gt;
   genjix@bar.com/path/to/&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
class NameResolutionService&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    NameResolutionService();&lt;br /&gt;
    ~NameResolutionService();&lt;br /&gt;
&lt;br /&gt;
    // Three main methods map to RPC actions.&lt;br /&gt;
    string FetchAddress(const string&amp;amp; strHandle, string&amp;amp; strAddy);&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
    // A POST block&lt;br /&gt;
    class PostVariables&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
        PostVariables();&lt;br /&gt;
        ~PostVariables();&lt;br /&gt;
        // Add a new key, value pair&lt;br /&gt;
        bool Add(const string&amp;amp; strKey, const string&amp;amp; strVal);&lt;br /&gt;
        curl_httppost* operator()() const;&lt;br /&gt;
    private:&lt;br /&gt;
        // CURL stores POST blocks as linked lists.&lt;br /&gt;
        curl_httppost *pBegin, *pEnd;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // Explodes user@domain =&amp;gt; user, domain&lt;br /&gt;
    static void ExplodeHandle(const string&amp;amp; strHandle, string&amp;amp; strNickname, string&amp;amp; strDomain);&lt;br /&gt;
    // Perform the HTTP request. Returns true on success.&lt;br /&gt;
    bool Perform();&lt;br /&gt;
&lt;br /&gt;
    // CURL error message&lt;br /&gt;
    char pErrorBuffer[CURL_ERROR_SIZE];  &lt;br /&gt;
    // CURL response&lt;br /&gt;
    string strBuffer;&lt;br /&gt;
    // CURL handle&lt;br /&gt;
    CURL *curl;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// resolv.cpp&lt;br /&gt;
#include &amp;quot;resolv.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;boost/lexical_cast.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;access.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// callback used to write response from the server&lt;br /&gt;
static int writer(char *pData, size_t nSize, size_t nNmemb, std::string *pBuffer)  &lt;br /&gt;
{  &lt;br /&gt;
  int nResult = 0;  &lt;br /&gt;
  if (pBuffer != NULL)  &lt;br /&gt;
  {  &lt;br /&gt;
    pBuffer-&amp;gt;append(pData, nSize * nNmemb);  &lt;br /&gt;
    // How much did we write?  &lt;br /&gt;
    nResult = nSize * nNmemb;  &lt;br /&gt;
  }  &lt;br /&gt;
  return nResult;  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
NameResolutionService::NameResolutionService()&lt;br /&gt;
{&lt;br /&gt;
    // Initialise CURL with our various options.&lt;br /&gt;
    curl = curl_easy_init();&lt;br /&gt;
    // This goes first in case of any problems below. We get an error message.&lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, pErrorBuffer);  &lt;br /&gt;
    // fail when server sends &amp;gt;= 404&lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);  &lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_HEADER, 0);  &lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);  &lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_302);&lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);  &lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY);&lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);&lt;br /&gt;
    // server response goes in strBuffer&lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &amp;amp;strBuffer);  &lt;br /&gt;
    pErrorBuffer[0] = &#039;\0&#039;;&lt;br /&gt;
}&lt;br /&gt;
NameResolutionService::~NameResolutionService()&lt;br /&gt;
{&lt;br /&gt;
    curl_easy_cleanup(curl);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void NameResolutionService::ExplodeHandle(const string&amp;amp; strHandle, string&amp;amp; strNickname, string&amp;amp; strDomain)&lt;br /&gt;
{&lt;br /&gt;
    // split address at @ furthrest to the right&lt;br /&gt;
    size_t nPosAtsym = strHandle.rfind(&#039;@&#039;);&lt;br /&gt;
    strNickname = strHandle.substr(0, nPosAtsym);&lt;br /&gt;
    strDomain = strHandle.substr(nPosAtsym + 1, strHandle.size());&lt;br /&gt;
}&lt;br /&gt;
bool NameResolutionService::Perform()&lt;br /&gt;
{&lt;br /&gt;
    // Called after everything has been setup. This actually does the request.&lt;br /&gt;
    CURLcode result = curl_easy_perform(curl);  &lt;br /&gt;
    return (result == CURLE_OK);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string NameResolutionService::FetchAddress(const string&amp;amp; strHandle, string&amp;amp; strAddy)&lt;br /&gt;
{&lt;br /&gt;
    // GET is defined for &#039;getting&#039; data, so we use GET for the low risk fetching of people&#039;s addresses&lt;br /&gt;
    if (!curl)&lt;br /&gt;
        // For some reason CURL didn&#039;t start...&lt;br /&gt;
        return pErrorBuffer;&lt;br /&gt;
    // Expand the handle&lt;br /&gt;
    string strNickname, strDomain;&lt;br /&gt;
    ExplodeHandle(strHandle, strNickname, strDomain);&lt;br /&gt;
    // url encode the nickname for get request&lt;br /&gt;
    const char* pszEncodedNick = curl_easy_escape(curl, strNickname.c_str(), strNickname.size());&lt;br /&gt;
    if (!pszEncodedNick)&lt;br /&gt;
        return &amp;quot;Unable to encode nickname.&amp;quot;;&lt;br /&gt;
    // construct url for GET request&lt;br /&gt;
    string strRequestUrl = strDomain + &amp;quot;/bitcoin-alias/?handle=&amp;quot; + pszEncodedNick;&lt;br /&gt;
    // Pass URL to CURL&lt;br /&gt;
    curl_easy_setopt(curl, CURLOPT_URL, strRequestUrl.c_str());  &lt;br /&gt;
    if (!Perform())&lt;br /&gt;
        return pErrorBuffer;&lt;br /&gt;
    // Server should respond with a JSON that has the address in.&lt;br /&gt;
    strAddy = strBuffer;&lt;br /&gt;
    return &amp;quot;&amp;quot;;  // no error&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
NameResolutionService::PostVariables::PostVariables()&lt;br /&gt;
{&lt;br /&gt;
    // pBegin/pEnd *must* be null before calling curl_formadd&lt;br /&gt;
    pBegin = NULL;&lt;br /&gt;
    pEnd = NULL;&lt;br /&gt;
}&lt;br /&gt;
NameResolutionService::PostVariables::~PostVariables()&lt;br /&gt;
{&lt;br /&gt;
    curl_formfree(pBegin);&lt;br /&gt;
}&lt;br /&gt;
bool NameResolutionService::PostVariables::Add(const string&amp;amp; strKey, const string&amp;amp; strVal)&lt;br /&gt;
{&lt;br /&gt;
    // Copy strings to this block. Return true on success.&lt;br /&gt;
    return curl_formadd(&amp;amp;pBegin, &amp;amp;pEnd, CURLFORM_COPYNAME, strKey.c_str(), CURLFORM_COPYCONTENTS, strVal.c_str(), CURLFORM_END) == CURL_FORMADD_OK;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
curl_httppost* NameResolutionService::PostVariables::operator()() const&lt;br /&gt;
{&lt;br /&gt;
    return pBegin;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// rpc.cpp&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
const Object CheckMaybeThrow(const string&amp;amp; strJsonIn)&lt;br /&gt;
{&lt;br /&gt;
    // Parse input JSON&lt;br /&gt;
    Value valRequest;&lt;br /&gt;
    if (!read_string(strJsonIn, valRequest) || valRequest.type() != obj_type)&lt;br /&gt;
        throw JSONRPCError(-32700, &amp;quot;Parse error&amp;quot;);&lt;br /&gt;
    const Object&amp;amp; request = valRequest.get_obj();&lt;br /&gt;
    // Now check for a key called &amp;quot;error&amp;quot;&lt;br /&gt;
    const Value&amp;amp; error  = find_value(request, &amp;quot;error&amp;quot;);&lt;br /&gt;
    // It&#039;s an error JSON! so propagate the error.&lt;br /&gt;
    if (error.type() != null_type)   &lt;br /&gt;
        throw JSONRPCError(-4, error.get_str());&lt;br /&gt;
    // Return JSON object&lt;br /&gt;
    return request;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const string CollectAddress(const string&amp;amp; strIn)&lt;br /&gt;
{&lt;br /&gt;
    // If the handle does not have an @ in it, then it&#039;s a normal base58 bitcoin address&lt;br /&gt;
    if (strIn.find(&#039;@&#039;) == (size_t)-1)&lt;br /&gt;
        return strIn;&lt;br /&gt;
    &lt;br /&gt;
    // Open the lookup service&lt;br /&gt;
    NameResolutionService ns;&lt;br /&gt;
    // We established that the input string is not a BTC address, so we use it as a handle now.&lt;br /&gt;
    string strHandle = strIn, strAddy;&lt;br /&gt;
    string strError = ns.FetchAddress(strHandle, strAddy);&lt;br /&gt;
    if (!strError.empty())&lt;br /&gt;
        throw JSONRPCError(-4, strError);&lt;br /&gt;
&lt;br /&gt;
    const Object&amp;amp; request(CheckMaybeThrow(strAddy));&lt;br /&gt;
    // Get the BTC address from the JSON&lt;br /&gt;
    const Value&amp;amp; address = find_value(request, &amp;quot;address&amp;quot;);&lt;br /&gt;
    if (address.type() != str_type)&lt;br /&gt;
        throw JSONRPCError(-32600, &amp;quot;Server responded with malformed reply.&amp;quot;);&lt;br /&gt;
    return address.get_str();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Named this way to prevent possible conflicts.&lt;br /&gt;
Value rpc_send(const Array&amp;amp; params, bool fHelp)&lt;br /&gt;
{&lt;br /&gt;
    if (fHelp || params.size() != 2)&lt;br /&gt;
        throw runtime_error(&lt;br /&gt;
            &amp;quot;send &amp;lt;name@domain or address&amp;gt; &amp;lt;amount&amp;gt;\n&amp;quot;&lt;br /&gt;
            &amp;quot;&amp;lt;amount&amp;gt; is a real and is rounded to the nearest 0.01&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Intelligent function which looks up address given handle, or returns address&lt;br /&gt;
    string strAddy = CollectAddress(params[0].get_str());&lt;br /&gt;
    int64 nAmount = AmountFromValue(params[1]);&lt;br /&gt;
    // Do the send&lt;br /&gt;
    CWalletTx wtx;&lt;br /&gt;
    string strError = SendMoneyToBitcoinAddress(strAddy, nAmount, wtx);&lt;br /&gt;
    if (!strError.empty())&lt;br /&gt;
        throw JSONRPCError(-4, strError);&lt;br /&gt;
    return wtx.GetHash().GetHex();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== IP Transactions ===&lt;br /&gt;
&lt;br /&gt;
An IP transaction is an old transaction format in bitcoin that is disabled and possibly could be deprecated. It involves being given an IP address to make payment to. Upon connecting to the node and requesting their public key using &amp;quot;checkorder&amp;quot;, they will respond with a script in the form:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;public key&amp;gt; OP_CHECKSIG&lt;br /&gt;
&lt;br /&gt;
Similar to coinbase output transactions. IP transactions have the advantage of being able to contain additional metadata which can be useful in many transactions. Currently no authentication is done making the scheme insecure against man in the middle (MITM) attacks.&lt;br /&gt;
&lt;br /&gt;
This proposal seeks to enable DNS lookups for IP transactions.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;checkorder&amp;quot; message would contain a destination account, which could map to different isolated sets of keypairs/wallets running under the same host. The exact mapping from the checkorder reference info to the local system is implementation defined.&lt;br /&gt;
&lt;br /&gt;
By using DNS lookups, the MITM problem with IP transactions could be mitigated by storing a public key in a DNS TXT record. This public key would be used for all future &amp;quot;reply&amp;quot; messages originating from that host. First time use would require a confirmation for acceptance of that public key; like with SSH. Should the &amp;quot;reply&amp;quot; message not match the accepted public key, then the host will be given an error.&lt;br /&gt;
&lt;br /&gt;
[[Category:BIP|E]]&lt;br /&gt;
&lt;br /&gt;
=== Namecoin ID ===&lt;br /&gt;
&lt;br /&gt;
This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retreives the structured data containing the bitcoin address(es) associated with this alias.&lt;br /&gt;
&lt;br /&gt;
Using a decentralised domain name system like Namecoin, means no external server or entity needs to be trusted unlike the other proposals listed here. This indicates a system with the advantage of having a high availability and ease of entry (no restrictions for users to create aliases).&lt;br /&gt;
&lt;br /&gt;
Two examples are presented below. The first shows a simpler format, while the second shows several Bitcoin addresses in a structured format.&lt;br /&gt;
&lt;br /&gt;
 $ namecoind name_show id/khal&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;bitcoin&amp;quot; : &amp;quot;1KHAL8bUjnkMRMg9yd2dNrYnJgZGH8Nj6T&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 $ namecoind name_show id/khal&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;bitcoin&amp;quot; :&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;default&amp;quot; : &amp;quot;1KHAL8bUjnkMRMg9yd2dNrYnJgZGH8Nj6T&amp;quot;,&lt;br /&gt;
     &amp;quot;donation&amp;quot;: &amp;quot;1J3EKMfboca3SESWGrQKESsG1MA9yK6vN4&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;More possibilities :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Allow to securely use &#039;&#039;&#039;unsecured channels&#039;&#039;&#039; &lt;br /&gt;
You can put an url and a bitcoin address that will be used to sign the result. It means that a query to this url will return a bitcoin address and a signature. Bitcoin can then check (with the verify_message function) that the returned address has not been replaced by another one.&lt;br /&gt;
 $ namecoind name_show id/khal&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;bitcoin&amp;quot; :&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;url&amp;quot; : &amp;quot;http://merchant.com/bitcoin/getnewaddres/&amp;quot;,&lt;br /&gt;
     &amp;quot;signedWith&amp;quot; : &amp;quot;1KHAL8bUjnkMRMg9yd2dNrYnJgZGH8Nj6T&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Allow to get a different address each time, or per user, per order, etc&lt;br /&gt;
 $ namecoind name_show id/khal&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;bitcoin&amp;quot; :&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;url&amp;quot; : &amp;quot;http://merchant.com/bitcoin/getaddres/{Your customer id}&amp;quot;,&lt;br /&gt;
     &amp;quot;signedWith&amp;quot; : &amp;quot;1KHAL8bUjnkMRMg9yd2dNrYnJgZGH8Nj6T&amp;quot;,&lt;br /&gt;
     &amp;quot;useOnce&amp;quot;: false&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
In the above example, bitcoin will ask the user for &amp;quot;Your customer id&amp;quot; and replace that value in the url before making the http request. The merchant will receive the request and give the user a payment address associated with that customer.&lt;br /&gt;
&lt;br /&gt;
Any text can be put into the brackets, allowing merchants to adapt it to all their needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Specification is extensible&lt;br /&gt;
&lt;br /&gt;
New features can be added later to support uncovered cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more informations.&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29875</id>
		<title>Vanitygen</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Vanitygen&amp;diff=29875"/>
		<updated>2012-08-20T01:02:55Z</updated>

		<summary type="html">&lt;p&gt;Doca: initial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vanitygen is a command-line vanity bitcoin address generator.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re tired of the random, cryptic addresses generated by regular bitcoin clients, you can use vanitygen to create a more personalized address.  Add unique flair when you tell people to send bitcoins to 1stDownqyMHHqnDPRSfiZ5GXJ8Gk9dbjL.  Alternatively, vanitygen can be used to generate random addresses offline.&lt;br /&gt;
&lt;br /&gt;
Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys.  Vanitygen&#039;s search is probabilistic, and the amount of time required to find a given pattern depends on how complex the pattern is, the speed of your computer, and whether you get lucky.&lt;br /&gt;
&lt;br /&gt;
The example below illustrates a session of vanitygen.  It is typical, and took about 10 sec to finish, using my Core 2 Duo E6600 CPU on x86-64 Linux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./vanitygen 1Boat&lt;br /&gt;
Difficulty: 4476342&lt;br /&gt;
Pattern: 1Boat                                                                 &lt;br /&gt;
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT&lt;br /&gt;
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vanitygen includes components to perform address searching on your CPU (vanitygen) and your OpenCL-compatible GPU (oclvanitygen).  Both can be built from source, and both are included in the Windows binary package.  Also included is oclvanityminer, the vanity address mining client.  Oclvanityminer can be used to automatically claim bounties on sites such as ThePiachu&#039;s vanity pool.&lt;br /&gt;
&lt;br /&gt;
Current version: 0.20&lt;br /&gt;
&lt;br /&gt;
Windows x86+x64 binaries here.  PGP signature here&lt;br /&gt;
&lt;br /&gt;
Get the source from GitHub.  Includes Makefiles for Linux and Mac OS X.&lt;br /&gt;
&lt;br /&gt;
Main discussion at [https://bitcointalk.org/index.php?topic=25804.0 BitCoinTalk]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=In_Person_Traders&amp;diff=20871</id>
		<title>In Person Traders</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=In_Person_Traders&amp;diff=20871"/>
		<updated>2011-12-15T03:34:45Z</updated>

		<summary type="html">&lt;p&gt;Doca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;background:#dddddd;border:solid gray 1px;width:70%;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
This page is a map of people trading bitcoins in person in the real world. (Person to Person transactions) These are usually done using cash. If you have no bitcoins and are new to this, the trader is likely able to help you with the transaction and setting up a wallet.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Feel free to add yourself to the map by editing this page, and include some form of contact information. Also, you can include the calculation for your buy/sell prices and how much you are willing to buy/sell. &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:solid gray 1px;width:250px;&amp;quot;&amp;gt;&lt;br /&gt;
Legend&lt;br /&gt;
*[[Image:Green_marker.png|15px]] This person is Buying Bitcoins&lt;br /&gt;
*[[Image:Blue_marker.png|15px]] This person is Selling Bitcoins.&lt;br /&gt;
*[[Image:Red_marker.png|15px]] This person is Buying &amp;amp; Selling&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
There is also this site: http://btcnearme.com/ that does the same thing as this page (and has some more traders)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;!-- get coordinates for your address from http://www.gpsvisualizer.com/geocode --&amp;gt;&lt;br /&gt;
&amp;lt;display_points height=700 &amp;gt;&lt;br /&gt;
45.444785, -122.831282|Robert Kohr| email my gmail account - robkohr. I will sell at mtgox*1.15 and buy at mtgox*1.0 |File:Red_marker.png&lt;br /&gt;
45.5366557, -122.9570263|Robert Kohr| email my gmail account - robkohr. I will sell at mtgox*1.15 and buy at mtgox*1.0 |File:Red_marker.png&lt;br /&gt;
53.52505, -113.52068|Andrew| I sell at the up-to-the-minute Mt Gox Ask Price + 1% fee for Mt Gox code or 2% for plain bitcoin. My gmail account is onelineproof |File:Blue_marker.png&lt;br /&gt;
19.50050, -99.13088|BitcoinMX| Contact via https://bitcoinmx.appspot.com/ |File:Red_marker.png&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/display_points&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
* [[Trade]]&lt;br /&gt;
* [[:Category:Local]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Local]]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Securing_your_wallet&amp;diff=16358</id>
		<title>Securing your wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Securing_your_wallet&amp;diff=16358"/>
		<updated>2011-09-09T05:06:59Z</updated>

		<summary type="html">&lt;p&gt;Doca: bigger size for backup - 1000MB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Wallet security can be broken down into two independent goals:&lt;br /&gt;
# Protecting your wallet against loss.&lt;br /&gt;
# Protecting your wallet against theft.&lt;br /&gt;
&lt;br /&gt;
In the case that your current wallet hasn&#039;t been protected adequately (e.g. put online with a weaker password):&lt;br /&gt;
# Making a new secure wallet, using appropriate long-term protection.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;For a brief overview see also: [[Wallet Security Dos and Don&#039;ts (Windows)|Wallet Security Dos and Don&#039;ts]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Technical Background==&lt;br /&gt;
&lt;br /&gt;
Bitcoin transactions send Bitcoins to a specific public key. A Bitcoin address is an encoded hash of a public key. In order to use received Bitcoins, you need to have the private key matching the public key you received with. This is sort of like a super long password associated with an account (the account is the public key). Your Bitcoin wallet contains all of the private keys necessary for spending your received transactions. If you delete your wallet without a backup, then you no longer have the authorization information necessary to claim your coins, and the coins associated with those keys are lost forever.&lt;br /&gt;
&lt;br /&gt;
The wallet contains a pool of queued keys. By default there are 100 keys in the [[key pool]].  The size of the pool is configurable using the &amp;quot;-keypool&amp;quot; command line argument.  When you need an address for whatever reason (send, “new address”, generation, etc.), the key is not actually generated freshly, but taken from this pool. A brand new address is generated to fill the pool back to 100. So when a backup is first created, it has all of your old keys plus 100 unused keys. After sending a transaction, it has 99 unused keys. After a total of 100 new-key actions, you will start using keys that are not in your backup. Since the backup does not have the private keys necessary for authorizing spends of these coins, restoring from the old backup will cause you to lose Bitcoins.&lt;br /&gt;
&lt;br /&gt;
Creating a new address generates a new pair of public and private keys, which are added to your wallet. Each keypair is mostly random numbers, so they cannot be known prior to generation. If you backup your wallet and then create more than 100 new addresses, the keypair associated with the newest addresses will not be in the old wallet because the new keypairs are only known after creating them. Any coins received at these addresses will be lost if you restore from the backup.&lt;br /&gt;
&lt;br /&gt;
The situation is made somewhat more confusing because the receiving addresses shown in the UI are not the only keys in your wallet. Each Bitcoin generation is given a new public key, and, more importantly, each sent transaction also sends some number of Bitcoins back to yourself at a new key. When sending Bitcoins to anyone, you generate a new keypair for yourself and simultaneously send Bitcoins to your new public key and the actual recipient&#039;s public key. This is an anonymity feature – it makes tracking Bitcoin transactions much more difficult.&lt;br /&gt;
&lt;br /&gt;
So if you create a backup, do more than 100 things that cause a new key to be used, and then restore from the backup, some Bitcoins will be lost. Bitcoin has not deleted any keys (keys are never deleted) – it has created a new key that is not in your old backup and then sent Bitcoins to it.&lt;br /&gt;
&lt;br /&gt;
== Making a new wallet ==&lt;br /&gt;
&lt;br /&gt;
In the case that a wallet has been distributed, or stored, in a (real or potential) compromised state, it is wise to create a new wallet and transfer the full balance of Bitcoins to an address contained only in the newly created wallet.&lt;br /&gt;
&lt;br /&gt;
For example, this will be necessary if one created a wallet with a password of 12 characters, as suggested. However a few years have passed and the wallet is now more easily compromised.  Just re-encrypting isn&#039;t secure.  One needs to make a new wallet and make the old wallet worthless (spending the funds to the new wallet).&lt;br /&gt;
&lt;br /&gt;
==Making a secure workspace==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
The first step is to make a [http://www.howtogeek.com/howto/ubuntu/add-a-user-on-ubuntu-server/ new user,] so run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser new_user_name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as root. When you get to the prompt &#039;Enter the new value, or press ENTER for the default&#039;, just keep hitting ENTER.&lt;br /&gt;
&lt;br /&gt;
Then switch user to the new user.  To get to the new user you can use the switch user icon for your system, which on Ubuntu is in the &#039;System/Quit&#039; screen, or if there is no switch icon on your system you can log out and log back in as the new user.  Then click on a folder in the new user to display the file browser, then keep going up folders until you see the new user home directory, then right click to bring up the Properties dialog, then click on the Permissions tab, then in the Others section, set the folder access to None.&lt;br /&gt;
&lt;br /&gt;
For secure browsing, open Firefox, and then go into the Edit menu and click Preferences.  Starting from the left, click on the General tab, and in the &#039;Startup/When Firefox starts&#039; pop up menu, choose &#039;Show a Blank Page&#039;.  Then click on the Content tab, and deselect &#039;Load images automatically&#039; and deselect &#039;Enable Javascript&#039;.  Then click on the Privacy tab, and in the &#039;History/Firefox will&#039; pop up menu, choose &#039;Never remember history&#039;.  Then click on the Security tab, and in the Passwords section, deselect &#039;Remember passwords for sites&#039; and deselect &#039;Use a master password&#039;.  Then click on the Advanced tab, then click on the Update tab, and then in the &#039;Automatically check for updates to&#039; section, deselect &#039;Add-ons&#039; and &#039;Search Engines&#039;.&lt;br /&gt;
&lt;br /&gt;
When javascript is disabled, the [http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.23/bitcoin-0.3.23-linux.tar.gz/download linux download page] will not download automatically, so you&#039;ll have to click on the &#039;direct link&#039; part of the &amp;quot;Problems with the download? Please use this &#039;direct link&#039; or try another mirror.&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve made your secure new user, to maintain security you should use it only for bitcoin.&lt;br /&gt;
&lt;br /&gt;
It&#039;s also a good idea to encrypt the Home directory of whatever user you run Bitcoin under using ecryptfs-utils. To do this:&lt;br /&gt;
# If the Home directory is not empty you should back it up first, by just copying the data to an external drive or something.&lt;br /&gt;
# install ecryptfs-utils (on Ubuntu: sudo apt-get install ecryptfs-utils)&lt;br /&gt;
# log out of X (graphical system) and press Ctrl+Alt+F1 to login to the command shell (you must be logged out or some files will be open and the tool won&#039;t be able to encrypt your data)&lt;br /&gt;
# change directory to something that&#039;s not in your home folder (ex: cd / )&lt;br /&gt;
# run the migration tool (on Ubuntu: sudo ecryptfs-migrate-home -u username)&lt;br /&gt;
# if it&#039;s successful, you can now press ALT+F8 to go back to the GUI and login&lt;br /&gt;
# run &#039;ecryptfs-unwrap-passphrase&#039; and &#039;&#039;&#039;WRITE DOWN OR SAVE THE CODE IT RETURNS&#039;&#039;&#039; because you will need it if you ever have to pull your data off while the OS is not working. (You can run it again later if you need to, but run it now so that you can get your data if your Linux install gets botched.)&lt;br /&gt;
# run &#039;ecryptfs-setup-swap&#039; to encrypt your swap partition (the encrypted folder data is not encrypted while it&#039;s in memory, and so if it&#039;s ever sent to the swap partition it can be stolen from there unless that too is encrypted - be aware that this will mean you cannot use Hibernate anymore, as the bootloader won&#039;t be able to restore the hibernation data)&lt;br /&gt;
(instructions from [http://bodhizazen.net/Tutorials/Ecryptfs/#Migrate])&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
=====Backup all data (1000MB)=====&lt;br /&gt;
Follow these instructions to backup all the bitcoin data (wallet and block chains) to an encrypted disk image.&lt;br /&gt;
# Open Disk Utility&lt;br /&gt;
# Click New Image and choose 1000MB, 128-bit or 256-bit (faster or more secure) encryption and single partition.&lt;br /&gt;
# Save it somewhere you won&#039;t lose it (like your Wuala, Dropbox, Strongspace or whatever)&lt;br /&gt;
# Choose a safe and strong password&lt;br /&gt;
# Move everything from ~/Library/Application Support/Bitcoin/ to the image&lt;br /&gt;
# Symlink it back so the app would be able to use it&lt;br /&gt;
:::ln -s /Volumes/Bitcoin ~/Library/Application Support/Bitcoin&lt;br /&gt;
&lt;br /&gt;
Don&#039;t forget to mount your image before using Bitcoin and unmount after quitting it.&lt;br /&gt;
&lt;br /&gt;
=====Backup just wallet.dat (40MB)=====&lt;br /&gt;
Follow these instructions to backup just the wallet.dat file. This results in a smaller disk image, but it&#039;s more complicated to do.&lt;br /&gt;
# Open Disk Utility&lt;br /&gt;
# Click New Image and choose 40MB, 128-bit or 256-bit (faster or more secure) encryption and single partition.&lt;br /&gt;
# Save it somewhere you won&#039;t lose it (like your Wuala, Dropbox, Strongspace or whatever)&lt;br /&gt;
# Choose a safe and strong password&lt;br /&gt;
# Move your wallet.dat file to the image&lt;br /&gt;
# Symlink it back so the app would be able to use it&lt;br /&gt;
:::ln -s /Volumes/Bitcoin/wallet.dat ~/Library/Application Support/Bitcoin/wallet.dat&lt;br /&gt;
&lt;br /&gt;
[[File:MountWalletAndLauchnBitcoin_OSX_Automator.png|thumbnail|150px|Mount Wallet and launch Bitcoin]]&lt;br /&gt;
Don&#039;t forget to mount your image before using Bitcoin and unmount after quitting it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: If you start the Bitcoin application without having the image mounted, the application will overwrite your symlink with a new wallet. If that happens, don&#039;t panic. Just delete the new wallet.dat, mount the image, and recreate the symlink like above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Automation&#039;&#039;&#039;: You can create a small application using [http://en.wikipedia.org/wiki/Automator_%28software%29 Automator] (included in OS X) to automatically mount the wallet and then launch Bitcoin App. See the Screenshot on how to do this.&lt;br /&gt;
&lt;br /&gt;
If one &#039;&#039;doesn&#039;t&#039;&#039; want to use encrypted Disk images, then a &#039;&#039;&#039;small shell script&#039;&#039;&#039; can be used instead that takes care of decrypting the wallet, launching bitcoin client, and encrypting it after the client exits. This script works on both OSX and Linux: [http://lorelei.kaverit.org/bitcoin.sh bitcoin-launch-script]&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
If you are using Windows XP or Windows 7, you can keep your wallet on an encrypted disk image created by third-party software, such as [http://www.truecrypt.org/ TrueCrypt] (open source) or [http://www.jetico.com/encryption-bestcrypt/ Jetico BestCrypt] (commercial).  You can probably do the same with Windows Vista or Windows 2000.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; You should configure Bitcoin in this manner only on computers where you use Bitcoin, but do not use that computer to mine.  For example, this is a good configuration for a notebook or tablet computer.&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed the Windows Bitcoin client and run it at least once, the process is described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;To mount the Bitcoin data directory on an encrypted drive&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol start=1 type=1&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the third-party disk image encryption program of your choice to create and mount an encrypted disk image of at least 100 MB in size.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Locate the Bitcoin data directory, and copy the directory with all contents to the encrypted drive.&lt;br /&gt;
&amp;lt;p&amp;gt;For help finding this directory, see &amp;lt;b&amp;gt;[[Securing_your_wallet#Locating_Bitcoin_s_data_directory|Locating Bitcoin&#039;s Data Directory]]&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create a Windows shortcut that starts Bitcoin with the &amp;lt;code&amp;gt;-datadir&amp;lt;/code&amp;gt; parameter and specifies the encrypted drive and directory.&lt;br /&gt;
&amp;lt;p&amp;gt;For example, if you installed Bitcoin in the default directory, mounted your Bitcoin encrypted drive as &amp;lt;code&amp;gt;E:\&amp;lt;/code&amp;gt;, and stored your Bitcoin data directory on it as &amp;lt;code&amp;gt;Bitcoin&amp;lt;/code&amp;gt;, you would type the following command as the shortcut Target:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;C:\Program Files\Bitcoin\bitcoin.exe -datadir=E:\Bitcoin&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open Bitcoin&#039;s settings and configure it &amp;lt;b&amp;gt;NOT&amp;lt;/b&amp;gt; to start automatically when you start Windows.&lt;br /&gt;
&amp;lt;p&amp;gt;This is to allow you to mount the Bitcoin encrypted disk image before starting Bitcoin.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shut down Bitcoin, and then restart it from the new shortcut.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After doing this, any time you want to use Bitcoin, you must first mount the Bitcoin encrypted disk image using the same drive designation, and then run Bitcoin from the shortcut that you created, so that it can find its data and your wallet. :-)&lt;br /&gt;
&lt;br /&gt;
== Locating Bitcoin&#039;s data directory ==&lt;br /&gt;
&lt;br /&gt;
The [[data directory]] is the location where Bitcoin&#039;s data files are stored, including the wallet data file.&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
Go to Start -&amp;gt; Run (or press WinKey+R) and run this:&lt;br /&gt;
&lt;br /&gt;
 explorer %APPDATA%\Bitcoin&lt;br /&gt;
&lt;br /&gt;
Bitcoin&#039;s data folder will open. For most users, this is the following locations:&lt;br /&gt;
&lt;br /&gt;
 C:\Documents and Settings\YourUserName\Application data\Bitcoin (XP)&lt;br /&gt;
 &lt;br /&gt;
 C:\Users\YourUserName\Appdata\Roaming\Bitcoin (Vista and 7)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;AppData&amp;quot; and &amp;quot;Application data&amp;quot; are hidden by default.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
By default Bitcoin will put its data here:&lt;br /&gt;
&lt;br /&gt;
 ~/.bitcoin/&lt;br /&gt;
&lt;br /&gt;
You need to do a &amp;quot;ls -a&amp;quot; to see directories that start with a dot.&lt;br /&gt;
&lt;br /&gt;
If that&#039;s not it, you can do a search like this:&lt;br /&gt;
&lt;br /&gt;
 find / -name wallet.dat -print 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
&lt;br /&gt;
By default Bitcoin will put its data here:&lt;br /&gt;
&lt;br /&gt;
 ~/Library/Application Support/Bitcoin/&lt;br /&gt;
&lt;br /&gt;
==Backup==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: I would strongly recommend against using a service like Dropbox to back up your Bitcoin data due to [http://en.wikipedia.org/wiki/Dropbox_(service)#Criticism security concerns] such as:&lt;br /&gt;
# the fact that they store your encryption key (meaning that a disgruntled Dropbox employee or an attacker who gained access to the system could decrypt your Dropbox data and steal your Bitcoins)&lt;br /&gt;
# the fact that the Dropbox client only needs a password for the first login. After it authenticates once, the server assigns it a token which it uses to show that, at one time, its user knew the password rather than sending the actual password (meaning that if you ever use the Dropbox client on another PC, that PC&#039;s users can access your Dropbox - even if you change your password - and can steal your Bitcoins or get a virus that will steal your Bitcoins).&lt;br /&gt;
&lt;br /&gt;
For these reasons, I personally prefer to use Wuala, which does not store your encryption key and requires a password each time (the client can be set to remember your password, but the server will check each time to make sure that the client is sending the correct password). Like Dropbox, the basic, lowest-storage-space account with Wuala is free of charge, and coincidentally, Wuala [http://www.wuala.com/en/bitcoin is experimenting with allowing users to pay for &amp;quot;upgraded&amp;quot; plans using Bitcoin.]&lt;br /&gt;
&lt;br /&gt;
In fact, whether you use Dropbox as your backup or not, use what Steve Gibson calls &amp;quot;pre-Internet encryption&amp;quot; (which he actually [http://itknowledgeexchange.techtarget.com/security-corner/cloud-security-and-privacy-do-they-exist/ discussed in the context of Dropbox&#039;s security concerns]) and use some form of encryption on the files before you back them up, just in case someone other than yourself ever gains access to that backup. Make sure to pick a password that&#039;s memorable but secure.&lt;br /&gt;
&lt;br /&gt;
The only file you need to back up is &amp;quot;wallet.dat&amp;quot;. Ensure that Bitcoin is closed, copy this file somewhere else, encrypt it, and put it somewhere safe. Ideally, you would put this file in two places: one nearby, and one 100+ miles away.&lt;br /&gt;
&lt;br /&gt;
You can use the [[api|backupwallet]] JSON-RPC command to back up without shutting down Bitcoin.&lt;br /&gt;
&lt;br /&gt;
=== General Solutions ===&lt;br /&gt;
&lt;br /&gt;
Your wallet.dat file is not encrypted by Bitcoin. Anyone who can access it can easily steal all of your coins. Use one of these encryption programs if there is any chance someone might stumble upon your wallet.&lt;br /&gt;
* [http://www.7-zip.org/ 7-zip] - Supports strongly-encrypted archives.&lt;br /&gt;
* [http://www.axantum.com/axcrypt/ AxCrypt by Axantum]&lt;br /&gt;
* [http://lrzip.kolivas.org lrzip] - Compression software for Linux and OSX that supports very high grade password protected encryption&lt;br /&gt;
* [http://www.truecrypt.org/ TrueCrypt] - Volume-based on-the-fly encryption (for advanced users)&lt;br /&gt;
* [http://www.rarlab.com/ WinRar] - Commonly used archive software that supports verification records and encryption.&lt;br /&gt;
&lt;br /&gt;
There is also a list of [[OpenSourceEncryptionSoftware|open source encryption software.]]&lt;br /&gt;
&lt;br /&gt;
Decrypting and encrypting the wallet.dat every time you start or quit the Bitcoin client can be &#039;&#039;tedious&#039;&#039; (and outright error-prone). If you want to keep your wallet encrypted (except while you&#039;re actually running the Bitcoin client), it&#039;s better to relegate the automation to a [http://lorelei.kaverit.org/bitcoin.sh small shell script] that handles the en/decryption and starting up Bitcoin client for you (Linux and OSX). &lt;br /&gt;
&lt;br /&gt;
There is also a method to Print out and encrypt your Wallet.dat as a special barcode. See details here: [[WalletPaperbackup]]&lt;br /&gt;
&lt;br /&gt;
==== Password Strength ====&lt;br /&gt;
Brute-force password cracking has come a long way. A password of random [a-Z] [0-9] [!-~] of 8 characters long was previously thought secure but can be trivially solved now (using appropriate hardware). The recommended length is &#039;&#039;&#039;at least&#039;&#039;&#039; 12 characters long.  You can also use a multi-word password. [http://www.baekdal.com/tips/password-security-usability The Usability of Passwords] &lt;br /&gt;
&lt;br /&gt;
However, simply using dictionary words is also insecure as it opens you up to a dictionary attack. If you use dictionary words, be sure to throw random symbols and numbers in the mix as well.&lt;br /&gt;
&lt;br /&gt;
A good way to create secure but easy-to-remember passwords is to pick a password (ex: d0g) and pad it with a good number of repeated characters afterward (such as 10 $ signs - so d0g becomes d0g$$$$$$$$$$) - this is just as cryptographically secure as a random password of equal length so long as the attacker does not know which symbol you are following your &amp;quot;word&amp;quot; with and how many times it is repeated. ([https://www.grc.com/haystack.htm source])&lt;br /&gt;
&lt;br /&gt;
If you use keyfiles in addition to a password, it is unlikely that your encrypted file can ever be cracked using brute force methods, even 10 years from now when even a 12 character password might be too short.&lt;br /&gt;
&lt;br /&gt;
Assume that any encrypted files you store online (eg. gmail, Dropbox) will be stored somewhere forever and can never be erased.&lt;br /&gt;
&lt;br /&gt;
===== Choosing Your Password =====&lt;br /&gt;
Make sure you pick at least one character in each group:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Lowercase: abcdefghijklmnopqrstuvwxyz&lt;br /&gt;
  Uppercase: ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;br /&gt;
  Number: 1234567890&lt;br /&gt;
  Symbol: `~!@#$%^&amp;amp;*()-_=+\|[{]};:&#039;&amp;quot;,&amp;lt;.&amp;gt;/? (space)&lt;br /&gt;
&lt;br /&gt;
  &amp;gt;9 char = unsuitable for use&lt;br /&gt;
  09 char = insecure&lt;br /&gt;
  10 char = low security&lt;br /&gt;
  11 char = medium security&lt;br /&gt;
  12 char = good security (good enough for your wallet)&lt;br /&gt;
  13 char = very good, enough for anything.&lt;br /&gt;
&lt;br /&gt;
==== Storage of Archive ====&lt;br /&gt;
One of the most simple methods for storing a appropriately &#039;&#039;&#039;encrypted&#039;&#039;&#039; archive of your wallet.dat file is to send the archive as an email attachment to your own e-mail address.  Services like gmail.com use very comprehensive distributed networks that make the loss of data very unlikely.  One can even obfuscate the name of the files within the archive, and name the archive something less inviting, such as: &#039;personal notes&#039; or &#039;car insurance&#039;.&lt;br /&gt;
&lt;br /&gt;
Another solution is to use a file storage service like [http://www.wuala.com/bitcoin Wuala] ( encrypted, [http://www.bitcoin.org/smf/index.php?topic=5817.0 instructions]), [http://www.dropbox.com Dropbox] and [http://en.wikipedia.org/wiki/Comparison_of_online_backup_services others], including the more secure [http://www.spideroak.com SpiderOak].&lt;br /&gt;
&lt;br /&gt;
=== Linux solution ===&lt;br /&gt;
&lt;br /&gt;
Linux users can setup backups using cron by telling it to run a backup script at set intervals of time. Run &#039;crontab -e&#039; and add this line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 01 */1 * * * /usr/local/bin/backupwallet.sh&lt;br /&gt;
&lt;br /&gt;
This cron line will run the /usr/local/bin/backupwallet.sh script at the 01 minute of every hour. Remember to add a newline after the last line of the crontab file, or else the last line won&#039;t run. You may also wish to ignore the script&#039;s output by appending &amp;quot; &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&amp;quot; to the line (this will also prevent emails from being sent).&lt;br /&gt;
&lt;br /&gt;
Create /usr/local/bin/backupwallet.sh:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # /usr/local/bin/backupwallet.sh&lt;br /&gt;
 #&lt;br /&gt;
 # Performs backup of bitcoin wallet.&lt;br /&gt;
 #&lt;br /&gt;
 # Written by: https://en.bitcoin.it/wiki/Securing_your_wallet&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 # Standard Options&lt;br /&gt;
 #&lt;br /&gt;
 TS=$(date &amp;quot;+%Y%m%d-%H%M&amp;quot;)&lt;br /&gt;
 WALLET=/tmp/wallet-${TS}&lt;br /&gt;
 WALLET_E=/tmp/wallet-${TS}.crypt&lt;br /&gt;
 BITCOIN=bitcoind  # /path/to/bitcoind&lt;br /&gt;
 GPG=gpg  # /path/to/gpg&lt;br /&gt;
 GPG_USER=username  # Username of gpg recipient. User should have gpg setup.&lt;br /&gt;
 RM=rm&lt;br /&gt;
 RM_OPTS=&#039;--force&#039;&lt;br /&gt;
 USE_SHRED=0  # Flip to 1 to use `shred` instead of `rm`.&lt;br /&gt;
 SHRED=shred&lt;br /&gt;
 SHRED_OPTS=&#039;--force --iterations=9 --zero --remove&#039;&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 # Storage Options&lt;br /&gt;
 # Only 1 set of options should be un-commented (the last one will be used).&lt;br /&gt;
 # Update CP_DEST paths as neccessary.&lt;br /&gt;
 #&lt;br /&gt;
 # CP - Storage on a local machine. Could be Dropbox/Wuala folder.&lt;br /&gt;
 #CP=cp&lt;br /&gt;
 #CP_DEST=&#039;/var/data/backups/&#039;  # &#039;~/Dropbox/&#039;, etc.&lt;br /&gt;
 #&lt;br /&gt;
 # SSH - Storage on a remote machine.&lt;br /&gt;
 CP=scp&lt;br /&gt;
 CP_DEST=&#039;remoteuser@example.com:~/wallets/&#039;&lt;br /&gt;
 #&lt;br /&gt;
 # S3 - Storage on Amazon&#039;s S3. Be sure s3cmd is installed and properly setup.&lt;br /&gt;
 # You may need &amp;quot;s3cmd put --force&amp;quot; if you use a sub-directory in CP_DEST.&lt;br /&gt;
 #CP=s3cmd put&lt;br /&gt;
 #CP_DEST=&#039;s3://bucket&#039;&lt;br /&gt;
 &lt;br /&gt;
 do_clean() {&lt;br /&gt;
   # Remove temporary wallets.&lt;br /&gt;
   if [ 1 -eq $USE_SHRED ]; then&lt;br /&gt;
     $SHRED $SHRED_OPTS $WALLET $WALLET_E&lt;br /&gt;
   else&lt;br /&gt;
     $RM $RM_OPTS $WALLET $WALLET_E&lt;br /&gt;
   fi&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 do_fail() {&lt;br /&gt;
   do_clean&lt;br /&gt;
   echo failed!&lt;br /&gt;
   exit 1&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # Perform the backup.&lt;br /&gt;
 echo -n Making backup...&lt;br /&gt;
 $BITCOIN backupwallet $WALLET&lt;br /&gt;
 [ ! -s &amp;quot;$WALLET&amp;quot; ] &amp;amp;&amp;amp; do_fail  # If the backup does not exist or is empty, fail.&lt;br /&gt;
 echo done.&lt;br /&gt;
 echo -n Encrypting backup...&lt;br /&gt;
 $GPG -r $GPG_USER --output $WALLET_E --encrypt $WALLET&lt;br /&gt;
 [ 0 -ne $? ] &amp;amp;&amp;amp; do_fail  # If gpg returns a non-zero result, fail.&lt;br /&gt;
 echo done.&lt;br /&gt;
 echo -n Copying to backup location...&lt;br /&gt;
 $CP $WALLET_E &amp;quot;$CP_DEST&amp;quot;&lt;br /&gt;
 [ 0 -ne $? ] &amp;amp;&amp;amp; do_fail  # If the $CP command returns a non-zero result, fail.&lt;br /&gt;
 echo done.&lt;br /&gt;
 do_clean&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&lt;br /&gt;
The shell script:&lt;br /&gt;
&lt;br /&gt;
* Calls bitcoind backupwallet to create a time/date-stamped wallet.&lt;br /&gt;
* GPG encrypts the wallet with your public key.&lt;br /&gt;
* Copies the result using one of several storage options (cp, scp, and s3cmd).&lt;br /&gt;
* Uses the rm or shred command to remove the temporary wallet files.&lt;br /&gt;
&lt;br /&gt;
Be sure to modify the script options to fit your setup. After you save, make sure the file can be executed properly by the cron user. Common permissions for files in /usr/local/bin/ can be applied using (verify with your distribution!):&lt;br /&gt;
&lt;br /&gt;
 cd /usr/local/bin/ &amp;amp;&amp;amp; chown root:root backupwallet.sh &amp;amp;&amp;amp; chmod 755 backupwallet.sh&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical]]&lt;br /&gt;
&lt;br /&gt;
==Restore==&lt;br /&gt;
&lt;br /&gt;
Assuming your backup is recent enough that you haven&#039;t used up all of your key pool... restoring a wallet to a new (or old) location and rescanning the block chain should leave you with all your coins. Just follow these steps:&lt;br /&gt;
* Quit bitcoin(d).&lt;br /&gt;
* Copy your backed up wallet.dat into your bitcoin profile directory.&lt;br /&gt;
* If copying into existing profile, delete file &#039;&#039;blkindex.dat&#039;&#039; and &#039;&#039;blk0001.dat&#039;&#039; to make the client re-scan the block chain.&lt;br /&gt;
&lt;br /&gt;
And you&#039;ll be good as new.&lt;br /&gt;
&lt;br /&gt;
==Erasing Plain Text Wallets==&lt;br /&gt;
&lt;br /&gt;
A good practice is to keep at least two wallets, one as a &amp;quot;current account&amp;quot; for everyday transactions and one as a &amp;quot;savings account&amp;quot; where you store the majority of your Bitcoins.  &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;savings account&amp;quot; wallet should be backed up in encrypted form only and all plaintext copies of this wallet should be erased. In case someone gains unauthorised access to your computer (either by physically stealing it or by exploiting a system vulnerability via the internet), they will only be able to spend the coins in your &amp;quot;current account&amp;quot; wallet.&lt;br /&gt;
&lt;br /&gt;
In most operating systems, including Windows, Linux, and Mac OS X, simply deleting a wallet.dat file will &#039;&#039;not&#039;&#039; generally destroy it. It is likely that advanced tools can still be used to recover the wallet.dat file, even after it has been deleted.&lt;br /&gt;
&lt;br /&gt;
The Linux &#039;&#039;&#039;shred&#039;&#039;&#039; command can be used to overwrite the wallet file with random data prior to deleting; this particular copy of the file will then be practically impossible to recover.  Using shred (and similar tools on Windows) however does not guarantee that still other copies don&#039;t exist somewhere hidden on your HD. That will depend on your system configuration and what packages you have installed. Some system restore and backup tools, for instance, create periodic snapshots of your  filesystem, duplicating your wallet.dat.&lt;br /&gt;
&lt;br /&gt;
In Mac OS, the equivalent of &#039;&#039;&#039;shred&#039;&#039;&#039; is &#039;&#039;&#039;srm&#039;&#039;&#039; (introduced in Leopard). Using the Finder to remove files, clicking &amp;quot;Secure Empty Trash&amp;quot; in the Finder menu will shred the contents of the trash can. As with any OS this doesn&#039;t guarantee that there are not other copies elsewhere on your system.&lt;br /&gt;
&lt;br /&gt;
For Windows, the built-in command &#039;&#039;cipher /W&#039;&#039; will shred all previously-deleted files. [http://www.cylog.org/utilities/cybershredder.jsp CyberShredder] can securely deleted individual files.&lt;br /&gt;
&lt;br /&gt;
==eWallet==&lt;br /&gt;
&lt;br /&gt;
Storing bitcoins with an [[eWallet]] provider incurs risks as well. Basically you grant the third party, in this case eWallet, full access to your wallet. These eWallets, or Electronic Wallets have a number of pros and cons. For example, you can access your wallet on any computer in the world, but the wallet can be forged or hacked and your bitcoins could be lost. You can also get eWallet applications for your Android phone, which also download the block chain like the normal client but allow the user to send bitcoins by QR code or NFC. The problem with this is that Bitcoins can be intercepted through means of mobile hacking.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Data directory]]&lt;br /&gt;
* [http://startbitcoin.com/how-to-create-a-secure-bitcoin-wallet/ Secure Bitcoin Wallet Tutorial]&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [http://arimaa.com/bitcoin/ Bitcoin Gateway - A Peer-to-peer Bitcoin Vault and Payment Network]&lt;br /&gt;
&lt;br /&gt;
[[de:Sichere deine Geldbörse]]&lt;br /&gt;
[[zh-cn:保护你的钱包]]&lt;/div&gt;</summary>
		<author><name>Doca</name></author>
	</entry>
</feed>