<?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=Liraz</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=Liraz"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/wiki/Special:Contributions/Liraz"/>
	<updated>2026-05-25T20:26:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62197</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62197"/>
		<updated>2017-01-25T13:55:29Z</updated>

		<summary type="html">&lt;p&gt;Liraz: typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 5-8 mnemonic words (64 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 5-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 64 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 5 words, even with a strong KDF and salt, but 5 truly random words should be enough for anyone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 5 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice. With 5 random words a 250,000,000 brainflayer botnet generating 100 guesses a second (10X faster than you&#039;re currently getting) would take 12 years to crack an &#039;&#039;&#039;unsalted&#039;&#039;&#039; Warpwallet. Salting the Warpwallet would banish cryptographic attacks to the realm of science fiction.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] You are wrong. The consensus on this from other experts is that you are wrong. Your recommendations will harm users. I&#039;ve talked to several otherwise smart people who have lost painfully large sums of money to various deterministic wallet tools. Such tools are a trap for people who are smart, but don&#039;t quite understand how effective password cracking can be. Many people think they do, but there is a lot of bad advice about passwords and passphrases out there. I personally have used passphrases in the past for things like GPG keys that would have gotten me 0wned if I&#039;d used them even in WarpWallet. I&#039;m done arguing with you, it&#039;s clearly not productive. Please talk with some of the Bitcoin developers about this if you still don&#039;t believe me. Please also understand how incredibly frustrating it is to have seen firsthand how much damage tools like this can cause their typical users (a paper was published about this), and then have people say &amp;quot;oh, but it&#039;s fine if I use it perfectly, so it&#039;s okay for everyone&amp;quot;. If you want to use it, I can&#039;t stop you, but recommending these tools to random newbies is gross negligence. I also want to point out that it&#039;s a bit absurd to recommend hardware wallets if you categorically don&#039;t trust CSPRNGs. Why are their CSPRNGs trustworthy and others not?&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 23:45, 24 January 2017 (UTC)&lt;br /&gt;
#  I&#039;d like to point out you are so fixated on only one branch of the attack tree that you&#039;re not seeing how your argument could apply equally well to the other branch that you dismiss  as a &amp;quot;tinfoil hat threat&amp;quot; despite massive real-world evidence to the contrary. I could rephrase your comment: &amp;quot;You are wrong. The consensus of endpoint security experts is that you are wrong, and your recommendations to just trust endpoint software is gross negligence that will end up hurting users. If you don&#039;t believe me go talk to another expert on endpoint security. Oh but it&#039;s fine for me if I setup a perfectly secure endpoint, so it&#039;s OK for everybody. Automatic wallet generation on untrusted endpoints are a trap for smart people who don&#039;t understand how effective endpoint comprimising techniques are at subverting the integrity of their system in endlessly creative ways&amp;quot;. My argument isn&#039;t that &amp;quot;my&amp;quot; threat is more important that &amp;quot;your&amp;quot; threat. My argument is that both threats are substantial and that I don&#039;t think we should dismiss either of them. If there&#039;s a tradeoff to be made where mitigating one risk comes at the expense of mitigating another we need to find the right balance to make a wise choice. Seeing things in black and white, your camp vs my camp, as an argument to be won, that&#039;s an all too human but very dangerous an unproductive attitude for a security expert to take.&lt;br /&gt;
# Trustworthy is a probability not a binary value. Convenience is also a matter of degree. There&#039;s an inescapable trade-off. You can say: As an expert, I recommend you hold up to $100 in your pocket, up to $10000 in a steel vault and the rest in stocks or whatever. You&#039;d be right to criticize my position if I was being simple minded to the point of absurdity. If I somehow miscommunicated that impression, I wouldn&#039;t blame you for feeling like there&#039;s no point in talking to this idiot.&lt;br /&gt;
# For the record, Hardware CSPRNGs are no more trustworthy, if anything I trust them even less because they&#039;re such high value targets. That&#039;s why I limit their use to relatively small sums. Great for day-to-day use though. Very convenient. But I&#039;m anticipating to wake up one day and learn a whole bunch of wallets got their funds swept and we eventually trace that back to weak/weakened wallet creation. I hope I&#039;ll be proven wrong but in the meantime, like you, I&#039;m trying to help users minimize their exposure.&lt;br /&gt;
# Before I sign off and stop troubling you with unwanted discussion, I just wanted to express my appreciation for the time you&#039;ve taken to explain your position, the efforts to protect users and also that you went public with your research and didn&#039;t use it to run another botnet. You&#039;re a philanthropist. I&#039;ve been benefiting from your advice and have been spreading it to anyone foolish enough to consider using SHA256 brainwallets. I&#039;ve even done experiments with leaving various amounts of funds in SHA256 brainwallets just to see what would happen and have seen them grabbed with my own eyes. I never meant to downplay your research or imply that brainwallet stealing botnets don&#039;t exist. They obviously do and it&#039;s important to take that risk into account. If there&#039;s a gap in our understanding I think it&#039;s due each of us spending more time researching different classes of threats. I used to work with the military and spent a good chunk of my life researching sophisticated malware. Endpoint security risks looms ever large in my mind. I guess that makes me atypically skeptical of claims of system integrity. I imagine for you the risk of users choosing bad passwords/passphrases, having cracked so many of them seems to deserve more of an emphasis. &lt;br /&gt;
# Sorry you feel the discussion was unproductive. If I&#039;ve rubbed you the wrong way I apologize. FWIW, I found it productive.You&#039;ve also convinced me that Warpwallet makes it too easy to avoid salting and the default should be changed. I&#039;ll try to get a patch through. I&#039;ll also be updating my recommendations on the resources I control to stress that the salt is mandatory and that using Warpwallet is unsafe without it.&lt;br /&gt;
# We both agree that the threats are real and significant, we just place different weights on them. Before our correspondence it was my understanding that ROI for attacking &#039;&#039;&#039;salted&#039;&#039;&#039; warpwallets was so low that it would make the operation of a botnet most likely unprofitable. I don&#039;t think we disagree on that. I think we might disagree on the optimal set of trade-offs to factor into our recommendations to non-experts where protecting against one risk necessarily weakens protection against another. We agree that salts are essential and should be mandatory, key stretching adds security but isn&#039;t a silver bullet, humans are bad as sources of entropy, end-point security is really hard, blindly trusting RNGs is unwise, Warpwallet being a PITA to use and a privacy risk to use as your main wallet, and that your research is very important it and you&#039;re doing the Bitcoin community a huge service being an advocate against unsafe practices. That&#039;s a lot of common ground. Nice chatting with you Ryan (for me anyhow).&lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing Warpwallets &amp;lt;s&amp;gt;coins&amp;lt;/s&amp;gt; to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] People run these botnets already! I gave a talk last summer, one of the bots robbed our bait wallet live on stage! This problem is solved trivially with BIP38 paper wallets. Risk of loss can be mitigated by making multiple copies and storing them in different locations. Requiring adversaries to steal your paper wallet and crack the passphrase is better than publishing what is effectively a hash of your passphrase and hoping for the best.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 00:01, 25 January 2017 (UTC) Clarified what I meant regarding botnets above. Regarding BIP38, like all automatic wallet generation procedures, the security of a BIP38 wallet depends on the security of the endpoint generating it, which is not a trivial problem for users to solve. We integrate a BIP38 paper wallet generation tool into BitKey. It&#039;s very useful, but I tell people if they don&#039;t trust us, our build process and/or their ability to independently verify the integrity of the software, they might want to use something else instead they don&#039;t have to trust. Trust-minimized solutions are better than solutions that require trust. I think that was the one of the key innovations Bitcoin/blockchain introduced: http://nakamotoinstitute.org/trusted-third-parties/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62196</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62196"/>
		<updated>2017-01-25T13:51:56Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */ In opposition to black and white thinking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 5-8 mnemonic words (64 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 5-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 64 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 5 words, even with a strong KDF and salt, but 5 truly random words should be enough for anyone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 5 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice. With 5 random words a 250,000,000 brainflayer botnet generating 100 guesses a second (10X faster than you&#039;re currently getting) would take 12 years to crack an &#039;&#039;&#039;unsalted&#039;&#039;&#039; Warpwallet. Salting the Warpwallet would banish cryptographic attacks to the realm of science fiction.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] You are wrong. The consensus on this from other experts is that you are wrong. Your recommendations will harm users. I&#039;ve talked to several otherwise smart people who have lost painfully large sums of money to various deterministic wallet tools. Such tools are a trap for people who are smart, but don&#039;t quite understand how effective password cracking can be. Many people think they do, but there is a lot of bad advice about passwords and passphrases out there. I personally have used passphrases in the past for things like GPG keys that would have gotten me 0wned if I&#039;d used them even in WarpWallet. I&#039;m done arguing with you, it&#039;s clearly not productive. Please talk with some of the Bitcoin developers about this if you still don&#039;t believe me. Please also understand how incredibly frustrating it is to have seen firsthand how much damage tools like this can cause their typical users (a paper was published about this), and then have people say &amp;quot;oh, but it&#039;s fine if I use it perfectly, so it&#039;s okay for everyone&amp;quot;. If you want to use it, I can&#039;t stop you, but recommending these tools to random newbies is gross negligence. I also want to point out that it&#039;s a bit absurd to recommend hardware wallets if you categorically don&#039;t trust CSPRNGs. Why are their CSPRNGs trustworthy and others not?&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 23:45, 24 January 2017 (UTC)&lt;br /&gt;
#  I&#039;d like to point out you are so fixated on only one branch of the attack tree that you&#039;re not seeing how your argument could apply equally well to the other branch that you dismiss  a &amp;quot;tinfoil hat threat&amp;quot; despite massive real-world evidence to the contrary. I could rephrase your comment: &amp;quot;You are wrong. The consensus on endpoint security experts are that you are wrong, and your recommendations to just trust endpoint software is gross negligence that will end up hurting users. If you don&#039;t believe me go talk to another expert on endpoint security. Oh but it&#039;s fine for me if I setup a perfectly secure endpoint, so it&#039;s OK for everybody. Automatic wallet generation on untrusted endpoint are a trap for smart people who don&#039;t understand how effective endpoint comprimising techniques are at subverting the integrity of their system in endlessly creative ways&amp;quot;. My argument isn&#039;t that &amp;quot;my&amp;quot; threat is more important that &amp;quot;your&amp;quot; threat. My argument is that both threats are substantial and that I don&#039;t think we should dismiss either of them. If there&#039;s a tradeoff to be made where mitigating one risk comes at the expense of mitigating another we need to find the right balance to make a wise choice. Seeing things in black and white, your camp vs my camp, as an argument to be won, that&#039;s an all too human but very dangerous an unproductive attitude for a security expert to take.&lt;br /&gt;
# Trustworthy is a probability not a binary value. Convenience is also a matter of degree. There&#039;s an inescapable trade-off. You can say: As an expert, I recommend you hold up to $100 in your pocket, up to $10000 in a steel vault and the rest in stocks or whatever. You&#039;d be right to criticize my position if I was being simple minded to the point of absurdity. If I somehow miscommunicated that impression, I wouldn&#039;t blame you for feeling like there&#039;s no point in talking to this idiot.&lt;br /&gt;
# For the record, Hardware CSPRNGs are no more trustworthy, if anything I trust them even less because they&#039;re such high value targets. That&#039;s why I limit their use to relatively small sums. Great for day-to-day use though. Very convenient. But I&#039;m anticipating to wake up one day and learn a whole bunch of wallets got their funds swept and we eventually trace that back to weak/weakened wallet creation. I hope I&#039;ll be proven wrong but in the meantime, like you, I&#039;m trying to help users minimize their exposure.&lt;br /&gt;
# Before I sign off and stop troubling you with unwanted discussion, I just wanted to express my appreciation for the time you&#039;ve taken to explain your position, the efforts to protect users and also that you went public with your research and didn&#039;t use it to run another botnet. You&#039;re a philanthropist. I&#039;ve been benefiting from your advice and have been spreading it to anyone foolish enough to consider using SHA256 brainwallets. I&#039;ve even done experiments with leaving various amounts of funds in SHA256 brainwallets just to see what would happen and have seen them grabbed with my own eyes. I never meant to downplay your research or imply that brainwallet stealing botnets don&#039;t exist. They obviously do and it&#039;s important to take that risk into account. If there&#039;s a gap in our understanding I think it&#039;s due each of us spending more time researching different classes of threats. I used to work with the military and spent a good chunk of my life researching sophisticated malware. Endpoint security risks looms ever large in my mind. I guess that makes me atypically skeptical of claims of system integrity. I imagine for you the risk of users choosing bad passwords/passphrases, having cracked so many of them seems to deserve more of an emphasis. &lt;br /&gt;
# Sorry you feel the discussion was unproductive. If I&#039;ve rubbed you the wrong way I apologize. FWIW, I found it productive.You&#039;ve also convinced me that Warpwallet makes it too easy to avoid salting and the default should be changed. I&#039;ll try to get a patch through. I&#039;ll also be updating my recommendations on the resources I control to stress that the salt is mandatory and that using Warpwallet is unsafe without it.&lt;br /&gt;
# We both agree that the threats are real and significant, we just place different weights on them. Before our correspondence it was my understanding that ROI for attacking &#039;&#039;&#039;salted&#039;&#039;&#039; warpwallets was so low that it would make the operation of a botnet most likely unprofitable. I don&#039;t think we disagree on that. I think we might disagree on the optimal set of trade-offs to factor into our recommendations to non-experts where protecting against one risk necessarily weakens protection against another. We agree that salts are essential and should be mandatory, key stretching adds security but isn&#039;t a silver bullet, humans are bad as sources of entropy, end-point security is really hard, blindly trusting RNGs is unwise, Warpwallet being a PITA to use and a privacy risk to use as your main wallet, and that your research is very important it and you&#039;re doing the Bitcoin community a huge service being an advocate against unsafe practices. That&#039;s a lot of common ground. Nice chatting with you Ryan (for me anyhow).&lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing Warpwallets &amp;lt;s&amp;gt;coins&amp;lt;/s&amp;gt; to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] People run these botnets already! I gave a talk last summer, one of the bots robbed our bait wallet live on stage! This problem is solved trivially with BIP38 paper wallets. Risk of loss can be mitigated by making multiple copies and storing them in different locations. Requiring adversaries to steal your paper wallet and crack the passphrase is better than publishing what is effectively a hash of your passphrase and hoping for the best.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 00:01, 25 January 2017 (UTC) Clarified what I meant regarding botnets above. Regarding BIP38, like all automatic wallet generation procedures, the security of a BIP38 wallet depends on the security of the endpoint generating it, which is not a trivial problem for users to solve. We integrate a BIP38 paper wallet generation tool into BitKey. It&#039;s very useful, but I tell people if they don&#039;t trust us, our build process and/or their ability to independently verify the integrity of the software, they might want to use something else instead they don&#039;t have to trust. Trust-minimized solutions are better than solutions that require trust. I think that was the one of the key innovations Bitcoin/blockchain introduced: http://nakamotoinstitute.org/trusted-third-parties/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62195</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62195"/>
		<updated>2017-01-25T13:16:55Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Another reply */ On second thought, 5 words should be the minimum, juuuust in case&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 5-8 mnemonic words (64 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 5-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 64 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 5 words, even with a strong KDF and salt, but 5 truly random words should be enough for anyone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 5 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice. With 5 random words a 250,000,000 brainflayer botnet generating 100 guesses a second (10X faster than you&#039;re currently getting) would take 12 years to crack an &#039;&#039;&#039;unsalted&#039;&#039;&#039; Warpwallet. Salting the Warpwallet would banish cryptographic attacks to the realm of science fiction.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] You are wrong. The consensus on this from other experts is that you are wrong. Your recommendations will harm users. I&#039;ve talked to several otherwise smart people who have lost painfully large sums of money to various deterministic wallet tools. Such tools are a trap for people who are smart, but don&#039;t quite understand how effective password cracking can be. Many people think they do, but there is a lot of bad advice about passwords and passphrases out there. I personally have used passphrases in the past for things like GPG keys that would have gotten me 0wned if I&#039;d used them even in WarpWallet. I&#039;m done arguing with you, it&#039;s clearly not productive. Please talk with some of the Bitcoin developers about this if you still don&#039;t believe me. Please also understand how incredibly frustrating it is to have seen firsthand how much damage tools like this can cause their typical users (a paper was published about this), and then have people say &amp;quot;oh, but it&#039;s fine if I use it perfectly, so it&#039;s okay for everyone&amp;quot;. If you want to use it, I can&#039;t stop you, but recommending these tools to random newbies is gross negligence. I also want to point out that it&#039;s a bit absurd to recommend hardware wallets if you categorically don&#039;t trust CSPRNGs. Why are their CSPRNGs trustworthy and others not?&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 23:45, 24 January 2017 (UTC) &lt;br /&gt;
# Trustworthy is a probability not a binary value. Convenience is also a matter of degree. There&#039;s an inescapable trade-off. You can say: As an expert, I recommend you hold up to $100 in your pocket, up to $10000 in a steel vault and the rest in stocks or whatever. You&#039;d be right to criticize my position if I was being simple minded to the point of absurdity. If I somehow miscommunicated that impression, I wouldn&#039;t blame you for feeling like there&#039;s no point in talking to this idiot.&lt;br /&gt;
# For the record, Hardware CSPRNGs are no more trustworthy, if anything I trust them even less because they&#039;re such high value targets. That&#039;s why I limit their use to relatively small sums. Great for day-to-day use though. Very convenient. But I&#039;m anticipating to wake up one day and learn a whole bunch of wallets got their funds swept and we eventually trace that back to weak/weakened wallet creation. I hope I&#039;ll be proven wrong but in the meantime, like you, I&#039;m trying to help users minimize their exposure.&lt;br /&gt;
# Before I sign off and stop troubling you with unwanted discussion, I just wanted to express my appreciation for the time you&#039;ve taken to explain your position, the efforts to protect users and also that you went public with your research and didn&#039;t use it to run another botnet. You&#039;re a philanthropist. I&#039;ve been benefiting from your advice and have been spreading it to anyone foolish enough to consider using SHA256 brainwallets. I&#039;ve even done experiments with leaving various amounts of funds in SHA256 brainwallets just to see what would happen and have seen them grabbed with my own eyes. I never meant to downplay your research or imply that brainwallet stealing botnets don&#039;t exist. They obviously do and it&#039;s important to take that risk into account. If there&#039;s a gap in our understanding I think it&#039;s due each of us spending more time researching different classes of threats. I used to work with the military and spent a good chunk of my life researching sophisticated malware. Endpoint security risks looms ever large in my mind. I guess that makes me atypically skeptical of claims of system integrity. I imagine for you the risk of users choosing bad passwords/passphrases, having cracked so many of them seems to deserve more of an emphasis. &lt;br /&gt;
# Sorry you feel the discussion was unproductive. If I&#039;ve rubbed you the wrong way I apologize. FWIW, I found it productive.You&#039;ve also convinced me that Warpwallet makes it too easy to avoid salting and the default should be changed. I&#039;ll try to get a patch through. I&#039;ll also be updating my recommendations on the resources I control to stress that the salt is mandatory and that using Warpwallet is unsafe without it.&lt;br /&gt;
# We both agree that the threats are real and significant, we just place different weights on them. Before our correspondence it was my understanding that ROI for attacking &#039;&#039;&#039;salted&#039;&#039;&#039; warpwallets was so low that it would make the operation of a botnet most likely unprofitable. I don&#039;t think we disagree on that. I think we might disagree on the optimal set of trade-offs to factor into our recommendations to non-experts where protecting against one risk necessarily weakens protection against another. We agree that salts are essential and should be mandatory, key stretching adds security but isn&#039;t a silver bullet, humans are bad as sources of entropy, end-point security is really hard, blindly trusting RNGs is unwise, Warpwallet being a PITA to use and a privacy risk to use as your main wallet, and that your research is very important it and you&#039;re doing the Bitcoin community a huge service being an advocate against unsafe practices. That&#039;s a lot of common ground. Nice chatting with you Ryan (for me anyhow).&lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing Warpwallets &amp;lt;s&amp;gt;coins&amp;lt;/s&amp;gt; to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] People run these botnets already! I gave a talk last summer, one of the bots robbed our bait wallet live on stage! This problem is solved trivially with BIP38 paper wallets. Risk of loss can be mitigated by making multiple copies and storing them in different locations. Requiring adversaries to steal your paper wallet and crack the passphrase is better than publishing what is effectively a hash of your passphrase and hoping for the best.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 00:01, 25 January 2017 (UTC) Clarified what I meant regarding botnets above. Regarding BIP38, like all automatic wallet generation procedures, the security of a BIP38 wallet depends on the security of the endpoint generating it, which is not a trivial problem for users to solve. We integrate a BIP38 paper wallet generation tool into BitKey. It&#039;s very useful, but I tell people if they don&#039;t trust us, our build process and/or their ability to independently verify the integrity of the software, they might want to use something else instead they don&#039;t have to trust. Trust-minimized solutions are better than solutions that require trust. I think that was the one of the key innovations Bitcoin/blockchain introduced: http://nakamotoinstitute.org/trusted-third-parties/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62192</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62192"/>
		<updated>2017-01-25T00:08:59Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */ clear up ambiguity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] You are wrong. The consensus on this from other experts is that you are wrong. Your recommendations will harm users. I&#039;ve talked to several otherwise smart people who have lost painfully large sums of money to various deterministic wallet tools. Such tools are a trap for people who are smart, but don&#039;t quite understand how effective password cracking can be. Many people think they do, but there is a lot of bad advice about passwords and passphrases out there. I personally have used passphrases in the past for things like GPG keys that would have gotten me 0wned if I&#039;d used them even in WarpWallet. I&#039;m done arguing with you, it&#039;s clearly not productive. Please talk with some of the Bitcoin developers about this if you still don&#039;t believe me. Please also understand how incredibly frustrating it is to have seen firsthand how much damage tools like this can cause their typical users (a paper was published about this), and then have people say &amp;quot;oh, but it&#039;s fine if I use it perfectly, so it&#039;s okay for everyone&amp;quot;. If you want to use it, I can&#039;t stop you, but recommending these tools to random newbies is gross negligence. I also want to point out that it&#039;s a bit absurd to recommend hardware wallets if you categorically don&#039;t trust CSPRNGs. Why are their CSPRNGs trustworthy and others not?&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 23:45, 24 January 2017 (UTC) &lt;br /&gt;
# Trustworthy is a probability not a binary value. Convenience is also a matter of degree. There&#039;s an inescapable trade-off. You can say: As an expert, I recommend you hold up to $100 in your pocket, up to $10000 in a steel vault and the rest in stocks or whatever. You&#039;d be right to criticize my position if I was being simple minded to the point of absurdity. If I somehow miscommunicated that impression, I wouldn&#039;t blame you for feeling like there&#039;s no point in talking to this idiot.&lt;br /&gt;
# For the record, Hardware CSPRNGs are no more trustworthy, if anything I trust them even less because they&#039;re such high value targets. That&#039;s why I limit their use to relatively small sums. Great for day-to-day use though. Very convenient. But I&#039;m anticipating to wake up one day and learn a whole bunch of wallets got their funds swept and we eventually trace that back to weak/weakened wallet creation. I hope I&#039;ll be proven wrong but in the meantime, like you, I&#039;m trying to help users minimize their exposure.&lt;br /&gt;
# Before I sign off and stop troubling you with unwanted discussion, I just wanted to express my appreciation for the time you&#039;ve taken to explain your position, the efforts to protect users and also that you went public with your research and didn&#039;t use it to run another botnet. You&#039;re a philanthropist. I&#039;ve been benefiting from your advice and have been spreading it to anyone foolish enough to consider using SHA256 brainwallets. I&#039;ve even done experiments with leaving various amounts of funds in SHA256 brainwallets just to see what would happen and have seen them grabbed with my own eyes. I never meant to downplay your research or imply that brainwallet stealing botnets don&#039;t exist. They obviously do and it&#039;s important to take that risk into account. If there&#039;s a gap in our understanding I think it&#039;s due each of us spending more time researching different classes of threats. I used to work with the military and spent a good chunk of my life researching sophisticated malware. Endpoint security risks looms ever large in my mind. I guess that makes me atypically skeptical of claims of system integrity. I imagine for you the risk of users choosing bad passwords/passphrases, having cracked so many of them seems to deserve more of an emphasis. &lt;br /&gt;
# Sorry you feel the discussion was unproductive. If I&#039;ve rubbed you the wrong way I apologize. FWIW, I found it productive.You&#039;ve also convinced me that Warpwallet makes it too easy to avoid salting and the default should be changed. I&#039;ll try to get a patch through. I&#039;ll also be updating my recommendations on the resources I control to stress that the salt is mandatory and that using Warpwallet is unsafe without it.&lt;br /&gt;
# We both agree that the threats are real and significant, we just place different weights on them. Before our correspondence it was my understanding that ROI for attacking &#039;&#039;&#039;salted&#039;&#039;&#039; warpwallets was so low that it would make the operation of a botnet most likely unprofitable. I don&#039;t think we disagree on that. I think we might disagree on the optimal set of trade-offs to factor into our recommendations to non-experts where protecting against one risk necessarily weakens protection against another. We agree that salts are essential and should be mandatory, key stretching adds security but isn&#039;t a silver bullet, humans are bad as sources of entropy, end-point security is really hard, blindly trusting RNGs is unwise, Warpwallet being a PITA to use and a privacy risk to use as your main wallet, and that your research is very important it and you&#039;re doing the Bitcoin community a huge service being an advocate against unsafe practices. That&#039;s a lot of common ground. Nice chatting with you Ryan (for me anyhow).&lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing Warpwallets &amp;lt;s&amp;gt;coins&amp;lt;/s&amp;gt; to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] People run these botnets already! I gave a talk last summer, one of the bots robbed our bait wallet live on stage! This problem is solved trivially with BIP38 paper wallets. Risk of loss can be mitigated by making multiple copies and storing them in different locations. Requiring adversaries to steal your paper wallet and crack the passphrase is better than publishing what is effectively a hash of your passphrase and hoping for the best.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 00:01, 25 January 2017 (UTC) Clarified what I meant regarding botnets above. Regarding BIP38, like all automatic wallet generation procedures, the security of a BIP38 wallet depends on the security of the endpoint generating it, which is not a trivial problem for users to solve. We integrate a BIP38 paper wallet generation tool into BitKey. It&#039;s very useful, but I tell people if they don&#039;t trust us, our build process and/or their ability to independently verify the integrity of the software, they might want to use something else instead they don&#039;t have to trust. Trust-minimized solutions are better than solutions that require trust. I think that was the one of the key innovations Bitcoin/blockchain introduced: http://nakamotoinstitute.org/trusted-third-parties/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62191</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62191"/>
		<updated>2017-01-25T00:01:10Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */ BIP38 clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] You are wrong. The consensus on this from other experts is that you are wrong. Your recommendations will harm users. I&#039;ve talked to several otherwise smart people who have lost painfully large sums of money to various deterministic wallet tools. Such tools are a trap for people who are smart, but don&#039;t quite understand how effective password cracking can be. Many people think they do, but there is a lot of bad advice about passwords and passphrases out there. I personally have used passphrases in the past for things like GPG keys that would have gotten me 0wned if I&#039;d used them even in WarpWallet. I&#039;m done arguing with you, it&#039;s clearly not productive. Please talk with some of the Bitcoin developers about this if you still don&#039;t believe me. Please also understand how incredibly frustrating it is to have seen firsthand how much damage tools like this can cause their typical users (a paper was published about this), and then have people say &amp;quot;oh, but it&#039;s fine if I use it perfectly, so it&#039;s okay for everyone&amp;quot;. If you want to use it, I can&#039;t stop you, but recommending these tools to random newbies is gross negligence. I also want to point out that it&#039;s a bit absurd to recommend hardware wallets if you categorically don&#039;t trust CSPRNGs. Why are their CSPRNGs trustworthy and others not?&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 23:45, 24 January 2017 (UTC) &lt;br /&gt;
# Trustworthy is a probability not a binary value. Convenience is also a matter of degree. There&#039;s an inescapable trade-off. You can say: As an expert, I recommend you hold up to $100 in your pocket, up to $10000 in a steel vault and the rest in stocks or whatever. You&#039;d be right to criticize my position if I was being simple minded to the point of absurdity. If I somehow miscommunicated that impression, I wouldn&#039;t blame you for feeling like there&#039;s no point in talking to this idiot.&lt;br /&gt;
# For the record, Hardware CSPRNGs are no more trustworthy, if anything I trust them even less because they&#039;re such high value targets. That&#039;s why I limit their use to relatively small sums. Great for day-to-day use though. Very convenient. But I&#039;m anticipating to wake up one day and learn a whole bunch of wallets got their funds swept and we eventually trace that back to weak/weakened wallet creation. I hope I&#039;ll be proven wrong but in the meantime, like you, I&#039;m trying to help users minimize their exposure.&lt;br /&gt;
# Before I sign off and stop troubling you with unwanted discussion, I just wanted to express my appreciation for the time you&#039;ve taken to explain your position, the efforts to protect users and also that you went public with your research and didn&#039;t use it to run another botnet. You&#039;re a philanthropist. I&#039;ve been benefiting from your advice and have been spreading it to anyone foolish enough to consider using SHA256 brainwallets. I&#039;ve even done experiments with leaving various amounts of funds in SHA256 brainwallets just to see what would happen and have seen them grabbed with my own eyes. I never meant to downplay your research or imply that brainwallet stealing botnets don&#039;t exist. They obviously do and it&#039;s important to take that risk into account. If there&#039;s a gap in our understanding I think it&#039;s due each of us spending more time researching different classes of threats. I used to work with the military and spent a good chunk of my life researching sophisticated malware. Endpoint security risks looms ever large in my mind. I guess that makes me atypically skeptical of claims of system integrity. I imagine for you the risk of users choosing bad passwords/passphrases, having cracked so many of them seems to deserve more of an emphasis. &lt;br /&gt;
# Sorry you feel the discussion was unproductive. If I&#039;ve rubbed you the wrong way I apologize. FWIW, I found it productive.You&#039;ve also convinced me that Warpwallet makes it too easy to avoid salting and the default should be changed. I&#039;ll try to get a patch through. I&#039;ll also be updating my recommendations on the resources I control to stress that the salt is mandatory and that using Warpwallet is unsafe without it.&lt;br /&gt;
# We both agree that the threats are real and significant, we just place different weights on them. Before our correspondence it was my understanding that ROI for attacking &#039;&#039;&#039;salted&#039;&#039;&#039; warpwallets was so low that it would make the operation of a botnet most likely unprofitable. I don&#039;t think we disagree on that. I think we might disagree on the optimal set of trade-offs to factor into our recommendations to non-experts where protecting against one risk necessarily weakens protection against another. We agree that salts are essential and should be mandatory, key stretching adds security but isn&#039;t a silver bullet, humans are bad as sources of entropy, end-point security is really hard, blindly trusting RNGs is unwise, Warpwallet being a PITA to use and a privacy risk to use as your main wallet, and that your research is very important it and you&#039;re doing the Bitcoin community a huge service being an advocate against unsafe practices. That&#039;s a lot of common ground. Nice chatting with you Ryan (for me anyhow).&lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing coints to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] People run these botnets already! I gave a talk last summer, one of the bots robbed our bait wallet live on stage! This problem is solved trivially with BIP38 paper wallets. Risk of loss can be mitigated by making multiple copies and storing them in different locations. Requiring adversaries to steal your paper wallet and crack the passphrase is better than publishing what is effectively a hash of your passphrase and hoping for the best.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 00:01, 25 January 2017 (UTC) Clarified what I meant regarding botnets above. Regarding BIP38, like all automatic wallet generation procedures, the security of a BIP38 wallet depends on the security of the endpoint generating it, which is not a trivial problem for users to solve. We integrate a BIP38 paper wallet generation tool into BitKey. It&#039;s very useful, but I tell people if they don&#039;t trust us, our build process and/or their ability to independently verify the integrity of the software, they might want to use something else instead they don&#039;t have to trust. Trust-minimized solutions are better than solutions that require trust. I think that was the one of the key innovations Bitcoin/blockchain introduced: http://nakamotoinstitute.org/trusted-third-parties/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62190</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62190"/>
		<updated>2017-01-24T23:45:50Z</updated>

		<summary type="html">&lt;p&gt;Liraz: OK, thanks anyway&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] You are wrong. The consensus on this from other experts is that you are wrong. Your recommendations will harm users. I&#039;ve talked to several otherwise smart people who have lost painfully large sums of money to various deterministic wallet tools. Such tools are a trap for people who are smart, but don&#039;t quite understand how effective password cracking can be. Many people think they do, but there is a lot of bad advice about passwords and passphrases out there. I personally have used passphrases in the past for things like GPG keys that would have gotten me 0wned if I&#039;d used them even in WarpWallet. I&#039;m done arguing with you, it&#039;s clearly not productive. Please talk with some of the Bitcoin developers about this if you still don&#039;t believe me. Please also understand how incredibly frustrating it is to have seen firsthand how much damage tools like this can cause their typical users (a paper was published about this), and then have people say &amp;quot;oh, but it&#039;s fine if I use it perfectly, so it&#039;s okay for everyone&amp;quot;. If you want to use it, I can&#039;t stop you, but recommending these tools to random newbies is gross negligence. I also want to point out that it&#039;s a bit absurd to recommend hardware wallets if you categorically don&#039;t trust CSPRNGs. Why are their CSPRNGs trustworthy and others not?&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 23:45, 24 January 2017 (UTC) &lt;br /&gt;
# Trustworthy is a probability not a binary value. Convenience is also a matter of degree. There&#039;s an inescapable trade-off. You can say: As an expert, I recommend you hold up to $100 in your pocket, up to $10000 in a steel vault and the rest in stocks or whatever. You&#039;d be right to criticize my position if I was being simple minded to the point of absurdity. If I somehow miscommunicated that impression, I wouldn&#039;t blame you for feeling like there&#039;s no point in talking to this idiot.&lt;br /&gt;
# For the record, Hardware CSPRNGs are no more trustworthy, if anything I trust them even less because they&#039;re such high value targets. That&#039;s why I limit their use to relatively small sums. Great for day-to-day use though. Very convenient. But I&#039;m anticipating to wake up one day and learn a whole bunch of wallets got their funds swept and we eventually trace that back to weak/weakened wallet creation. I hope I&#039;ll be proven wrong but in the meantime, like you, I&#039;m trying to help users minimize their exposure.&lt;br /&gt;
# Before I sign off and stop troubling you with unwanted discussion, I just wanted to express my appreciation for the time you&#039;ve taken to explain your position, the efforts to protect users and also that you went public with your research and didn&#039;t use it to run another botnet. You&#039;re a philanthropist. I&#039;ve been benefiting from your advice and have been spreading it to anyone foolish enough to consider using SHA256 brainwallets. I&#039;ve even done experiments with leaving various amounts of funds in SHA256 brainwallets just to see what would happen and have seen them grabbed with my own eyes. I never meant to downplay your research or imply that brainwallet stealing botnets don&#039;t exist. They obviously do and it&#039;s important to take that risk into account. If there&#039;s a gap in our understanding I think it&#039;s due each of us spending more time researching different classes of threats. I used to work with the military and spent a good chunk of my life researching sophisticated malware. Endpoint security risks looms ever large in my mind. I guess that makes me atypically skeptical of claims of system integrity. I imagine for you the risk of users choosing bad passwords/passphrases, having cracked so many of them seems to deserve more of an emphasis. &lt;br /&gt;
# Sorry you feel the discussion was unproductive. If I&#039;ve rubbed you the wrong way I apologize. FWIW, I found it productive.You&#039;ve also convinced me that Warpwallet makes it too easy to avoid salting and the default should be changed. I&#039;ll try to get a patch through. I&#039;ll also be updating my recommendations on the resources I control to stress that the salt is mandatory and that using Warpwallet is unsafe without it.&lt;br /&gt;
# We both agree that the threats are real and significant, we just place different weights on them. Before our correspondence it was my understanding that ROI for attacking &#039;&#039;&#039;salted&#039;&#039;&#039; warpwallets was so low that it would make the operation of a botnet most likely unprofitable. I don&#039;t think we disagree on that. I think we might disagree on the optimal set of trade-offs to factor into our recommendations to non-experts where protecting against one risk necessarily weakens protection against another. We agree that salts are essential and should be mandatory, key stretching adds security but isn&#039;t a silver bullet, humans are bad as sources of entropy, end-point security is really hard, blindly trusting RNGs is unwise, Warpwallet being a PITA to use and a privacy risk to use as your main wallet, and that your research is very important it and you&#039;re doing the Bitcoin community a huge service being an advocate against unsafe practices. That&#039;s a lot of common ground. Nice chatting with you Ryan (for me anyhow).&lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing coints to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] People run these botnets already! I gave a talk last summer, one of the bots robbed our bait wallet live on stage! This problem is solved trivially with BIP38 paper wallets. Risk of loss can be mitigated by making multiple copies and storing them in different locations. Requiring adversaries to steal your paper wallet and crack the passphrase is better than publishing what is effectively a hash of your passphrase and hoping for the best.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62188</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62188"/>
		<updated>2017-01-24T17:50:09Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing coints to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62187</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62187"/>
		<updated>2017-01-24T17:49:05Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure. &lt;br /&gt;
&lt;br /&gt;
 ** [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:49, 24 January 2017 (UTC) I mean, it boggles my mind how worried we are about losing coints to exotic risks such as Bitflayer botnets with millions of nodes, and meanwhile, the standard recommendation is to:&lt;br /&gt;
# Trust endpoints that can and have been compromised in endlessly creative ways&lt;br /&gt;
# Get that endpoint to create a hard to remember seed for your wallet&lt;br /&gt;
# Write down the seed on a piece of paper(!), that can be lost, stolen, burned, or water-logged&lt;br /&gt;
&lt;br /&gt;
If worst comes to worse and the government, or criminals or whatever are looking for your coins, they&#039;ll ransack your house and bank vaults, find that piece of paper and all of our sophisticated crypto goes up in smoke. I think the future will look back to us and laugh: secrets are meant to be remembered, not written down!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Write it down to &lt;br /&gt;
these terribly untrustworthy end-points to  computer&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62186</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62186"/>
		<updated>2017-01-24T17:35:02Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62185</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62185"/>
		<updated>2017-01-24T17:34:21Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */ Warpwallet good for some things, not everything&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:34, 24 January 2017 (UTC) For sure, it isn&#039;t a good tool to use for your main wallet. That was not my recommendation. Neither is a paper wallet. For my main day-to-day wallet I use (and recommend) a hardware wallet. Partially spending Warpwallet isn&#039;t as convenient or efficient, but it&#039;s not that much different in that respect from other cold storage transactions. In practice, it takes a few seconds of additional work relative to a standard cold storage transaction. I&#039;ve documented that workflow on bitkey.io if you&#039;re interested. My point is that even in it&#039;s current form it&#039;s a useful way to place funds in cold storage. The concept of a Brainwallet is actually a pretty good one in my opinion. Encouraging people to backup their wallets in paper (which most wallets do) opens a whole other can of worms. I find it hard to believe we would be doing that if we had a decent easy to remember alternative that wasn&#039;t pitifully insecure.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62184</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62184"/>
		<updated>2017-01-24T17:30:04Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */ salting should be mandatory - agreed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:30, 24 January 2017 (UTC) FWIW, I agree that WarpWallet should make the salting mandatory, or at least the default. I&#039;ll look into patching that myself and trying to get them to accept that.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62183</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62183"/>
		<updated>2017-01-24T17:20:50Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Another reply */ thoughts on improving key generation techniques&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] Because the dice might be biased, so it&#039;s hard to be sure how many is enough, and some foolish person will make up their own die rolls because rolling a die 50 times is too hard. If you display the process output of the die rolls along with the CSPRNG output (generated before the die rolls to shut down any tinfoil hattery about the CSPRNG being malicious adaptively) and xor the two together to output the keys, behavior can be validated.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 17:20, 24 January 2017 (UTC) &lt;br /&gt;
# I really like your idea, though I would implement it differently because I&#039;m not much good at doing XOR in my head, and the more friction something involves the less likely I am to do it. I do agree that creating a user-verifiable key generation tool could blend the best of both manual and automatic entropy. That could be a good default and a real improvement to existing key generation techniques. I&#039;m thinking there&#039;s a good way to implement that which would feature the best of what I like about Warpwallets and HD wallets. There would be two steps. First, we would have an entropy collection step that we can reproduce and verify in a deterministic way. For example our tool generates 4-8 mnemonic words (52 - 104 bits) from the CSPRNG and then prompts the user for N additional bits of entropy, using a tool like zxcvbn to measure the entropy. We don&#039;t need to XOR, we can just append the manually entropy to the computer entropy. From that we generate a new mnemonic 4-8 word code. The output is deterministic so we could have another mode that allows us to repeat and verify the result, for the &amp;quot;tinfoil&amp;quot; crowd. If it&#039;s malware at least it&#039;s deterministic malware. Different implementations in different languages running on different platforms could be compared for bonus tinfoil-hat points. Now that we have 52 - 104 bits of entropy, we can use the warpwallet algorithm WITH a mandatory salt to generate the final 12 word BIP39 key. I&#039;d get more tinfoil points for suggesting we force users to seed the wallet with more than 4 words, even with a strong KDF and salt, but 4 truly random words should actually be enough for someone who isn&#039;t holding huge sums in their wallet, and we should balance the risk of theft from monster botnets with the much more banal and routine risk of misplacing/exposing your paper wallet and/or forgetting a long mnemonic. If a to-be-stretched-and-salted seed is just 4 words, users are much more likely to store it successfully in their heads, ALA XKCD. For more high risk wallets, 6-8 seed words would be more appropriate, so that could be a choice.&lt;br /&gt;
# The above scheme wouldn&#039;t be idiot proof (I believe that&#039;s an impossible goal), but it would be more idiot proof than either letting a potentially unfaithful wallet/RNG generate keys for you or trusting the user to do enough die rolls. I also think that user stupidity is something we could a lot to mitigate with a good UX embedding educational elements and an interface that doesn&#039;t encourage the user to cheat themselves. &lt;br /&gt;
# If someone is rolling dice instead of letting the computer generate the seed for them, they&#039;re probably already quite a bit more informed regarding the risks &lt;br /&gt;
# Biased dice provide less entropy, but they still provide some. The higher the bias, the less entropy we&#039;re getting out of each dice roll, the higher the likelyhood someone is going to notice the bias so there&#039;s a natural balance there that would mitigate the most aggressive abuses. &lt;br /&gt;
# Even without mixing in computer generated entropy, we can compensate for loaded dice by adding more dice rolls, stretching the entropy with an even stronger KDF (e.g., using a native implementation of scrypt running for longer), mixing-in an e-mail salt and/or distributing instructions for testing the fairness of dice so at least some experts will detect and warn the community regarding exploitable shenanigans. The result will still be deterministic so you could run the technique using multiple implementations, on multiple platforms, and if you get the same result you&#039;re probably safe, even without doing the math by by hand.&lt;br /&gt;
# I don&#039;t think it&#039;s fair to call the concern from sophisticated malware tinfoil asshattery. I agree that excessive security concerns are a net-loss, not a net-gain, especially if they just encourage users to subvert the security. But worrying about the wrong things while ignoring real risks is another way you get less security. End-point security is the bane of security and the Achilles heal of encryption schemes. Security is only as strong as it&#039;s weakest link and the crypto is usually not the weakest link. Schneier gave the analogy of an armored truck transporting valuables between two park benches. Case in point, Snowden leaks didn&#039;t reveal the NSA was using QC or alien crypto-analysis to break civilian crypto schemes. It revealed TAO compromising end-point security by hook and crook. People were distracting themselves looking under the crypto streetlamp - discussing the relative merits of a 1024 PGP key vs a 2048 PGP key. If you suspect someone might be spending hundreds of millions to break your security you should probably shore up your defenses where they are weakest and implement extreme SecOps, not refine your crypto schemes on relatively poorly secured endpoints.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet uses an asynchronous scrypt implementation. Every time the progress bar updates is several milliseconds where computations were not being done.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] The hardware cost estimates in the scrypt paper aren&#039;t terribly relevant. Nobody&#039;s going to build ASICs to crack brainwallets or warpwallets - the hardware costs are too high and the payoff too uncertain. I have yet to see even a GPU implementation of elliptic curve public key generation (no, that is not what oclvanitygen does), let alone an FPGA one. What has been implemented on GPU is elliptic curve point addition, but that&#039;s only about one order of magnitude more efficient than on CPU from the benchmarks I&#039;ve done.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;br /&gt;
&lt;br /&gt;
* [[User:RyanC|RyanC]] WarpWallet allows an empty salt, and that is the default. Get them to accept a patch that makes it abundantly clear how bad it is not to use a salt, and then we can talk about the security it adds. Attacking a thing that I have seen people do is not a strawman. We should make better tools that make insecure usage difficult.&lt;br /&gt;
&lt;br /&gt;
[[User:RyanC|RyanC]]&lt;br /&gt;
&lt;br /&gt;
Even aside from the entropy issue, WarpWallet isn&#039;t a good tool. It generates uncompressed addresses and keys which are more expensive to use. It has no built-in scheme for multiple addresses. Partially spending a WarpWallet requires tedious manual transaction work of the sort that people can and do screw up.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Luke-jr&amp;diff=62180</id>
		<title>User talk:Luke-jr</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Luke-jr&amp;diff=62180"/>
		<updated>2017-01-24T14:07:56Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Weighing in on my discussion with RyanC */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* My comments on [[Tonal Bitcoin]] are not &amp;quot;trolling&amp;quot;.  They are my opinions, and you can discuss it on the talk page based on the merits. If you delete my comments again from a discuss page, I will ask the administrators to ban your account. That is not acceptable wikipedia behavior  [[User:Lunokhod|Lunokhod]] ([[User talk:Lunokhod|talk]])&lt;br /&gt;
&lt;br /&gt;
== Thanks for helping on the [[Heaven Sent Gaming]] article. ==&lt;br /&gt;
&lt;br /&gt;
The bias was sloppy copyediting on my part, thanks for fixing it. [[User:Anon y Mouse|Anon y Mouse]] ([[User talk:Anon y Mouse|talk]]) 10:55, 24 August 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
Hi Luke, can you restore the [[Headers]] article please? It was useful for finding information about headers, and it&#039;s not obvious where people need to go without this reference article. There&#039;s already an article for [[block]]s, so I don&#039;t see why you needed to delete this, since it was useful.&lt;br /&gt;
&lt;br /&gt;
: There was no useful information, it was just a stub. Furthermore, headers are not a thing, they are just a part of a block... --[[User:Luke-jr|Luke-jr]] ([[User talk:Luke-jr|talk]]) 21:03, 5 September 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== deep web ==&lt;br /&gt;
&lt;br /&gt;
Luke-jr, bitcoin and deep web is closely related, as I previosly said... Your wiki contains bitcoin services as well as hidden wiki, it is only info ( nothing illegal) [[User:TheHiddenWiki|TheHiddenWiki]] ([[User talk:TheHiddenWiki|talk]]) 14:53, 11 September 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 247exchange ==&lt;br /&gt;
&lt;br /&gt;
Hello Luke,&lt;br /&gt;
is it possible to list our exchange service 247exchange.com here please: https://en.bitcoin.it/wiki/Buying_Bitcoins_(the_newbie_version)?&lt;br /&gt;
We accept credit/debit cards (Visa, MasterCard, Maestro) for instant buying Bitcoin. SWIFT and SEPA bank transfers are also accepted. All countries except USA (where we don&#039;t have the licenses yet) are supported.&lt;br /&gt;
Our exchange is licensed, secure and easy-to-use.&lt;br /&gt;
Thanks in advance!&lt;br /&gt;
&lt;br /&gt;
== Weighing in on my discussion with RyanC ==&lt;br /&gt;
&lt;br /&gt;
Hi Luke, I&#039;ve been discussing the pros/cons of Warpwallets with Ryan Castelluci on his [[User talk:Ryanc|talk page]]. Could you share your analysis? &lt;br /&gt;
&lt;br /&gt;
It&#039;s a long discussion so to reiterate my position: &lt;br /&gt;
&lt;br /&gt;
1) There is a [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ real problem] with the faithfulness of blackbox RNGs that is hard to solve. RyanC agrees with me on that point.&lt;br /&gt;
&lt;br /&gt;
2) It&#039;s unwise to trust systems we can&#039;t verify when the stakes are high. For example, we can recommend users verify they&#039;re running a trustworthy wallet on a clean computer. Sounds great but if you really want to be sure that&#039;s very hard even for an expert. We can recommend they verify their wallet is actually (not just &amp;quot;supposed to&amp;quot;, according to the source) using a faithful CSPRNG to generate the seed but &#039;&#039;&#039;nobody&#039;&#039;&#039; knows how to do that.&lt;br /&gt;
&lt;br /&gt;
3) What I like about Warpwallet is that it provides a unique blend of [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ simplicity with security].&lt;br /&gt;
&lt;br /&gt;
It&#039;s not idiot proof, but none of the other solutions are either. For some use cases it&#039;s a genuinely better recommendation than the more traditional alternatives, and if that&#039;s true we owe it to the non-experts who look up to us not to parrot old advice. When a new technique comes along, let&#039;s think it through. &lt;br /&gt;
&lt;br /&gt;
We also need to accept that different solutions have relative advantages and trade-offs. Computer security is hard. There&#039;s no way around nuance. There are no absolutes. Nothing we recommend will fully protect users from being stupid or negligent. Some users will always choose the dancing pigs. &lt;br /&gt;
&lt;br /&gt;
We can recommend they don&#039;t store large amounts in hot wallets, but they&#039;ll do that anyway. We can recommend they don&#039;t backup their &amp;quot;encrypted&amp;quot; wallet to the cloud, but of course they will. We can recommend a random passphrase and they&#039;ll use something from a dictionary or a famous quote. We can recommend they pay more for a hardware wallet from a trustworthy source, they won&#039;t be able to tell who&#039;s trustworthy and they&#039;ll just opt to pay less. They&#039;re lose their paper backups to the cleaning lady, fire and flood. They will forget their encryption passwords.&lt;br /&gt;
&lt;br /&gt;
We don&#039;t respond to that by treating everyone like stupid irresponsible babies. We accept personal responsibility and give those that want it the best advice we have.&lt;br /&gt;
&lt;br /&gt;
4) Warpwallet is mostly guilty by association with naive SHA256 Brainwallets. Putting the SHA256 technique in anything with a web interface was like leaving a loaded gun around. Of course people got hurt and that&#039;s tragic.&lt;br /&gt;
&lt;br /&gt;
I understand why the natural reaction to that is just to taboo the whole brainwallet concept after that, but using extreme key stretching together with salting is something qualitatively different.&lt;br /&gt;
&lt;br /&gt;
You can&#039;t just cut and paste the SHA256 brainwallet public service announcement on to the new thing because the stupid thing came first. That would be like giving SHA256 brainwallets a pass if Warpwallet came first. The devil is in the details. We need to re-evaluate based on evidence. Warpwallet changes the cost of attack so that there&#039;s no longer a weak central point of failure users are known to be notoriously bad at.&lt;br /&gt;
&lt;br /&gt;
Case in point, the Warpwallet challenge offered a $20,000 jackpot to crack an intentionally weak 8-character unsalted wallet and survived unclaimed for 2.5 years. RyanC has argued a large botnet running his software could crack the challenge in a year or so and I hope someone does that to prove him right.&lt;br /&gt;
&lt;br /&gt;
But if the challenge was modified to use an unknown e-mail salt, Ryanc&#039;s Brainflayer running on a 25M node botnet would never find it. The universe would end first. If Warpwallet challenge included a list of 1000 possible e-mail salts, it would take the botnet 9 years to crack. To search 10,000 suspected e-mail salts: 90 years. That&#039;s not my opinion, that&#039;s math.&lt;br /&gt;
&lt;br /&gt;
Maybe I&#039;m missing something, but my conclusion is that if you use Warpwallet with a pretty good passphrase and your e-mail as salt, you&#039;re much more likely to get your coins stolen by someone beating you over the head with a $5 wrench than a Brainflayer botnet with millions of nodes running for decades.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t you agree? If not, that&#039;s fine, but please help me understand why.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62179</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62179"/>
		<updated>2017-01-24T04:06:39Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Another reply */ Why mix in the CSPRNG at all?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
