<h1>Intructions for Linux:</h1>

<p><strong>You need to have the following files:</strong></p>

<ol>
<li><p>Download the file you want to check:</p>

<pre><code>wget -c https://bitcoin.org/bin/bitcoin-core-0.13.2/bitcoin-0.13.2-x86_64-linux-gnu.tar.gz
</code></pre></li>
<li><p>Download the hash sums containing file:</p>

<pre><code>wget -c https://bitcoin.org/bin/bitcoin-core-0.13.2/SHA256SUMS.asc
</code></pre></li>
<li><p>Download the release signing key:</p>

<pre><code>wget -c https://bitcoin.org/laanwj-releases.asc
</code></pre></li>
</ol>

<p><strong>You check the file as follows:</strong></p>

<ol>
<li><p>The signing key needs to be imported:</p>

<pre><code>gpg --import laanwj-releases.asc
</code></pre></li>
<li><p>Check the hash sum file signature:</p>

<pre><code>gpg --verify-files SHA256SUMS.asc laanwj-releases.asc
</code></pre>

<p>It should say:</p>

<blockquote>
  <p>Good signature from "Wladimir J. van der Laan.</p>
</blockquote>

<p>So now we know that the hash sum file is signed with the provided key we trust.</p></li>
<li><p>Finally, check the file of interest:</p>

<pre><code> gpg --verify-files bitcoin-0.12.1-linux64.tar.gz SHA256SUMS.asc
</code></pre>

<p>It should say:</p>

<blockquote>
  <p>Good signature from "Wladimir J. van der Laan (Bitcoin Core binary release signing key) "</p>
</blockquote>

<p>So now we know that the tarred file is signed with the provided key we trust.</p></li>
<li><p>Check that the hash sum matches:</p>

<pre><code> sha256sum --ignore-missing -c SHA256SUMS.asc
</code></pre>

<p>It should say:</p>

<blockquote>
  <p>bitcoin-0.13.2-x86_64-linux-gnu.tar.gz: OK</p>
</blockquote></li>
</ol>

CC BY-SA 3.0
2016-06-23T04:35:43.837Z
I was going to upvote this because it seems the best answer, but when going through the steps I find the following: for version 0.12.1 the "release signatures" linked are https://bitcoin.org/bin/bitcoin-core-0.12.1/SHA256SUMS.asc, however you link to `laanwj-releases.asc` file, and that file is in a link titled `v0.11.0+`, not 0.12.1. Does the `+` character here mean "or later"? As in "0.11.0 or later"?
knocte
CC BY-SA 3.0
2016-06-23T07:25:51.767Z
@knocte Yes, it means "or later".
Vlastimil Burián
CC BY-SA 4.0
2021-02-10T23:56:24.363Z
step 4 produces: sha256sum: WARNING: 20 lines are improperly formatted
sha256sum: SHA256SUMS.asc: no file was verified
ekkis
CC BY-SA 3.0
2016-05-27T01:04:39.253Z
2017-02-24T05:43:27.960Z
2017-02-24T05:43:27.960Z
Vlastimil Burián
<p>I would grab <a href="https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/verifybinaries/verify.sh" rel="nofollow">this script from bitcoin-core's repository</a>, then comment out the line where it calls the <code>clean_up</code> function at the end. Then when you call it, it not only downloads the binaries in /tmp/bitcoin/, it also verifies the hashes.</p>

CC BY-SA 3.0
2016-06-23T08:03:05.647Z
2016-06-23T08:03:05.647Z
knocte
<ol>
<li>Visit <a href="http://sourceforge.net/projects/bitcoin/files/Bitcoin/" rel="nofollow">http://sourceforge.net/projects/bitcoin/files/Bitcoin/</a></li>
<li>Pick the latest version folder.</li>
<li>Download one of the SHA...SUMS files and examine it in your favorite text editor. </li>
<li>Download the installation file you want to use.</li>
<li>If you don't know how to get your computer to tell you the checksum of a file, you'll have to go figure that out.  Compare the checksum with the one in the file.  If they match, then you've determined one thing that is important: The file you downloaded is the same as the file used by whoever created that checksum.</li>
</ol>

