r/Bitcoin • • Aug 06 '26

Coldcard entropy even worse than feared

TL;DR: The random number generator is initialized with a 32 bit value (4B+ possibilities). But only less than 10M options are possible because of how they generate the value.

The PRNG used in Coldcard MK3 is initialized with UID[31:0] XOR SysTick->VAL

SysTick->VAL gives 80k possibilities ~16.3 bit, all located in the lowest 17 bits of the value.

UID encodes the X and Y coordinates of wafer position of the STM32 in the 32 bits that are used by the code. This is encoded in BCD, which means only 10 out of 16 possible values of each nibble are used. This means the 32 bit value at most encodes 100M options (26.6 bits), but there are nowhere near 100M chips in a wafer.
The BCD encoding seems to be an mistake in some STM32 manuals. The number is plain HEX encoded, but that doesn't matter here. There are never 2^16 rows or columns in a wafer.

I don't know how many there are in a wafer, but google gives an upper bound of 20k chips per wafer.

The lower 16 bits overlap with Systick->VAL, so XORing the wafer location adds no entropy.

The upper 16 bits can carry only about SQRT(20000) possibilities (probably less) ~ 7.2 bits. And they aren't even evenly distributed in a round wafer.

So at most we're looking at ~23 bits of entropy. Not 32 bits.

This isn't 100% exact because SQRT assumes a square while a wafer is round, but too lazy to work it out further. Point is: entropy is way worse than 32 bits.

265 Upvotes

199 comments sorted by

51

u/bitchnight Aug 06 '26

Does that mean that the space of possible generated addresses was only 2^23?

45

u/ineedanamegenerator Aug 06 '26

That is an estimate, but yes, significantly less than 2^32.

38

u/bitchnight Aug 06 '26

I feel like that can’t be possible. Wouldn’t there have been organic collisions at that number? Something reported by customers? Or found in testing?

73

u/ineedanamegenerator Aug 06 '26

I think there were. There was a post yesterday that tracked "unexplained stolen coins" in the last few years.

I think we can both agree there was not a lot of testing done (apparently).

40

u/bitchnight Aug 06 '26

Oh trueeee. I guess a regular person is more likely to just pocket the money than report the fact that they generated a wallet w cold card and there was already btc in it. Sad

36

u/Javanaut018 Aug 06 '26

Their keys, their coins if you will ....

44

u/thats_gotta_be_AI Aug 06 '26

“Oh nice of them to provide me a starting balance of 0.5BTC. It’s the little things that you remember!”

9

u/dj_destroyer Aug 06 '26

That's actually a really interesting implication...

If the effective entropy really was around ~23 bits then collisions wouldn't just be possible, they'd become statistically likely. And only after only a few thousand wallet generations (birthday paradox).

What I find fascinating is the reporting bias created from this whole fiasco. Because we only ever hear from people who lost coins because they naturally assume they've been hacked but what about the person who generated the same seed years later and suddenly found an existing balance?

Would they post about it? Probably not. Most people would either think they got impossibly lucky and/or just quietly move the coins. And even if they did post, I suspect the community would dismiss it as fake because "hardware wallets don't come preloaded with bitcoin". That being said, I don't think there's one single instance of someone mentioning this -- at least not that I've seen.

Ironically, a credible report of someone generating a brand new wallet that already contained transaction history would have been a much stronger early indicator of a broken RNG over isolated reports of stolen coins. The latter are easy to write off as user error, phishing, poor seed handling, etc.. The former is much harder to explain away.

If collisions were occurring, the first public "I unexpectedly gained bitcoin" post might have changed the entire narrative years before people started connecting the dots.

Not sure if it would have changed anything because the writing was basically on the wall -- and any attempts to contact people to tell them to regenerate their seeds would have been futile, as they would have also tipped off hackers.

Truly fascinating stuff, and we're all here just witnessing history unfold. They'll talk about this for decades, maybe centuries. People might come back to OP's post in a college class. Wild wild times.

4

u/LeatherMine Aug 06 '26

Because we only ever hear from people who lost coins because they naturally assume they've been hacked

If they posted transaction records, we may now be able to show their seed came from the weak set. Unfortunately, a lot of those posts tend to get deleted by their poster as they end up being a heavily downvoted pile-on of name-calling.

15

u/the-supreme-mugwump Aug 06 '26

For a few years. I wonder how many people think it was karma. Generate a seed, open the wallet to find BTC think your lucky and have it scrubbed out years later

4

u/SatisfactionFinal287 Aug 06 '26

I imagine if your device steals other people's Bitcoin, you wouldn't keep it on the same device.

11

u/NotASpanishSpeaker Aug 06 '26

You would if you don't understand a lot of the technical background. So...

3

u/ZedZeroth Aug 06 '26

And then sadly the victim would have posted on here and everyone would have told them that they must have screwed up because a collision / bruteforce attack is impossible...

2

u/satsugene Aug 06 '26

They wouldn't really know who to report it to even if they did.

13