* [[User:Liraz|Liraz]] ([[User talk:Liraz|talk]]) 04:06, 24 January 2017 (UTC) Why not just generate the BIP39 mnemonic directly from the 50 die rolls? Why use the CSPRNG at all? As soon as you mix in the CSPRNG the output of the program is no longer deterministic making it harder to verify that it is operating faithfully. If 50 die rolls provide sufficient entropy, let&#039;s just use that.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62178</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62178"/>
		<updated>2017-01-24T03:59:20Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* What about salting? */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;br /&gt;
&lt;br /&gt;
== What about salting? ==&lt;br /&gt;
&lt;br /&gt;
You haven&#039;t responded to your thoughts on salting at all. Without salting I would agree that Warpwallet is just a slower to compute improvement of the bitaddress style brainwallet. With salting, it&#039;s something qualitatively different. The Warpwallet challenge used an unsalted passphrase to make a point, but criticizing the weakened version is attacking a straw man.&lt;br /&gt;
&lt;br /&gt;
To illustrate, a 25M Brainflayer botnet cracking Warpwallets at 10 guesses/sec could search through 52 bits of unsalted entropy in a year. Now spread that power over 1000 target e-mails (e.g., suspected warpwallet holders) and searching the space takes 1000 years.&lt;br /&gt;
&lt;br /&gt;
If the Warpwallet 8-alphanumeric challenge was on an unknown salt, Brainflayer would never find it. If the challenge included a list of 1000 e-mails, it would take about 9 years to crack. To search 10,000 suspect e-mails: 90 years.&lt;br /&gt;
&lt;br /&gt;
The economics of attacking salted/unsalted warpwallets are vastly different, and that&#039;s an important part of what Warpwallet brings to the table, but you&#039;re not addressing that.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62177</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62177"/>
		<updated>2017-01-24T03:39:10Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;br /&gt;
