docs/en/verifying-signatures.wml
2a9aaa80
 ## translation metadata
40e07e2e
 # Revision: $Revision$
2a9aaa80
 # Translation-Priority: 2-medium
 
 #include "head.wmi" TITLE="Tor Project: Verifying Signatures" CHARSET="UTF-8"
 <div id="content" class="clearfix">
   <div id="breadcrumbs">
b289ef06
     <a href="<page index>">Home &raquo; </a>
2a9aaa80
     <a href="<page docs/verifying-signatures>">Verifying Signatures</a>
   </div>
8f1c78db
   <div id="maincol">
2a9aaa80
     <h1>How to verify signatures for packages</h1>
ed5ac546
     <hr>
8f1c78db
 
8660abe1
     <p>Digital signature is a process ensuring that a certain package was
     generated by its developers and has not been tampered with. Below we explain
     why it is important and how to verify that the Tor program you download is
     the one we have created and has not been modified by some attacker.</p>
 
     <p>Digital signature is a cryptographic mechanism. If you want to learn more
e8e32970
     about how it works see <a href="https://en.wikipedia.org/wiki/Digital_signature">
     https://en.wikipedia.org/wiki/Digital_signature</a>.</p>
8660abe1
 
1cfe1d48
     <h3>What is a signature and why should I check it?</h3>
     <hr>
 
8660abe1
     <p>How do you know that the Tor program you have is really the one we made?
     Digital signatures ensure that the package you are downloading was created by
e8e32970
     our developers. It uses a cryptographic mechanism to ensure that the software package
     that you have just downloaded is authentic. </p>
8660abe1
 
     <p>For many Tor users it is important to verify that the Tor software is authentic
     as they have very real adversaries who might try to give them a fake version
     of Tor.</p>
1cfe1d48
 
8660abe1
     <p>If the Tor package has been modified by some attacker it is not safe to use.
     It doesn't matter how secure and anonymous Tor is if you're not running the real Tor.</p>
 
e8e32970
     <p>Before you go ahead and download something, there are a few extra steps you
     should take to make sure you have downloaded an authentic version of Tor.</p>
 
     <h4>Always download Tor from torproject.org</h4>
 
8660abe1
     <p>There are a variety of attacks that can be used to make you download a fake
     version of Tor. For example, an attacker could trick you into thinking some other
e8e32970
     website is a great place to download Tor. You should
8660abe1
     always download Tor from <a href="https://www.torproject.org"><b>https</b>://www.torproject.org/</a>.</p>
 
e8e32970
     <h4>Always make sure you are browsing over https</h4>
 
8660abe1
     <p><a href="https://www.torproject.org">https://www.torproject.org/</a> uses https.
     Https is the secure version of the http protocol which uses encryption and authentication between your
     browser and the website. This makes it much harder for the attacker
1cfe1d48
     to modify your download. But it's not perfect. Some places in the
8660abe1
     world block the Tor website, making users to download Tor <a href="<page
     docs/faq>#GetTor">somewhere else</a>.</p>
 
     <p>Large companies sometimes force employees to use a modified browser,
1cfe1d48
     so the company can listen in on all their browsing. We've even <a
     href="https://blog.torproject.org/blog/diginotar-debacle-and-what-you-should-do-about-it">seen</a>
     attackers who have the ability to trick your browser into thinking
     you're talking to the Tor website with https when you're not.</p>
 
e8e32970
     <h4>Always verify signatures of packages you have downloaded</h4>
 
1cfe1d48
     <p>Some software sites list <a
181d059f
     href="https://en.wikipedia.org/wiki/Cryptographic_hash_function">sha1
1cfe1d48
     hashes</a> alongside the software on their website, so users can
     verify that they downloaded the file without any errors. These
     "checksums" help you answer the question "Did I download this file
     correctly from whoever sent it to me?" They do a good job at making
     sure you didn't have any random errors in your download, but they
     don't help you figure out whether you were downloading it from the
     attacker. The better question to answer is: "Is this file that I
     just downloaded the file that Tor intended me to get?"</p>
 
e67e6ba8
     <h3>Where do I get the signatures and the keys that made them?</h3>
     <hr>
026caf5e
     <p>Each file on <a href="<page download/download>">our download