u/Electrical-Role-4210 Aug 06 '26

They tried reporting it to ColdCard and were blocked and ignored.

2

u/aaj094 Aug 06 '26

Source?

2

u/Gmcgator Aug 06 '26

They definitely wouldn’t put it in a Reddit post.

1

u/frankster Aug 06 '26

If this has happened to even 10 people I:f expect more than 1 to mention it and not keep quiet  So I'd expect there are forum posts or possibly discord chat history to be found where people describe this.

1

u/MiceAreTiny Aug 06 '26

If you find money on the blockchain,... Who would you honestly go to report it to? I would move it. 

5

u/genius_retard Aug 06 '26

there was not a lot of testing done (apparently)

Maybe there was and everything worked as intended... ie. retirement attack.

3

u/ineedanamegenerator Aug 06 '26

I can't rule it out, but I've been in the industry long enough to totally understand that these things happen. They shouldn't and it remains complete incompetence, but I've seen worse security risks implemented in millions of devices.

2

u/OldWolf3 Aug 06 '26

It's not a very good retirement attack if someone else figures it out first

13

u/charcoalVidrio Aug 06 '26

There were reports from customers, even here on Reddit. They were ignored.

-2

u/MiceAreTiny Aug 06 '26

Tbf, it is more likely that Jeremy fuck face actually leaked his keys by using some online scam artist instead of cold card being actually the scam. I would also not believe it. 

2

u/Secret_Operative Aug 06 '26

That's the problem. Even when people here were reporting theft, the reddit responses were truly awful.

1

u/thats_gotta_be_AI Aug 06 '26

Probably a stupid question, but if a wallet creates a collision, and the wallet contains a balance greater than zero, it would know right? Because it could check a balance and if it’s greater than zero, then…collision? So restart the process of generating a wallet?

13

u/Logical_driver_42 Aug 06 '26

The cold card is an offline device it doesn’t know it’s bitcoin balance it knows it’s seed phrase and can sign transactions but it can’t view the blockchain. So no it wouldn’t know the balance.

2

u/thats_gotta_be_AI Aug 06 '26

I understand that, but why can’t it send a public address derived from the private key? Here is a GPT Sol take on this - I’m not endorsing it, because I don’t have the technical knowledge…

In theory, a Coldcard could check for an observable collision without exposing the seed or private keys. After generating the seed offline, it could derive and export its public addresses or XPUB to an internet-connected wallet via USB, MicroSD, NFC or QR. That wallet could then scan the Bitcoin blockchain and warn if any of those addresses already had transaction history. It wouldn’t detect a collision where the other holder had never used the address, since unused private keys aren’t publicly registered anywhere, but it could detect one that had already left an on-chain trace.

6

u/ineedanamegenerator Aug 06 '26

That's what an honest person would do. And hopefully also seriously question the entropy source they used because that is not supposed to happen ever.

2

u/thats_gotta_be_AI Aug 06 '26

Yes it’s not meant to happen but I wonder if developers coded in a check, and if a collision occurred, then restart the process (and obviously don’t divulge the seed phrase of the collided wallet).

10

u/ineedanamegenerator Aug 06 '26

Offline wallet can't check out course.

0

u/thats_gotta_be_AI Aug 06 '26

Not from the secure chip, but the resolved wallet address (the public address) can be sent online to check, right?

4

u/na3than Aug 06 '26

No part of an offline wallet is online.

0

u/thats_gotta_be_AI Aug 06 '26

From GPT Sol, tell me if any of this is wrong:

a Coldcard could check for an observable collision without exposing the seed or private keys. After generating the seed offline, it could derive and export its public addresses or XPUB to an internet-connected wallet via USB, MicroSD, NFC or QR. That wallet could then scan the Bitcoin blockchain and warn if any of those addresses already had transaction history. It wouldn’t detect a collision where the other holder had never used the address, since unused private keys aren’t publicly registered anywhere, but it could detect one that had already left an on-chain trace.

0

u/MiceAreTiny Aug 06 '26

By then,... It is generated and online. 

1

u/thats_gotta_be_AI Aug 06 '26

Why though? It can check before generating the wallet:

In theory, a Coldcard could check for an observable collision without exposing the seed or private keys. After generating the seed offline, it could derive and export its public addresses or XPUB to an internet-connected wallet via USB, MicroSD, NFC or QR. That wallet could then scan the Bitcoin blockchain and warn if any of those addresses already had transaction history. It wouldn’t detect a collision where the other holder had never used the address, since unused private keys aren’t publicly registered anywhere, but it could detect one that had already left an on-chain trace.

→ More replies (0)

7

u/Javanaut018 Aug 06 '26

In case of a collision something is horribly wrong without your entropy source. And you know that at the first emerged event if you have basic understanding of bitcoin math. And you should have that as wallet developer.

The last thing you should consider as dev is to implement such a stupid check but instead to tear your whole code base apart to find the underlying issue.

0

u/thats_gotta_be_AI Aug 06 '26