&lt;br /&gt;
== Another reply ==&lt;br /&gt;
&lt;br /&gt;
The 10 keys per second is on a four core i7 that&#039;s about five years old, and is a real world number.&lt;br /&gt;
&lt;br /&gt;
The 60,000 times more expensive figure isn&#039;t a mistake. The same system that can do 10 warpwallet keys per second can do about 600k traditional brainwallet keys per second. The reason for this is that it&#039;s not just sha256 vs scrypt+pbkdf2 - the public key generation step must be taken into account and it is much, much slower than sha256. My code is available - https://rya.nc/brainflayer - run your own benchmarks if you find mine questionable.&lt;br /&gt;
&lt;br /&gt;
As far as the rest of your hypothetical math goes... that&#039;s assuming &amp;quot;perfect use&amp;quot;. It falls apart once the tool gets into the hands of actual users.&lt;br /&gt;
&lt;br /&gt;
Most actual people don&#039;t know how to create a secure passphrase. Even if you tell them to use diceware, many of them will do something &amp;quot;clever&amp;quot; and still fail.&lt;br /&gt;
&lt;br /&gt;
There are great tools that are secure under &amp;quot;typical use&amp;quot; with mnemonics that can easily be memorized with a little work. Compared with that, why would you ever recommend the thing that has much weaker security when common usage mistakes are made?&lt;br /&gt;
&lt;br /&gt;
The only other real argument you&#039;ve got here is about RNGs. Most popular wallets are now using deterministic nonces which dramatically reduce that problem. The key generation remains a risk (though a very tiny one). There is a simple solution to that. Write a tool that generates a BIP39 mnemonic (perhaps also allow electrum compatible output?) by combining CSPRNG output with a hash of the results of 50 die rolls. You get a securely generated seed that is possible to memorize so long as at least on of the entropy sources is good. If you&#039;d like to write such a tool, I&#039;d be happy to audit the code.&lt;br /&gt;
&lt;br /&gt;
== Brainflayer on CPUs not an upper bound on SHA256 brainwallet cracking efficiency ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed (and somewhat surprised) that Brainflayer can do 10 warpwallet guesses/sec. That&#039;s at least an order of magnitude faster than the JS implementation. I would have guessed that the performance gap between code running on V8 and a compiled library would be smaller.&lt;br /&gt;
&lt;br /&gt;
Hard to argue with actual Brainflayer benchmarks, but I think Colin Percival had a point that a realistic estimate of how much scrypt was more expensive to crack would be to assume advanced cracking attempts would involve highly customized hardware. &lt;br /&gt;
&lt;br /&gt;
If you reimplemented Brainflayer to take advantage highly customized hardware you could probably crank up the number of SHA256 brainwallet passphrase guesses  much faster you could crank up warpwallets passphrase attempts, including the public key generation step. I admit this is just a hunch, the difficulty of scaling up public key generation on custom hardware is not something I&#039;m familiar with. I&#039;m just assuming that this step wasn&#039;t designed to be difficult to accelerate in hardware, unlike scrypt.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62174</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62174"/>
		<updated>2017-01-24T01:55:49Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Warpwallet security analysis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