7eb0bbcb
     page</a> is accompanied by a file with the same name as the
     package and the extension ".asc". These .asc files are GPG
     signatures. They allow you to verify the file you've downloaded
     is exactly the one that we intended you to get. For example,
072eeada
     torbrowser-install-<version-torbrowserbundle>_en-US.exe is accompanied by
     torbrowser-install-<version-torbrowserbundle>_en-US.exe.asc. For a list
c7f27ca8
     of which developer signs which package, see our <a href="<page docs/signing-keys>">signing keys</a> page.</p>
5112ad71
 
1f0363b2
     <p>We now show how you can verify the downloaded file's digital signature on
     different operating systems. Please notice that a signature is dated the moment
5112ad71
     the package has been signed. Therefore every time a new file is uploaded a new
     signature is generated with a different date. As long as you have verified the
     signature you should not worry that the reported date may vary.
     </p>
 
7eb0bbcb
     <h3>Windows</h3>
ed5ac546
     <hr>
e5e6e6ec
     <p>First of all you need to have GnuPG installed before you can verify signatures.
     Download it from <a href="https://gpg4win.org/download.html">https://gpg4win.org/download.html</a>.</p>
7eb0bbcb
     <p>Once it's installed, use GnuPG to import the key that signed your
e5e6e6ec
     package. In order to verify the signature you will need to type a few commands
     in windows command-line, <i>cmd.exe</i>.
5bd3add6
     <p>The Tor Browser team signs Tor Browser releases. Import its key
072eeada
     (0x4E2C6E8793298290) by starting <i>cmd.exe</i> and typing:</p>
95d93dd9
     <pre>gpg.exe --keyserver pool.sks-keyservers.net --recv-keys 0x4E2C6E8793298290</pre>
5f5e8e08
     <p>After importing the key, you can verify that the fingerprint
7eb0bbcb
     is correct:</p>
95d93dd9
     <pre>gpg.exe --fingerprint 0x4E2C6E8793298290</pre>
7eb0bbcb
     <p>You should see:</p>
     <pre>
fd381d0c
 pub   rsa4096/0x4E2C6E8793298290 2014-12-15 [C] [expires: 2020-08-24]
       Key fingerprint = EF6E 286D DA85 EA2A 4BA7  DE68 4E2C 6E87 9329 8290
 uid                   [ unknown] Tor Browser Developers (signing key) <torbrowser@torproject.org>
 sub   rsa4096/0xD1483FA6C3C07136 2016-08-24 [S] [expires: 2018-08-24]
       Key fingerprint = A430 0A6B C93C 0877 A445  1486 D148 3FA6 C3C0 7136
 sub   rsa4096/0xEB774491D9FF06E2 2018-05-26 [S] [expires: 2020-09-12]
       Key fingerprint = 1107 75B5 D101 FB36 BC6C  911B EB77 4491 D9FF 06E2
7eb0bbcb
 </pre>
     <p>To verify the signature of the package you downloaded, you will need
     to download the ".asc" file as well. Assuming you downloaded the
     package and its signature to your Desktop, run:</p>
95d93dd9
     <pre>gpg.exe --verify C:\Users\Alice\Desktop\torbrowser-install-<version-torbrowserbundle>_en-US.exe.asc</pre>
e8e32970
     <p>Please substitute "Alice" with your own username.</p>
7eb0bbcb
     <p>The output should say "Good signature": </p>
     <pre>
50de7c65
 gpg: assuming signed data in 'torbrowser-install-<version-torbrowserbundle>_en-US.exe'
 gpg: Signature made Wed 15 Nov 2017 05:52:38 PM CET
 gpg:                using RSA key 0xD1483FA6C3C07136
 gpg: Good signature from "Tor Browser Developers (signing key) <torbrowser@torproject.org>" [unknown]
 gpg: WARNING: This key is not certified with a trusted signature!
 gpg:          There is no indication that the signature belongs to the owner.
 Primary key fingerprint: EF6E 286D DA85 EA2A 4BA7  DE68 4E2C 6E87 9329 8290
      Subkey fingerprint: A430 0A6B C93C 0877 A445  1486 D148 3FA6 C3C0 7136