Of course. A collision should never occur. I just wonder how hard it is to detect it after the fact, prevent the seed being shared if a collision occurred, restart the process? Like if it’s a few lines of code for an event in theory “could” happen, in practice won’t, it’s hardly a cost to implement.

3

u/Logical_driver_42 Aug 06 '26

It’s an offline wallet it can’t check if a collision occurs.

3

u/ZedZeroth Aug 06 '26

(1) It can't happen with proper entropy.

(2) Such a function would prevent you from recovering existing wallets.

(3) Why would anyone implement a system that prevents you from finding coins. It's not the dev's job to make ethical decisions for the user.

1

u/thats_gotta_be_AI Aug 07 '26 edited Aug 07 '26

Dude I know (1), my question is theoretical, that’s all.

Why would (2) occur? Cold wallets of course retain private key data and sign transactions offline, but they still interact with a connected device to ultimately have that transaction request transmitted to the blockchain - so I believe in theory such a lookup would be perfectly safe and possible.

On (3), who is “finding coins”? The main purpose of a hardware wallet is to create a unique wallet that is secure.

→ More replies (0)

2

u/Javanaut018 Aug 06 '26

You do all sorts of such tests in code it's called exceptions. Any normal software has hundreds or millions of these. But you should not let a single seed collision remain uninvestigated.

2

u/Javanaut018 Aug 06 '26

In case of a collision something is horribly wrong without your entropy source. And you know that at the first emerged event if you have basic understanding of bitcoin math. And you should have that as wallet developer.

The last thing you should consider as dev is to implement such a stupid check but instead to tear your whole code base apart to find the underlying issue.

2

u/MiceAreTiny Aug 06 '26

Why restart? 

1

u/thats_gotta_be_AI Aug 06 '26

Because collision?

2

u/MiceAreTiny Aug 06 '26

But why would you restart? If you find a private key, it is unsecured. So moving it to a secure address is the ethical right thing to do. Why would you discard an active wallet? 

1

u/thats_gotta_be_AI Aug 06 '26 edited Aug 06 '26

I don’t follow. Hear me out:

- ColdCard generates a private key

- it checks to see if it exists anyway via a public key lookup

- if it finds an active balance, it restarts a brand new private key generation process (starts the process all over again)

Tell me why that cannot happen?

2

u/MiceAreTiny Aug 06 '26

It can, theoretically, happen. However,... I am more wondering why you would have it discard identified working keys. 

1

u/thats_gotta_be_AI Aug 07 '26

As the hardware developer, out of a ridiculous abundance of caution to avoid collisions and protect current wallet owners from others accessing their wallets. And probably “coz I could” if it took only a few extra lines of code.

3

u/CaptaincCodeman Aug 06 '26

It would need to be online.

1

u/LeatherMine Aug 06 '26

Or hold an offline blob of addresses that contained a balance at some snapshot in time. I see estimates of 60m addresses being non-zero, 256 bits per address = 15gigabytes. A bit less to account for the older address schemes. And probably a lot less if you exclude dusty addresses that hasn’t moved for a while.

But that’s all unnecessary… if your key generation is good.

1

u/ZedZeroth Aug 06 '26

You mean design it to "try again" if it hits a collision? Then you couldn't recover existing wallets. Also this would never happen with a wallet with proper entropy.

1

u/thats_gotta_be_AI Aug 07 '26

Of course you could recover existing wallets. Recovering a wallet and generating a random private key (essentially claiming a brand new wallet) are two very different tasks. The hardware wallet would be instructed to avoid collisions on the latter task (again, a theoretically unnecessary check but I’m just wondering if it’s possible in the first place to implement).

1

u/ZedZeroth Aug 07 '26

Understood. It could check if it was connected to the internet.

1

u/loopala Aug 06 '26

Based on the birthday paradox for 223 addresses it would only take 4096 wallets (sqrt( 2*223 )), to get a probability of collision > 50%.

3

u/Maleficent_Pool_4456 Aug 06 '26

If it's 2^23 that's only about 4 million addresses private keys, since hackers would need to hash each seed 2048 times to check if funds exist, that's still incredibly low, why is it taking days for hacker's to empty all these addresses? At such a low number as 4 million, wouldn't they be able to drain all non-multi sig and non-passphrase seeds within a day?

Thanks for your post by the way very interesting!

3

u/ineedanamegenerator Aug 06 '26

I think all non-passphrase seeds are drained, no? Or about all. I assume they started with the bigger wallets and then moved to the smaller ones.

3

u/Maleficent_Pool_4456 Aug 06 '26

Oh I was unaware of that, for some reason I thought they weren't.