FWIW, as far as I can tell you made a huge mistake in your estimation of how much more difficult it is to calculate a warpwallet than a SHA256 brainwallet. You&#039;re calculation is off by 6 orders of magnitude. Warpwallet uses 524,288 iterations of scrypt + 131,072 iterations of PBKDF2. That is not 60,000 more expensive than calculating a SHA256 hashed brainwallet. It&#039;s closer to 100 billion times more expensive.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62173</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62173"/>
		<updated>2017-01-24T01:16:08Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Warpwallet security analysis */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;br /&gt;
&lt;br /&gt;
== Reply ==&lt;br /&gt;
&lt;br /&gt;
Yes, that is me. In my talk, my comment about WarpWallet was intended to mean &amp;quot;if you still want to do something like this, at least use warpwallet instead&amp;quot;. I regret that it was not phrased more clearly. WarpWallet is merely a bad idea (without a seed, it&#039;s about 60,000 times more work to crack on CPU) rather than a catastrophically foolish one.&lt;br /&gt;
&lt;br /&gt;
Even if WarpWallet with eight diceware words is secure, I don&#039;t think that should be recommended because I believe people will not follow passphrase creation advice.&lt;br /&gt;
&lt;br /&gt;
I am aware of the challenge wallet the WarpWallet creators made. A large botnet (several million nodes) could crack it in a few months (assume 10 guesses per second per node).&lt;br /&gt;
&lt;br /&gt;
Tools that provide a random seed and do not allow free text entry are fine because it would take a lot of effort to use insecurely. WarpWallet is easy to use insecurely, electrum, armory, and bip39 are hard to use insecurely.&lt;br /&gt;
&lt;br /&gt;
As far as bad RNGs go... I think people are safer trusting the RNG of reputable bitcoin wallets than trying to provide their own entropy. If a widespread vulnerability in those wallets is found, it would pose an existential threat to bitcoin.&lt;br /&gt;
&lt;br /&gt;
== Warpwallet security analysis ==&lt;br /&gt;
&lt;br /&gt;
Hi Ryan. Thanks for replying. &lt;br /&gt;
&lt;br /&gt;
What I like about Warpwallet&#039;s use of KDFs + salt is that it&lt;br /&gt;
has the potential to raise the cost of attack beyond the point where it is worth&#039;s an attacker&#039;s trouble to attempt. You don&#039;t spend $100M cracking a $1M safe.&lt;br /&gt;
&lt;br /&gt;
Whether or not that is true depends on the validity of the underlying assumptions and a bit of basic math. You&#039;re the brainwallet cracking expert so I&#039;m very much interested in your viewpoint on this.&lt;br /&gt;
&lt;br /&gt;
A few questions:&lt;br /&gt;
&lt;br /&gt;
1) You estimated that a large botnet could crack the unsalted 8-character Warpwallet challenge within several months. What if the challenge was salted with an unknown email? Would it still be feasible in your opinion for a salted Warpwallet 8-character challenge to be cracked?&lt;br /&gt;
&lt;br /&gt;
2) How much faster in your experience is a low-level (e.g., C) implementation of Warpwallet than the in-browser version? On an 3.2 GHz Core i5 the JS WarpWallet implementation takes about 20 seconds to generate a key from a passphrase. A C implementation would have to be 8X faster and run on all 4 cores to get to 10/reqs a second. Does that about match up with your real-world testing?&lt;br /&gt;
&lt;br /&gt;
3) Are there any mistakes in maxtaco&#039;s cost cracking calculator: http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
The calculator estimates that cracking the unsalted random 8-character Warpwallet challenge would cost $1.2M. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s my analysis, please correct me where you think I&#039;ve got it wrong.&lt;br /&gt;
&lt;br /&gt;
Assuming Max&#039;s calculation is about right, if the challenge narrowed down the salts to 2 possible e-mails then cracking cost would be $2.4M. If it provided a list of 100 e-mails then the cost would be $120M.&lt;br /&gt;
&lt;br /&gt;
What that seems to imply is that even with the largest botnets and advances in future hardware a truly global search is impossible and even narrowing that down to large number of target e-mails would be unprofitable for attackers. If this is true a warpwallet cracking botnet is unlikely to be worth anyone&#039;s trouble to run in the first place.&lt;br /&gt;
&lt;br /&gt;
And that&#039;s for a passphrase with just 47 bits of entropy.&lt;br /&gt;
&lt;br /&gt;
If a user generated the recommended 8 words with diceware that&#039;s about 100 bits of entropy, raising the cost of attack to a million trillion trillion USD for an unsalted warpwallet, well well above what any wallet is worth under the most optimistic usage scenario.&lt;br /&gt;
&lt;br /&gt;
You pointed out that users make mistakes, and we know humans are notoriously poor sources of entropy. All true, but that kind of security in depth seems to provide quite a bit of room for error. Users are not just bad at choosing passphrases, they&#039;re bad at understanding security in general. If you&#039;re not a security expert you&#039;re likely to do a poor job keeping your wallet keys secret in the face of determined attackers, regardless of how they were originally generated. In that case, a Warpwallet is not going to be the weakest link. If you know enough to create a strong passphrase, a Warpwallet is not going to be the weakest link. &lt;br /&gt;
&lt;br /&gt;
Either way, a Warpwallet doesn&#039;t seem like that bad an idea. Does it really deserve to be guilty by association with naive Brainwallet implementations?&lt;br /&gt;
&lt;br /&gt;
Especially when the alternative is to just trust a blackbox process to generate keys for you. I agree that a global RNG failure would be devastating to Bitcoin and cryptography in general. But a local failure like the ones that [https://nakedsecurity.sophos.com/2013/08/12/android-random-number-flaw-implicated-in-bitcoin-thefts/ have already happened] would just result in your coins getting stolen. &lt;br /&gt;
&lt;br /&gt;
Why should we place any more faith in the ability of a non expert to verify the integrity of the software they are using than in their ability to generate a secure passphrase? &lt;br /&gt;
&lt;br /&gt;
Generating a secure passphrase with a verifiably secure source of entropy is actually vastly more simple than trying to rule out all the places a backdoor in the automatic seed generation process could be hiding. And so is explaining how to generate a secure passphrase vs how to verify that you&#039;re using a faithful wallet. &lt;br /&gt;
&lt;br /&gt;
This touches the heart of the issue because the Bitcoin wiki is an educational resource for non-experts. If we overestimate the risks of a Warpwallet while underestimating the risks of unfaithful software we may end up giving users bad advice and increase the probability they will lose coins.&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62163</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62163"/>
		<updated>2017-01-23T20:07:02Z</updated>

		<summary type="html">&lt;p&gt;Liraz: If this is &amp;quot;the&amp;quot; RyanC safe to assume he knows all about warpwallets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Suspicious minds ==&lt;br /&gt;
&lt;br /&gt;
Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62161</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62161"/>
		<updated>2017-01-23T19:10:36Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Same Ryan Castelluci from DEFCON talk? */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello Ryanc:&lt;br /&gt;
&lt;br /&gt;
1) Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
2) Could you please read up on Warpwallet, Key Derivation Functions and salts? It&#039;s true that old-style Brainwallets were very dangerous, but advances have made new-style Brainwallets such as Warpwallet many orders of magnitude more resistant to dictionary attack. Warpwallet is developed by very experienced developers who also happen to be the founders of keybase.io.&lt;br /&gt;
&lt;br /&gt;
http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;br /&gt;
&lt;br /&gt;
== Same Ryan Castelluci from DEFCON talk? ==&lt;br /&gt;
&lt;br /&gt;
First, if you&#039;re the same Ryan from the DEFCON talk on Brainwallets, thanks for publishing your research and increasing awareness of the issues. Your talk was one of the inspirations for adding Warpwallet to BitKey.&lt;br /&gt;
&lt;br /&gt;
However if you&#039;re the same Ryan that leaves me confused, because you recommended Warpwallet yourself in your talk, and you should know the Warpwallet challenge for an unsalted 8 character password lasted for 2.5 years before it expired. &lt;br /&gt;
&lt;br /&gt;
Do you disagree that using Warpwallet with a strong passphrase (e.g., eight diceware words) and an e-mail salt would provide very good security, unlike bitaddress-style brainwallets of old?&lt;br /&gt;
&lt;br /&gt;
The problem with trusting RNGs to generate your wallet keys are very real:&lt;br /&gt;
&lt;br /&gt;
http://www.zdnet.com/google-confirms-bitcoin-theft-vulnerability-in-android-7000019431/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62160</id>
		<title>User talk:Ryanc</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User_talk:Ryanc&amp;diff=62160"/>
		<updated>2017-01-23T18:59:02Z</updated>

		<summary type="html">&lt;p&gt;Liraz: why did you revert warpwallet edit?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello Ryanc:&lt;br /&gt;
&lt;br /&gt;
1) Could you please explain what you found suspicious about my Brainwallet edits? &lt;br /&gt;
&lt;br /&gt;
2) Could you please read up on Warpwallet, Key Derivation Functions and salts? It&#039;s true that old-style Brainwallets were very dangerous, but advances have made new-style Brainwallets such as Warpwallet many orders of magnitude more resistant to dictionary attack. Warpwallet is developed by very experienced developers who also happen to be the founders of keybase.io.&lt;br /&gt;
&lt;br /&gt;
http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62158</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62158"/>
		<updated>2017-01-23T10:36:47Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive Key Derivation Function.&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but a good wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run), assuming it has not been tampered with.&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
== Risks of automatic seed/passphrase generation ==&lt;br /&gt;
&lt;br /&gt;
Automatic wallet seed/passphrase generation is only secure using:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful wallet software&#039;&#039;&#039;: that has not been maliciously tampered with. If you haven&#039;t compiled wallet software yourself on a trustworthy computer running a trustworthy compiler, trustworthy source code is no guarantee for a trustworthy binary. See the [http://wiki.c2.com/?TheKenThompsonHack Ken Thompson hack] for details. Wallets with a deterministic build process (e.g., Bitcoin Core) are more resistant to attack.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful RNG&#039;&#039;&#039;: An RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator]) may be implemented in software, hardware or both. Wallet software relies on the security of the RNG, to generate your wallet&#039;s private keys securely. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful hardware&#039;&#039;&#039;: software is executed by hardware. Unfaithful hardware may execute faithful software unfaithfully. This would be especially difficult to detect for computations where the final output is non-deterministic, such as an unfaithful hardware execution of Random Number Generator routines. The risk of such an attack is increased by the opaqueness of hardware implementation, and the centralized capital intensive nature of hardware manufacturing, making hardware companies more vulnerable to coercion, especially in undemocratic countries where most hardware manufacturing currently takes place.&lt;br /&gt;
&lt;br /&gt;
For high risk applications, a pair of [http://rpg.stackexchange.com/questions/70802/how-can-i-test-whether-a-die-is-fair fair dice] can provide a simpler, verifiably secure source of entropy.&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dropbox/zxcvbn zxcvbn] - A realistic passphrase strength estimator&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin] - introduction to WarpWallet with passphrase entropy cracking cost calculator.&lt;br /&gt;
* [[BitKey]] - Live USB/DVD that supports running zxcvbn and WarpWallet offline&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62157</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62157"/>
		<updated>2017-01-23T10:33:42Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive Key Derivation Function.&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but a good wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run), assuming it has not been tampered with.&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
