Bitcoin Forum
March 19, 2026, 11:57:07 AM *
News: Latest Bitcoin Core release: 30.2 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Experiment: 64-bit Nonce Collision on the Genesis Block (84-byte expanded header  (Read 39 times)
katzamit99 (OP)
Newbie
*
Offline Offline

Activity: 1
Merit: 1


View Profile
March 18, 2026, 11:27:59 PM
Merited by stwenhao (1)
 #1

Breaking the 32-bit Barrier: A 64-bit Nonce Collision for the Bitcoin Genesis Block

Disclaimer before the purists attack: I am fully aware that an 84-byte block header is strictly invalid according to consensus rules and cannot be broadcast to the network. This is a pure cryptographic hardware experiment to test the statistical bounds of Double-SHA256 outside of protocol limits.

The Concept:
The standard Genesis block header is 80 bytes, utilizing a 32-bit nonce space. Mathematically, it contains exactly one valid 32-bit nonce (2083236893) that satisfies the 10-leading-zero difficulty target. I wanted to see the math play out if we bypassed the 32-bit limit on the Genesis block without altering the Merkle Root or extraNonce.

I artificially expanded the Genesis header to 84 bytes by injecting an 8-byte (64-bit) nonce at the end of the standard 76-byte prefix.

The Hardware & Methodology:
I wrote a custom C++/CUDA kernel and deployed it to a bare-metal data center RTX GPU. The script skipped the exhausted 0-4.29B space entirely and started brute-forcing from 4,294,967,296 upward.

The Discovery:
After calculating roughly 1.03 Trillion independent hashes, the GPU swarm hit a pristine collision satisfying the 10-zero target.

  • Winning 64-bit Nonce (Decimal): 1035160959500
  • Resulting Double-SHA256 Hash: 00000000001761db1b8fcf38de3ed8b61384c3c306ce53080d3b338268dafc36
The Cryptographic Proof:
For anyone who wants to verify the math locally, here is the exact 76-byte hex prefix used:
Code:
0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d

Append the 64-bit nonce 1035160959500 (in little-endian format) to the end of that byte array and run it through a standard Double-SHA256.

Has anyone else here run heavy 64-bit Double-SHA256 expansions on historical blocks like this, or am I the only one burning GPU time on 84-byte mutations? I'd be interested to hear from other CUDA devs on optimization strategies for the kernel.
stwenhao
Hero Member
*****
Offline Offline

Activity: 645
Merit: 1641


View Profile
Today at 04:44:02 AM
 #2

Quote
I wanted to see the math play out if we bypassed the 32-bit limit on the Genesis block without altering the Merkle Root or extraNonce.
Some people wanted to do another trick: putting extra bits in the previous block hash. For example:
Code:
      version: 01000000
prevBlockHash: 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900........ <- always set to zero, for all block headers
   merkleRoot: 982051fd1e4ba744bbbe680e1fee14677ba1a3c3540bf7b1cdb606e857233e0e
         time: 61bc6649
         bits: ffff001d
        nonce: 01e36299
And then, if the previous block hash would be always masked with "bits", then, as the difficulty would grow, it would give us more and more space for nonces. For example:
Code:
      version: 00e00921
prevBlockHash: 2f369562b3a0dd54cb88fd7fee235d53b9c1737b513800.................. <- mask based on "17" from "bits"
   merkleRoot: 1a34fdc7baef0205d305dcdc3420d60988c65653aad54fb85de0fe124bea1ce8
         time: aa7bbb69
         bits: ccf00117 <- "17" means 9 bytes of nonce
        nonce: 0c7fc5a1
Also, that kind of trick is described in Hardfork Wishlist:

Quote
Mask out the must-be-zero bits in the previous-block-hash (block header) so miners can reuse them for nonce space.
In the current protocol, the minimal difficulty is set to "1d00ffff", which means, that the last four bytes could be always masked in that way. But in general, as we will have stronger, and stronger block hashes, with more and more zeroes, then it gives us more space, to potentially put something there in the future. For example: if SHA-256 would be replaced with something else, then we could require a block, which would give all zeroes, when hashed through that function, and then simply put the result of the new hash function, running on the same data, in the same place.

In this way, the size of the block header can stay at 80 bytes, which is a nice feature, because then, you can easily calculate offsets for any block headers, and get them with constant time complexity.

Proof of Work puzzle in mainnet, testnet4 and signet.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!