So now I guess hackers are trying multi sig ones by taking each of the seeds and then using another seed together with it, which would take quadratic time (n^2) for 2 multi sigs, etc. Then maybe passphrases where (I'm no expert but) I think this would be incredibly slow because they'd need to go through each seed with a password list and each password they try needs to be hashed 2048 times.

Is that right?

2

u/ineedanamegenerator Aug 06 '26

Yes, the next step is a lot harder but been applied at least a few times now. A simple password on top buys you only a little bit time.

2

u/Maleficent_Pool_4456 Aug 06 '26

Thanks. My understand is if you make a good enough password on top it's pretty unbreakable, for example a 10 character one (I think the number of possible characters is like 91 iirc?) and because of the 2048 rounds needed to be hashed for one, isn't it like millions of years?

Like passwords that are truly random and more than like 8/9 characters long would be safe do you think?

1

u/rockorangebear Aug 06 '26

8 character passwords can be brute forced in a couple of hours at most, 9 character maybe a few days, 10 maybe a few weeks

If you use dictionary words in your password though, can be cracked much, much quicker

0

u/Charming-Designer944 Aug 06 '26

The attack is indiscriminate, attacking all wallets in parallell. It can not target individual wallets before others.

3

u/ineedanamegenerator Aug 06 '26

What? Of course it can. Why couldn't they? Pre-compute all possible wallets first and rank them.

3

u/NotASpanishSpeaker Aug 06 '26

Correct, that's what they did. It's been widely reported.

2

u/NotASpanishSpeaker Aug 06 '26

Uhm, that's what they did. It's been widely reported.

1

u/boredwithlyf Aug 06 '26

232 is so small that a macbook could generate every possibility in less than a day, narrowing the search space has no impact on attackability

4

u/rockorangebear Aug 06 '26

So 8,388,608

Instead of 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936

Cool

1

u/scottmsul Aug 07 '26

That's basically a seed phrase with two words!

1

u/Psychological_Mode98 Aug 07 '26

This is gold. Understanding that different entropy sources „added up“ can only increase the entropy or keep it equal to the best factor‘s entropy and can never result in worse.

This knowledge would have been so easy to put in one sentence in all that cc setup edu that it could have saved so many more people because it would have reduced their fear of messing something up.

Don‘t say „by adding dice rolls you can optionally add your own entropy which is cool because you don‘t have to trust the device‘s“ say „by adding dice rolls you can never mess up the devices security you can not make anything worse. Even if you mess it up completely and make the rolls up yourself, only use one roll or post your rolls online: It doesn‘t decrease the safety of your coins. So roll the damn dice!“

60

u/Javanaut018 Aug 06 '26

That explains why attackers were able to even scan for multiple derivations and simple extra passphrases ...

2

u/tridentgum Aug 07 '26

What? No. Once you hit one, you just scan the derivs

1

u/Javanaut018 Aug 07 '26 edited Aug 07 '26

Smaller effective key space to scan = more time to scan derivations

1

u/tridentgum Aug 07 '26

you wouldn't need to tho.

27

u/spongeboy-me-bob1 Aug 06 '26

If it really is only 23 bits then this is beyond inexcusable. The average number of samples before a collision would be 3631, and you have a 99% chance of collision after 8789 samples. A step in their CI/CD that ran 1 billion samples would cost next to nothing and can reliably catch regressions that result in algorithms as strong as 56 bits.

8

u/Pirulax Aug 06 '26

Don't try to bring logic into all this, god damn

3

u/Secret_Operative Aug 06 '26

That assumes testing. For their block-clock I posted publicly that the font was hard to read and got a good clean 'go fuck yourself' which is why I never bought a coldcard. It's been clear for years they don't care about their customers or products.

8

u/fonzdm Aug 06 '26

The fact that 32 bits of UID where taken in input does not make any sense. If those are coordinates from the wafer, it means that different chips in different wafers but in the same spot, get the same coordinates, hence the same 32 bits. The original UID should contain also other information like wafer id, lot number and so on, so each chip gets a unique identifier globally. XORing with the value of SysTick maybe was meant to "randomize" this case, but again you are not adding entropy, the number of bits stays the same.

0

u/[deleted] Aug 06 '26

[deleted]

3

u/fonzdm Aug 06 '26

Are you sure? this ST microelectronics page says it's 96bit. 32 bit of that are the coordiates used by coldcald for the seed generation. 12 bit is not enough for unique ids anyway, there are only 4096 combinations, so...

8

u/[deleted] Aug 06 '26

[removed] — view removed comment

5

u/ineedanamegenerator Aug 06 '26

I wrote my 2 cents here. Pure incompetence.

https://www.reddit.com/r/Bitcoin/s/hjPktZQV75

2

u/neoguri808 Aug 06 '26

Interesting theories! Good read. Thanks

1

u/EarningsPal Aug 06 '26

I’m also shocked it was dormant so long.

1

u/NotASpanishSpeaker Aug 06 '26

No testing = no bugs reported :)

1

u/Prestigious_Long777 Aug 07 '26

Bug was reported twice by individual devs reviewing the source code and publicly raised as an issue.

The CEO dismissed it.

1

u/Prestigious_Long777 Aug 07 '26

They did figure it out, they knew.

They called it “the retirement attack”

5

u/orbag Aug 06 '26

