frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: GPU-accelerated search for Bitcoin keys generated with weak entropy

https://b4q.io/research
1•orkblutt•1h ago
Hey HN, I've been working on a CUDA pipeline that systematically searches for Bitcoin private keys generated by flawed software from Bitcoin's early years. The linked article is a technical deep dive into the GPU engineering — no source code (project is closed-source), but detailed pseudocode and architecture diagrams.

  The problem: Between 2009 and 2012, many Bitcoin wallet tools used predictable entropy — timestamp-seeded LCGs, brain wallets with simple passwords, the Debian OpenSSL bug (CVE-2008-0166) that reduced entropy to 15 bits, the Randstorm BitcoinJS flaw, PHP's mt_rand() seeded with
   time*pid, and others. The private keys generated by these algorithms have tiny search spaces (some as small as 65,536 candidates), and the addresses are still on the blockchain with funded balances.

  The engineering: Everything lives in a single ~3,400-line CUDA C++ file. The per-thread pipeline is:

  private key → secp256k1 EC multiply → SHA-256 → RIPEMD-160 → bloom filter → binary search → match


  Some decisions that might interest the GPU computing crowd:

  - EC multiplication via precomputed lookup tables (67 MB): The 256-bit private key is split into 16 × 16-bit chunks, each indexing into a precomputed table of generator point multiples. This reduces scalar multiplication from ~256 double-and-add iterations to 16 lookups + 15
  point additions.
  - Specialized SHA-256 kernels per pubkey format: Instead of a generic SHA-256, we have two dedicated functions — one for 33-byte compressed pubkeys (single block, partially precomputable message schedule) and one for 65-byte uncompressed (two blocks, second block is constant
  padding). Both build the message schedule directly from EC point coordinates without a serialization buffer.
  - 32 KB bloom filter in __constant__ memory: With ~3,100 target addresses and 100M candidates per batch, a naive binary search would thrash global memory. A bloom filter with 7 hash functions (FNV-1a + rotate-XOR double hashing) in constant memory rejects 99.9999% of candidates
   with broadcast cache reads. Only ~100 false positives per batch reach the binary search confirmation stage in global memory.
  - 256-bit modular arithmetic in PTX inline assembly: secp256k1 operates over a 256-bit prime field, implemented as eight 32-bit limbs with carry propagation. The sparse form of the secp256k1 prime (2^256 - 2^32 - 977) allows fast reduction.
  - __launch_bounds__(256, 2) + --maxrregcount=128: Targeting 2 blocks per SM with 128 registers per thread. Higher occupancy isn't better here because the kernel is compute-bound with heavy ALU usage — 2 blocks provides enough ILP to hide latency without forcing register spills.
   The Mersenne Twister mode (2.5 KB state per thread) is the exception and occasionally spills.

  There are 23 vulnerability modes total, covering LCG PRNGs (glibc, MSVC, Borland Delphi, Java), brain wallet patterns (SHA-256 of counters, timestamps, phone numbers, short ASCII strings), MT19937, V8 JavaScript PRNGs, and the Debian OpenSSL disaster. The smaller modes (Debian:
   65K candidates) complete in milliseconds; the largest (SHA-256 of ASCII strings 1-8 chars: ~2T) takes days across multiple GPUs.

  The distributed side uses a FastAPI backend that assigns work units, verifies results via deterministic checkpoint regeneration (server independently recomputes the key from mode+offset using Python), and injects canary targets (honeypot hashes where the server knows the
  private key) to detect cheating workers.

  Happy to answer questions about the CUDA optimization, the secp256k1 implementation, or the weak entropy patterns.

Comments

yungdeist•1h ago
NIce i have a spare 1080 ti i will contribute

How One Rock Poisoned (Almost) The Entire Planet

https://www.youtube.com/watch?v=cMx139eTxoc
1•lnenad•1m ago•0 comments

Speed Is the Moat: Inference Performance on AMD GPUs

https://www.amd.com/en/developer/resources/technical-articles/2026/inference-performance-on-amd-g...
1•latchkey•3m ago•0 comments

The Future of VSP Scrolling on the C64

