webwml/docs/en/verifying-signatures.wml
2016-10-25 16:53:29 -04:00

284 lines
15 KiB
Plaintext

## translation metadata
# Revision: $Revision$
# Translation-Priority: 2-medium
#include "head.wmi" TITLE="Tor Project: Verifying Signatures" CHARSET="UTF-8"
<div id="content" class="clearfix">
<div id="breadcrumbs">
<a href="<page index>">Home &raquo; </a>
<a href="<page docs/verifying-signatures>">Verifying Signatures</a>
</div>
<div id="maincol">
<h1>How to verify signatures for packages</h1>
<hr>
<h3>What is a signature and why should I check it?</h3>
<hr>
<p>How do you know that the Tor program you have is really the
one we made? Many Tor users have very real adversaries who might
try to give them a fake version of Tor &mdash; and it doesn't matter
how secure and anonymous Tor is if you're not running the real Tor.</p>
<p>An attacker could try a variety of attacks to get you to download
a fake Tor. For example, he could trick you into thinking some other
website is a great place to download Tor. That's why you should
always download Tor from <b>https</b>://www.torproject.org/. The
https part means there's encryption and authentication between your
browser and the website, making it much harder for the attacker
to modify your download. But it's not perfect. Some places in the
world block the Tor website, making users try <a href="<page
docs/faq>#GetTor">somewhere else</a>. Large
companies sometimes force employees to use a modified browser,
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>
<p>Some software sites list <a
href="https://en.wikipedia.org/wiki/Cryptographic_hash_function">sha1
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>
<h3>Where do I get the signatures and the keys that made them?</h3>
<hr>
<p>Each file on <a href="<page download/download>">our download
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,
torbrowser-install-<version-torbrowserbundle>_en-US.exe is accompanied by
torbrowser-install-<version-torbrowserbundle>_en-US.exe.asc. For a list
of which developer signs which package, see our <a href="<page docs/signing-keys>">signing keys</a> page.</p>
<h3>Windows</h3>
<hr>
<p>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>
<p>Once it's installed, use GnuPG to import the key that signed your
package. Since GnuPG for Windows is a command-line tool, you will need
to use <i>cmd.exe</i>. Unless you edit your PATH environment variable,
you will need to tell Windows the full path to the GnuPG program. If
you installed GnuPG with the default values, the path should be
something like this: <i>C:\Program Files\Gnu\GnuPg\gpg.exe</i>.</p>
<p>The Tor Browser team signs Tor Browser releases. Import its key
(0x4E2C6E8793298290) by starting <i>cmd.exe</i> and typing:</p>
<pre>"C:\Program Files\Gnu\GnuPg\gpg.exe" --keyserver pool.sks-keyservers.net --recv-keys 0x4E2C6E8793298290</pre>
<p>After importing the key, you can verify that the fingerprint
is correct:</p>
<pre>"C:\Program Files\Gnu\GnuPg\gpg.exe" --fingerprint 0x4E2C6E8793298290</pre>
<p>You should see:</p>
<pre>
pub 4096R/93298290 2014-12-15
Key fingerprint = EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290
uid Tor Browser Developers (signing key) <torbrowser@torproject.org>
sub 4096R/F65C2036 2014-12-15
sub 4096R/D40814E0 2014-12-15
sub 4096R/C3C07136 2016-08-24
</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>
<pre>"C:\Program Files\Gnu\GnuPg\gpg.exe" --verify C:\Users\Alice\Desktop\torbrowser-install-<version-torbrowserbundle>_en-US.exe.asc C:\Users\Alice\Desktop\torbrowser-install-<version-torbrowserbundle>_en-US.exe</pre>
<p>The output should say "Good signature": </p>
<pre>
gpg: Signature made Tue 24 Jan 2015 09:29:09 AM CET using RSA key ID D40814E0
gpg: Good signature from "Tor Browser Developers (signing key) <torbrowser@torproject.org>"
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</pre>
<p>Currently valid subkey fingerprints are:
<pre>
5242 013F 02AF C851 B1C7 36B8 7017 ADCE F65C 2036
BA1E E421 BBB4 5263 180E 1FC7 2E1A C68E D408 14E0
A430 0A6B C93C 0877 A445 1486 D148 3FA6 C3C0 7136</pre></p>
<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>
<h3>Mac OS X and Linux</h3>
<hr>
<p>You need to have GnuPG installed before you can verify
signatures. If you are using Mac OS X, you can install it from <a
href="https://www.gpgtools.org/">https://www.gpgtools.org/</a>. If you
are using Linux, then it's probably you already have GnuPG in your
system, as most Linux distributions come with it preinstalled.
</p>
<p>The next step is to use GnuPG to import the key that signed
your package. The Tor Browser team signs Tor Browser releases. Import its
key (0x4E2C6E8793298290) by starting the terminal (under "Applications"
in Mac OS X) and typing:</p>
<pre>gpg --keyserver pool.sks-keyservers.net --recv-keys 0x4E2C6E8793298290</pre>
<p>After importing the key, you can verify that the fingerprint
is correct:</p>
<pre>gpg --fingerprint 0x4E2C6E8793298290</pre>
<p>You should see:</p>
<pre>
pub 4096R/93298290 2014-12-15
Key fingerprint = EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290
uid Tor Browser Developers (signing key) <torbrowser@torproject.org>
sub 4096R/F65C2036 2014-12-15
sub 4096R/D40814E0 2014-12-15
sub 4096R/C3C07136 2016-08-24</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 Downloads folder, run:</p>
<strong>For Mac OS X users</strong>:<br />
<pre>gpg --verify ~/Downloads/TorBrowser-<version-torbrowserbundleosx64>-osx64_en-US.dmg{.asc*,}</pre>
<strong>For Linux users</strong> (change 32 to 64 if you have the 64-bit package):<br />
<pre>gpg --verify ~/Desktop/tor-browser-linux32-<version-torbrowserbundlelinux32>_en-US.tar.xz{.asc*,}</pre>
<p>The output should say "Good signature":</p>
<pre>
gpg: Signature made Tue 24 Jan 2015 09:29:09 AM CET using RSA key ID D40814E0
gpg: Good signature from "Tor Browser Developers (signing key) <torbrowser@torproject.org>"
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</pre> <p> Currently valid subkey fingerprints are:
<pre>
5242 013F 02AF C851 B1C7 36B8 7017 ADCE F65C 2036
BA1E E421 BBB4 5263 180E 1FC7 2E1A C68E D408 14E0
A430 0A6B C93C 0877 A445 1486 D148 3FA6 C3C0 7136</pre></p>
<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>
<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>
<p>See <a
href="https://www.gnupg.org/documentation/">https://www.gnupg.org/documentation/</a>
to learn more about GnuPG.</p>
<hr>
<a id="BuildVerification"></a>
<h3><a class="anchor" href="#BuildVerification">
Verifying sha256sums (advanced)</a></h3>
<hr>
<p>Build reproducibility is a <a
href="https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise">security
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.
Fortunately, it is not necessary for everyone to build Tor Browser
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
identical to the download.</p>
<p>The steps below walk through this process:</p>
<ul>
<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/">
https://www.torproject.org/dist/torbrowser/</a>, for example in '<version-torbrowserbundlelinux32>'
for Tor Browser <version-torbrowserbundlelinux32>.</li>
<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>
<li>Retrieve the signers' GPG keys. This can be done from the command
line by entering something like
<pre>gpg --keyserver keys.mozilla.org --recv-keys 0x4E2C6E8793298290</pre>
(This will bring you the public part of the Tor Browser developers'
signing key. Other developers' key IDs can be found on
<a href="<page docs/signing-keys>">this
page</a>.)</li>
<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>
<li>You should see a message like "Good signature from &lt;DEVELOPER
NAME&gt;". If you don't, there is a problem. Try these steps again.</li>
<li>If you want to verify a Windows Tor Browser package you need to first
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
<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>
<li>Now you can take the sha256sum of the Tor Browser package. On
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>
On Mac or Linux you can run <pre>shasum -a 256 &lt;TOR BROWSER FILE NAME&gt;.dmg</pre> or <pre>sha256sum &lt;TOR BROWSER FILE NAME&gt;.tar.gz</pre> without having to download a utility.</li>
<li>You will see a string of letters and numbers.</li>
<li>Open <tt>sha256sums-unsigned-build.txt</tt> in a text editor.</li>
<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
filename with the string of letters and numbers that appeared
on your command line. If they match, you've successfully verified the
build.</li>
</ul>
<p><a href="https://github.com/isislovecruft/scripts/blob/master/verify-gitian-builder-signatures">Scripts</a>
to <a href="https://tor.stackexchange.com/questions/648/how-to-verify-tor-browser-bundle-tbb-3-x">automate</a>
these steps have been written, but to use them you will need to modify
them yourself with the latest Tor Browser filename.</p>
<hr>
<a id="MARVerification"></a>
<h3><a class="anchor" href="#MARVerification">
Verifying MAR files we ship (advanced)</a></h3>
<hr>
<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
produced with our Gitian setup.</p>
<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
export LD_LIBRARY_PATH=/path/to/MAR/file/mar-tools
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>
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>
</div>
<!-- END MAINCOL -->
<div id = "sidecol">
#include "side.wmi"
#include "info.wmi"
</div>
<!-- END SIDECOL -->
</div>
<!-- END CONTENT -->
#include <foot.wmi>