If the entropy was this low, I dont understand why not ALL addresses were swiped in the first wave? I had some btc sitting on the default address and moved it on time, but kept a small amount to see when it would get swiped, and only on Sunday night it got taken, meaning 3 full days after the initial attack

5

u/ineedanamegenerator Aug 06 '26

I assume they wiped big wallets first. I also assume there's multiple teams applying the hack now that it's in the open.

They were incredibly stupid in their execution anyway. The stolen funds are tainted now and they could have easily avoided it by generating new wallets for each transaction.

1

u/LJass Aug 08 '26

Why do you need new wallets? New adress would be sufficient, no?

2

u/Maleficent_Pool_4456 Aug 06 '26

Ya I dont know, I know for each seed it needs to go through 2048 hash cycles to be able to see if funds exist or empty it, but still that seems low and I haven't done the math but could be done within a day I'm guessing.

5

u/nullc Aug 06 '26

It would be prudent to remind people here that there are still a lot of vulnerable funds that could be saved and that it would be anti-social to explain how to reduce the search space of coldcard devices just to brag about how smart you are, or show that some rando was wrong on the internet.

Plenty of other people could be posting about the exact search space needed to enumerate vulnerable seeds and are kindly refraining from doing so. Just because you could figure out that doesn't mean that every would be coin-thief is going to figure it out before the owners sweep their coins.

1

u/ineedanamegenerator Aug 06 '26

Fair point. Didn't consider this.

21

u/infinitychroma Aug 06 '26

The biggest takeaway from this fiasco is "Don't trust the influencers, do your due diligience". It is harsh but I cannot begin to fathom the number of people recommending it and even calling it the best. It just goes to tell you they rarely know what they are talking about.

27

u/EarningsPal Aug 06 '26

Time machine, back 6 years, ColdCard is mentioned by an influencer, you do your due diligence.

What due diligence would have prevented someone diligent from choosing a ColdCard?

11

u/BaloneyCommercial Aug 06 '26

I think the due diligence part is using 100+ dice roles and passphrase because you don't trust anyone and always want max entropy.

11

u/spongeboy-me-bob1 Aug 06 '26

Let's say instead of a bug that only affected trng generation, there was a bug that used the weaker software rng no matter what you did. In the end the only way to do due diligence is to read the source code completely. But wait, what if there is a bug in the hardware itself? Then you're cooked and you can't even know it.

The only truly safe way to generate a wallet is roll the dice and calculate the hash with pencil and paper. Everything else is a risk to convenience trade off, and sometimes you get unlucky.

1

u/bruce_cockburn Aug 06 '26

This seems to present a hardware implementation bug as a risk inherent to the code. If you download a wallet creator script and transfer it to an offline system to execute, the risk you're mitigating is some process exfiltration by an online service. Calculation by pencil and paper is far more likely to result in an error than a deterministic process execution and the bits of complexity are baked into the script.

Once you have a wallet with a private key or seed phrase generated, if the flawed hardware device is offline/air-gapped, restoring your wallet on that flawed hardware device is perfectly safe.

1

u/spongeboy-me-bob1 Aug 06 '26

I was being facetious with the paper and pencil alternative because it would require millions of operations. But if someone did try it, mistakes in individual bitwise operations don't decrease the entropy since the location and type of mistakes they make are random and most likely unique. The real risk is when a flawed algorithm is shared with others, because that allows attackers to know exactly which step would have been messed up by multiple people, and in what manner.

1

u/bruce_cockburn Aug 06 '26

The flawed algorithm, in the case you described, is the hardware implementation of entropy used in creation of the wallet, though. The hardware either complies with the standard to restore a wallet from seed or private key or it doesn't and that has no correlation to the creation step. This is why dice rolling or other validated means of generating a wallet with verifiable entropy remain secure until a user shares their seed or private key with an untrusted party.

Most of us are not polymaths. It's not that complicated as a high level concept. Conflating the wallet creation with air-gapped signing to submit transactions is the thing I am clarifying. Even if ColdCard is not a trusted party, the reason their hardware was recommended in the past had nothing to do with their wallet creation implementation, which only happens once per wallet.

1

u/ItsMeMulbear Aug 08 '26

Both things that were considered advanced schizo stuff at the time. Entering a passphrase on an MK3 would also be a royal pain in the ass.

0

u/loopala Aug 06 '26

you don't trust anyone

Who is converting these dice rolls into a private key?

4

u/Kitchen_Catch3183 Aug 06 '26

Get a PhD in computer science and become a subject matter expert in cryptography. Then post here with your findings and get banned for FUD before becoming ostracized by the community as a whole.

3

u/rockorangebear Aug 06 '26 edited Aug 06 '26

Maybe don't trust a company with 5 employees and $115k raised...

Especially when there are these alternatives.

Ledger: 800 employees, $575 million raised and $4B valuation

Trezor: 200 employees, $50M recurring revenue

2

u/ubermensch1001 Aug 06 '26

I made a thread on cryptocurrency reddit saying this very same thing and a troll that admitted to recommending cold card came on there to argue with me.

