]> pere.pagekite.me Git - homepage.git/blob - blog/data/2016-10-10-signal-landline.txt
Generated.
[homepage.git] / blog / data / 2016-10-10-signal-landline.txt
1 Title: Experience and updated recipe for using the Signal app without a mobile phone
2 Tags: english, debian, sikkerhet, surveillance
3 Date: 2016-10-10 11:30
4
5 <p>In July
6 <a href="http://people.skolelinux.org/pere/blog/How_to_use_the_Signal_app_if_you_only_have_a_land_line__ie_no_mobile_phone_.html">I
7 wrote how to get the Signal Chrome/Chromium app working</a> without
8 the ability to receive SMS messages (aka without a cell phone). It is
9 time to share some experiences and provide an updated setup.</p>
10
11 <p>The Signal app have worked fine for several months now, and I use
12 it regularly to chat with my loved ones. I had a major snag at the
13 end of my summer vacation, when the the app completely forgot my
14 setup, identity and keys. The reason behind this major mess was
15 running out of disk space. To avoid that ever happening again I have
16 started storing everything in <tt>userdata/</tt> in git, to be able to
17 roll back to an earlier version if the files are wiped by mistake. I
18 had to use it once after introducing the git backup. When rolling
19 back to an earlier version, one need to use the 'reset session' option
20 in Signal to get going, and notify the people you talk with about the
21 problem. I assume there is some sequence number tracking in the
22 protocol to detect rollback attacks. The git repository is rather big
23 (674 MiB so far), but I have not tried to figure out if some of the
24 content can be added to a .gitignore file due to lack of spare
25 time.</p>
26
27 <p>I've also hit the 90 days timeout blocking, and noticed that this
28 make it impossible to send messages using Signal. I could still
29 receive them, but had to patch the code with a new timestamp to send.
30 I believe the timeout is added by the developers to force people to
31 upgrade to the latest version of the app, even when there is no
32 protocol changes, to reduce the version skew among the user base and
33 thus try to keep the number of support requests down.</p>
34
35 <p>Since my original recipe, the Signal source code changed slightly,
36 making the old patch fail to apply cleanly. Below is an updated
37 patch, including the shell wrapper I use to start Signal. The
38 original version required a new user to locate the JavaScript console
39 and call a function from there. I got help from a friend with more
40 JavaScript knowledge than me to modify the code to provide a GUI
41 button instead. This mean that to get started you just need to run
42 the wrapper and click the 'Register without mobile phone' to get going
43 now. I've also modified the timeout code to always set it to 90 days
44 in the future, to avoid having to patch the code regularly.</p>
45
46 <p>So, the updated recipe for Debian Jessie:</p>
47
48 <ol>
49
50 <li>First, install required packages to get the source code and the
51 browser you need. Signal only work with Chrome/Chromium, as far as I
52 know, so you need to install it.
53
54 <pre>
55 apt install git tor chromium
56 git clone https://github.com/WhisperSystems/Signal-Desktop.git
57 </pre></li>
58
59 <li>Modify the source code using command listed in the the patch
60 block below.</li>
61
62 <li>Start Signal using the run-signal-app wrapper (for example using
63 <tt>`pwd`/run-signal-app</tt>).
64
65 <li>Click on the 'Register without mobile phone', will in a phone
66 number you can receive calls to the next minute, receive the
67 verification code and enter it into the form field and press
68 'Register'. Note, the phone number you use will be user Signal
69 username, ie the way others can find you on Signal.</li>
70
71 <li>You can now use Signal to contact others. Note, new contacts do
72 not show up in the contact list until you restart Signal, and there is
73 no way to assign names to Contacts. There is also no way to create or
74 update chat groups. I suspect this is because the web app do not have
75 a associated contact database.</li>
76
77 </ol>
78
79 <p>I am still a bit uneasy about using Signal, because of the way its
80 main author moxie0 reject federation and accept dependencies to major
81 corporations like Google (part of the code is fetched from Google) and
82 Amazon (the central coordination point is owned by Amazon). See for
83 example
84 <a href="https://github.com/LibreSignal/LibreSignal/issues/37">the
85 LibreSignal issue tracker</a> for a thread documenting the authors
86 view on these issues. But the network effect is strong in this case,
87 and several of the people I want to communicate with already use
88 Signal. Perhaps we can all move to <a href="https://ring.cx/">Ring</a>
89 once it <a href="https://bugs.debian.org/830265">work on my
90 laptop</a>? It already work on Windows and Android, and is included
91 in <a href="https://tracker.debian.org/pkg/ring">Debian</a> and
92 <a href="https://launchpad.net/ubuntu/+source/ring">Ubuntu</a>, but not
93 working on Debian Stable.</p>
94
95 <p>Anyway, this is the patch I apply to the Signal code to get it
96 working. It switch to the production servers, disable to timeout,
97 make registration easier and add the shell wrapper:</p>
98
99 <pre>
100 cd Signal-Desktop; cat &lt;&lt;EOF | patch -p1
101 diff --git a/js/background.js b/js/background.js
102 index 24b4c1d..579345f 100644
103 --- a/js/background.js
104 +++ b/js/background.js
105 @@ -33,9 +33,9 @@
106 });
107 });
108
109 - var SERVER_URL = 'https://textsecure-service-staging.whispersystems.org';
110 + var SERVER_URL = 'https://textsecure-service-ca.whispersystems.org';
111 var SERVER_PORTS = [80, 4433, 8443];
112 - var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments-staging.s3.amazonaws.com';
113 + var ATTACHMENT_SERVER_URL = 'https://whispersystems-textsecure-attachments.s3.amazonaws.com';
114 var messageReceiver;
115 window.getSocketStatus = function() {
116 if (messageReceiver) {
117 diff --git a/js/expire.js b/js/expire.js
118 index 639aeae..beb91c3 100644
119 --- a/js/expire.js
120 +++ b/js/expire.js
121 @@ -1,6 +1,6 @@
122 ;(function() {
123 'use strict';
124 - var BUILD_EXPIRATION = 0;
125 + var BUILD_EXPIRATION = Date.now() + (90 * 24 * 60 * 60 * 1000);
126
127 window.extension = window.extension || {};
128
129 diff --git a/js/views/install_view.js b/js/views/install_view.js
130 index 7816f4f..1d6233b 100644
131 --- a/js/views/install_view.js
132 +++ b/js/views/install_view.js
133 @@ -38,7 +38,8 @@
134 return {
135 'click .step1': this.selectStep.bind(this, 1),
136 'click .step2': this.selectStep.bind(this, 2),
137 - 'click .step3': this.selectStep.bind(this, 3)
138 + 'click .step3': this.selectStep.bind(this, 3),
139 + 'click .callreg': function() { extension.install('standalone') },
140 };
141 },
142 clearQR: function() {
143 diff --git a/options.html b/options.html
144 index dc0f28e..8d709f6 100644
145 --- a/options.html
146 +++ b/options.html
147 @@ -14,7 +14,10 @@
148 &lt;div class='nav'>
149 &lt;h1>{{ installWelcome }}&lt;/h1>
150 &lt;p>{{ installTagline }}&lt;/p>
151 - &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a> &lt;/div>
152 + &lt;div> &lt;a class='button step2'>{{ installGetStartedButton }}&lt;/a>
153 + &lt;br> &lt;a class="button callreg">Register without mobile phone&lt;/a>
154 +
155 + &lt;/div>
156 &lt;span class='dot step1 selected'>&lt;/span>
157 &lt;span class='dot step2'>&lt;/span>
158 &lt;span class='dot step3'>&lt;/span>
159 --- /dev/null 2016-10-07 09:55:13.730181472 +0200
160 +++ b/run-signal-app 2016-10-10 08:54:09.434172391 +0200
161 @@ -0,0 +1,12 @@
162 +#!/bin/sh
163 +set -e
164 +cd $(dirname $0)
165 +mkdir -p userdata
166 +userdata="`pwd`/userdata"
167 +if [ -d "$userdata" ] && [ ! -d "$userdata/.git" ] ; then
168 + (cd $userdata && git init)
169 +fi
170 +(cd $userdata && git add . && git commit -m "Current status." || true)
171 +exec chromium \
172 + --proxy-server="socks://localhost:9050" \
173 + --user-data-dir=$userdata --load-and-launch-app=`pwd`
174 EOF
175 chmod a+rx run-signal-app
176 </pre>
177
178 <p>As usual, if you use Bitcoin and want to show your support of my
179 activities, please send Bitcoin donations to my address
180 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>