https://kodiak64.co.uk/blog/future-of-VSP-scrolling
1•amichail•3m ago•0 comments

Show HN: Writing a C++20M:N Scheduler from Scratch (EBR, Work-Stealing)

https://github.com/lixiasky-back/tiny_coro-build_your_own_MN_scheduler
1•lixiasky•3m ago•0 comments

Yellow Journalism

https://en.wikipedia.org/wiki/Yellow_journalism
2•qwfqwef•5m ago•0 comments

You Want It Darker?

https://cinemasojourns.com/2026/02/17/you-want-it-darker/
2•jjgreen•6m ago•0 comments

Add schedule pause periods to triggers page

1•nishiohiroshi•6m ago•0 comments

The mysterious symptom popping up in some GLP-1 users

https://www.vox.com/explain-it-to-me/479202/glp-1-flatness-apathy-symptom
1•Hooke•7m ago•0 comments

Show HN: Air – Open-source black box for AI agents (tamper-evident audit trails)

https://github.com/nostalgicskinco/air-blackbox-gateway
2•shotwellj•7m ago•1 comments

LayerV – Senior Software Engineer – Remote (US) – $125k–150k equity and benefits

https://layerv.ai/
1•joeollis•7m ago•0 comments

pg_background: Make Postgres do the long work (while your session stays light)

https://vibhorkumar.wordpress.com/2026/02/16/pg_background-make-postgres-do-the-long-work-while-y...
2•tanelpoder•9m ago•0 comments

Skunk mating season becoming a headache for Bay Area residents

https://www.sfgate.com/bayarea/article/skunks-spray-valentine-21350189.php
2•turtlegrids•10m ago•0 comments

The Great Reboot

1•security1011015•11m ago•0 comments

Show HN: Privatiser – Redact secrets, IPs, and PII before sharing with AI

https://privatiser.net
1•r0otie•12m ago•0 comments

Local memory for any LLM agent

https://github.com/jmuncor/mumpu
1•jmuncor•12m ago•1 comments

Gravity Basins (2024) [video]

https://www.youtube.com/watch?v=LavXSS5Xtbg
1•dgellow•12m ago•0 comments

Magic Words Need Measuring Sticks

https://jotter.jonathankingston.co.uk/blog/2026/02/17/magic-words-need-measuring-sticks/
1•kingstonTime•14m ago•1 comments

Godot veteran says 'AI slop' pull requests have become overwhelming

https://www.gamedeveloper.com/programming/godot-co-founder-says-ai-slop-pull-requests-have-become...
3•haunter•17m ago•0 comments

I Use Obsidian

https://stephango.com/vault
1•hisamafahri•19m ago•0 comments

Ask HN: Are compiler errors for unused code necessary?

2•qwool•20m ago•2 comments

Memories Family

https://familymemories.video
1•tareq_•21m ago•3 comments

Book a Meeting with a YC Founder

https://y-cal.vercel.app/
1•abrarmurad416•24m ago•0 comments

Ask HN: Can AI replace apps, or will economics keep the app market alive?

1•maccraft•25m ago•1 comments

Show HN: Preference-aware routing for OpenClaw via Plano

https://github.com/katanemo/plano/tree/main/demos/llm_routing/openclaw_routing
1•sparacha•28m ago•0 comments

The Servo project and its impact on the web platform ecosystem

https://servo.org/slides/2026-02-fosdem-servo-web-platform/
2•mmphosis•29m ago•0 comments

Mira: An agent that never forgets anything. Persistent, shared memory

https://www.co-span.com/
2•dvt•30m ago•0 comments

Python HTTP server using Erlang and BEAM

https://hornbeam.dev/
1•polyrand•30m ago•0 comments

Dual nationals face scramble for UK passports as new rules come into force

https://www.bbc.com/news/articles/cx2d9yk2kpjo
5•tartoran•31m ago•0 comments

GraphQLite: SQLite graph extension supporting Cypher

https://colliery-io.github.io/graphqlite/latest/
2•dude01•33m ago•0 comments

Show HN: AccessLint – Static accessibility analysis for iOS/Swift

https://accesslint.app
1•synctek•35m ago•0 comments