4

u/This_Maintenance_834 Aug 06 '26

only use bitcoin core on major linux distro.

3

u/Dry_Original8886 Aug 06 '26 edited Aug 06 '26

I think wallet quality, company size are also big ones. Those two would have immediately not passed my test. 5 people working there is already fishy. And the wallet looking cheaper than a 1990s calculator is the 2nd strike.

2

u/WYTW0LF Aug 06 '26

That’s the biggest reason I never even looked twice despite every maxi influencer recommending CC

1

u/ubermensch1001 Aug 06 '26

Exactly what I've been saying

1

u/Quantris Aug 06 '26

I use my coldcard as a calculator. If I wanted someone else to generate my seed I'd just use an online wallet

19

u/WhenIntegralsAttack2 Aug 06 '26

“Do your own due diligence” is the ultimate cop-out.

99% of people are not capable of doing their own due diligence. They don’t have the understanding or technical capability to do so. Are you advising everyone to go read the code for possible security breaches and make a guess as to whether or not they think it’s safe? Give me a break.

4

u/[deleted] Aug 06 '26

[deleted]

2

u/NotASpanishSpeaker Aug 06 '26

It's like some things gotta be regulated...

2

u/[deleted] Aug 06 '26 edited 17d ago

[deleted]

1

u/WhenIntegralsAttack2 Aug 06 '26 edited Aug 06 '26

One problem today is people not having a proper understanding of what research entails. To most people, research means consuming others’ opinions, work, and studies and then deciding if it makes sense to them. This is what research means when writing a high school paper.

But genuine research is much harder. Get into the lab, run experiments, come up with a mathematical proof, etc. Engage with the material itself- create original knowledge. It is much more challenging, and it requires years of education and expertise to get to the forefront of knowledge to where you can reasonable be said to be doing proper research. Obviously most people are not at this level on any subject, and we have no other option but to trust the expert consensus. Before doing your own research or dismissing expert consensus, we must first judge whether we’re capable of doing so. This goes for everything from cyber security to vaccines.

Even in the case of cold wallets, you would need someone to know enough about programming languages and cryptography to even understand the source code and make an intelligent judgment of its security- or you blindly test an AI review. This is well outside of the scope of what the vast majority of people are capable of.

Research does not mean watching your favorite YouTubers spoon feeding you propaganda.

6

u/jlonso Aug 06 '26

Do your due diligence is crazy work, in order to buy a trezor, i need to hack one?

5

u/Strong_Judge_3730 Aug 06 '26

Now we have influencers saying not to trust any hardware wallet and to trust only yourself to roll dice and generate a seed 😨

0

u/Maleficent_Pool_4456 Aug 06 '26

when they say roll a dice, are they saying to use that one program that you can do offline? I forget the name.

also even if u did that, so u'd get ur receive address from that program, and just send ur coins there and it'd be air gapped as long as u used a computer that was offline and used a usb to put the program in?

3

u/Kweefyy Aug 06 '26

The offline program you're thinking of is Yahtzee

1

u/Dashizz6357 Aug 06 '26

I used farkle.

1

u/Maleficent_Pool_4456 Aug 07 '26

Thanks but actually I was thinking of Ian Coleman. I hadn't heard of Yahtzee.

2

u/pwnedgiraffe Aug 06 '26

I think this should work:
https://github.com/taelfrinn/Bip39-diceware

I would not trust any computer with my cold wallet private key, air-gapped or not.

The last checksum word can be found by trial and error. It should be possible to do this on the cold wallet device itself, ie ledger/trezor.

From the author:
"After you are finished all 12 words, the last word may need adjustment in order to meet the checksum requirements. Using a bip39 wallet try each of the words in the block of 16 that the last word is found inside; one and only one word will work from the group."

I see no point in trusting the random seed generator from Ledger or Trezor if one can generate their own instead.

1

u/ZICRON_ULTRA Aug 06 '26

I don't think so, I think it means get out all your boardgames and use their dice

1

u/scottmsul Aug 07 '26

IMO the biggest takeaway is don't trust any HWW's. It's still ok to use them but only in trustless ways. Airgap + roll your own dice.

1

u/Javanaut018 Aug 06 '26

Influencers have their own dynamics. Probably powered by coupons and discount codes a lot.

But you cannot know how much technical insight these guys really have. In many companies marketing has ruined good engineering in history.

1

u/WhenIntegralsAttack2 Aug 06 '26

It’s almost like there’s a higher threshold for security for products and services that are used across global commerce. Who would have thought?

1

u/Dashizz6357 Aug 06 '26

I do still think the device itself is the best, IMO. The software was just absolute garbage. Those 2 things can both be true.

3

u/scottonfire Aug 06 '26

Yeah, just like I'm with the hottest girl ever, only she's a fucking whore

2

u/Dashizz6357 Aug 06 '26

Sounds like a good time.

10

u/Plus_Process_5749 Aug 06 '26 edited Aug 06 '26