== Risks of automatic seed/passphrase generation ==&lt;br /&gt;
&lt;br /&gt;
Automatic wallet seed/passphrase generation is only secure using:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful wallet software&#039;&#039;&#039;: that has not been maliciously tampered with. If you haven&#039;t compiled wallet software yourself on a trustworthy computer running a trustworthy compiler, trustworthy source code is no guarantee for a trustworthy binary. See the [http://wiki.c2.com/?TheKenThompsonHack Ken Thompson hack] for details. Wallets with a deterministic build process (e.g., Bitcoin Core) are more resistant to attack.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful RNG&#039;&#039;&#039;: An RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator]) may be implemented in software, hardware or both. Wallet software relies on the security of the RNG, to generate your wallet&#039;s private keys securely. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful hardware&#039;&#039;&#039;: software is executed by hardware. Unfaithful hardware may execute faithful software unfaithfully. This would be especially difficult to detect for computations where the final output is non-deterministic, such as an unfaithful hardware execution of Random Number Generator routines. The risk of such an attack is increased by the opaqueness of hardware implementation, and the centralized capital intensive nature of hardware manufacturing, making hardware companies more vulnerable to coercion, especially in undemocratic countries where most hardware manufacturing currently takes place.&lt;br /&gt;
&lt;br /&gt;
For high risk applications, a pair of [http://rpg.stackexchange.com/questions/70802/how-can-i-test-whether-a-die-is-fair fair dice] can provide a simpler, verifiably secure source of entropy.&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dropbox/zxcvbn zxcvbn] - A realistic passphrase strength estimator&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin] - introduction to WarpWallet with passphrase entropy cost estimator&lt;br /&gt;
* [[BitKey]] - Live USB/DVD that supports running zxcvbn and WarpWallet offline&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Brainwallet&amp;diff=62156</id>
		<title>Brainwallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Brainwallet&amp;diff=62156"/>
		<updated>2017-01-23T10:25:48Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* WarpWallet */ internal link to strong passphrase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;brainwallet&#039;&#039;&#039; refers to the concept of storing Bitcoins in your brain by remembering the secret seed from which your wallet keys are generated.&lt;br /&gt;
&lt;br /&gt;
= WarpWallet =&lt;br /&gt;
&lt;br /&gt;
One of the best ways to create a brainwallet is use [https://keybase.io/warp/ WarpWallet] on a secure, malware-free computer to to generate your wallet keys from a [[Passphrase generation|strong passphrase]], salted to your email address.&lt;br /&gt;
&lt;br /&gt;
An advantage of this wallet generation method is that it not vulnerable to a malicious or broken Random Number Generator.&lt;br /&gt;
&lt;br /&gt;
A disadvantage is that only a single address is generated at a time and [[address reuse]] can introduce privacy problems.&lt;br /&gt;
&lt;br /&gt;
WarpWallet uses a strong bruteforce resistant Key Derivation Function: 2^18 rounds of scrypt + pbkdf. Older methods of creating a brainwallet (e.g., bitaddress.org) from a passphrase are extremely error prone and dangerous. See discussion below.&lt;br /&gt;
&lt;br /&gt;
==Usage example==&lt;br /&gt;
&lt;br /&gt;
# Boot [[BitKey]] on an offline computer in cold-offline mode. &lt;br /&gt;
&lt;br /&gt;
# Run WarpWallet &lt;br /&gt;
&lt;br /&gt;
# Use a strong passphrase to generate your wallet key. Salt with your e-mail.&lt;br /&gt;
&lt;br /&gt;
= Memorizing a wallet generated seed =&lt;br /&gt;
&lt;br /&gt;
An alternative to using WarpWallet with a strong user supplied passphrase is to use trusted Bitcoin wallet software to generate a mnemonic seed and then memorize it. &lt;br /&gt;
&lt;br /&gt;
This assumes the Random Number Generator used to generate the seed is not broken or compromised.&lt;br /&gt;
&lt;br /&gt;
Such seeds are generated by wallets like [[Electrum]], [[Armory]] and [[Mycelium]].&lt;br /&gt;
&lt;br /&gt;
==Electrum based Example==&lt;br /&gt;
&lt;br /&gt;
# On a computer with no malware (e.g., offline PC running live in RAM from [[BitKey]]), run [[Electrum]] and generate the 13-word recovery seed.&lt;br /&gt;
# Memorize the seed using http://en.wikipedia.org/wiki/Mnemonic_peg_system&lt;br /&gt;
# When spending or saving, restore the wallet from memory using the seed.&lt;br /&gt;
# Use the master public key to create an online watch-only wallet, where you can send to but not spend.&lt;br /&gt;
# Spend from the wallet in the manner of [[Cold_storage|deep cold storage]]. Transferring the unsigned transaction to the cold storage computer, signing it and broadcasting to the network.&lt;br /&gt;
&lt;br /&gt;
= Risk of losing coins =&lt;br /&gt;
&lt;br /&gt;
If the secret seed to your wallet is not recorded anywhere, the Bitcoins can be thought of as being held only in the mind of the owner. If a brainwallet is forgotten or the person dies or is permanently incapacitated, the Bitcoins are lost forever. &lt;br /&gt;
&lt;br /&gt;
Using techniques like memory pegging allow them to be memorized and recalled easily.&lt;br /&gt;
&lt;br /&gt;
==Example Mnemonic Peg==&lt;br /&gt;
&lt;br /&gt;
To memorize a mnemonic seed with this method you must invent a story which hits the words as &amp;quot;keynotes&amp;quot;. Try to make it like a fairy tale story, use imagery. Make it somehow striking and emotionally resonant. When remembering you just remember the key words, not all the other words - the other can be remembered more as images and thoughts (which are hard to write down)&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say we have this seed:&lt;br /&gt;
&lt;br /&gt;
    witch collapse practice feed shame open despair creek road again ice least&lt;br /&gt;
&lt;br /&gt;
You&#039;d imagine walking through a building familiar to you, maybe your own home or workplace or school.&lt;br /&gt;
&lt;br /&gt;
* You imagine looking in the first room and seeing your mother dressed as a &#039;&#039;&#039;witch&#039;&#039;&#039;, playing the jenga boardgame until the tower &#039;&#039;&#039;collapses&#039;&#039;&#039;.&lt;br /&gt;
* You walk to the next room and see your father &#039;&#039;&#039;practising&#039;&#039;&#039; with a longbow, he shoots a chicken to &#039;&#039;&#039;feeds&#039;&#039;&#039; himself.&lt;br /&gt;
* In the next room you see your brother naked in &#039;&#039;&#039;shame&#039;&#039;&#039; attempting to cover himself, he&#039;s looking through a window that&#039;s &#039;&#039;&#039;open&#039;&#039;&#039; and flapping in the wind.&lt;br /&gt;
* Now you reach the kitchen, girlfriend is looking at Picasso&#039;s [https://en.wikipedia.org/wiki/Guernica_%28Picasso%29 Guernica] on the wall. She is in &#039;&#039;&#039;despair&#039;&#039;&#039; from it. Next to it is a television playing the show Dawson&#039;s &#039;&#039;&#039;Creek&#039;&#039;&#039;.&lt;br /&gt;
* Next you&#039;re in the garage, your childhood friend is working on his car. He plans to go on a &#039;&#039;&#039;road&#039;&#039;&#039; trip for the 5th time this month, he&#039;s going &#039;&#039;&#039;again&#039;&#039;&#039;.&lt;br /&gt;
* Finally to go outside to the garden. It&#039;s early spring and the ground is covered in melting &#039;&#039;&#039;ice&#039;&#039;&#039;. Two of your other friends are there, one friend has a huge basket of apples, the other has a smaller basket but you&#039;re holding only some apples. You&#039;ve got the &#039;&#039;&#039;least&#039;&#039;&#039; apples.&lt;br /&gt;
&lt;br /&gt;
Repeat this story in your head several times over a short period - the first few days. It will sink in, deep, after that. You&#039;ll only have to revisit it very occasionally. After a while you can ignore it for months and it&#039;ll still come back, not that I&#039;d recommend relying on that.&lt;br /&gt;
&lt;br /&gt;
==Video Example of Mnemonic Peg Method==&lt;br /&gt;
&lt;br /&gt;
From the BBC documentary The Human Mind (2003) by Professor Robert Winston. Approximately 31 minutes in. Memorizing a list of 30 random words.&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=lRhfQCW1f68&amp;amp;t=1867&lt;br /&gt;
&lt;br /&gt;
==Fallible Memory==&lt;br /&gt;
&lt;br /&gt;
Despite the memory aids, human memory can be very fallible. So if your only storage is memory you may find that it just vanished one day. Keeping a copy stored on paper somewhere could be a useful backup, depending on circumstances.&lt;br /&gt;
&lt;br /&gt;
=Dangerous Old-Style Brainwallets =&lt;br /&gt;
&lt;br /&gt;
An early old-style brainwallet was created by by memorization of a passphrase and converting it a [[private key]] with a weak key derivation algorithm (example: two rounds of SHA256). That private key is then used to compute a Bitcoin address. &lt;br /&gt;
&lt;br /&gt;
This method was extremely dangerous because it was vulnerable to global dictionary and bruteforce attacks and relied on humans as a source of entropy.&lt;br /&gt;
&lt;br /&gt;
Modern brainwallets such as WarpWallet have proven much more resistant to attack due to the strong Key Derivation Function and e-mail based salting. For example, the WarpWallet challenge offered a 20 BTC prize for anyone managing to crack an unsalted random 8-character brainwallet. The challenge has resisted attack for 2.5 years.&lt;br /&gt;
&lt;br /&gt;
Note that even with WarpWallet, using a single address still has problems associated with [[address reuse]].&lt;br /&gt;
&lt;br /&gt;
==Legacy Code==&lt;br /&gt;
&lt;br /&gt;
If you have coins in an old-style brainwallet, the website http://www.bitaddress.org/ contains a GUI for generating the private key using the sha256(passphrase) algorithm. It&#039;s highly recommended you move the out as soon as you can.&lt;br /&gt;
&lt;br /&gt;
==Low Entropy from Human-Generated Passphrases==&lt;br /&gt;
&lt;br /&gt;
Practically everyone who knows about or cares loudly yells at people DO NOT USE BRAINWALLETS [GENERATED BY HUMANS].  We&#039;ve seen pretty concrete evidence that users are resistant to good advice in this space, and they are shocked when their favorite quotation is cracked and they lose their coins&lt;br /&gt;
&lt;br /&gt;
==Ryan Castellucci DEFCON Talk==&lt;br /&gt;
&lt;br /&gt;
Ryan Castellucci gave a talk at DEFCON23 about cracking brainwallet passphrases. Although brainwallet passphrases were being exploited for years by this point, the talk helped bring the issues to more popular consciousness.&amp;lt;ref&amp;gt;[https://rya.nc/cracking_cryptocurrency_brainwallets.pdf Ryan Castellucci DEFCON Talk]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.reddit.com/r/Bitcoin/comments/3g9f1s/why_im_releasing_a_brainwallet_cracker_at_defcon/ Reddit thread on Ryan&#039;s talk]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=foil0hzl4Pg a video of Ryan&#039;s talk]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62155</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62155"/>
		<updated>2017-01-23T10:23:34Z</updated>

		<summary type="html">&lt;p&gt;Liraz: Risks of automatic seed/passphrase generation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive Key Derivation Function.&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but a good wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run), assuming it has not been tampered with.&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
== Risks of automatic seed/passphrase generation ==&lt;br /&gt;
&lt;br /&gt;
Automatic wallet seed/passphrase generation is only secure using:&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful wallet software&#039;&#039;&#039;: that has not been maliciously tampered with. If you haven&#039;t compiled wallet software yourself on a trustworthy computer running a trustworthy compiler, trustworthy source code is no guarantee for a trustworthy binary. See the [http://wiki.c2.com/?TheKenThompsonHack Ken Thompson hack] for details. Wallets with a deterministic build process (e.g., Bitcoin Core) are more resistant to attack.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful RNG&#039;&#039;&#039;: An RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator]) may be implemented in software, hardware or both. Wallet software relies on the security of the RNG, to generate your wallet&#039;s private keys securely. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Faithful hardware&#039;&#039;&#039;: software is executed by hardware. Unfaithful hardware may execute faithful software unfaithfully. This would be especially difficult to detect for computations where the final output is non-deterministic, such as an unfaithful hardware execution of Random Number Generator routines. The risk of such an attack is increased by the opaqueness of hardware implementation, and the centralized capital intensive nature of hardware manufacturing, making hardware companies more vulnerable to coercion, especially in undemocratic countries where most hardware manufacturing currently takes place.&lt;br /&gt;
&lt;br /&gt;
For high risk applications, a pair of [http://rpg.stackexchange.com/questions/70802/how-can-i-test-whether-a-die-is-fair fair dice] can provide a simpler, verifiably secure source of entropy.&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dropbox/zxcvbn zxcvbn] - A realistic passphrase strength estimator&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin] - introduction to WarpWallet&lt;br /&gt;
* [[BitKey]] - Live USB/DVD that supports running zxcvbn and WarpWallet offline&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62154</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62154"/>
		<updated>2017-01-23T09:34:21Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Standards for online passphrases */ caveat regarding letting wallet generate seed for you&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive Key Derivation Function.&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but a good wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run), assuming it has not been tampered with.&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dropbox/zxcvbn zxcvbn] - A realistic passphrase strength estimator&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin] - introduction to WarpWallet&lt;br /&gt;
* [[BitKey]] - Live USB/DVD that supports running zxcvbn and WarpWallet offline&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62153</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62153"/>
		<updated>2017-01-23T09:26:49Z</updated>

		<summary type="html">&lt;p&gt;Liraz: See also section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive Key Derivation Function.&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but your wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run).&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/dropbox/zxcvbn zxcvbn] - A realistic passphrase strength estimator&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin] - introduction to WarpWallet&lt;br /&gt;
* [[BitKey]] - Live USB/DVD that supports running zxcvbn and WarpWallet offline&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62152</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62152"/>
		<updated>2017-01-23T09:19:37Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Strength */ KDFs now explained below&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive Key Derivation Function.&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but your wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run).&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62151</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62151"/>
		<updated>2017-01-23T09:18:53Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Strength */ give more concrete and accurate examples of passphrase attacks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. &lt;br /&gt;
&lt;br /&gt;
For use cases that are vulnerable to a global passphrase cracking search, imagine that the entire world could be constantly trying to crack your passphrase, billions of attempts per second, all the time and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples of keys that could be cracked by a global search:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example of keys that could be cracked by a targeted search:&lt;br /&gt;
&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive key derivation function (e.g., scrypt).&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but your wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run).&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62150</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62150"/>
		<updated>2017-01-23T09:10:32Z</updated>

		<summary type="html">&lt;p&gt;Liraz: crypto standards that increase resistant to passphrase cracking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. Essentially, the entire world will be constantly trying to attack your passphrase at full force and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker could gain access to.&lt;br /&gt;