<p>Now you want to know if you can trust that person.  He has an account at Sourceforge and he has made a file available to you and you now have that file, and what you proved in step 5 is that you got the same file he made available, as opposed to a fake from someone on the Internet between you and Sourceforge.</p>

<p>I just did this with version 0.7.1, and that person is Gavin Andresen.  I have Kleopatra for Windows, so I looked up "Gavin Andresen" on the pgp.mit.edu certificate server, and found a certificate for him with "(CODE SIGNING KEY)" in the name.  I imported it to Kleopatra and then verified that the checksum file I downloaded in step 3 was signed by the person who made that key (Anybody can make a key and pretend to be Gavin).</p>

<p>But let's be paranoid...</p>

<p>I could still have bad code because I might have downloaded an imposter's certificate, and had my connection hijacked for the download.  So I Googled "Gavin Andresen certificate fingerprint" (without quotes) and found a page at <a href="https://bitcointalk.org/index.php?action=printpage;topic=69355.0" rel="nofollow">https://bitcointalk.org/index.php?action=printpage;topic=69355.0</a> that displays the fingerprint of "Gavin"'s certificate, and it matches.  With all this information, I assume I'm ok.  If I didn't, I'd have to get the source and examine it, as Evil Spork explained.</p>

CC BY-SA 3.0
2012-11-19T03:24:27.903Z
2012-11-19T03:24:27.903Z
Dave Scotese
<p>Here is an easy walk through on how to authenticate bitcoin-qt on GNU/Linux systems (Like Trisquel, Fedora, Ubuntu, Debian, etc):</p>