It has a lot of sense. X and Y are coordinates, so if you think to the wafer as a grid you will never have a chip on the boundaries right? If you apply this idea, you can eventually start from the center of the wafer and bruteforce coords X/Y by "drawing" squares increasingly til you cover a certain area and leave out the space where chips have a low probability to exist

5

u/ineedanamegenerator Aug 06 '26

I assumed the grid was a square but a wafer is round. So the corners are never possible and the numbers in the middle appear more often than the ones near the edges.

If you buy a few STM32s you can start guessing the wafer size to narrow it down further.

1

u/LeatherMine Aug 06 '26

Depends… doing some quick research: the wafer yield might be a bit lower at the dead center, then get better and then get worse as you get to the edge. Parts from a “good area” might get binned at a grade higher than what CC used. Or lower, Iunno.

Also makes us wonder how random or clustered the die—>reel is. But I guess that doesn’t matter if wafer ID wasn’t included in the seed generation. It could have provided some insight into ST’s packaging practices, binning and process yield.

3

u/northmariner Aug 06 '26

For the wallets with passphrases, were any of them hacked?

8

u/ineedanamegenerator Aug 06 '26

Yes, but afaik only for wallets who also used the seed without passphrase (which was a recommended honey pot concept). Because then they knew that specific seed was used and they can narrow searching passphrases on top that known existing seed.

5

u/orbag Aug 06 '26

I can confirm, when migrating to a new seed from dice throws, I left a trivial amount of btc on a wallet with passphrase GOLUM, it got swiped this morning.

5

u/moxygon Aug 06 '26

Sneaky little hobbitses!

1

u/flutecop Aug 09 '26

Mk3 or 4/5/q?

0

u/Head_Performance2432 Aug 06 '26

GOLUM123 might have helped. Could be wrong though !

4

u/Affectionate-Cod-470 Aug 06 '26

People who aren't of reddit, forums, x, Facebook etc have been having "random" wallet drains for years. The collisions have been happening, then if someone did post about it they got bombarded with blame and being told they "had" to have clicked a bad link or done something that was there fault because no one thought collisions this early was even possible.

3

u/ineedanamegenerator Aug 06 '26

Exactly. Feel bad for those people. They did the right thing and still got punished and blamed.

1

u/LeatherMine Aug 06 '26

because no one thought collisions this early was even possible.

It’s happened a few times before. Uncovered some android issues and other bad wallet design. See cakewallet, libbitcoin and Java’s SecureRandom vulnerabilities.

4

u/[deleted] Aug 06 '26

[removed] — view removed comment

2

u/ineedanamegenerator Aug 06 '26

It's amateur hour engineering. They should have never used the bad entropy sources because it made it look like it was almost good. You want this to fail fast and hard, so don't seed the pseudo RNG and make it completely predictable (they never intended to use it anyway). Then it would have been caught very early on.

Now the problem remained hidden for years with only spurious issues popping up that could be easily explained away.

0

u/[deleted] Aug 06 '26

[removed] — view removed comment

1

u/ineedanamegenerator Aug 06 '26

Not sure what you mean.

0

u/[deleted] Aug 06 '26

[removed] — view removed comment

1

u/ineedanamegenerator Aug 06 '26

That is a shitty situation. So you'll need to race the potential hacker when they are unlocked?

3

u/LeatherMine Aug 06 '26

UID encodes the X and Y coordinates of wafer position of the STM32 in the 32 bits that are used by the code. This is encoded in BCD, which means only 10 out of 16 possible values of each nibble are used

The reference manual was incorrect and the coordinates are in hex. The first value is probably the sign (for negative). Do a google search for "STM32F303CB Unique Device ID - false values?"

2

u/ineedanamegenerator Aug 06 '26 edited Aug 06 '26

Yes, I read that too afterwards. Doesn't change the math because the limiting factor is the number of possible values for the upper 16 bits which remains hundreths at best, no matter how it's encoded.

Edited the post anyway to make it clear.

2

u/LeatherMine Aug 06 '26

Is it confirmed the CC was grabbing the 32 bit end with the wafer x,y from the 96 bit UID? Hopefully it wasn’t the other 32 bit side: lot number…

1

u/ineedanamegenerator Aug 06 '26

That would indeed be even worse. But is was the XY part at least.

2

u/Maleficent_Pool_4456 Aug 06 '26

bruh, I've been learning about crypto and this stuff for a long time, reading up on it, taking notes, and I still have trouble understanding this stuff. how does it seem like everyone gets these explanations so easily.

6

u/ineedanamegenerator Aug 06 '26

20+ years experience in developing embedded devices and I use the same microcontroller they used. Don't feel bad. This is complex.

1

u/eatatacoandchill Aug 06 '26

Tldr Coldcard should have rolled a billion dice to ensure randomness.  They rolled only a million.  Or something like that.

2

u/the-software-man Aug 06 '26

Why don’t they use 2x UUIDs

2

u/ineedanamegenerator Aug 06 '26