* The input to an insecure bitaddress-style &amp;quot;brain wallet&amp;quot; &lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive key derivation function (e.g., scrypt).&lt;br /&gt;
&lt;br /&gt;
== Crypto standards that increase resistance to passphrase cracking ==&lt;br /&gt;
&lt;br /&gt;
=== Key Derivation Functions ===&lt;br /&gt;
&lt;br /&gt;
Since humans are poor sources of entropy, whenever a passphrase is involved it is recommended to use programs that implement an attack resistant KDF ([https://en.wikipedia.org/wiki/Key_derivation_function Key Derivation Function]) to translate the user supplied passphrase into the ultimate encryption key. KDF functions are similar in concept to hashes such as SHA256, except that they are designed to be hard to compute. This slows down an attacker by increasing the computational cost of each passphrase cracking attempt, providing additional security per bit of entropy.&lt;br /&gt;
&lt;br /&gt;
KDF functions can usually be tuned to provide additional or less security by configuring how many rounds of encryption need to be executed to derive a key from a passphrase. Usability places an upper bound on the number of rounds. For example, a typical number of rounds is 2 ^ 18, or 262144 which may take half a minute on a modern computer.&lt;br /&gt;
&lt;br /&gt;
KDF functions such as Scrypt and PBKDF2 have good reputations. PBKDF2 is older and has received more scrutiny from the cryptographic community but is easier to accelerate by several orders of magnitude using custom parallel hardware. scrypt is newer and has received less scrutiny, but was specifically designed to be more difficult to accelerate using custom hardware. Some programs (e.g., WarpWallet) use both.&lt;br /&gt;
&lt;br /&gt;
A KDF can slow down advanced passphrase cracking attempts from billions of cracking attempts per second to hundreds of attempts per second.&lt;br /&gt;
&lt;br /&gt;
=== Salting ===&lt;br /&gt;
&lt;br /&gt;
Salting is a technique for cryptographically segmenting the passphrase cracking search space. &lt;br /&gt;
Without salting, an attacker can attempt to crack all passphrases simultaneously in a global search space, increasing the expected ROI for his efforts. &lt;br /&gt;
&lt;br /&gt;
For example, some Brainwallet programs use e-mail based salting to thwart global dictionary attacks. an attacker can still attempt to crack a passphrase, but he has to calculate a different key for each potential e-mail in his list. An attacker can not know for certain than any particular e-mail has been used as a salt.&lt;br /&gt;
&lt;br /&gt;
== Standards for offline passphrases ==&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
== Standards for online passphrases ==&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but your wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run).&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62149</id>
		<title>Passphrase generation</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Passphrase_generation&amp;diff=62149"/>
		<updated>2017-01-23T08:25:45Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Strength */ update brainwallet advice to state of the art&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In various places in Bitcoin, it is important to generate secure passwords/passphrases. Security is especially important in Bitcoin because if your BTC is stolen, there is often no recourse. Bitcoin transactions cannot be reversed.&lt;br /&gt;
&lt;br /&gt;
==Strength==&lt;br /&gt;
&lt;br /&gt;
There are two very different use-cases for passwords in Bitcoin. The first and more common is an &amp;quot;offline passphrase&amp;quot;. With an offline passphrase, something prevents an attacker from trying to guess your passphrase as fast as he might like. Examples include:&lt;br /&gt;
&lt;br /&gt;
* Website passwords. The website will rate-limit attempts on your password.&lt;br /&gt;
* Wallet passphrases. An attacker needs both the wallet file and your wallet passphrase.&lt;br /&gt;
* Hardware wallet PIN. An attacker needs both the hardware wallet and your PIN.&lt;br /&gt;
&lt;br /&gt;
All of the advice you&#039;ve ever heard about password security has been for the offline password use-case.&lt;br /&gt;
&lt;br /&gt;
The second use-case is an &amp;quot;online passphrase&amp;quot;, where the passphrase is essentially the &#039;&#039;only&#039;&#039; thing protecting your BTC. In this case, your passphrase much be &#039;&#039;massively&#039;&#039; more secure than usual, and you &#039;&#039;&#039;can not&#039;&#039;&#039; rely on any password-creation advice you&#039;ve ever heard. Essentially, the entire world will be constantly trying to attack your passphrase at full force and with no restriction. This is not a normal situation outside of Bitcoin. &lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* The seed/mnemonic of an HD wallet.&lt;br /&gt;
* The passphrase on a wallet file that may become public, or that an attacker has otherwise gained access to.&lt;br /&gt;
* The input to a secure &amp;quot;brain wallet&amp;quot; with e-mail salting, and an expensive key derivation function (e.g., scrypt).&lt;br /&gt;
&lt;br /&gt;
=== Standards for offline passphrases ===&lt;br /&gt;
&lt;br /&gt;
Between 64 and 80 bits of entropy seems reasonable. The password must be totally random (see later sections on generation). Hardware wallets have additional protections, and it&#039;s OK that they often allow only a short PIN.&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 20-25 digits&lt;br /&gt;
* Hexadecimal: 16-20 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 14-18 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 13-16 characters&lt;br /&gt;
* Mixed case letters: 12-15 characters&lt;br /&gt;
* Mixed case letters + numbers: 11-14 characters&lt;br /&gt;
* All standard keyboard characters: 9-11 characters&lt;br /&gt;
* Diceware words: 5-7 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 4-5 words&lt;br /&gt;
&lt;br /&gt;
=== Standards for online passphrases ===&lt;br /&gt;
&lt;br /&gt;
Usually you don&#039;t have to personally generate an online passphrase. The most common case of an online passphrase in Bitcoin is the mnemonic for an HD wallet seed, but your wallet should securely generate it for you (this is the several-word mnemonic that most wallets tell you to write down when first run).&lt;br /&gt;
&lt;br /&gt;
In case you need to manually generate an online passphrase, 128 bits of entropy is required. The passphrase must be totally random (see later sections on generation).&lt;br /&gt;
&lt;br /&gt;
This corresponds to the following password/passphrase lengths:&lt;br /&gt;
&lt;br /&gt;
* Digits only: 39 digits&lt;br /&gt;
* Hexadecimal: 32 characters&lt;br /&gt;
* All lowercase or all uppercase letters: 28 characters&lt;br /&gt;
* All lowercase or all uppercase letters + numbers: 25 characters&lt;br /&gt;
* Mixed case letters: 23 characters&lt;br /&gt;
* Mixed case letters + numbers: 22 characters&lt;br /&gt;
* All standard keyboard characters: 20 characters&lt;br /&gt;
* Diceware words: 10 words&lt;br /&gt;
* Random English words (100,000-word wordlist): 8 words&lt;br /&gt;
&lt;br /&gt;
==How not to generate passphrases==&lt;br /&gt;
&lt;br /&gt;
Humans are &#039;&#039;really, really&#039;&#039; bad at generating passphrases on their own. Don&#039;t try it. If at any step in the passphrase-generation process your brain is being used to choose something at random or randomize something, then you&#039;re doing it wrong.&lt;br /&gt;
&lt;br /&gt;
Do not take words out of a book or other work. The words must be absolutely random.&lt;br /&gt;
&lt;br /&gt;
Do not use the xkcd password generation method.&lt;br /&gt;
&lt;br /&gt;
==Using dice==&lt;br /&gt;
Dice can be used as one way to generate random numbers and passwords. However, in order to achieve security, you must use them in a certain way.&lt;br /&gt;
&lt;br /&gt;
===Secure dice===&lt;br /&gt;
&lt;br /&gt;
Casual dice for board games are not shaped perfectly, and will be somewhat biased toward certain numbers. Special casino dice are available which do not have this flaw.&lt;br /&gt;
&lt;br /&gt;
The extent to which slightly-biased dice actually affect real-world security depends on the use-case. For the use-cases on this page, if the dice is random enough to not notice its bias when playing games, then it is &#039;&#039;probably&#039;&#039; good enough.&lt;br /&gt;
&lt;br /&gt;
===Generating passwords===&lt;br /&gt;
&lt;br /&gt;
To generate passwords, write down a list of acceptable characters, and sequentially number each character starting from 1. For example, if you want to generate a 4-digit PIN, you would create a list like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1 0&lt;br /&gt;
2 1&lt;br /&gt;
...&lt;br /&gt;
10 9&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you wanted to generate a password with characters in [a-zA-Z], you would create a list like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 a&lt;br /&gt;
2 b&lt;br /&gt;
...&lt;br /&gt;
52 Z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you need to figure out how many dice you&#039;re going to need to roll. Your dice should all have the same number of sides. If your character list has C characters, and each of your dice have S sides, then you need to roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(C) dice, rounded up. For example, log&amp;lt;sub&amp;gt;6&amp;lt;/sub&amp;gt;(52) is about 2.2, which you round up to 3. So if your character list contains 52 characters, then you need to roll 3 6-sided dice.&lt;br /&gt;
&lt;br /&gt;
Here, the dice are assumed to be numbered from 1 to S. If this is not the case, then you must create a system to translate the dice results into a range from 1 to S. For example, if you are dealing with 10-sided dice labeled from 0 to 9, then you can add 1 to the roll.&lt;br /&gt;
&lt;br /&gt;
Roll the required number of dice and put them in a random order. Do not sort the dice from highest to lowest or anything like that. In fact, to prevent any personal bias from entering into the ordering, you may want to roll the dice and then put the dice into a line with your eyes closed.&lt;br /&gt;
&lt;br /&gt;
Say that d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; is the rightmost dice you rolled, d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; is the second-from-rightmost dice you rolled, etc. Then the random number is:&lt;br /&gt;
&lt;br /&gt;
1 + [(d&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(d&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; - 1) × S&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;] + ...&lt;br /&gt;
&lt;br /&gt;
For example, if we rolled 316 with 6-sided dice, this becomes:&lt;br /&gt;
&lt;br /&gt;
1 + [(6 - 1) × 6&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;] + [(1 - 1) × 6&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;] + [(3 - 1) × 6&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + [5 × 1] + [0 × 6] + [2 × 36]&amp;lt;br&amp;gt;&lt;br /&gt;
= 1 + 5 + 0 + 72&amp;lt;br&amp;gt;&lt;br /&gt;
= 78&lt;br /&gt;
&lt;br /&gt;
So our random character would be the 78&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; character in the list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If your number is larger than you need, then you must totally reroll for this character. Do not try to &amp;quot;wrap the numbers around&amp;quot; or keep only certain dice, as this results in a non-random distribution. (For the adventurous only: You can safely reduce the number of rerolls by pretending that the highest-order die has fewer sides. Eg. on a 6-sided die say that 1&amp;amp;4 = 1, 2&amp;amp;5 = 2, 3&amp;amp;6 = 3; or that 1&amp;amp;2&amp;amp;3 = 1 and 4&amp;amp;5&amp;amp;6 = 2. Still multiply it by the appropriate power of 6, not 3 or 2. But the die must be evenly divided, you must ensure that the maximum possible value is still greater than or equal to the highest-value character, and you must use the exact same treatment of the high-order die throughout the generation process.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: There are a variety of different ways to get a random number from multiple dice, but they are usually non-random. For example, &#039;&#039;adding&#039;&#039; dice would be very non-random. The above method ensures a random distribution if the dice themselves are random and if they are ordered randomly.&lt;br /&gt;
&lt;br /&gt;
If the password is L characters long, then password has log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(C&amp;lt;sup&amp;gt;L&amp;lt;/sup&amp;gt;) bits of entropy.&lt;br /&gt;
&lt;br /&gt;
===Generating passphrases===&lt;br /&gt;
&lt;br /&gt;
As above, but use a list of words instead of a list of characters.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Generating keys, seeds, and random numbers (Advanced)===&lt;br /&gt;
&lt;br /&gt;
This section is mainly intended for programmers and advanced users.&lt;br /&gt;
&lt;br /&gt;
Warning: it is considered unsafe to directly handle Bitcoin keys, as doing so is error-prone, and often causes people to send BTC into oblivion.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a large number for use as a key or seed, you can do the following.&lt;br /&gt;
&lt;br /&gt;
First, decide how many bits of security you want. 128 bits is probably secure for most things. We will call this value B.&lt;br /&gt;
&lt;br /&gt;
Next, roll log&amp;lt;sub&amp;gt;S&amp;lt;/sub&amp;gt;(2&amp;lt;sup&amp;gt;B&amp;lt;/sup&amp;gt;) dice, rounded up, where S is the number of sides per die. For example, with 6-sided dice you would need to roll 50 dice. Put the results right next to each other in a string of text, so for example if you roll 3, 2, 5, 6, 1, you&#039;d start your string as &amp;quot;32561&amp;quot;, and then continue on for a total of 50 digits. If your dice have enough sides to result in two-digit numbers, put a leading zero in front of single-digit numbers.&lt;br /&gt;
&lt;br /&gt;
Then hash your string with a command like &amp;lt;tt&amp;gt;echo &amp;quot;32561...&amp;quot; |sha256sum&amp;lt;/tt&amp;gt;. The resulting hash is your random number. If you want a 128-bit or 512-bit number use sha128sum or sha512sum, respectively. If you want some in-between number of bits, use the next larger hash size and then cut off the number where you need it.&lt;br /&gt;
&lt;br /&gt;
You can generate any size of random number by combining the outputs. For example, let&#039;s say that you want 768 bits of randomness and for some reason you can only use sha256sum. You can do this like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ echo &amp;quot;32561...&amp;quot; |sha256sum&lt;br /&gt;
cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed5 -&lt;br /&gt;
$ echo &amp;quot;Last hash: cf6a25b9ef81af3d2b1d6f62a9780637f5e27720cafb07bb0515228ada325ed Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c -&lt;br /&gt;
$ echo &amp;quot;Last hash: 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c Orig entropy: 532561...&amp;quot; |sha256sum&lt;br /&gt;
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then concatenate all of those hashes to get your final random number. In this example the result is &amp;lt;tt&amp;gt;cf6a25b...52b855&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: When generating a stream of random numbers like this, you have to put your source entropy back in at each step.&lt;br /&gt;
&lt;br /&gt;
If you want to generate a number in a range with a range size that is not a power of two, choose the next-largest power of two and select the correct number of bits based on that. If the resulting number is too large, &#039;&#039;&#039;discard&#039;&#039;&#039; all of those bits and grab new ones from the endless stream of random bits. Do not use the modulo operator, as that introduces a bias. For example, if you want to generate a number from 0 to 9 (range size = 10), select the next-higher power of 2, 16. If your random stream starts 0xA52F..., grab 4 bits (log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(16) = 4), giving 0xA = 10. This is outside of the range, so discard those bits and move onto the next 4 bits, 0x5 = 5. This is in the range, so the final result is 5.&lt;br /&gt;
&lt;br /&gt;
==Using a computer==&lt;br /&gt;
&lt;br /&gt;
Computers are good at generating secure random numbers, but you have to be careful to use the right commands. A lot of commands, programming language features, and snippets that you&#039;ll find online will give &#039;&#039;insecure&#039;&#039; random numbers which look random, but are predictable. For example, the C &amp;lt;tt&amp;gt;rand&amp;lt;/tt&amp;gt; function, the Python &amp;lt;tt&amp;gt;random&amp;lt;/tt&amp;gt; module, and the Windows &amp;lt;tt&amp;gt;%RANDOM%&amp;lt;/tt&amp;gt; variable are all insecure random number sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;Do not get your passwords from anything in a Web browser, even if the page says that it&#039;s using purely client-side JavaScript&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
There are many different packages for generating random passwords/passphrases on Linux, but none of them are installed by default on all Linux machines, so we will provide a method that uses more standard commands. If you would like a more concise and easy-to-use command, we recommend installing an actual password generator package.&lt;br /&gt;
&lt;br /&gt;
The following command will generate a 20-character random password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;seq 126 |awk &#039;{printf &amp;quot;%c&amp;quot;, $0}&#039; |grep -o &#039;[a-zA-Z0-9]\|[[:punct:]]&#039; | \&lt;br /&gt;
shuf --random-source=/dev/urandom --repeat --head-count=20 | tr --delete &#039;\n&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=20&amp;lt;/tt&amp;gt; to change the password length, and &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;[a-zA-Z0-9]\|[[:punct:]]&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; to change the character set. Note that this command will never use characters outside of ASCII, even if your grep pattern would select such characters.&lt;br /&gt;
&lt;br /&gt;
To generate a passphrase made of words, create a file called &amp;lt;tt&amp;gt;words&amp;lt;/tt&amp;gt; with one word per line and Unix-style line endings, and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;shuf --random-source=/dev/urandom --repeat --head-count=7 words | tr &#039;\n&#039; &#039; &#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;tt&amp;gt;-head-count=7&amp;lt;/tt&amp;gt; to change the number of words.&lt;br /&gt;
&lt;br /&gt;
Note that there is a risk when acquiring your wordlist of an attacker giving you a wordlist that has duplicated or highly similar words. For example, the wordlist might look like it contains 1 million words, but actually be the same 1000 words repeated over and over again. Or all of the words might have an &amp;quot;o&amp;quot; in the fourth position. Etc. This can cause you to significantly overestimate the security of your passphrase. Therefore, you must acquire your wordlist from a trusted source.&lt;br /&gt;
&lt;br /&gt;
===Windows===&lt;br /&gt;
&lt;br /&gt;
[http://keepass.info/ KeePass] includes a password generator, though not a word-based passphrase generator.&lt;br /&gt;
&lt;br /&gt;
(If anyone knows of some better ones, edit this page to add it.)&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62148</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62148"/>
		<updated>2017-01-22T21:22:45Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security risks */ internal links to cold storage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it&#039;s important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail to protect your Bitcoin:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Malware swaps recipient Bitcoin addresses&#039;&#039;&#039;: a hardware wallet won&#039;t protect you from being tricked into sending Bitcoin to the wrong address. For example, malware on a PC could monitor for high value transactions and then swap out the recipient&#039;s authentic Bitcoin address for an address controlled by the attacker. When the stakes are high, multi factor (e.g., over the phone) confirmation of a recipient&#039;s Bitcoin address is recommended.&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* [[Cold storage]] solutions implemented with open source software and general purpose hardware (e.g., [[BitKey]], Pi Wallet), using a verifiable source of entropy such as physical dice may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62147</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62147"/>
		<updated>2017-01-22T18:20:57Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security risks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it&#039;s important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail to protect your Bitcoin:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Malware swaps recipient Bitcoin addresses&#039;&#039;&#039;: a hardware wallet won&#039;t protect you from being tricked into sending Bitcoin to the wrong address. For example, malware on a PC could monitor for high value transactions and then swap out the recipient&#039;s authentic Bitcoin address for an address controlled by the attacker. When the stakes are high, multi factor (e.g., over the phone) confirmation of a recipient&#039;s Bitcoin address is recommended.&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62146</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62146"/>
		<updated>2017-01-22T17:47:59Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security risks */ added malware swapping addresses risk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it&#039;s important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail to protect your Bitcoin:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Malware swaps recipient Bitcoin addresses&#039;&#039;&#039;: a hardware wallet won&#039;t protect you from being tricked into sending Bitcoin to the wrong address. For example, malware on a PC could monitor for high value transactions and then swap out the recipient&#039;s authentic Bitcoin address for an address controller by the attacker. When the stakes are high, multi factor (e.g., over the phone) confirmation of a recipient&#039;s Bitcoin address is recommended.&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62145</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62145"/>
		<updated>2017-01-22T17:38:50Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security risks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62144</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62144"/>
		<updated>2017-01-22T16:35:48Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Related Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62143</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62143"/>
		<updated>2017-01-22T16:35:21Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Related Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62142</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62142"/>
		<updated>2017-01-22T16:34:05Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Related Resources */ removed broken link 404&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion: &lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements: &lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62141</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62141"/>
		<updated>2017-01-22T16:32:14Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Related Resources */ cleaned up links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]: slush&#039;s Hardware wallet wire protocol discussion: &lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]: kjj&#039;s Todo List discussion for client protocol requirements: &lt;br /&gt;
* [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Bitcoin Hardware Wallet Comparison] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]: Various Hardware Wallets and Reviews &lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62140</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62140"/>
		<updated>2017-01-22T16:29:00Z</updated>

		<summary type="html">&lt;p&gt;Liraz: changed section titles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security risks ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Commercial hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* slush&#039;s Hardware wallet wire protocol discussion: [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]&lt;br /&gt;
* kjj&#039;s Todo List discussion for client protocol requirements: [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]&lt;br /&gt;
* paybitcoin&#039;s original post: [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Buy Bitcoin Worldwide] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* Various Hardware Wallets and Reviews: [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62139</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62139"/>
		<updated>2017-01-22T16:28:00Z</updated>

		<summary type="html">&lt;p&gt;Liraz: see also section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security considerations ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Purchasable hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* slush&#039;s Hardware wallet wire protocol discussion: [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]&lt;br /&gt;
* kjj&#039;s Todo List discussion for client protocol requirements: [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]&lt;br /&gt;
* paybitcoin&#039;s original post: [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Buy Bitcoin Worldwide] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* Various Hardware Wallets and Reviews: [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62138</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62138"/>
		<updated>2017-01-22T16:25:03Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security considerations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security considerations ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Purchasable hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* slush&#039;s Hardware wallet wire protocol discussion: [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]&lt;br /&gt;
* kjj&#039;s Todo List discussion for client protocol requirements: [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]&lt;br /&gt;
* paybitcoin&#039;s original post: [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Buy Bitcoin Worldwide] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* Various Hardware Wallets and Reviews: [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62137</id>
		<title>BitKey</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62137"/>
		<updated>2017-01-22T16:22:56Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Live CD/USB distro designed to be a self-contained Bitcoin Swiss Army Knife that supports air-gapped Bitcoin transactions and makes offline cold storage (slightly more) practical. Developed by [https://www.turnkeylinux.org TurnKey GNU/Linux]. First released in 2014.&lt;br /&gt;
&lt;br /&gt;
It supports verifiably secure Bitcoin wallet creation and transaction workflows that provide defense in depth while minimizing third party trust. Development is guided by the philosophy that you shouldn&#039;t have to trust anyone, including BitKey authors and even BitKey itself.&lt;br /&gt;
&lt;br /&gt;
Latest version bundles [[Electrum]] Bitcoin client, Warpwallet [[Brainwallet]], coinbin, incognito chromium, bitaddress, qrcode, zxcvbn and bx (libbitcoin-explorer).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Brainwallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://bitkey.io/ https://bitkey.io]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Live_USB Live USB]&lt;br /&gt;
* [http://nakamotoinstitute.org/trusted-third-parties/ Trusted third parties are a security hole]&lt;br /&gt;
* [https://www.turnkeylinux.org/blog/secure-bitcoin-transactions Closest you can get to perfectly secure Bitcoin transactions]&lt;br /&gt;
* [http://linuxbsdos.com/2014/07/20/bitkey-a-secure-debian-based-live-os-for-bitcoin-transactions/ BitKey review on LinuxBSDOS]&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62136</id>
		<title>BitKey</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62136"/>
		<updated>2017-01-22T16:22:35Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Live CD/USB distro designed to be a self-contained Bitcoin Swiss Army Knife that supports air-gapped Bitcoin transactions and makes offline cold storage (slightly more) practical. Developed by [https://www.turnkeylinux.org TurnKey GNU/Linux]. First released in 2014.&lt;br /&gt;
&lt;br /&gt;
It supports verifiably secure Bitcoin wallet creation and transaction workflows that provide defense in depth while minimizing third party trust. Development is guided by the philosophy that you shouldn&#039;t have to trust anyone, including BitKey authors and even BitKey itself.&lt;br /&gt;
&lt;br /&gt;
Latest version bundles [[Electrum]] Bitcoin client, Warpwallet [[Brainwallet]], coinbin, incognito chromium, bitaddress, qrcode, zxcvbn and bx (libbitcoin-explorer).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Brainwallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://bitkey.io/ https://bitkey.io]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Live_USB Live USB]&lt;br /&gt;
* [http://nakamotoinstitute.org/trusted-third-parties/ Trusted third parties are a security hole]&lt;br /&gt;
* [http://linuxbsdos.com/2014/07/20/bitkey-a-secure-debian-based-live-os-for-bitcoin-transactions/ BitKey review on LinuxBSDOS]&lt;br /&gt;
* [https://www.turnkeylinux.org/blog/secure-bitcoin-transactions Closest you can get to perfectly secure Bitcoin transactions]&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62135</id>
		<title>BitKey</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62135"/>
		<updated>2017-01-22T16:21:36Z</updated>

		<summary type="html">&lt;p&gt;Liraz: expanded description, bundled components, and security philosophy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Live CD/USB distro designed to be a self-contained Bitcoin Swiss Army Knife that supports air-gapped Bitcoin transactions and makes offline cold storage (slightly more) practical. Developed by [https://www.turnkeylinux.org TurnKey GNU/Linux]. First released in 2014.&lt;br /&gt;
&lt;br /&gt;
It supports verifiably secure Bitcoin wallet creation and transaction workflows that provide defense in depth while minimizing third party trust. Development is guided by the philosophy that you shouldn&#039;t have to trust anyone, including BitKey authors and even BitKey itself.&lt;br /&gt;
&lt;br /&gt;
Latest version bundles [[Electrum]] Bitcoin client, Warpwallet [[Brainwallet]], coinbin, incognito chromium, bitaddress, qrcode, zxcvbn and bx (libbitcoin-explorer).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Brainwallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://bitkey.io/ https://bitkey.io]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Live_USB Live USB]&lt;br /&gt;
* [http://nakamotoinstitute.org/trusted-third-parties/ Trusted third parties are a security hole]&lt;br /&gt;
* [http://linuxbsdos.com/2014/07/20/bitkey-a-secure-debian-based-live-os-for-bitcoin-transactions/ BitKey review]&lt;br /&gt;
* [https://www.turnkeylinux.org/blog/secure-bitcoin-transactions Closest you can get to perfectly secure Bitcoin transactions]&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62134</id>
		<title>BitKey</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=BitKey&amp;diff=62134"/>
		<updated>2017-01-22T16:02:54Z</updated>

		<summary type="html">&lt;p&gt;Liraz: added categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Live CD/USB distro designed to be a self-contained Bitcoin Swiss Army Knife that supports air-gapped Bitcoin transactions and makes offline cold storage (slightly more) practical. Developed by [https://www.turnkeylinux.org TurnKey GNU/Linux]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Brainwallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://bitkey.io/ https://bitkey.io]&lt;br /&gt;
* [http://linuxbsdos.com/2014/07/20/bitkey-a-secure-debian-based-live-os-for-bitcoin-transactions/ BitKey review]&lt;br /&gt;
* [https://www.turnkeylinux.org/blog/secure-bitcoin-transactions Closest you can get to perfectly secure Bitcoin transactions]&lt;br /&gt;
* [http://maxtaco.github.io/bitcoin/2014/01/16/how-jason-bourne-stores-his-bitcoin/ How Jason Bourne stores his Bitcoin]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62133</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62133"/>
		<updated>2017-01-22T15:54:40Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security considerations */ summarize advantages of hardware wallets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security considerations ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record, unlike the numerous incidents of Bitcoin theft from Internet-connected computers.&lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet, and which hardware wallet to buy.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
In summary:&lt;br /&gt;
&lt;br /&gt;
* While not a silver bullet hardware wallets can still be extremely useful, assuming you take care to use a good one: an authentic device manufactured by trustworthy, technically competent security experts with a good reputation (e.g., [[TREZOR]]).&lt;br /&gt;
&lt;br /&gt;
* Cold storage solutions implemented with open source software and general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases (e.g., long term savings).&lt;br /&gt;
&lt;br /&gt;
== Purchasable hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* slush&#039;s Hardware wallet wire protocol discussion: [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]&lt;br /&gt;
* kjj&#039;s Todo List discussion for client protocol requirements: [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]&lt;br /&gt;
* paybitcoin&#039;s original post: [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Buy Bitcoin Worldwide] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* Various Hardware Wallets and Reviews: [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62132</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62132"/>
		<updated>2017-01-22T15:38:45Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* Security considerations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security considerations ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record. &lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of the RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
Cold storage solutions implemented with general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases such as a long term savings account.&lt;br /&gt;
&lt;br /&gt;
== Purchasable hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* slush&#039;s Hardware wallet wire protocol discussion: [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]&lt;br /&gt;
* kjj&#039;s Todo List discussion for client protocol requirements: [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]&lt;br /&gt;
* paybitcoin&#039;s original post: [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Buy Bitcoin Worldwide] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* Various Hardware Wallets and Reviews: [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62131</id>
		<title>Hardware wallet</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Hardware_wallet&amp;diff=62131"/>
		<updated>2017-01-22T15:38:09Z</updated>

		<summary type="html">&lt;p&gt;Liraz: added security considerations section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;hardware wallet&#039;&#039;&#039; is a special type of [[wallet|bitcoin wallet]] which stores the user&#039;s private keys in a secure hardware device.&lt;br /&gt;
&lt;br /&gt;
They have major advantages over standard software wallets:&lt;br /&gt;
&lt;br /&gt;
* private keys are often stored in a protected area of a microcontroller, and cannot be transferred out of the device in plaintext&lt;br /&gt;
* immune to computer viruses that steal from software wallets&lt;br /&gt;
* can be used securely and interactively, as opposed to a [[paper wallet]] which must be imported to software at some point&lt;br /&gt;
* much of the time, the software is open source, allowing a user to validate the entire operation of the device&lt;br /&gt;
&lt;br /&gt;
This page is an attempt to summarize all the known developments of hardware wallets that can use Bitcoin as part of their operation.&lt;br /&gt;
&lt;br /&gt;
== Security considerations ==&lt;br /&gt;
&lt;br /&gt;
To date there have been no verifiable incidents of Bitcoins stolen from hardware wallets. Hardware wallets are relatively new, but at least for the time being they have maintained a good track record. &lt;br /&gt;
&lt;br /&gt;
However, it important to understand that hardware wallets are a high value target and depend on various assumptions holding true to maintain security. They are not a silver bullet, and there are several realistic ways in which a hardware wallet can fail to protect your Bitcoin. These risks need to be carefully considered when deciding how much trust to place in a hardware wallet.&lt;br /&gt;
&lt;br /&gt;
How a hardware wallet could fail:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Insecure RNG ([https://en.wikipedia.org/wiki/Random_number_generation Random Number Generator])&#039;&#039;&#039;: hardware wallets rely on the security of an RNG, often embedded in hardware, to generate your wallet&#039;s private keys securely. Unfortunately, it is notoriously difficult to verify the true randomness of an RNG. An insecure RNG may create wallet keys that can later be recreated by an attacker, by generating psuedo-randomness that would seem statistically indistinguishable from true randomness yet still be predictable to an advanced attacker. An RNG may become insecure as a result of malicious weakening or an unintentional mistake. This failure mode is common to any wallet generation procedure in which the true randomness of the source of entropy being used can not be verified.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Imperfect implementation&#039;&#039;&#039;: the security of all computing devices relies on the quality of their implementation. Hardware wallets are no exception. Bugs at the software, firmware or hardware level may allow attackers to break into a hardware wallet and gain unauthorized access to secrets. Even if the design is perfect, proving the security of a hardware or software implementation is a very hard, mostly unsolved problem. To date, no wallet in existence is implemented using provably correct software.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised production process&#039;&#039;&#039;: even a perfect software and hardware implementation of a hardware wallet would be vulnerable to a corrupt production process that introduces intentional or unintentional holes into the final product. The introduction of hardware backdoors is a [https://www.wired.com/2016/06/demonically-clever-backdoor-hides-inside-computer-chip/ real concern] for high risk financial and military applications.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Compromised shipping process&#039;&#039;&#039;: a compromised fulfillment process may substitute or modify secure devices for superficially identical but insecure replacements. Government programs that intercept hardware and modify them in route to insert backdoors [https://arstechnica.com/.../photos-of-an-nsa-upgrade-factory-show-cisco-router-getting-implant/ are known to exist].&lt;br /&gt;
&lt;br /&gt;
Cold storage solutions implemented with general purpose hardware, using a verifiable source of entropy (e.g., physical dice) may provide superior security for some use cases such as a long term savings account.&lt;br /&gt;
&lt;br /&gt;
== Purchasable hardware wallets (ordered chronologically) ==&lt;br /&gt;
&lt;br /&gt;
=== Pi Wallet - cold storage ===&lt;br /&gt;
[[File:Piwallet.jpeg|300px|thumb|left|Pi-Wallet]]&lt;br /&gt;
&lt;br /&gt;
The Pi-Wallet is a small computer with the [[Armory]] bitcoin client.&lt;br /&gt;
&lt;br /&gt;
Transactions are signed offline, then transferred on a USB stick via [https://en.wikipedia.org/wiki/Sneakernet Sneakernet] to an online system for broadcasting.&lt;br /&gt;
&lt;br /&gt;
[https://www.pi-wallet.com/ pi-wallet.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[TREZOR]] The Bitcoin Safe ===&lt;br /&gt;
[[File:Trezor-tx.jpg|300px|thumb|left|Confirming the transaction with TREZOR]]&lt;br /&gt;
&lt;br /&gt;
[[TREZOR]] is a secure bitcoin storage and a transaction signing tool. The private keys are generated by the device and never leave it thus they cannot be accessed by a malware.&lt;br /&gt;
&lt;br /&gt;
It uses a deterministic wallet structure which means it can hold an unlimited number of keys ([[BIP 0032]]/[[BIP 0044]]). A recovery seed is generated when the device is initialized. In case TREZOR gets lost or stolen, all its contents can be recovered using this seed (private keys, bitcoin balance and transaction history) into a new device or another [[BIP 0039]]/[[BIP 0044]] compatible wallet. &lt;br /&gt;
&lt;br /&gt;
TREZOR also introduced a unique way of PIN entering preventing keyloggers from recording it even when entered on a compromised computer. An encryption passphrase can be set on top of the PIN protection. More passphrases can be used for plausible deniability.&lt;br /&gt;
&lt;br /&gt;
[https://BuyTrezor.com E-shop BuyTrezor.com] | [https://doc.satoshilabs.com/ TREZOR Documentation] | [https://bitcointrezor.com BitcoinTrezor.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger HW.1 - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:Btchip_dongle.jpg|220px|thumb|left|HW.1 inserted in a laptop]]&lt;br /&gt;
&lt;br /&gt;
HW.1 is an implementation of a deterministic ([[BIP 0032]]) Hardware Wallet on a USB smartcard.&lt;br /&gt;
&lt;br /&gt;
It is typically used as a blind secure device for multi signature transactions - holding a set of derived private keys and signing transactions without requiring user confirmation.&lt;br /&gt;
&lt;br /&gt;
Power users can rely on it to confirm all transactions with a second factor scheme turning the dongle into a keyboard typing what the user is supposed to have signed, as a protection against malware.&lt;br /&gt;
&lt;br /&gt;
It is also possible to customize HW.1 for more specific needs, such as creating a prepaid card without revealing the deterministic seed before it is received by the user, or securing bitcoin transactions on a server.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/3-ledger-hw-1 E-shop] | [https://ledgerhq.github.io/btchip-doc/bitcoin-technical.html Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_photo.jpg|300px|thumb|left|Ledger Wallet USB]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano protects your Bitcoin data within a smartcard. Its micro-processor certified against all types of attacks (both physical and logical), and has been used in the banking industry for decades (think credit card chips). The device connects to your computer through the USB port and will do all the Bitcoin cryptographic heavy lifting such as signing transactions inside its secure environment. You can therefore use your Bitcoin account with maximum trust, even on an insecure or compromised computer.&lt;br /&gt;
&lt;br /&gt;
The second factor verification of the transaction signature can be done either with a paired smartphone (Android, iOS) or a physical security card.&lt;br /&gt;
&lt;br /&gt;
The Ledger Wallet Chrome application (available also on Chromium) provides an easy onboarding as well as a seamless user experience, and the Nano is compatible with numerous third party software: [[Electrum]], [[Mycelium]], [[GreenAddress]], Greenbits, [[Coinkite]] and Copay.&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/1-ledger-nano Ledger Nano product page] | [https://github.com/LedgerHQ Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Unplugged - NFC Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_unplugged_photo.jpg|300px|thumb|left|Ledger Unplugged NFC]]&lt;br /&gt;
&lt;br /&gt;
The Ledger Unplugged is a credit card sized NFC hardware wallet. It embeds an open source Java Card app and is compatible with all NFC enabled Android phones.&lt;br /&gt;
&lt;br /&gt;
The device can be used with Mycelium or Greenbits. In case of loss, you can restore it on any Ledger Wallet (Nano or another one) or all other compatible solutions (BIP 39).&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/6-ledger-unplugged Ledger Unplugged product page] | [https://github.com/LedgerHQ/ledger-javacard Source code]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BWALLET TREZOR clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:BWALLET_Trezor_Clone.jpeg|200px|thumb|left|Chinese clone of Trezor]]&lt;br /&gt;
&lt;br /&gt;
BWALLET is a clone of Trezor by a Chinese company.&lt;br /&gt;
Trezor code is open source and this device operates like a Trezor.&lt;br /&gt;
However, this product has been [https://www.reddit.com/r/Bitcoin/comments/2tyier/bwallet_review_by_trezor_developer/ reviewed by Merek aka Slush(Trezor developer)] and he has found some problems which makes this device less than 100% compatible, for example it doesn&#039;t work with [http://mytrezor.com myTREZOR.com] website and it does not work with Trezor official firmware. &lt;br /&gt;
&lt;br /&gt;
[http://mybwallet.com MyBWALLET.com] | [http://www.bidingxing.com/en/bwallet Buy BWALLET]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KeepKey: Your Private Bitcoin Vault ===&lt;br /&gt;
[[File:keepkey.jpg|300px|thumb|left|KeepKey showing a bitcoin transaction that needs to be manually approved.]]&lt;br /&gt;
&lt;br /&gt;
KeepKey is a USB device that stores and secures your bitcoins. When you entrust KeepKey with your money, each and every bitcoin transaction you make must be reviewed and approved via it&#039;s OLED display and confirmation button.&lt;br /&gt;
&lt;br /&gt;
KeepKey has a unique recovery feature utilizing a rotating cipher to restore private keys with a [[BIP 0039]] recovery seed.  This means it is not necessary to store your private keys on KeepKey: the recovery process is secure enough so that KeepKey can be used as a transaction device for paper wallets. &lt;br /&gt;
&lt;br /&gt;
[https://www.keepkey.com keepkey.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opendime: Bitcoin Credit Stick ===&lt;br /&gt;
&lt;br /&gt;
[[file:Opendime.jpeg|400px|thumb|left|Opendime Package]]&lt;br /&gt;
&lt;br /&gt;
The 1st Bitcoin Bearer Bond or just call it a &amp;quot;Bitcoin Stick&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Opendime is a small USB stick that allows you to spend Bitcoin like a dollar bill. Pass it along multiple times. &lt;br /&gt;
Connect to any USB to check balance. Unseal anytime to spend online. Trust no one.&lt;br /&gt;
&lt;br /&gt;
It comes in the shape of a mini USB, and [[Opendime-ui.png|setting it up is astonishingly quick and simple]]. You plug OpenDime into a USB port, and it behaves just like a USB drive with a tiny amount of storage. In its folder, is a web page. You open the webpage in your browser, and there’s only one instruction to follow: “Drop a file onto the drive”. Once you do that, the OpenDime automagically generates a unique address for you to receive Bitcoin with.&lt;br /&gt;
&lt;br /&gt;
[http://www.opendime.com Opendime.com]&lt;br /&gt;
&lt;br /&gt;
* [https://opendime.com/#faq Opendime FAQ]&lt;br /&gt;
* You can watch a [https://www.youtube.com/watch?v=9UFF9d3Y1BY video here]&lt;br /&gt;
* Read this [https://medium.com/@beautyon_/exquisite-opendime-ad1195a2790e review]&lt;br /&gt;
* Multi-language user interface: 中文 • 日本語 • English • Portuguese • Français • Deutsch • Русский&lt;br /&gt;
* Works as USB drive with no need for software&lt;br /&gt;
* [https://github.com/opendime/electrum Opendime Electrum plugin]&lt;br /&gt;
* [https://github.com/opendime/ Opendime source files and key verification]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CoolWallet: The Ultimate Bitcoin Safe ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Consider removing this device until actually for sale? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:CoolWallet in the box.jpeg|300px|thumb|left|CoolWallet showing Launch App, waiting for user to connect with smartphone via Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
CoolWallet is a credit card sized Bluetooth device that stores and secures your bitcoins and private keys. It fits in your wallet and works wirelessly.&lt;br /&gt;
&lt;br /&gt;
Every Bitcoin transaction must be manually confirmed and approved through its e-paper display and button. &lt;br /&gt;
&lt;br /&gt;
CoolWallet only acknowledges the paired smartphone. Whoever stole the CoolWallet are not able to steal any bitcoins. Using recovery Seed can restore all your bitcoins in case you lost the device. &lt;br /&gt;
&lt;br /&gt;
[https://coolbitx.com coolbitx.com] | [https://github.com/CoolBitX-Technology/coolwallet-ios Source and specifications]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BlochsTech card: Your user friendly Bitcoin wallet ===&lt;br /&gt;
&amp;lt;!-- 2016-04-09: Possible vaporware / scam?  Website insecure &amp;amp; badly designed with no substantial info.  Consider finding technical docs, real reviews or removing this device. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[file:BlochsTech Bitcoin card hardware wallet.jpg|300px|thumb|left|Graphic printed on front of BlochsTech cards.]]&lt;br /&gt;
&lt;br /&gt;
The BlochsTech open Bitcoin card is an open protocol secure hardware Bitcoin wallet your grandmother could use.&lt;br /&gt;
For shops it&#039;s faster to accept than slow QR code based wallets and more reliable as it works offline.&lt;br /&gt;
&lt;br /&gt;
Currently it&#039;s of course in a novelty phase like Casascius coins (of which thousands were sold),&lt;br /&gt;
however in the long run it is fully capable of functionally replacing the VISA system in all nations.&lt;br /&gt;
&lt;br /&gt;
[http://www.BlochsTech.com BlochsTech.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BitLox Bitcoin Hardware Wallet ===&lt;br /&gt;
[[file:Bitlox.jpg|300px|thumb|left|BitLox Bitcoin Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
BitLox is a metal cased (aluminum or titanium) bitcoin hardware wallet that works with their own web based wallet by USB and apps for iPhone and Android using Bluetooth LE.&lt;br /&gt;
&lt;br /&gt;
At present it is the only bitcoin hardware wallet you can buy that works with iPhone. The device weighs one ounce and is the size of a credit card 4 mm thick.&lt;br /&gt;
 &lt;br /&gt;
Bitlox allows you to set up hidden wallets. Unlike other hardware wallets your seed is never displayed on a connected computer or phone but only on the Bitlox. All your wallet, device and transaction PINs are only entered on the BitLox and never on any app. &lt;br /&gt;
&lt;br /&gt;
BitLox has also implemented several advanced security features not available on any other bitcoin hardware wallet. &lt;br /&gt;
&lt;br /&gt;
[http://www.bitlox.com bitlox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Bitbox ===&lt;br /&gt;
[[file:Digital-bitbox.png|thumb|left|Digital Bitbox Hardware Wallet]]&lt;br /&gt;
&lt;br /&gt;
* Secure hardware RNG &amp;amp; key storage using [http://www.atmel.com/Images/Atmel-8914-CryptoAuth-ATAES132A-Datasheet.pdf crypto element] with 50 year lifespan and an epoxy-filled case.&lt;br /&gt;
* Offline backup and recovery of [[BIP_0032|BIP-32]] seed with a micro SD card rather than [[BIP_0039|BIP-39]] phrase written on paper as in Trezor.&lt;br /&gt;
* Native software wallet client and ability to use a mobile phone for 2FA and to verify transaction details.&lt;br /&gt;
* Multisig out-of-the-box including Copay support.&lt;br /&gt;
* [https://github.com/digitalbitbox Open Source] ([https://github.com/digitalbitbox/mcu#digital-bitbox-firmware firmware], [https://github.com/digitalbitbox/mcu/blob/bf48984fd4a47d9ebf6814f7d01b078964587c7c/src/bootloader.c bootloader], [https://github.com/digitalbitbox/dbb-app desktop client]).&lt;br /&gt;
* Made in Switzerland (a country with strong privacy laws) by [[Bitcoin Core]] developer Jonas Schnelli.&lt;br /&gt;
&lt;br /&gt;
[https://digitalbitbox.com digitalbitbox.com]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ledger Nano S - USB Smartcard Hardware Wallet  ===&lt;br /&gt;
[[File:ledger_wallet_nanos_photo.png|300px|thumb|left|Ledger Wallet Nano S]]&lt;br /&gt;
&lt;br /&gt;
Ledger Nano S is a secure Bitcoin hardware wallet. It connects to any computer through USB and embeds a built-in OLED display to double-check and confirm each transaction with a single tap on its buttons. It is architectured around a Secure Element (ST31 family) and built on top of the BOLOS platform, a powerful and flexible Operating System allowing the secure execution of multiple Open Source applications in full isolation.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* cryptographic secrets protected by a secure chip&lt;br /&gt;
* open source embedded Bitcoin app&lt;br /&gt;
* Confirmation of transactions on the embedded screen&lt;br /&gt;
* Built-in 4 digits PIN security lock&lt;br /&gt;
* Built-in onboarding (seed generation and recovery)&lt;br /&gt;
* BIP39 seed (12/18/24 words), easy backup and restoration&lt;br /&gt;
* Multi-apps support: FIDO U2F, GPG, SSH…&lt;br /&gt;
* USB connectivity&lt;br /&gt;
* Foldable and compact casing&lt;br /&gt;
&lt;br /&gt;
[https://www.ledgerwallet.com/products/12-ledger-nano-s Ledger Nano S product page]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Not purchasable hardware wallets ==&lt;br /&gt;
&lt;br /&gt;
=== BitcoinCard Megion Technologies-Card based wallet ===&lt;br /&gt;
[[File:Bitcoincard-medley-large.jpg|400px|thumb|left|Bitcoin Card]]&lt;br /&gt;
[http://www.bitcoincard.org/ Bitcoincard Home Page]&lt;br /&gt;
&lt;br /&gt;
[http://blog.bitinstant.com/blog/2012/6/19/our-discovery-in-vienna-the-bitcoin-card.html Excellent review by evoorhees]&lt;br /&gt;
&lt;br /&gt;
Incorporates a e-paper display, keypad, and radio (custom ISM band protocol.) Unfortunately it is fairly limited in terms of transaction I/O, requiring a radio gateway or another bitcoincard wherever funds need to be transferred.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BitSafe - allten/someone42&#039;s hardware wallet ===&lt;br /&gt;
[[File:Bitsafe-wallet-sizecompare.jpg|200px|thumb|left|Bitsafe wallet]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=152517.0 Final BitSafe announcement]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. Has a OLED display and Confirm/Cancel buttons. Evolved out of someone42&#039;s prototype below, and has significant contributions from someone42 as well.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== someone42&#039;s original prototype ===&lt;br /&gt;
[[File:Someone42-wallet-prototype.jpg|300px|thumb|left|someone42&#039;s original prototype]]&lt;br /&gt;
[https://bitcointalk.org/index.php?topic=78614.0 Hardware Bitcoin wallet - a minimal Bitcoin wallet for embedded devices]&lt;br /&gt;
&lt;br /&gt;
Signing transactions only, requires USB host software for transactions &amp;amp; USB power. All work is rolled into the above BitSafe wallet currently.&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
=== Other/Defunct but with good discussion: ===&lt;br /&gt;
* natman3400&#039;s BitClip Jun 2011 [https://bitcointalk.org/index.php?topic=24852.0 https://bitcointalk.org/index.php?topic=24852.0]&lt;br /&gt;
:Seems to have gone defunct around Dec 2011. Some good ideas though and seemed to have started on execution.&lt;br /&gt;
* jim618 hardware wallet proposal Apr 2012 [https://bitcointalk.org/index.php?topic=77553.0 Dedicated bitcoin devices - dealing with untrusted networks]&lt;br /&gt;
:Great discussion and good ideas from jim618. Also linked the following video:&lt;br /&gt;
* Prof. Clemens Cap&#039;s hardware wallet? (video:)[https://www.youtube.com/watch?v=IavQ-Wc8S1U Clemens Cap about electronic bitcoin wallet at EuroBit]&lt;br /&gt;
:Clemens Cap of Uni Rostock explains the Electronic Bitcoin wallet device he&#039;s working on. It&#039;s based on adafruit microtouch device.&lt;br /&gt;
* ripper234&#039;s discussion based on Yubikeys Aug 2012 [https://bitcointalk.org/index.php?topic=99492 Having a YUBIKEY as one of the parties for m-of-n signatures]&lt;br /&gt;
:The use of Yubikeys. They only support symmetric crypto, so you&#039;d have to trust the host device.&lt;br /&gt;
* kalleguld&#039;s hardware wallet proposal Oct 2012 [https://bitcointalk.org/index.php?topic=115294.0 Proposal: Hardware wallet (Win 3 BTC)]&lt;br /&gt;
* Vaporware: Matthew N Wright&#039;s ellet [https://bitcointalk.org/index.php?topic=85931.0 ANN The world&#039;s first handheld Bitcoin device, the Ellet!] (Vaporware)&lt;br /&gt;
&lt;br /&gt;
== Smart Card based wallets ==&lt;br /&gt;
This type of device requires complete trust in the host device, as there is no method for user input.&lt;br /&gt;
See [[Smart card wallet]]&lt;br /&gt;
&lt;br /&gt;
== Related Resources ==&lt;br /&gt;
* [https://bitcoinnewsmagazine.com/best-bitcoin-hardware-wallet-2015/ Best Bitcoin Hardware Wallet 2015] - reviews of all bitcoin hardware wallets.&lt;br /&gt;
* [http://99bitcoins.com/trezor-vs-ledger-hands-hardware-wallets-review/ TREZOR vs. Ledger] - User reviews and Reddit feedback&lt;br /&gt;
* slush&#039;s Hardware wallet wire protocol discussion: [https://bitcointalk.org/index.php?topic=125383.0 Hardware wallet wire protocol]&lt;br /&gt;
* kjj&#039;s Todo List discussion for client protocol requirements: [https://bitcointalk.org/index.php?topic=19080.msg272348#msg272348 in topic Re: Split private keys]&lt;br /&gt;
* paybitcoin&#039;s original post: [https://bitcointalk.org/index.php?topic=134277.0 Hardware Wallet Roundup]&lt;br /&gt;
* [https://www.buybitcoinworldwide.com/wallets/ Buy Bitcoin Worldwide] - information about using Bitcoin hardware wallets for cold storage.&lt;br /&gt;
* Various Hardware Wallets and Reviews: [http://www.offlinewallets.com/hardware-wallets Offline Hardware Wallets]&lt;br /&gt;
* [https://www.weusecoins.com/bitcoin-ledger-wallet-review/ Ledger Wallet Review]&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Wallets]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Wallet_Security_Dos_and_Don%27ts&amp;diff=62130</id>
		<title>Wallet Security Dos and Don&#039;ts</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Wallet_Security_Dos_and_Don%27ts&amp;diff=62130"/>
		<updated>2017-01-22T12:53:32Z</updated>

		<summary type="html">&lt;p&gt;Liraz: /* See also */ added cold storage internal link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article should not be considered as a replacement for the more in-depth articles on best practices, however key points in wallet security:&lt;br /&gt;
&lt;br /&gt;
== Do ==&lt;br /&gt;
&lt;br /&gt;
* DO seek to understand what you are doing, before you do it&lt;br /&gt;
* DO verify understanding by testing with small low value transactions&lt;br /&gt;
* DO encrypt your wallet with a strong passphrase&lt;br /&gt;
* DO use recommended software from the list at https://bitcoin.org/en/choose-your-wallet&lt;br /&gt;
* DO make multiple redundant backups of your wallet&lt;br /&gt;
* DO keep your OS up to date and run a virus scanner&lt;br /&gt;
* DO manage significant amounts in offline wallets (cold/paper/hardware)&lt;br /&gt;
* DO prepare for black swan disaster scenarios when dealing with large sums (e.g., fire &amp;amp; water damage, theft, head injury and death)&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t ==&lt;br /&gt;
&lt;br /&gt;
* DO NOT trust an untrustworthy device or program to generate your wallet keys&lt;br /&gt;
* DO NOT generate cold storage keys on Internet-connected machines.&lt;br /&gt;
* DO NOT reconnect to the Internet a machine that has had access to cold storage keys.&lt;br /&gt;
* DO NOT reuse a wallet encryption passphrases with online services&lt;br /&gt;
* DO NOT store your wallet on cloud storage (Dropbox, etc.)&lt;br /&gt;
* DO NOT re-use addresses (including paper wallet addresses) if you care about privacy&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Securing your wallet]]&lt;br /&gt;
* [[Hardware wallet]]&lt;br /&gt;
* [[Brainwallet]]&lt;br /&gt;
* [[Paper wallet]]&lt;br /&gt;
* [[Cold storage]]&lt;br /&gt;
* [[How to set up a secure offline savings wallet]]&lt;br /&gt;
* [[Paper ECDSA private keys]]&lt;/div&gt;</summary>
		<author><name>Liraz</name></author>
	</entry>
</feed>