Fully-static, reproducible, release binaries for Bitcoin Core, have been a long-time goal of mine, and we are getting are closer to making them a reality. I've produced test binaries from a PR of mine (#25573), and am looking for feedback, questions, and hopefully testing on various systems or obscure platforms.
> Bitcoin Core has spent more than a century of CPU time fuzzing individual functions and critical components (though oss-fuzz, Fuzzor, bitcoinfuzz and individual contributors), and decades of CPU time simulating small networks of full nodes under test (Antithesis, Fuzzamoto). I can’t establish causality from this alone, but my strong suspicion is that the sustained testing effort is an important reason these projects have become so robust.
I wrote a blog post on the recent exploits in the Bitcoin ecosystem, how Bitcoin Core is holding up, and how I think the community can get ahead of the models:
https://t.co/JEH8xTQa3E
gpg --verify SHA256SUMS.asc
is easily bypassable for detached signatures.
The correct command requires the data file:
gpg --verify SHA256SUMS.asc SHA256SUMS
This appears to be a common mistake.
Without the second argument, gpg succeeds even if the .asc file contains an arbitrary embedded message rather than signing the actual SHA256SUMS file. It prints a warning, but it's easily missed in gpg's output.
The gpg manpage explicitly discourages the single-argument form, keeping it only for backward compatibility. I actually keep a list of gpg pitfalls. This is number 8.
Mehdi Kerimov reported this in nix-bitcoin's self-updater via @nixbitcoinorg's bounty program. We had originally followed https://t.co/lR6f79C69x verification instructions, which had the same issue and have since been fixed. That this sat unnoticed on @bitcoincoreorg since 2018 shows just how little-known this footgun is.
It's unlikely bad signatures were ever published at scale, as anyone noticing the warning or using the two-argument command would have caught it immediately.
Hopefully it’ll only take one round of trying closed source “security through obscurity”, to convince everyone that this is (certainly nowadays) mostly pointless/confusing, and undermines the whole “don’t trust, verify” ethos. The way forward is writing robust, open source code.
We've published a blog post on the dangers of what @BtcpayServer, @Core_LN, and probably other maintainers are doing with security at the moment:
https://t.co/XtU51yyqrf
Reproducible builds give you a source code -> binary mapping. Without this, any open source project needs to pick a single “trusted” person to produce binaries; where no one else can even double check that person compiled the source code they claimed to have compiled (given no reproducibility). So even if you don’t trust the contents of a binary, reproducible builds still solve the problem of a project deciding which binary to make available to end users, given its source code.
Given the cost and difficulty, I’m not sure this is the way forward, especially with AI.
If you really think about it, all reproducible builds did was move the locus of trust (for most people, except those that verified themselves, which are few and far between).
Developer writes code and makes it reproducible. Another guy creates the reproducible builds and posts that they reproduced it. User trusts the other guy blindly.
What would actually be far better is you point your agent to a codebase and say “scan for vulns and build it for me.” That would be far more practical for everyone.
Bitcoin post-quantum R&D tldr
If you want to get up to speed on the last ~year of Bitcoin post-quantum research and development, the first 20 minutes of @conduition_io's presentation on Brink’s engineering call is a great primer. Every major proposal and how they all fit together.
@AtuhaireAlex@bitschmidty Possibly, depending on your networking setup. There are some work-in-progress release notes available in https://t.co/JiKcIEdGvv
When you download Bitcoin Core today, the binary doesn't contain everything your node runs. It still loads the C library (glibc and friends) from your operating system which means there are version requirements, behavior that can vary from machine to machine, and code that your node executes that isn’t covered by reproducible builds.
New static test builds pack it all into one deterministic Bitcoin Core binary.
@fanquake is asking node runners to test out these new static binaries and report results.
@epic_curious@bitschmidty We have started bundling thise into bitcoin-qt (happened earlier this year). Only freetype and fontconfig left as runtime libs: https://t.co/Dkp0nFv5cM
Michael Ford (@fanquake) posted to the Bitcoin-Dev mailing list announcing test builds of static Bitcoin Core release binaries produced using the project’s existing Guix infrastructure...
https://t.co/T04jzS8rwH
0.0.139 is the final version of nix-bitcoin. Really enjoyed these 8 years developing Bitcoin infrastructure on NixOS, very grateful for your support. The code is there, so fork it.
Would be great to get some more testing on more diverse x86_64 and aarch64 systems here. Already run this on some of my hardware. Solving linux platform portability has been a long standing goal and one of the things that kept me interested in bitcoin development.