1acf560c
     <p>Currently valid subkey fingerprints are:
     <pre>
     5242 013F 02AF C851 B1C7  36B8 7017 ADCE F65C 2036
62c6eea4
     BA1E E421 BBB4 5263 180E  1FC7 2E1A C68E D408 14E0
     A430 0A6B C93C 0877 A445  1486 D148 3FA6 C3C0 7136</pre></p>
7eb0bbcb
     <p>
     Notice that there is a warning because you haven't assigned a trust
     index to this person. This means that GnuPG verified that the key made
     that signature, but it's up to you to decide if that key really belongs
     to the developer. The best method is to meet the developer in person and
     exchange key fingerprints.
     </p>
5112ad71
 
d63f6689
     <h3>Mac OS X and Linux</h3>
ed5ac546
     <hr>
8f1c78db
 
7eb0bbcb
     <p>You need to have GnuPG installed before you can verify
d63f6689
     signatures. If you are using Mac OS X, you can install it from <a
181d059f
     href="https://www.gpgtools.org/">https://www.gpgtools.org/</a>. If you
d63f6689
     are using Linux, then it's probably you already have GnuPG in your
     system, as most Linux distributions come with it preinstalled.
7eb0bbcb
     </p>
8f1c78db
 
d63f6689
     <p>The next step is to use GnuPG to import the key that signed
5bd3add6
     your package. The Tor Browser team signs Tor Browser releases. Import its
5d6192e8
     key (0x4E2C6E8793298290) by starting the terminal (under "Applications"
d63f6689
     in Mac OS X) and typing:</p>
8f1c78db
 
b06002fa
     <pre>gpg --keyserver pool.sks-keyservers.net --recv-keys 0x4E2C6E8793298290</pre>
8f1c78db
 
7eb0bbcb
     <p>After importing the key, you can verify that the fingerprint
     is correct:</p>
 
072eeada
     <pre>gpg --fingerprint 0x4E2C6E8793298290</pre>
8f1c78db
 
7eb0bbcb
     <p>You should see:</p>
     <pre>
fd381d0c
 pub   rsa4096/0x4E2C6E8793298290 2014-12-15 [C] [expires: 2020-08-24]
       Key fingerprint = EF6E 286D DA85 EA2A 4BA7  DE68 4E2C 6E87 9329 8290
 uid                   [ unknown] Tor Browser Developers (signing key) <torbrowser@torproject.org>
 sub   rsa4096/0xD1483FA6C3C07136 2016-08-24 [S] [expires: 2018-08-24]
       Key fingerprint = A430 0A6B C93C 0877 A445  1486 D148 3FA6 C3C0 7136
 sub   rsa4096/0xEB774491D9FF06E2 2018-05-26 [S] [expires: 2020-09-12]
       Key fingerprint = 1107 75B5 D101 FB36 BC6C  911B EB77 4491 D9FF 06E2
     </pre>
7eb0bbcb
     <p>To verify the signature of the package you downloaded, you will need
     to download the ".asc" file as well. Assuming you downloaded the
181d059f
     package and its signature to your Downloads folder, run:</p>
8f1c78db
 
fba8f12c
     <strong>For Mac OS X users</strong>:<br />
181d059f
     <pre>gpg --verify ~/Downloads/TorBrowser-<version-torbrowserbundleosx64>-osx64_en-US.dmg{.asc*,}</pre>
 
39e3fe09
     <strong>For Linux users</strong> (change 64 to 32 if you have the 32-bit package):<br />
50de7c65
     <pre>gpg --verify tor-browser-linux64-<version-torbrowserbundlelinux64>_en-US.tar.xz.asc</pre>
8f1c78db
 
1acf560c
     <p>The output should say "Good signature":</p>
8f1c78db
 
2a9aaa80
     <pre>
