Keine Nachrichten mehr nach Signal-Update durch Website-Release
Posted on Sunday, 01 April 2018 in Android
Da ich versuche, auf jegliche Abhängigkeit von Google zu verzichten, ebenso bei der Verwendung von Android ohne Google-Dienste und -Konto, benutze ich auch keine Google Play Services (bzw. habe diese aufgrund der Verwendung von Custom-ROMs gar nicht erst installiert). Entsprechend betreibe ich mein Smartphone ohne den Play Store und bin aus diesem Grund auf Alternativen wie F-Droid angewiesen. Ich nutze fast ausschließlich Open Source-Software, insofern stellt dies für mich keine Einschränkung dar. Allerdings werden auch manche quelloffene Tools nicht über F-Droid vertrieben, wie beispielsweise Firefox oder Signal.
Signal ohne Play Store
Da das (nach mehreren Namensänderungen jetzige) Signal nicht mehr über F-Droid vertrieben werden sollte (Moxie hat sich dagegen gestellt, es außerhalb von Google Play anzubieten), entstand der Fork LibreSignal, der auf dem Signal-Code basiert, allerdings die Push-Funktionalität von den Play Services auf WebSocket umstellte und somit die Abhängigkeit von diesen entfernt hatte. Die Entwicklung dieses Forks schlief immer weiter ein, bis sie Ende 2016 nach langen Diskussionen ganz eingestellt wurde und die App nach einiger Zeit ihren Dienst einstellte, da sie nur startet, wenn innerhalb einer gewissen Zeitspanne ein Versionsupdate durchgeführt wurde. Etwas später im März 2017 hat Moxie selbst Signal umgeschrieben, dass es auch außerhalb von Google Play vertrieben werden kann und die APK auf einer entsprechenden Seite zur Verfügung gestellt. Dort wird die App sporadisch (nicht jede neue Version wird dort hinterlegt, meist handelt es sich um größere Sprünge) aktualisiert. Signal selbst überprüft regelmäßig, ob dort eine neuere Version zur Verfügung steht und blendet einen Hinweis ein, um die Installation zu starten.
Problem mit neuer verschlüsselter Datenbank
Vor kurzem wurde auf der Seite die Version 4.17.5 veröffentlicht. Die zuvor vertriebene Version war 4.15.5. Beim Übergang zu 4.16 gab es im Hintergrund eine größere Änderung an der Datenbank, die für die Speicherung der Signal-Inhalte zuständig ist. Konkret wurde von der bisherigen Datenbankstruktur mit SQLite und Ciphertext Blobs zu SQLCipher gewechselt (zugehöriger Commit). Das Problem, das ich dadurch hatte, bestand darin, dass ich erst wieder Version 4.17.5 erhalten habe und bei diesem Upgrade keine Migration der Datenbank angestoßen wurde. Entsprechend begrüßte mich Signal mit einem komplett leeren Conversations-View. Es sah aus, als wären keinerlei Nachrichten mehr vorhanden. Über die Android-Einstellungen im App-Menü konnte ich jedoch sehen, dass der Speicher, der von Signal belegt wird, definitiv größer ist als die App selbst. Folglich schien es, als seien die Daten alle noch da, allerdings nicht lesbar.
Datenbank-Migration fehlgeschlagen / nicht getriggert
Nach kurzem Suchen fanden sich passende Einträge auf der Github-Seite von Signal, in denen das (Problem)[https://github.com/signalapp/Signal-Android/issues/7386] diskutiert wurde, ebenso ein nicht weiter hilfreicher Kommentar auf Reddit. Dabei ging es zwar um das Update auf eine Version des 4.16-Zweigs, aber das Grundproblem klang ähnlich. Mein erster Versuch war es, ein Downgrade auf die vorherige Version 4.15.5 durchzuführen. Über die Android-Oberfläche selbst schlug die Installation fehl; greifen wir zum Terminal. Entweder können wir ADB nutzen, oder ein Terminal direkt auf dem Smartphone selbst verwenden. Um ein Downgrade via ADB durchzuführen, muss zuerst die App auf das Gerät, sofern dies nicht bereits der Fall ist, und anschließend kann der Paketmanager pm verwendet werden:
$ adb push app.apk /sdcard/app.apk
$ adb shell pm install -r -d /sdcard/app.apk
Dabei steht -r für "retain data" und -d für "downgrade". Alternativ kann auch auf dem Smartphone selbst mittels Terminal und
# pm install -r -d /sdcard/app.apk
das Downgrade durchgeführt werden. Bei mir war es nötig, dass ich root-Rechte hatte, also zuvor noch schnell ein su ausgeführt.
Auf diese Weise konnte ich auf 4.15.5 zurückgehen und nach dem Öffnen von Signal waren alle Nachrichten wie gewohnt vorhanden. Als nächstes habe ich zur Sicherheit ein Backup angelegt. Teilweise schien es für andere Betroffene nötig, zuvor eine spezielle Signal Cleaner App zu installieren und kurz zu starten (man wird lediglich mit "hello world" begrüßt), bevor das Downgrade richtig funktionierte, oder auch das anschließende Upgrade. Danach habe ich dann das Upgrade auf die Version 4.16.9 durchgeführt. Ein anschließendes Öffnen von Signal (und ggf. Entsperren) hat die Migration der Datenbank gestartet. Als diese beendet war, habe ich weiterhin alle Nachrichten gesehen wie zuvor bei dem Versionszweig 4.15. Nun stand dem letzten Update auf 4.17.5 nichts mehr im Wege. Ein erneutes Öffnen von Signal und alle Nachrichten sind vorhanden, wie es sein soll.
Verwendete Apps
Die verwendeten Apps stammen entweder von der Signal-Seite selbst (wie entsprechend verlinkt), oder sind in den Github-Issues von Moxie auf Mega hinterlegte APKs, die ich zur Archivierung hier hinterlegt habe und zuvor auch entsprechend verlinkt sind.