<ol>
<li>Open a terminal</li>
<li>Download the core developers PGP key (<a href="https://bitcoin.org/en/development" rel="nofollow">https://bitcoin.org/en/development</a>)</li>
</ol>

<p>(Gavin Andresen)</p>

<ol>
<li>Import the core developers PGP key with GPG:</li>
</ol>

<p>gpg --import gavinandresen.asc</p>

<ol>
<li><p>From the <a href="https://bitcoin.org/en/download" rel="nofollow">https://bitcoin.org/en/download</a> page click on the "Linux (tgz)" file to download.</p></li>
<li><p>From the bitcoin download page click on the "Verify release signatures" link to download the signature.</p></li>
<li><p>Authenticate the file release was compiled by the core developer:</p></li>
</ol>

<p>gpg --verify SHA256SUMS.asc</p>

<p>The most important line to make sure you see is:</p>

<p>gpg: Good signature from "Gavin Andresen (CODE SIGNING KEY) "</p>

<p>A 2nd line you will see is:</p>

<p>gpg: WARNING: This key is not certified with a trusted signature!</p>

<p>This line means that you don't know if you can trust the signature that you imported. Short of meeting the core developer Gavin Andresen in person or at least getting his public key from somebody you trust who has met him you won't ever be able to truly trust the download. However you can at least be confident that all future releases are at least being compiled by the same person. If you don't see "Good signature" you know you have a problem.</p>

<p>While you are at it you may want to import the keys of other core developers just in case. It may be at some point another core developer signs. You'll have more confidence its from a trusted party than if you have to import the key at the time of the download. </p>

CC BY-SA 3.0
2014-02-10T20:39:24.997Z
2014-02-10T20:39:24.997Z
Joe
<p>Generally if you want it really secure you go to the official source, download it, inspect the code, then compile it yourself.</p>

<p>Otherwise just check it versus the md5 hash or sha hash. </p>

CC BY-SA 3.0
2011-09-04T23:01:44.770Z
I would like the answer to this question to be phrased in a way non tech savvy users will be able to do it.
ripper234
CC BY-SA 3.0
2011-09-04T23:11:25.300Z
If you use in Windows, install [Summer Properties](http://www.frozenlogic.org/summerproperties.shtml). It will add a checksum tab to the file properties window. So download the client, right-click, properties and check that the [sha1 hash](http://dfn.dl.sourceforge.net/project/bitcoin/Bitcoin/bitcoin-0.3.24/SHA1SUMS.asc) is the same. Of course that your system must also be clean from virus/spyware or else this is useles...
nmat
CC BY-SA 3.0
2011-09-04T23:16:54.747Z
A tech savvy user will generally not be able to verify a program easily. There are tools for it, but they are not built in to windows. Summer Properties is an example of course. Go ahead and edit my answer as you see fit, but I have not used the software so I can't really vote for or against.
Evil Spork
CC BY-SA 3.0
2011-09-05T00:30:08.340Z
The "official source" is GitHub?  I see that the "official" distribution site, sourceforge, does not use SSL.
Stephen Gornick
CC BY-SA 3.0
2011-09-05T07:54:16.407Z
From bitcoin.org I get to SourceForge, which includes a page with a signed SHA1. So with Summer Properties I can check that sha1, but i have to check that it is properly signed as well (an attacker can spoof the sha1 as well). So, how do I check the PGP signature? Vs which key?
ripper234
CC BY-SA 3.0
2011-09-05T10:06:59.280Z
pgp signing, leaves a complex hash at the bottom that you can test to 'prove' that the document was signed by a trusted key. Essentially, the private key can sign publicly, and the public key can sign privately, so if you sign with your private key, anyone who knows your public key, can verify that this truly comes from you... However in the first place you need to have the creator's public key. which again comes back to the same problem.
Evil Spork
CC BY-SA 3.0
2011-09-24T10:56:24.860Z
-1 This is a non-answer. No one, not even a developer, is supposed to have to inspect the whole sources of a program for every release and magically spot any eventual exploit.
o0'.
CC BY-SA 3.0
2011-09-24T13:13:35.167Z
There is no other way to be sure a bit of code isn't malicious other than checking it yourself. :P so hardly a non-answer, just far more than most people are willing to do.
Evil Spork
CC BY-SA 3.0
2011-09-24T14:11:23.120Z
But what if someone has compromised your compiler? ;-)
Gary
CC BY-SA 3.0
2011-09-24T23:44:59.580Z
then yer just screwed :P
Evil Spork
CC BY-SA 3.0
2011-09-04T22:59:35.820Z
2011-09-04T22:59:35.820Z
Evil Spork
<p>Q: How can one download the bitcoin client securely?</p>

<p>A: <a href="https://github.com/bitcoin/bitcoin/downloads" rel="nofollow">https://github.com/bitcoin/bitcoin/downloads</a></p>

CC BY-SA 3.0
2016-06-23T08:13:19.400Z
outdated link now
knocte
CC BY-SA 3.0
2011-09-14T08:30:49.770Z
Unless github's SSL certificate is compromised ;-)
nmat
CC BY-SA 3.0
2011-09-14T15:03:45.077Z
@nmat: or if any public root CA *whatsoever* is compromised
Longpoke
CC BY-SA 3.0
2011-10-02T22:23:15.290Z
github downloads do not go over https either. though the download area is https, once you click on an individual file to download it, it comes from http://cloud.github.com - no https in sight. it is at any rate irrelevant to the question at hand, since https doesn't protect you from server compromise. you really should just verify the gpg sig.
nanotube
CC BY-SA 3.0
2011-09-14T08:13:09.310Z
2011-09-14T08:13:09.310Z
c_k
<p>Jeff Garzik signs every release with <a href="http://pgp.surfnet.nl:11371/pks/lookup?op=vindex&amp;fingerprint=on&amp;search=0x2DBF0CA8">his GPG key</a> (also <a href="http://bitcoin.org/jgarzik-exmulti.asc">here</a>). You can find release announcements (such as <a href="http://sourceforge.net/mailarchive/message.php?msg_id=27771039">this one</a>) on the <a href="http://sourceforge.net/mail/?group_id=244765">SourceForge.net Bitcoin development list</a>.</p>

<p>To verify the signature on a release, obtain the key from the link above. Obtain the release announcement from the link above. Obtain the <a href="http://bitcoin.org/">download</a> from any source. Then point <a href="http://www.gnupg.org/">GPG</a> at the release annoucement (or the signature block from it, including the BEGIN and END lines). GPG will ask what file you want to verify, pick any of the ones listed in the signature certificate. It will then tell you if the release is identical to the release Jeff Garzik signed.</p>

CC BY-SA 3.0
2011-10-02T22:26:55.377Z
and while you are at it... you should also take some steps to verify that the gpg key indeed belongs to whom it appears to belong. /anyone/ can make a key with "jeff garzik" in the uid.
nanotube
CC BY-SA 3.0
2011-10-02T22:33:34.993Z
@nanotube: Good point. The fingerprint of the release key is `60B0 0235 B335 5D84 BF2A  4E35 DA1D C20F 2DBF 0CA8`.
David Schwartz
CC BY-SA 3.0
2011-10-03T03:03:22.897Z
and assuming we can all trust that you have properly checked that this key indeed belongs to jeff before posting that fingerprint... that's a good first step :) we should probably make an effort to improve the gpg web of trust between the core devs and the rest of the community.
nanotube
CC BY-SA 3.0
2011-10-03T03:11:20.277Z
I am no longer able to edit that comment. If it is incorrect, one would hope someone would say so. So you actually don't have to trust me. (Plus, if that was incorrect, I would be publicly vouching for incorrect information, knowing it's security sensitive. I would deserve a good shaming.)
David Schwartz
CC BY-SA 3.0
2011-09-14T05:25:49.033Z
2011-09-14T05:25:49.033Z
David Schwartz
<p>What is the correct procedure to download the official bitcoin client, and validate it was signed by the developers, and not infected with any malware by a man in the middle?</p>

