Whinge about Signal a bit more

This commit is contained in:
Bob Mottram 2016-06-18 22:11:16 +01:00
parent cee60a5993
commit 9ac73f865c
2 changed files with 131 additions and 100 deletions

View File

@ -25,6 +25,7 @@
| [[Why can't I access my .onion site with a Tor browser?]] |
| [[What is the best hardware to run this system on?]] |
| [[Can I add more users to the system?]] |
| [[Why not use Signal for mobile chat?]] |
| [[What is the most secure chat app to use on mobile?]] |
| [[How do I remove a user from the system?]] |
| [[How do I reset the tripwire?]] |
@ -75,6 +76,14 @@ Select /Administrator controls/ then /Manage Users/ and then /Add a user/. You w
Something to consider when having more than a single user on the system is the security situation. The original administrator user will have access to all of the data for other users (including their encryption keys), so if you do add extra users they need to have *complete trust* in the administrator.
Another point is that Freedombone installations are not intended to support many users (maybe ten at most). Large numbers of users may make the system unstable, and the more users you have on one system the more it becomes a single point of failure and also perhaps a honeypot from the standpoint of adversaries. Think of what happened with Lavabit and the moral dilemma which an administrator can be faced with (comply with threats and betray the trust of your users or don't comply and suffer other consequences). Ideally, you never want to put yourself into a situation where you can be forced to betray others.
* Why not use Signal for mobile chat?
Celebrities recommend Signal. It's Free Software so it must be good, right?
If you are currently using a proprietary chat app, something without any encryption or something /really bad/ such as Telegram, then Signal is definitely a step up in terms of security. But Signal has problems, which can be summarised as:
* *It's based on a single server* run by Open Whisper Systems. That's a single point of failure and ought to be a big red flag (of the sporting rather than the socialist variety) as a possible locus for concentrated nefariousness.
* *It requires the installation of Google Play*. If you already have Google Play installed on a stock Android OS then this doesn't increase your security problems, but for other more secure Android variants it's a massive increase in attack surface.
* *It depends enturely upon the Google message pushing system*. That means that Google /has the complete and corresponding social graph of all Signal users/. Remember that metadata in aggregate is much better than having the content of messages. At any time Google could decide that it doesn't want to support Signal, or in adverse circumstances they could be leaned upon by the usual agencies or government cronies.
* What is the most secure chat app to use on mobile?
On mobile there are various options. The apps which are likely to be most secure are ones which have end-to-end encryption enabled by default and which can also be onion routed via Orbot. End-to-end encryption secures the content of the message and onion routing obscures the metadata, making it hard for a passive adversary to know who is communicating with who.

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2016-05-06 Fri 21:38 -->
<!-- 2016-06-18 Sat 22:10 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title></title>
@ -171,15 +171,15 @@ for the JavaScript code in this tag.
</colgroup>
<tbody>
<tr>
<td class="org-left"><a href="#orgb121a4d">I don't have a static IP address. Can I still install this system?</a></td>
<td class="org-left"><a href="#org2937dfe">I don't have a static IP address. Can I still install this system?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orgf010a5a">Why not support building images for Raspberry Pi?</a></td>
<td class="org-left"><a href="#org11c29a2">Why not support building images for Raspberry Pi?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org1aa1408">Why use Github?</a></td>
<td class="org-left"><a href="#org6b6b4a6">Why use Github?</a></td>
</tr>
<tr>
@ -187,79 +187,83 @@ for the JavaScript code in this tag.
</tr>
<tr>
<td class="org-left"><a href="#org100d598">Why can't I access my .onion site with a Tor browser?</a></td>
<td class="org-left"><a href="#orge721efa">Why can't I access my .onion site with a Tor browser?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orga3487a7">What is the best hardware to run this system on?</a></td>
<td class="org-left"><a href="#orgcc64570">What is the best hardware to run this system on?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orgd298dbb">Can I add more users to the system?</a></td>
<td class="org-left"><a href="#org5ea81bb">Can I add more users to the system?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orgef8453">What is the most secure chat app to use on mobile?</a></td>
<td class="org-left"><a href="#orgecce215">Why not use Signal for mobile chat?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org6c7f74">How do I remove a user from the system?</a></td>
<td class="org-left"><a href="#org6d358a0">What is the most secure chat app to use on mobile?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org9551764">How do I reset the tripwire?</a></td>
<td class="org-left"><a href="#org7e89278">How do I remove a user from the system?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org1a2b83f">Is metadata protected?</a></td>
<td class="org-left"><a href="#org7ad3b9b">How do I reset the tripwire?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org88df6a0">How do I create email processing rules?</a></td>
<td class="org-left"><a href="#org8d1a002">Is metadata protected?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org844e5d1">Why isn't dynamic DNS working?</a></td>
<td class="org-left"><a href="#orgc63a457">How do I create email processing rules?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org577cd3b">How do I change my encryption settings?</a></td>
<td class="org-left"><a href="#org959a7b2">Why isn't dynamic DNS working?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org23cc852">How do I get a domain name?</a></td>
<td class="org-left"><a href="#orgf69278f">How do I change my encryption settings?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orgc277e1a">How do I get a "real" SSL/TLS/HTTPS certificate?</a></td>
<td class="org-left"><a href="#org41da741">How do I get a domain name?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org2d4283">How do I renew a Let's Encrypt certificate?</a></td>
<td class="org-left"><a href="#org78b233b">How do I get a "real" SSL/TLS/HTTPS certificate?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org4e3be95">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</a></td>
<td class="org-left"><a href="#orgd58f779">How do I renew a Let's Encrypt certificate?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orgfc78066">Why use self-signed certificates?</a></td>
<td class="org-left"><a href="#org8b57e37">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org56ed697">Why not use the services of $company instead? They took the Seppuku pledge</a></td>
<td class="org-left"><a href="#orgad3dbb9">Why use self-signed certificates?</a></td>
</tr>
<tr>
<td class="org-left"><a href="#org1d00f37">Why does my email keep getting rejected as spam by Gmail/etc?</a></td>
<td class="org-left"><a href="#org23ed893">Why not use the services of $company instead? They took the Seppuku pledge</a></td>
</tr>
<tr>
<td class="org-left"><a href="#orgc49b970">Why does my email keep getting rejected as spam by Gmail/etc?</a></td>
</tr>
</tbody>
</table>
</div>
<div id="outline-container-orgb121a4d" class="outline-2">
<h2 id="orgb121a4d">I don't have a static IP address. Can I still install this system?</h2>
<div class="outline-text-2" id="text-orgb121a4d">
<div id="outline-container-org2937dfe" class="outline-2">
<h2 id="org2937dfe">I don't have a static IP address. Can I still install this system?</h2>
<div class="outline-text-2" id="text-org2937dfe">
<p>
Yes. The minimum requirements are to have some hardware that you can install Debian onto and also that you have administrator access to your internet router so that you can forward ports to the system which has Freedombone installed.
</p>
@ -269,9 +273,9 @@ The lack of a static IP address can be worked around by using a dynamic DNS serv
</p>
</div>
</div>
<div id="outline-container-orgf010a5a" class="outline-2">
<h2 id="orgf010a5a">Why not support building images for Raspberry Pi?</h2>
<div class="outline-text-2" id="text-orgf010a5a">
<div id="outline-container-org11c29a2" class="outline-2">
<h2 id="org11c29a2">Why not support building images for Raspberry Pi?</h2>
<div class="outline-text-2" id="text-org11c29a2">
<p>
The FreedomBox project supports Raspberry Pi builds, and the image build system for Freedombone is based on the same system. However, although the Raspberry Pi can run a version of Debian it requires a closed proprietary blob in order to boot the hardware. Who knows what that blob might contain or what exploits it could facilitate. From an adversarial point of view if you were trying to deliver "bulk equipment interference" then it doesn't get any better than piggybacking on something which has control of the boot process, and hence all subsequently run processes.
</p>
@ -281,9 +285,9 @@ So although the Raspberry Pi is cheap and hugely popular it's not supported by t
</p>
</div>
</div>
<div id="outline-container-org1aa1408" class="outline-2">
<h2 id="org1aa1408">Why use Github?</h2>
<div class="outline-text-2" id="text-org1aa1408">
<div id="outline-container-org6b6b4a6" class="outline-2">
<h2 id="org6b6b4a6">Why use Github?</h2>
<div class="outline-text-2" id="text-org6b6b4a6">
<p>
Github is paradoxically a centralized, closed and proprietary system which happens to mostly host free and open source projects. Up until now it has been relatively benign, but at some point in the name of "growth" it will likely start becoming more evil, or just become like SourceForge - which was also once much loved by FOSS developers, but turned into a den of malvertizing.
</p>
@ -301,17 +305,17 @@ Currently many of the repositories used for applications which are not yet packa
</p>
</div>
</div>
<div id="outline-container-org100d598" class="outline-2">
<h2 id="org100d598">Why can't I access my .onion site with a Tor browser?</h2>
<div class="outline-text-2" id="text-org100d598">
<div id="outline-container-orge721efa" class="outline-2">
<h2 id="orge721efa">Why can't I access my .onion site with a Tor browser?</h2>
<div class="outline-text-2" id="text-orge721efa">
<p>
Probably you need to add the site to the NoScript whitelist. Typically click/press on the noscript icon (or select from the menu on mobile) then select <i>whitelist</i> and add the site URL. You may also need to disable HTTPS Everywhere when using onion addresses, which don't use https.
</p>
</div>
</div>
<div id="outline-container-orga3487a7" class="outline-2">
<h2 id="orga3487a7">What is the best hardware to run this system on?</h2>
<div class="outline-text-2" id="text-orga3487a7">
<div id="outline-container-orgcc64570" class="outline-2">
<h2 id="orgcc64570">What is the best hardware to run this system on?</h2>
<div class="outline-text-2" id="text-orgcc64570">
<p>
It was originally designed to run on the Beaglebone Black, but that should be regarded as the most minimal system, because it's single core and has by today's standards a small amount of memory. Obviously the more powerful the hardware is the faster things like web pages (blog, social networking, etc) will be served but the more electricity such a system will require if you're running it 24/7. A good compromise between performance and energy consumption is something like an old netbook. The battery of an old netbook or laptop even gives you <a href="https://en.wikipedia.org/wiki/Uninterruptible_power_supply">UPS capability</a> to keep the system going during brief power outages or cable re-arrangements, and that means using full disk encryption on the server also becomes more practical.
</p>
@ -321,9 +325,9 @@ It was originally designed to run on the Beaglebone Black, but that should be re
</p>
</div>
</div>
<div id="outline-container-orgd298dbb" class="outline-2">
<h2 id="orgd298dbb">Can I add more users to the system?</h2>
<div class="outline-text-2" id="text-orgd298dbb">
<div id="outline-container-org5ea81bb" class="outline-2">
<h2 id="org5ea81bb">Can I add more users to the system?</h2>
<div class="outline-text-2" id="text-org5ea81bb">
<p>
Yes. Freedombone can support a small number of users, for a "<i>friends and family</i>" type of home installation. This gives them access to an email account, XMPP, SIP phone and the blog (depending on whether the variant which you installed includes those).
</p>
@ -347,9 +351,27 @@ Another point is that Freedombone installations are not intended to support many
</p>
</div>
</div>
<div id="outline-container-orgef8453" class="outline-2">
<h2 id="orgef8453">What is the most secure chat app to use on mobile?</h2>
<div class="outline-text-2" id="text-orgef8453">
<div id="outline-container-orgecce215" class="outline-2">
<h2 id="orgecce215">Why not use Signal for mobile chat?</h2>
<div class="outline-text-2" id="text-orgecce215">
<p>
Celebrities recommend Signal. It's Free Software so it must be good, right?
</p>
<p>
If you are currently using a proprietary chat app, something without any encryption or something <i>really bad</i> such as Telegram, then Signal is definitely a step up in terms of security. But Signal has problems, which can be summarised as:
</p>
<ul class="org-ul">
<li><b>It's based on a single server</b> run by Open Whisper Systems. That's a single point of failure and ought to be a big red flag (of the sporting rather than the socialist variety) as a possible locus for concentrated nefariousness.</li>
<li><b>It requires the installation of Google Play</b>. If you already have Google Play installed on a stock Android OS then this doesn't increase your security problems, but for other more secure Android variants it's a massive increase in attack surface.</li>
<li><b>It depends enturely upon the Google message pushing system</b>. That means that Google <i>has the complete and corresponding social graph of all Signal users</i>. Remember that metadata in aggregate is much better than having the content of messages. At any time Google could decide that it doesn't want to support Signal, or in adverse circumstances they could be leaned upon by the usual agencies or government cronies.</li>
</ul>
</div>
</div>
<div id="outline-container-org6d358a0" class="outline-2">
<h2 id="org6d358a0">What is the most secure chat app to use on mobile?</h2>
<div class="outline-text-2" id="text-org6d358a0">
<p>
On mobile there are various options. The apps which are likely to be most secure are ones which have end-to-end encryption enabled by default and which can also be onion routed via Orbot. End-to-end encryption secures the content of the message and onion routing obscures the metadata, making it hard for a passive adversary to know who is communicating with who.
</p>
@ -363,9 +385,9 @@ There are many other fashionable chat apps with end-to-end security, but often t
</p>
</div>
</div>
<div id="outline-container-org6c7f74" class="outline-2">
<h2 id="org6c7f74">How do I remove a user from the system?</h2>
<div class="outline-text-2" id="text-org6c7f74">
<div id="outline-container-org7e89278" class="outline-2">
<h2 id="org7e89278">How do I remove a user from the system?</h2>
<div class="outline-text-2" id="text-org7e89278">
<p>
To remove a user:
</p>
@ -381,9 +403,9 @@ Select <i>Administrator controls</i> then <i>Manage Users</i> and then <i>Delete
</p>
</div>
</div>
<div id="outline-container-org9551764" class="outline-2">
<h2 id="org9551764">How do I reset the tripwire?</h2>
<div class="outline-text-2" id="text-org9551764">
<div id="outline-container-org7ad3b9b" class="outline-2">
<h2 id="org7ad3b9b">How do I reset the tripwire?</h2>
<div class="outline-text-2" id="text-org7ad3b9b">
<p>
The tripwire will be automatically reset once per week. If you want to reset it earlier then do the following:
</p>
@ -399,9 +421,9 @@ Select <i>Administrator controls</i> then "reset tripwire" using cursors and spa
</p>
</div>
</div>
<div id="outline-container-org1a2b83f" class="outline-2">
<h2 id="org1a2b83f">Is metadata protected?</h2>
<div class="outline-text-2" id="text-org1a2b83f">
<div id="outline-container-org8d1a002" class="outline-2">
<h2 id="org8d1a002">Is metadata protected?</h2>
<div class="outline-text-2" id="text-org8d1a002">
<blockquote>
<p>
"<i>We kill people based on metadata</i>"
@ -417,9 +439,9 @@ Even when using Freedombone metadata analysis by third parties is still possible
</p>
</div>
</div>
<div id="outline-container-org88df6a0" class="outline-2">
<h2 id="org88df6a0">How do I create email processing rules?</h2>
<div class="outline-text-2" id="text-org88df6a0">
<div id="outline-container-orgc63a457" class="outline-2">
<h2 id="orgc63a457">How do I create email processing rules?</h2>
<div class="outline-text-2" id="text-orgc63a457">
<div class="org-src-container">
<pre class="src src-bash">ssh username@domainname -p 2222
@ -476,9 +498,9 @@ Spamassassin is also available and within Mutt you can use the S (shift+s) key t
</p>
</div>
</div>
<div id="outline-container-org844e5d1" class="outline-2">
<h2 id="org844e5d1">Why isn't dynamic DNS working?</h2>
<div class="outline-text-2" id="text-org844e5d1">
<div id="outline-container-org959a7b2" class="outline-2">
<h2 id="org959a7b2">Why isn't dynamic DNS working?</h2>
<div class="outline-text-2" id="text-org959a7b2">
<p>
If you run the command:
</p>
@ -546,9 +568,9 @@ http://httpbin.org/ip
</div>
</div>
<div id="outline-container-org577cd3b" class="outline-2">
<h2 id="org577cd3b">How do I change my encryption settings?</h2>
<div class="outline-text-2" id="text-org577cd3b">
<div id="outline-container-orgf69278f" class="outline-2">
<h2 id="orgf69278f">How do I change my encryption settings?</h2>
<div class="outline-text-2" id="text-orgf69278f">
<p>
Suppose that some new encryption vulnerability has been announced and that you need to change your encryption settings. Maybe an algorithm thought to be secure is now no longer so and you need to remove it. You can change your settings by doing the following:
</p>
@ -564,9 +586,9 @@ Select <i>Administrator controls</i> then select <i>Security Settings</i>. You w
</p>
</div>
</div>
<div id="outline-container-org23cc852" class="outline-2">
<h2 id="org23cc852">How do I get a domain name?</h2>
<div class="outline-text-2" id="text-org23cc852">
<div id="outline-container-org41da741" class="outline-2">
<h2 id="org41da741">How do I get a domain name?</h2>
<div class="outline-text-2" id="text-org41da741">
<p>
Suppose that you have bought a domain name (rather than using a free subdomain on freedns) and you want to use that instead.
</p>
@ -634,9 +656,9 @@ You should now be able to send an email from <i>postmaster@mynewdomainname</i> a
</div>
</div>
<div id="outline-container-orgc277e1a" class="outline-2">
<h2 id="orgc277e1a">How do I get a "real" SSL/TLS/HTTPS certificate?</h2>
<div class="outline-text-2" id="text-orgc277e1a">
<div id="outline-container-org78b233b" class="outline-2">
<h2 id="org78b233b">How do I get a "real" SSL/TLS/HTTPS certificate?</h2>
<div class="outline-text-2" id="text-org78b233b">
<p>
If you did the full install or selected the social variant then the system will have tried to obtain a Let's Encrypt certificate automatically during the install process. If this failed for any reason, or if you have created a new site which you need a certificate for then do the following:
</p>
@ -656,9 +678,9 @@ One thing to be aware of is that Let's Encrypt doesn't support many dynamic DNS
</p>
</div>
</div>
<div id="outline-container-org2d4283" class="outline-2">
<h2 id="org2d4283">How do I renew a Let's Encrypt certificate?</h2>
<div class="outline-text-2" id="text-org2d4283">
<div id="outline-container-orgd58f779" class="outline-2">
<h2 id="orgd58f779">How do I renew a Let's Encrypt certificate?</h2>
<div class="outline-text-2" id="text-orgd58f779">
<p>
Normally certificates will be automatically renewed once per month, so you don't need to be concerned about it. If anything goes wrong with the automatic renewal then you should receive a warning email.
</p>
@ -678,9 +700,9 @@ Select <i>Administrator controls</i> then <b>Security settings</b> then <b>Renew
</p>
</div>
</div>
<div id="outline-container-org4e3be95" class="outline-2">
<h2 id="org4e3be95">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</h2>
<div class="outline-text-2" id="text-org4e3be95">
<div id="outline-container-org8b57e37" class="outline-2">
<h2 id="org8b57e37">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</h2>
<div class="outline-text-2" id="text-org8b57e37">
<p>
Most likely it's because Let's Encrypt doesn't support your particular domain or subdomain. Currently free subdomains tend not to work. You'll need to buy a domain name, link it to your dynamic DNS account and then do:
</p>
@ -696,9 +718,9 @@ Select <i>Administrator controls</i> then <b>Security settings</b> then <b>Creat
</p>
</div>
</div>
<div id="outline-container-orgfc78066" class="outline-2">
<h2 id="orgfc78066">Why use self-signed certificates?</h2>
<div class="outline-text-2" id="text-orgfc78066">
<div id="outline-container-orgad3dbb9" class="outline-2">
<h2 id="orgad3dbb9">Why use self-signed certificates?</h2>
<div class="outline-text-2" id="text-orgad3dbb9">
<p>
Almost everywhere on the web you will read that self-signed certificates are worthless. They bring up <i>scary-scary looking</i> browser warnings and gurus will advise you not to use them. Self-signed certificates are quite useful though. What the scary warnings mean - and it would be good if they explained this more clearly - is that you have an encrypted connection established but there is <i>no certainty about who that connection is with</i>.
</p>
@ -720,17 +742,17 @@ For now a self-signed certificate will probably in most cases protect your commu
</p>
</div>
</div>
<div id="outline-container-org56ed697" class="outline-2">
<h2 id="org56ed697">Why not use the services of $company instead? They took the Seppuku pledge</h2>
<div class="outline-text-2" id="text-org56ed697">
<div id="outline-container-org23ed893" class="outline-2">
<h2 id="org23ed893">Why not use the services of $company instead? They took the Seppuku pledge</h2>
<div class="outline-text-2" id="text-org23ed893">
<p>
<a href="https://cryptostorm.org/viewtopic.php?f=63&amp;t=2954&amp;sid=7de2d1e699cfde2f574e6a7f6ea5a173">That pledge</a> is utterly worthless. Years ago people trusted Google in the same sort of way, because they promised not be be evil and because a lot of the engineers working for them seemed like honest types who were "<i>on our side</i>". Post-<a href="https://en.wikipedia.org/wiki/Nymwars">nymwars</a> and post-<a href="https://en.wikipedia.org/wiki/PRISM_(surveillance_program)">PRISM</a> we know exactly how much Google cared about the privacy and security of its users. But Google is only one particular example. In general don't trust pledges made by companies, even if the people running them seem really sincere.
</p>
</div>
</div>
<div id="outline-container-org1d00f37" class="outline-2">
<h2 id="org1d00f37">Why does my email keep getting rejected as spam by Gmail/etc?</h2>
<div class="outline-text-2" id="text-org1d00f37">
<div id="outline-container-orgc49b970" class="outline-2">
<h2 id="orgc49b970">Why does my email keep getting rejected as spam by Gmail/etc?</h2>
<div class="outline-text-2" id="text-orgc49b970">
<p>
Welcome to the world of email. Email is really the archetypal decentralized service, developed during the early days of the internet. In principle anyone can run an email server, and that's exactly what you're doing with Freedombone. Email is very useful, but it has a big problem, and that's that the protocols are totally insecure. That made it easy for spammers to do their thing, and in response highly elaborate spam filtering and blocking systems were developed. Chances are that your emails are being blocked in this way. Sometimes the blocking is so indisciminate that entire countries are excluded. What can you do about it? Unless you control the block list at the receiving end you may not be able to do much unless you can find an email proxy server which is trusted by the receiving server.
</p>
@ -771,19 +793,19 @@ Return to the <a href="index.html">home page</a>
<style type="text/css">
.back-to-top {
position: fixed;
bottom: 2em;
right: 0px;
text-decoration: none;
color: #000000;
background-color: rgba(235, 235, 235, 0.80);
font-size: 12px;
padding: 1em;
display: none;
position: fixed;
bottom: 2em;
right: 0px;
text-decoration: none;
color: #000000;
background-color: rgba(235, 235, 235, 0.80);
font-size: 12px;
padding: 1em;
display: none;
}
.back-to-top:hover {
background-color: rgba(135, 135, 135, 0.50);
background-color: rgba(135, 135, 135, 0.50);
}
</style>
@ -792,15 +814,15 @@ Return to the <a href="index.html">home page</a>
</div>
<script type="text/javascript">
var offset = 220;
var duration = 500;
jQuery(window).scroll(function() {
if (jQuery(this).scrollTop() > offset) {
jQuery('.back-to-top').fadeIn(duration);
} else {
jQuery('.back-to-top').fadeOut(duration);
}
});
var offset = 220;
var duration = 500;
jQuery(window).scroll(function() {
if (jQuery(this).scrollTop() > offset) {
jQuery('.back-to-top').fadeIn(duration);
} else {
jQuery('.back-to-top').fadeOut(duration);
}
});
</script>
</div>
</body>