50de7c65
 gpg: assuming signed data in 'tor-browser-linux64-<version-torbrowserbundlelinux64>_en-US.tar.xz'
 gpg: Signature made Wed 15 Nov 2017 05:52:38 PM CET
 gpg:                using RSA key 0xD1483FA6C3C07136
 gpg: Good signature from "Tor Browser Developers (signing key) <torbrowser@torproject.org>" [unknown]
 gpg: WARNING: This key is not certified with a trusted signature!
 gpg:          There is no indication that the signature belongs to the owner.
 Primary key fingerprint: EF6E 286D DA85 EA2A 4BA7  DE68 4E2C 6E87 9329 8290
      Subkey fingerprint: A430 0A6B C93C 0877 A445  1486 D148 3FA6 C3C0 7136
     </pre>
     <p> Currently valid subkey fingerprints are:
1acf560c
     <pre>
     5242 013F 02AF C851 B1C7  36B8 7017 ADCE F65C 2036
62c6eea4
     BA1E E421 BBB4 5263 180E  1FC7 2E1A C68E D408 14E0
     A430 0A6B C93C 0877 A445  1486 D148 3FA6 C3C0 7136</pre></p>
2a9aaa80
     <p>
     Notice that there is a warning because you haven't assigned a trust
     index to this person. This means that GnuPG verified that the key made
     that signature, but it's up to you to decide if that key really belongs
     to the developer. The best method is to meet the developer in person and
     exchange key fingerprints.
     </p>
1acf560c
 
d63f6689
     <p>
     If you're a Linux user and you're using the <b>Debian</b> Tor (not Tor
     Browser) packages, you should read the instructions on <a
     href="<page docs/debian>#packages">importing these keys to apt</a>.
     If you're using the <b>RPMs</b> (for Tor, not Tor Browser), you can
     manually verify the signatures on the RPM packages by
     <pre>rpm -K filename.rpm</pre>
     </p>
f0c891fb
 
     <p>See <a
181d059f
     href="https://www.gnupg.org/documentation/">https://www.gnupg.org/documentation/</a>
931eb982
     to learn more about GnuPG.</p>
 
     <hr>
7eb0bbcb
 
d395f9ab
     <a id="BuildVerification"></a>
     <h3><a class="anchor" href="#BuildVerification">
     Verifying sha256sums (advanced)</a></h3>
     <hr>
82fcda58
     <p>Build reproducibility is a <a
        href="https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise">security
f65daf2d
        property</a> of Tor Browser 3.0 and later. Anyone can build
        Tor Browser on their own machine and produce a binary that is
        bit-for-bit identical to the binary we offer on the download page.
5bd3add6
        Fortunately, it is not necessary for everyone to build Tor Browser
f65daf2d
        locally to get this security. Verifying and comparing the signed list
        of <a href="https://en.wikipedia.org/wiki/Cryptographic_hash">hashes</a>
        will confirm that multiple people have built Tor Browsers
d395f9ab
        identical to the download.</p>
 
       <p>The steps below walk through this process:</p>
 
     <ul>
06b5b08c
       <li>Download the Tor Browser package, the <tt>sha256sums-unsigned-build.txt</tt>
       file, and the <tt>sha256sums-unsigned-build.txt.asc</tt> signature file.
       They can all be found in the same directory under
       <a href="https://www.torproject.org/dist/torbrowser/">
39e3fe09
       https://www.torproject.org/dist/torbrowser/</a>, for example in '<version-torbrowserbundlelinux64>'
       for Tor Browser <version-torbrowserbundlelinux64>.</li>
181d059f
       <li>In case your operating system is adding the .txt extension
       automatically to the SHA256 sums signature file strip it again by running
       <pre>mv sha256sums-unsigned-build.txt.asc.txt sha256sums-unsigned-build.txt.asc</pre>
82fcda58
       <li>Retrieve the signers' GPG keys. This can be done from the command
       line by entering something like
7ea8ace5
       <pre>gpg --keyserver keys.mozilla.org --recv-keys 0x4E2C6E8793298290</pre>
       (This will bring you the public part of the Tor Browser developers'
181d059f
        signing key. Other developers' key IDs can be found on
82fcda58
       <a href="<page docs/signing-keys>">this
d395f9ab
       page</a>.)</li>
06b5b08c
       <li>Verify the sha256sums-unsigned-build.txt file by executing this
       command:
       <pre>gpg --verify sha256sums-unsigned-build.txt.asc sha256sums-unsigned-build.txt</pre></li>
82fcda58
       <li>You should see a message like "Good signature from &lt;DEVELOPER
