Bitcoin 0.13.0 Binary Safety Warning
bitcoin.org
bitcoin.org
* Wayback to some months ago for the download page [1]
* Confirm that the content presented matches the existing download content for the 0.12.1 release (or prior)
* Confirm that the content for the "0.11+ key" is the same [2]
* Confirm that the signed release for the 0.12.1 content is correct and valid
* Request that (full-length) key from a public GPG server
If you've done all of those things, it might be a good idea for you to sign that key and push it back up to a public GPG server - that help with web-of-trust, and somewhat legitimizes the key versus some arbitrary untrusted impostor. (I have done all of these steps, and signed with my key 9BB5251DE08569D4DEEA894C85D221C11DD01DF6)
[1] http://web.archive.org/web/20160109193420/https://bitcoin.or... [2] http://web.archive.org/web/20160109193420/https://bitcoin.or...
I can certify that this key is the same one that was used for the 0.12.1 release, and its content has been published on more than just the bitcoin.org website and more than just $TODAY.
I can see the same content on Reddit's /r/bitcoin wiki page or on Bitcoin Talk, with an identical signature. I would have to believe that either Bitcoin is already compromised, or that bitcoin.org, bitcointalk.org, reddit.com AND archive.org have all been hacked or coerced into changing content with accurate history intact.
Someone compromised the Bitcoin site > 4 months ago without it being discovered.
Someone continues to compromise the site today even after this public attention, since the same message is still there.
That same entity compromised my browser, curl, my Linux laptop, Windows desktop, Android phone and 3 different networks.
That same entity compromised Archive.org and Reddit 4+ months ago without being discovered.
That same entity created sockpuppet accounts to publicize the fact that this info was compromised and nobody discovered the discrepancy.
I don't believe that even the pre-Snowden NSA had all of those powers. If they did, fake signatures are probably the least of our problems.
It's no longer the original model of Person === Key that requires passport checks and face-to-face meetings. I would consider this better validation, in that it certifies real-world and historical usage.
Here's my alternate proposal: How difficult is it for the same attacker to create a fake passport and show up to a bitcoin meetup claiming to be this person?
Or, you know, for paranoia level 1000, your posts are the sockpuppet ;)
I'll agree this is all super unlikely and I'm not accusing you or anyone here of shenanigans. I'm just saying that signing keys shouldn't be taken lightly, because if people start getting sloppy then a lot of the trust in the web of trust is no longer water tight.
If I want to do this "properly" it's a lot of work. I'd get 3 or more independent VPN providers and run the test while connected to each, independently or in series. I'd run everything in a VM that I created from a verified source 5+ years ago on hardware from 10+ years ago[1]. I would have to categorize and confirm that every vulnerability in all software was either fixable via configuration, or couldn't contribute to remote compromise of the box. I'd run the test with and without Tor, hard-resetting the VM to its initial state for every variation and comparing the results across every run to detect abnormalities. I'd confirm the content at Archive, CommonCrawl, Yahoo, Google and at least one foreign provider, Yandex or Baidu or whoever else I could track down. I'd look for that same string in all places I could find it (web, newsgroups, torrents, friends, friends-of-friends), and confirm that neither those pages nor any linked pages contain invalidations, or if any of them contain further evidence to support the identity of said key. By "linked" I mean both links from those pages, and anything I could discover via search engine pointing to those pages independently. I'd go find some old torrents or archives of older versions of the binaries and/or signatures, and confirm that their content matches the published content. I'd confirm that the old key was in use before 0.11, and that the new key is indeed the one that signed release 0.11+. I'm sure there are some further steps I could take to invalidate any known or theorized attacks from state-level agencies, but at this point it's probably more difficult to fake than a GPG signature.
And obviously I'm a sockpuppet - nobody should listen to random strangers on the internet without verifying their identity as well! You could look at my keybase profile, but A) that's easy to fake and B) that's not the key I used to sign above - clearly something hinkey is going on. ;)
[0] https://chrome.google.com/webstore/detail/ext/apmlngnhgbnjpa... [1] https://libreboot.org/faq/#intel
Keys should only be signed after establishing beyond resonable doubt that they belongs to the person indicated by the key. Since the userid of the key is usually a real name, checking the passport in person is one good way to accomplish that.
I would argue that by cross-referencing multiple sources I can establish beyond resonable doubt that a certain key indeed belongs to the person known to the community as Wladimir J. van der Laan. At the point where the person is sufficiently well known under a certain name it doesn't really matter if that's the name on their passport, since that's irrelevant for their public identity.
Personally, I save level 3 signatures for people I know personally, and only if they show my their fingerprint on a trusted device.
Why would you even pre-announce this? Has it been compromised in the past?
Scratch that. Code up a brand new implementation, test it and deploy it to an air gapped network, and then nuke it from orbit. It's the only way to be sure. :)
Don't take chances with an unprotected computer. Only write your code on paper until it's production-ready. :)
The only way I'd write code is by biting a tip of finger until it bleeds heavily enough, then using that as a writing implement.
(Mirroring TLDR into comments in case of DDOS or tampering with bitcoin.org's web page).
https://bitcoin.org/en/alert/2016-08-17-binary-safety shows:
We strongly recommend that you download that key, which should have a fingerprint of 01EA5486DE18A882D4C2684590C8019E36C2E964. You should securely verify the signature and hashes before running any Bitcoin Core binaries. This is the safest and most secure way of being confident that the binaries you’re running are the same ones created by the Core Developers.
Don't trust key 01EA5486DE18A882D4C2684590C8019E36C2E964. Only trust the legit one, 0F6A146532D869AEE438F74B6211AA3B00411886.
Be careful out there folks.
*******_Although they provide binary packages, they insist on building everything from source, independently from the upstream projects such as Bitcoin. Moreover, the build process itself must be able to run entirely with Free Software. And the same must hold for all dependencies. Otherwise a package can't make into their "main" distribution (just into "contrib" or "non-free", but users of these parts are warned).
That way, an attacker can't simply tamper with binaries. They have to distribute the manipulates sources instead. Although that kind of attack may still be feasible, it requires a lot more openness from the attacker than just changing sources privately and distributing merely faulty binaries.
This will be futher hardened by Debian's initiative to provide reproducible builds, so that if one of their many build servers is compromised, this can be detected by simply comparing hashes of the resulting binary packages produced by other build servers and/or local build of the maintainers or any curious user:
https://wiki.debian.org/ReproducibleBuilds
Speaking of Debian, unfortunately Bitcoin never made it beyond Debian/Unstable (Sid), because the Bitcoin release process appears to be incompatible with the Debian release process, especially regarding backporting security fixes, so the Debian people decided to be better safe than sorry:
For example:
http://http.debian.net/debian/pool/main/b/bitcoin/bitcoin_0....
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Format: 3.0 (quilt)
Source: bitcoin
[...]
Checksums-Sha256:
aab2cd0c4f045970d259cf9fcee5785b43180d20ccbbedc1f90480e697696b25 5955398 bitcoin_0.11.2.orig.tar.gz
e294975cd99a90c0750255303b51a9d3058a4e2e16087c6450908d7d64581772 33880 bitcoin_0.11.2-1.debian.tar.xz
-----BEGIN PGP SIGNATURE-----
[...]
-----END PGP SIGNATURE-----
Here, bitcoin_0.11.2.orig.tar.gz is the original source tarball as downloaded from the Bitcoin project, and bitcoin_0.11.2-1.debian.tar.xz is the tarball that contains all Debian specific adjustments."when will we finally throw away binary uploads" https://lists.debian.org/debian-devel/2014/02/msg00622.html
"For instance, when a maintainer uploads a (portable) source packages with binaries for the i386 architecture, it will be built for each of the other architectures, amounting to 11 more builds." https://www.debian.org/doc/manuals/developers-reference/pkgs...
I do not see how the quoted text snippets contradict what I wrote (that Debian builds binary packages fully indepdently from upstream, and prepares to have reproducible builds in the future).
Moreover, a single "huh?" comment is almost never helpful for a civil conversation.
No, these are fundamentally different levels of trust.
Note that we are talking about a breach-in into the webserver, not into a developer's private computer.
For example, some time ago there was a breach-in into the Linux Kernel website. It had almost no effect on the security of this project, because so many people had the sources, and because the Git commits are signed by the authors.
So not only were the attackers unable to distribute their binaries. They were also unable to place malicious commits into the source code. And this was mainly because every distro builds their Linux kernel on their own (and also because sources are signed by the developers and reviewed by multiple developers, although that's not the point of discussion here).
The breach-in into the Bitcoin webserver could have been similarily effect-less, if they were as well-organized as the Linux kernel and worked better together with the distros.
I mentioned the .cn government (and their root CA(s)) because the article mentioned the .cn government, specifically, and the parent comment mentioned "any government that controls a CA".
Obviously, any government with a) control over a root CA and b) control over their entire country's Internet access could carry this out. The article we're commenting, however, called out .cn by name.
Maybe for targeted attacks against individuals.
2. If they use chrome, certificate transparency will log these
Unfortunately chinese people don't really use Chrome.
Doing this against bitcoin.org is probably taking a pretty big risk. Remember that misissued certificates represent proof of their own existence, and, if disclosed publicly, should result in an investigation of how the certificate was created.
They could also choose to start using HPKP and asking browsers to report pin failures. Then a browser that has visited the legitimate site before will report to someone if it encounters an inconsistent cert in the future. That would make using a misissued cert for this site into an even bigger risk.
https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning#Report...
Although it wasn't by hijacking the public key infrastructure, it is worth noting that China has demonstrated in the past they have no issue performing country-wide man-in-the-middle attacks against a single site [1]. Given that some CA's are Chinese, it is not that unbelievable unfortunately...
[1]: http://www.pcworld.com/article/2908912/chinas-great-cannon-d...
An HTTPS MITM attack burns a CA; browsers will remove it from their trust stores. And we're getting close to the point that it can't go undetected, either; once browsers enforce Certificate Transparency for all CAs, it'll no longer be possible to conduct an undetected MITM attack.
Anyone who can escalate into stealing BTC, can afford that risk.
There is a much smaller attack surface for keys.
If you are talking about protecting the key fingerprint they posted on the website, the idea is by publishing them now that others can note the fingerprint and warning before any malicious actor would have a chance to respond.
This is also the same key they've used in the past I believe, so it can always be compared to prior releases.
However, you still have to verify the authenticity of the binary with keys if you don't trust the location you got the torrent hash from (ie, the bitcoin website). So yes, essentially the same problem I believe!
Waiting, we'll see...
I hope though that this does not damage relations with the Chinese community, as singling them out without good cause is unjust.
China has been well known to MITM traffic. No one should be offended by pointing this out.
CNNIC was the root of trust for a breach involving false certificates for gmail. They claim it was an accident. It might have been. It might not have been.
https://www.reddit.com/r/btc/comments/4y8sk7/0130_binary_saf...
Mentioned more-than-obliquely here: https://www.reddit.com/r/Bitcoin/comments/4l564f/bitcoin_cor...
(I have not been following this issue in close detail.)
I suggest skepticism. We should be cautious of anyone skipping peer review processes, even for security incidents. Poor handling of these situations can lead to unintentional panic where panic of any kind is unhelpful to resolving issues. However, everyone should always be encouraged to check the signatures regardless of alerts, of course. Multiple signatures should always be checked, and not just Wladimir's signature. Use the gitian signatures repository to get other signatures, and always verify public key and signature data through multiple independent channels.
gitian signatures repository: https://github.com/bitcoin-core/gitian.sigs
GPG build verification steps: https://github.com/bitcoin/bitcoin/blob/master/doc/release-p...
gitian build steps: https://github.com/bitcoin/bitcoin/blob/master/doc/gitian-bu...
gnupg CVE-2016-6316 from today https://lists.gnupg.org/pipermail/gnupg-announce/2016q3/0003...
Also, don't use gpg short ids. Always verify fingerprints. There are gpg short id matching keys floating around for some Bitcoin developers - for example, http://pgp.surfnet.nl:11371/pks/lookup?op=vindex&fingerprint... check out the revoked key.
( This reply is x-posted from https://www.reddit.com/r/Bitcoin/comments/4y8m76/0130_binary... )
https://en.wikipedia.org/wiki/Magnet_URI_scheme#URN.2C_conta...
Edit: from your [1] link I see that the hashing algorithm used in a mgnet link isn't actually fixed, and MD5 is one option. So yeah, I guess you actually can't trust the immutability of a magnet link without checking it's doesn't contain urn:md5 or urn:kzhash.
It has nothing to do with whether the hashing algorithm is "fixed" or not, it has to do with what you're hashing.
The thing being hashed (according to BEP0003) is the bencoded form of the info value from the metainfo file. What's the "info" value? Why it's a list of dictionaries that (are also bencoded) contain:
* pathnames for each file * the length of each file * a list of hashes for each chunk of each file * whatever else you want: the thing is extensible.
If you can introduce whatever you want, you can start with something valid, and introduce invalid chunks until it collides. If you can do this, you can force a collision for around £150k and a month[2].
To do that, wouldn't you need to construct a file that simultaneously had two collisons for the same file: one collision for the torrent sha1, and one for the hash of the torrent (the magnet uri)?
The link you gave for finding a single collision in certain types of files (rar, sh, jpg) required putting garbage into the malicious file (eg, in comments in the sh file).
They didn't mention creating collisions in torrent files.
It seems exceedingly unlikely to me that you'd be able to construct a file containing two simultaneous collisions, unless there's a spot where you can add garbage without corrupting the file, both in the torrent file and also in the hash of the torrent.
I think the RIAA would be very interested if it was that easy to create fake torrents that hash the same.
Edit: Actually your second link doesn't even show a weakness in SHA1. So you can't create a malicious torrent using that method.
No.
The magnet URI only contains the hash of (part of) the torrent file. The portion that is hashed is extensible, so one could introduce additional content (like garbage or comments).
> I think the RIAA would be very interested if it was that easy to create fake torrents that hash the same.
Easy is subjective. It costs around £150k and a month to make one[1].
However I asked them, and they aren't. Or at least the MPAA isn't.
If you know nothing of computers you might find articles that explain Bitcoin briefly and then point you to a "wallet" that you can download and to various exchanges where you can buy Bitcoin for real money. Why not give it a shot, and "invest" a bit? You need to know quite a bit to understand the unfixable problems with computer security, and read a little to learn of the cruelty of the cryptocurrency world: no password resets, no deposit protection, no sympathy when you lose your money.
edit: livejournal -> launchpad
https://bitcoin.org/en/download
Aren't all of Ubuntu's packages built on launchpad? It's interesting that you don't trust launchpad, should I not trust my OS either? And as far as checking signatures, that's what apt does automatically anyway, as I understand.
I know people like Moxie insist that it's only acceptable to have the (at least) software's author sign the software. Well, personally I'd rather trust a larger organization with more reputation to lose. (Ideally I'd have both, of course, when we get to deterministic builds.)
edit: Oh, deterministic builds is what gitian is. Okay I see your point :-) But still, why trust your OS at that point?
It seems they indicate the specific 0.13.0 release will be targeted, why not the previous releases (or presumably all future releases)?
Except banks will restore your funds if it's fraudulent.