It is important to verify the integrity of Bitcoin Core before running it. Depending on how you downloaded it, it may have been modified in transit to do something evil when run. The server hosting the download may also have been compromised.
Even if
all of your favorite Bitcoin websites are yelling at you to immediately download something lest you lose all of your coins, you should
NEVER run Bitcoin Core software without verifying it first.
Easy way 1Final Windows and Mac installers are digitally signed by The Bitcoin Foundation. (Note that The Bitcoin Foundation is not actually strongly associated with Bitcoin development -- it is just convenient for them to sign the releases.) On Windows, you can check this by right clicking the installer, choosing properties, and then going to the Digital Signatures tab. Check that it is signed by
The Bitcoin Foundation, Inc..
Prerelease versions are generally not signed.
Easy way 2Get the sha256 hash of the Bitcoin Core release you downloaded. On Linux, you can run, for example,
sha256sum bitcoin-0.16.3-x86_64-linux-gnu.tar.gz. On Windows you can run (at a command prompt)
certUtil -hashfile bitcoin-0.16.3-win32.zip SHA256. On Mac OS X, you can run
shasum -a 256 bitcoin-0.16.3-osx.dmg.
The hashes of the most recent release and prerelease versions are below. Hashes for older versions are available
here (SHA256SUMS.asc under each version is a text file that can be opened with any text editor). Simply verifying the hashes of the Bitcoin Core release you downloaded against the appropriate hash in the list here will provide some extra security, but ideally you should also use OpenPGP software such as gpg to verify that the hashes were signed by someone you trust.
0.16.3-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
0768c6c15caffbaca6524824c9563b42c24f70633c681c2744649158aa3fd484 bitcoin-0.16.3-aarch64-linux-gnu.tar.gz
fb2818069854a6ad20ea03b28b55dbd35d8b1f7d453e90b83eace5d0098a2a87 bitcoin-0.16.3-arm-linux-gnueabihf.tar.gz
75a537844313b0a84bdb61ffcdc5c4ce19a738f7ddf71007cd2edf664efd7c37 bitcoin-0.16.3-i686-pc-linux-gnu.tar.gz
78c3bff3b619a19aed575961ea43cc9e142959218835cf51aede7f0b764fc25d bitcoin-0.16.3-osx64.tar.gz
c67e382b05c26640d95d8dddd9f5203f7c5344f1e1bb1b0ce629e93882dbb416 bitcoin-0.16.3-osx.dmg
836eed97dfc79cff09f356e8fbd6a6ef2de840fb9ff20ebffb51ccffdb100218 bitcoin-0.16.3.tar.gz
1fe280a78b8796ca02824c6e49d7873ec71886722021871bdd489cbddc37b1f3 bitcoin-0.16.3-win32-setup.exe
e3d6a962a4c2cbbd4798f7257a0f85d54cec095e80d9b0f543f4c707b06c8839 bitcoin-0.16.3-win32.zip
bd48ec4b7e701b19f993098db70d69f2bdc03473d403db2438aca5e67a86e446 bitcoin-0.16.3-win64-setup.exe
52469c56222c1b5344065ef2d3ce6fc58ae42939a7b80643a7e3ee75ec237da9 bitcoin-0.16.3-win64.zip
5d422a9d544742bc0df12427383f9c2517433ce7b58cf672b9a9b17c2ef51e4f bitcoin-0.16.3-x86_64-linux-gnu.tar.gz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQIcBAEBCAAGBQJboV68AAoJEJDIAZ42wulkrD0P/iULbLc7SRAXPPaQDxRV+nXO
bTOF3Ueti1hOY9/02drnfd5z2HNYuZGJvL4t5UuVrSM/KGPbwMNPq0MLoVqp0z91
yWCPTUdbjnvstJ5maFSZ3EHHrmKKR/8Ue6VVT1rDwZHTjKSUMli05QhRWsQsGgdp
gVrCId/572xJw9R7QGtcatoP1Y+LpDf3PGsfSn7YLzezvXMDjrgYAXaW/QYPbl5I
+vGSmNPhjnQpatVgg7OnLgyCAul7Rqq898MURpAboMC7qgbsINZ4UVha0IqFPWt9
HS9z84wtOsV69gDro5BpgtMSXjvjdTAOs9wq+VGgxfZf1K3kFZ6zVmrP/Ea/HJKV
WbIYNyvW/bnK/GA2gfciqmjAL0xjhWnCzBdrFSbIAHbfoHIOeSw2TSJ90Oiqb1ch
cgIWZpEzoteVtMEoSOhCiPFHEAYOO8DiBkqLUgc0CkkcXfffeQEO/OvqGOJe1zAo
O1sWR/na0d9qv4qVK/jNCKIHjtF24npdqgdDjyKdMOGBkS1pgSGwkH8Hd7cffJJm
LZswdRm2rEmchmqhVXwvYRlmU5nhAyb2GrW5g78DyTPbKCO+z7ejYfM7h6YQQHS3
Y1x/vMdf092djWF0jvr52WtbPfcYL9OCWgTB6LLlXhfPhqPUoiYzcFIO2obRwXR1
FZnWhOUcfsVHgmbN1g6b
=/Gqy
-----END PGP SIGNATURE-----
To verify the signatures, first install GPG. Then import the necessary PGP public keys (see below). Then get to a command prompt and do this:
gpg --verify
# Paste the signature here, like:
-----BEGIN PGP SIGNED MESSAGE-----
...
-----END PGP SIGNATURE-----
# Enter Ctrl-D (Linux) or Ctrl-Z (Windows) to signal the end
# You'll get something like this if the signature is OK:
gpg: Signature made 09/29/14 09:44:14 Central Daylight Time
using RSA key ID 2346C9A6
gpg: Good signature from "Wladimir J. van der Laan <...>"
Gitian signature verificationBitcoin developers and other interested people sign every release of Bitcoin Core using gitian. To verify a downloaded version:
- Go to the gitian sigs page and choose the correct version. Versions that end in "rc1" are older prerelease versions of versions without any rc suffix. Choose the link that ends with "-win" for Windows, "-osx" for Mac OS X, or "-linux" for Linux.
- Once you're at the correct version, there are links for all of the different people who signed that release. Choose a few people who you trust. You will need their PGP public keys (see below).
- For each person, download the raw version of both files. With both files in the same directory, run gpg --verify *.assert.sig. Verify that the signature is OK.
- Open the .assert file in a text editor. This is a list of SHA-256 hashes for a bunch of files. You should verify that the Bitcoin Core download you're going to use exists in the "out_manifest" section and has a matching hash. In some cases, you may need to check several files if the out_manifest contains the contents of an archive that you downloaded. Note that Windows and OS X installers generally will not have matching hashes due to issues with embedded signatures in the installers -- use the zip/tar.gz releases instead.
Building gitian releasesYou can personally build Bitcoin Core and check that it matches the official release.
See here.
Note that the digitally signed installers cannot be verified in this way because you would need to know the private key of the digital signature signing key in order to reproduce the installer.
Common PGP keysHere are a few PGP public keys that you might need. You can usually just paste the whole thing into a command prompt:
https://bitcointalk.org/verify_pubkeys.txtIf you're using the default trust model, and you've already created a key for yourself with
gpg --gen-key, then you'll also want to locally sign these keys. Do that like this for each key-id, saying yes if it asks whether you want to sign all user IDs:
gpg --lsign 0x71A3B16735405025D447E8F274810B012346C9A6
With bash on Linux, this will lsign all of the public keys in that file:
for k in \
0x71A3B16735405025D447E8F274810B012346C9A6 \
0x01EA5486DE18A882D4C2684590C8019E36C2E964 \
0xDE47BC9E6D2DA6B02DC610B1AC859362B0413BFA \
0x5E6B3F3BA961193C5C9B4435C6555693DAB591E7 \
0xE463A93F5F3117EEDE6C7316BD02942421F4889F \
0x152812300785C96444D3334D17565732E08E5E41
do gpg --lsign $k
done
Note that it isn't the greatest to trust random pages on the Internet when importing keys. For example, a bitcointalk.org moderator could replace the above keys with different keys that are all under his control and then post an emergency "urgent upgrade required!" link somewhere pointing to wallet-stealing malware signed by the keys that he placed here. PGP has the concept of a "PGP Web of Trust" that people are theoretically supposed to use to prevent this sort of thing, but it's complicated and doesn't work very well, so pretty much no one actually uses it. If you're not already familiar with PGP, then it's best to just import and use these keys, which will at least protect you from attacks carried out in the future. But if you're serious about security, you should probably read a few guides on PGP and at least try to get verification from several different sites/people about a key's authenticity in the future. For example, many of these keys are also available on bitcoin.org. (All of the Bitcoin Core download/verification info has been republished on bitcointalk.org partly to provide some protection/redundancy in the case of bitcoin.org being compromised.)