d395f9ab
       NAME&gt;". If you don't, there is a problem. Try these steps again.</li>
7ea8ace5
       <li>If you want to verify a Windows Tor Browser package you need to first
b5a2ec64
       strip off the authenticode signature of it. Tools that can be used for
       this purpose are <a href="http://osslsigncode.sourceforge.net">osslsigncode</a> and
       <a href="http://forum.xda-developers.com/showthread.php?t=416175">delcert.exe</a>.
       Assuming you have built e.g. <tt>osslsigncode</tt> on a Linux computer you can enter
7ea8ace5
       <pre>/path/to/your/osslsigncode remove-signature &#92;
         /path/to/your/&lt;TOR BROWSER FILE NAME&gt;.exe &lt;TOR BROWSER FILE NAME&gt;.exe</pre></li>
82fcda58
       <li>Now you can take the sha256sum of the Tor Browser package. On
d395f9ab
       Windows you can use the <a href="http://md5deep.sourceforge.net/">
       hashdeep utility</a> and run
       <pre>C:\location\where\you\saved\hashdeep -c sha256sum &lt;TOR BROWSER FILE NAME&gt;.exe</pre>
67fd3967
       <p>On Linux you can run</p>
       <pre>sha256sum &lt;TOR BROWSER FILE NAME&gt;.tar.gz</pre>
       without having to download a utility. Note: this does not work for OS X
       yet due to Apple's codesigning requirement.</li>
d395f9ab
       <li>You will see a string of letters and numbers.</li>
06b5b08c
       <li>Open <tt>sha256sums-unsigned-build.txt</tt> in a text editor.</li>
d395f9ab
       <li>Locate the name of the Tor Browser file you downloaded.</li>
       <li>Compare the string of letters and numbers to the left of your
82fcda58
       filename with the string of letters and numbers that appeared
       on your command line. If they match, you've successfully verified the
       build.</li>
d395f9ab
     </ul>
82fcda58
 
     <p><a href="https://github.com/isislovecruft/scripts/blob/master/verify-gitian-builder-signatures">Scripts</a>
181d059f
     to <a href="https://tor.stackexchange.com/questions/648/how-to-verify-tor-browser-bundle-tbb-3-x">automate</a>
82fcda58
     these steps have been written, but to use them you will need to modify
32700e09
     them yourself with the latest Tor Browser filename.</p>
82fcda58
 
     <hr>
 
     <a id="MARVerification"></a>
     <h3><a class="anchor" href="#MARVerification">
     Verifying MAR files we ship (advanced)</a></h3>
d395f9ab
     <hr>
82fcda58
     <p>Starting with Tor Browser 4.5a4 we sign our MAR files which helps
     securing our update process. The downside of this is the need for additional
     instructions to verify that the MAR files we ship are indeed the ones we
ecb88869
     produced with our rbm setup.</p>
82fcda58
 
     <p>Assuming the verification happens on a Linux computer one first needs the
     <tt>mar-tools-linux*.zip</tt> out of the <tt>gitian-builder/inputs</tt>
     directory to remove the embedded signature(s). The steps to get the unsigned
     MAR file on a 64 bit Linux are</p>
     <pre>
     cd /path/to/MAR/file
     unzip /path/to/gitian-builder/inputs/mar-tools-linux64.zip
181d059f
     export LD_LIBRARY_PATH=/path/to/MAR/file/mar-tools
82fcda58
     mar-tools/signmar -r your-signed-mar-file.mar your-unsigned-mar-file.mar</pre>
     <p>Now you can compare the SHA256 sum of <tt>your-unsigned-mar-file.mar</tt>
06b5b08c
     with the one provided in the <tt>sha265sums-unsigned-build.txt</tt> or
     <tt>sha256sums-unsigned-build.incremental.txt</tt> as outlined in
     <a href="#BuildVerification">Verifying sha256sums (advancded)</a> above.</p>
d395f9ab
 
2a9aaa80
   </div>
   <!-- END MAINCOL -->
   <div id = "sidecol">
 #include "side.wmi"
 #include "info.wmi"
   </div>
   <!-- END SIDECOL -->
 </div>
 <!-- END CONTENT -->
8f1c78db
 #include <foot.wmi>