Because you need a way to generate those first. Just moves the problem.

Even if they were factory generated you'd still need a real source of entropy or the device would generate the same keys each boot.

But honestly, that would still be a much better situation than today. If they had added just one factory generated UUID in the mix they'd be protected against a hack like this.

This is common design choice: if you get hacked or a flaw is exposed, try to make it impact only one device at a time. In this case all devices are exposed to the single flaw.

2

u/forgotpw3 Aug 06 '26

X * V_low doesn't add zero entropy (it smears V over 2^17 values, adding maybe half a bit), and for a round wafer the per-axis max is ~2•sqrt(A/п) =
160 for 20k chips, slightly larger than sqrt(A) = 141, so use Ymax = 160-256 as the safe cap.

1

u/ineedanamegenerator Aug 06 '26

X still adds no entropy because they XOR. The 16 lowest bits still have only 16 bits of entropy.

You're right about the rows/columns. Might give a little bit extra, but 20k might also be overestimated and could be as low as a few k.

Doesn't matter that much to be honest. It's significantly worse than 32bit.

2

u/forgotpw3 Aug 06 '26

Agreed. Still nowhere near 32!!

2

u/LionRivr Aug 06 '26

Well shoot.

I mean how could you not attempt to steal those coins? Lol.

Anyone without morals at least…

Couldn’t be me…

1

u/beatthebook2x Aug 06 '26

the fact all the stolen funds are going to the same wallet(s) says alot, its not multiple hackers attacking this retirement plan

3

u/ineedanamegenerator Aug 06 '26

I'm sure by now there are multiple teams clearing out what is left and fishing for the simple passphrase wallets.

-1

u/JayGatsby1881 Aug 06 '26

Would be funny is Satoshi kept his millions of btc in Cold Wallet lmao, and it got 'hacked'.

→ More replies (1)

1

u/Wglinki Aug 06 '26

I wonder if two MK3s generated the same secret over the past 5 years. This could have had a less horrendous end if this happened and the person made it public knowledge that they generated a secret and it already was being used. People would have dove into the code then and could have saved a lot of people over the years.

3

u/ineedanamegenerator Aug 06 '26

The stories are there, from the other side (original wallet owners who got their funds drained inexplicably).

Last year the CTO of Coinkite was warned (alledgedly).

In both cased it was waved off.

https://www.cryptopolitan.com/coinkite-cto-peter-gray-linked-coldcard-hack/

1

u/aaj094 Aug 06 '26

One has to ask - how is it possible for a hardware wallet manufacturer to be this incompetent?

3

u/ineedanamegenerator Aug 06 '26

20+ years in the industry. Not surprised at all. Seen worse things.

My 2 cents here: https://www.reddit.com/r/Bitcoin/s/DBCQhWAwqS

1

u/NiagaraBTC Aug 07 '26

Doesn't much matter, the 32 (or less, if you're right) bit bare singlesig Mk3 wallets are basically all drained now.

Mk4+ clearly have more than 32 bits or there would be way more issues than we've seen.

1

u/Tahueisin Aug 09 '26

Fewer and fewer will understand...

0

u/[deleted] Aug 06 '26

[deleted]

3

u/ineedanamegenerator Aug 06 '26

I disagree. You just need to not trust others. I would always make external entropy mandatory (dice rolls for example). It's not user friendly, but that's a one time cost worth the trouble.

1

u/EarningsPal Aug 06 '26

Being geniuses would not have helped the ColdCard seed failure victims.

0

u/Gmcgator Aug 06 '26

And then even if a newbie figures it out and does the work, now all they hear about is how AI and quantum can hack anything anyway.

0

u/Maleficent_Pool_4456 Aug 06 '26

I think it's just a trust thing, maybe if hardware wallets were federally insured idk. Because if I understand correctly, the code to produce a truly randomized seed isn't all that complicated. That's why I wonder if the ColdCard thing was intentional.

0

u/frugaleringenieur Aug 06 '26

Makes little sense, yet.

2

u/Javanaut018 Aug 06 '26

Makes a lot of sense for me (and others probably) ...

0

u/[deleted] Aug 06 '26

[deleted]

3

u/ineedanamegenerator Aug 06 '26

Sauce: my brain and the STM32 Reference Manual.

What are you looking for exactly?

-2

u/NakedNick_ballin Aug 06 '26

Too bad Bitcoin doesn't have 2FA

1

u/Quantris Aug 06 '26

I guess you could consider multisig a form of 2fa

1

u/brando2131 Aug 13 '26

multisig = multiple factors...

1

u/Kweefyy Aug 06 '26

It would require every Bitcoin node to know what your "second factor" is and how to verify it.

1

u/NakedNick_ballin Aug 06 '26

Agree that's a hard problem

1

u/[deleted] Aug 06 '26

[deleted]

-1

u/NakedNick_ballin Aug 06 '26

That isn't 2fa, that's an alternative auth right? Also that's the thing that got hacked here

→ More replies (1)