CC BY-SA 3.0
2011-09-04T22:57:13.297Z
It just occured to me _after_ upgrading the client right now to 0.3.24 that I don't take any verification steps. <paranoia>There might be trojans in my system now, and I wouldn't even know it!</paranoia>
ripper234
CC BY-SA 3.0
2011-11-11T03:52:08.813Z
see similar thread here: https://bitcointalk.org/index.php?topic=49889  howto verify bitcoin archive authenticity
osmosis
<security><client>
How can one download the bitcoin client securely?
ripper234
# How can one download the bitcoin client securely?

(Asked by: username_0 on 2011-09-04)

What is the correct procedure to download the official bitcoin client, and validate it was signed by the developers, and not infected with any malware by a man in the middle?

**Tags:** security, client

> **Comments:**
> **username_0**: It just occured to me _after_ upgrading the client right now to 0.3.24 that I don't take any verification steps. <paranoia>There might be trojans in my system now, and I wouldn't even know it!</paranoia>  
> **username_1**: see similar thread here: https://bitcointalk.org/index.php?topic=49889  howto verify bitcoin archive authenticity  

---

## 7 answers

### Answer by username_15 on 2011-09-14. Score: 13 | Accepted answer

Jeff Garzik signs every release with [his GPG key](http://pgp.surfnet.nl:11371/pks/lookup?op=vindex&fingerprint=on&search=0x2DBF0CA8) (also [here](http://bitcoin.org/jgarzik-exmulti.asc)). You can find release announcements (such as [this one](http://sourceforge.net/mailarchive/message.php?msg_id=27771039)) on the [SourceForge.net Bitcoin development list](http://sourceforge.net/mail/?group_id=244765).

To verify the signature on a release, obtain the key from the link above. Obtain the release announcement from the link above. Obtain the [download](http://bitcoin.org/) from any source. Then point [GPG](http://www.gnupg.org/) at the release annoucement (or the signature block from it, including the BEGIN and END lines). GPG will ask what file you want to verify, pick any of the ones listed in the signature certificate. It will then tell you if the release is identical to the release Jeff Garzik signed.

> **Comments:**
> **username_14**: and while you are at it... you should also take some steps to verify that the gpg key indeed belongs to whom it appears to belong. /anyone/ can make a key with "jeff garzik" in the uid.  
> **username_15**: @username_14: Good point. The fingerprint of the release key is `60B0 0235 B335 5D84 BF2A  4E35 DA1D C20F 2DBF 0CA8`.  
> **username_14**: and assuming we can all trust that you have properly checked that this key indeed belongs to jeff before posting that fingerprint... that's a good first step :) we should probably make an effort to improve the gpg web of trust between the core devs and the rest of the community.  
> **username_15**: I am no longer able to edit that comment. If it is incorrect, one would hope someone would say so. So you actually don't have to trust me. (Plus, if that was incorrect, I would be publicly vouching for incorrect information, knowing it's security sensitive. I would deserve a good shaming.)  

---

### Answer by username_2 on 2016-05-27. Score: 3

# Intructions for Linux:

**You need to have the following files:**

1. Download the file you want to check:

   ```
   wget -c https://bitcoin.org/bin/bitcoin-core-0.13.2/bitcoin-0.13.2-x86_64-linux-gnu.tar.gz

   ```
2. Download the hash sums containing file:

   ```
   wget -c https://bitcoin.org/bin/bitcoin-core-0.13.2/SHA256SUMS.asc

   ```
3. Download the release signing key:

   ```
   wget -c https://bitcoin.org/laanwj-releases.asc

   ```

**You check the file as follows:**

1. The signing key needs to be imported:

   ```
   gpg --import laanwj-releases.asc

   ```
2. Check the hash sum file signature:

   ```
   gpg --verify-files SHA256SUMS.asc laanwj-releases.asc

   ```

   It should say:

   > Good signature from "Wladimir J. van der Laan.

   So now we know that the hash sum file is signed with the provided key we trust.
3. Finally, check the file of interest:

   ```
    gpg --verify-files bitcoin-0.12.1-linux64.tar.gz SHA256SUMS.asc

   ```

   It should say:

   > Good signature from "Wladimir J. van der Laan (Bitcoin Core binary release signing key) "

   So now we know that the tarred file is signed with the provided key we trust.
4. Check that the hash sum matches:

   ```
    sha256sum --ignore-missing -c SHA256SUMS.asc

   ```

   It should say:

   > bitcoin-0.13.2-x86\_64-linux-gnu.tar.gz: OK

> **Comments:**
> **username_3**: I was going to upvote this because it seems the best answer, but when going through the steps I find the following: for version 0.12.1 the "release signatures" linked are https://bitcoin.org/bin/bitcoin-core-0.12.1/SHA256SUMS.asc, however you link to `laanwj-releases.asc` file, and that file is in a link titled `v0.11.0+`, not 0.12.1. Does the `+` character here mean "or later"? As in "0.11.0 or later"?  
> **username_2**: @username_3 Yes, it means "or later".  
> **username_4**: step 4 produces: sha256sum: WARNING: 20 lines are improperly formatted sha256sum: SHA256SUMS.asc: no file was verified  

---

### Answer by username_3 on 2016-06-23. Score: 1

I would grab [this script from bitcoin-core's repository](https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/verifybinaries/verify.sh), then comment out the line where it calls the `clean_up` function at the end. Then when you call it, it not only downloads the binaries in /tmp/bitcoin/, it also verifies the hashes.


---

### Answer by username_5 on 2012-11-19. Score: 0

1. Visit <http://sourceforge.net/projects/bitcoin/files/Bitcoin/>
2. Pick the latest version folder.
3. Download one of the SHA...SUMS files and examine it in your favorite text editor.
4. Download the installation file you want to use.
5. If you don't know how to get your computer to tell you the checksum of a file, you'll have to go figure that out. Compare the checksum with the one in the file. If they match, then you've determined one thing that is important: The file you downloaded is the same as the file used by whoever created that checksum.

Now you want to know if you can trust that person. He has an account at Sourceforge and he has made a file available to you and you now have that file, and what you proved in step 5 is that you got the same file he made available, as opposed to a fake from someone on the Internet between you and Sourceforge.

I just did this with version 0.7.1, and that person is Gavin Andresen. I have Kleopatra for Windows, so I looked up "Gavin Andresen" on the pgp.mit.edu certificate server, and found a certificate for him with "(CODE SIGNING KEY)" in the name. I imported it to Kleopatra and then verified that the checksum file I downloaded in step 3 was signed by the person who made that key (Anybody can make a key and pretend to be Gavin).

But let's be paranoid...

I could still have bad code because I might have downloaded an imposter's certificate, and had my connection hijacked for the download. So I Googled "Gavin Andresen certificate fingerprint" (without quotes) and found a page at <https://bitcointalk.org/index.php?action=printpage;topic=69355.0> that displays the fingerprint of "Gavin"'s certificate, and it matches. With all this information, I assume I'm ok. If I didn't, I'd have to get the source and examine it, as username_7 username_7 explained.


---

### Answer by username_6 on 2014-02-10. Score: 0

Here is an easy walk through on how to authenticate bitcoin-qt on GNU/Linux systems (Like Trisquel, Fedora, Ubuntu, Debian, etc):

1. Open a terminal
2. Download the core developers PGP key (<https://bitcoin.org/en/development>)

(Gavin Andresen)

1. Import the core developers PGP key with GPG:

gpg --import gavinandresen.asc

1. From the <https://bitcoin.org/en/download> page click on the "Linux (tgz)" file to download.
2. From the bitcoin download page click on the "Verify release signatures" link to download the signature.
3. Authenticate the file release was compiled by the core developer:

gpg --verify SHA256SUMS.asc

The most important line to make sure you see is:

gpg: Good signature from "Gavin Andresen (CODE SIGNING KEY) "

A 2nd line you will see is:

gpg: WARNING: This key is not certified with a trusted signature!

This line means that you don't know if you can trust the signature that you imported. Short of meeting the core developer Gavin Andresen in person or at least getting his public key from somebody you trust who has met him you won't ever be able to truly trust the download. However you can at least be confident that all future releases are at least being compiled by the same person. If you don't see "Good signature" you know you have a problem.

While you are at it you may want to import the keys of other core developers just in case. It may be at some point another core developer signs. You'll have more confidence its from a trusted party than if you have to import the key at the time of the download.


---

### Answer by username_7 on 2011-09-04. Score: -1

Generally if you want it really secure you go to the official source, download it, inspect the code, then compile it yourself.

Otherwise just check it versus the md5 hash or sha hash.

> **Comments:**
> **username_0**: I would like the answer to this question to be phrased in a way non tech savvy users will be able to do it.  
> **username_8**: If you use in Windows, install [Summer Properties](http://www.frozenlogic.org/summerproperties.shtml). It will add a checksum tab to the file properties window. So download the client, right-click, properties and check that the [sha1 hash](http://dfn.dl.sourceforge.net/project/bitcoin/Bitcoin/bitcoin-0.3.24/SHA1SUMS.asc) is the same. Of course that your system must also be clean from virus/spyware or else this is useles...  
> **username_7**: A tech savvy user will generally not be able to verify a program easily. There are tools for it, but they are not built in to windows. Summer Properties is an example of course. Go ahead and edit my answer as you see fit, but I have not used the software so I can't really vote for or against.  
> **username_9**: The "official source" is GitHub?  I see that the "official" distribution site, sourceforge, does not use SSL.  
> **username_0**: From bitcoin.org I get to SourceForge, which includes a page with a signed SHA1. So with Summer Properties I can check that sha1, but i have to check that it is properly signed as well (an attacker can spoof the sha1 as well). So, how do I check the PGP signature? Vs which key?  
> **username_7**: pgp signing, leaves a complex hash at the bottom that you can test to 'prove' that the document was signed by a trusted key. Essentially, the private key can sign publicly, and the public key can sign privately, so if you sign with your private key, anyone who knows your public key, can verify that this truly comes from you... However in the first place you need to have the creator's public key. which again comes back to the same problem.  
> **username_10**: -1 This is a non-answer. No one, not even a developer, is supposed to have to inspect the whole sources of a program for every release and magically spot any eventual exploit.  
> **username_7**: There is no other way to be sure a bit of code isn't malicious other than checking it yourself. :P so hardly a non-answer, just far more than most people are willing to do.  
> **username_11**: But what if someone has compromised your compiler? ;-)  
> **username_7**: then yer just screwed :P  

---

### Answer by username_12 on 2011-09-14. Score: -1

Q: How can one download the bitcoin client securely?

A: <https://github.com/bitcoin/bitcoin/downloads>

> **Comments:**
> **username_8**: Unless github's SSL certificate is compromised ;-)  
> **username_13**: @username_8: or if any public root CA *whatsoever* is compromised  
> **username_14**: github downloads do not go over https either. though the download area is https, once you click on an individual file to download it, it comes from http://cloud.github.com - no https in sight. it is at any rate irrelevant to the question at hand, since https doesn't protect you from server compromise. you really should just verify the gpg sig.  
> **username_3**: outdated link now  

---

