Submarine

Diese Seite ist eine Übersetzung. Weicht sie von der englischen Fassung ab, ist die englische Fassung maßgeblich. Englische Fassung

So werden Ihre Daten geschützt

Wir bitten Sie nicht, uns zu vertrauen. Diese Seite erklärt genau, was verschlüsselt wird, was unser Server sehen kann und was nicht, und wie Sie jede Aussage selbst prüfen können.

Das Wichtigste in einer Minute

  • Ihre Server, Zugangsdaten, Schlüssel und Notizen liegen in einer Datei auf Ihrem Gerät, verschlüsselt mit AES-256-GCM. Einige Einstellungen, die nur für dieses Gerät gelten, etwa das Aussehen der App und ein für einen RDP-Server freigegebener Ordner, liegen unverschlüsselt in den Einstellungen der App und werden nie synchronisiert.
  • Der Schlüssel wird mit Argon2id aus Ihrem Profilpasswort abgeleitet. Dieses Verfahren ist absichtlich langsam, damit Rateversuche teuer sind. Das Passwort wird nie gespeichert und nirgendwohin gesendet.
  • Wenn Sie die Synchronisierung einschalten, wird jeder Eintrag auf Ihrem Gerät verschlüsselt, bevor er hochgeladen wird. Der Server speichert Daten, die er nicht entschlüsseln kann.
  • Der Server sieht aber, was von außen an Ihren Daten erkennbar ist: Ihre E-Mail-Adresse, wann und von welcher IP-Adresse aus Sie synchronisieren, wie viele Einträge jeder Art Sie haben und wie groß sie sind, Ihre Profilnamen und bei geteilten Profilen die Namen der Freigaben und die E-Mail-Adressen der Mitglieder.
  • In der App gibt es keine Werbung, keine Nutzungsanalyse und keine Absturzberichte.

Das kann der Server nicht lesen

  • Was in Ihren Einträgen steht: Namen, Adressen, Ports, Benutzernamen, Passwörter, private Schlüssel und ihre Passphrasen, Tunnel, Notizen, Befehle, Ordnernamen
  • Welche Zugangsdaten und Schlüssel zu welchem Server gehören
  • Wer einen Eintrag geändert hat
  • Ihr Profilpasswort, Ihre Freigabe-Passphrase und die Schlüssel, die Ihre Profile öffnen

Das kann der Server sehen

  • Ihre E-Mail-Adresse und, wenn Sie sich anmelden, Ihr Kontopasswort (er speichert davon nur einen bcrypt-Hash)
  • IP-Adresse und Zeitpunkt von Anmeldungen und Synchronisierungen
  • Wie viele Einträge jeder Art ein Profil hat, wie groß sie sind und wann jeder davon von welchem Gerät geändert wurde (eine zufällige ID)
  • Ihre Profilnamen
  • Bei geteilten Profilen: die Namen der Freigaben, die E-Mail-Adressen der Mitglieder und ihre Rollen

Was beim Synchronisieren passiert

Verlässt nie Ihr Gerät
ProfilpasswortArgon2idProfilschlüsselAES-256-GCMVerschlüsselte Einträge
HTTPSSync-ServerSpeichert verschlüsselte Einträge und die oben aufgeführten Angaben
Das Passwort und die Schlüssel bleiben auf Ihrem Gerät. Gesendet werden nur verschlüsselte Einträge und die zugehörigen Angaben.

1. Auf Ihrem Gerät

Jedes Profil ist eine Datei. Darin liegt eine kleine Datenbank mit Ihren Servern, Zugangsdaten, SSH-Schlüsseln, Notizen und Einstellungen. Die ganze Datenbank wird komprimiert und dann mit AES-256-GCM verschlüsselt. Bei jedem Speichern wird eine neue zufällige Nonce verwendet, und die Datei wird zuerst in eine temporäre Kopie geschrieben, damit ein Absturz keine halbe Datei hinterlassen kann.

Der Schlüssel wird mit Argon2id aus Ihrem Profilpasswort abgeleitet, und zwar mit 64 MiB Speicher, 3 Durchläufen und 4 Lanes sowie einem zufälligen Salt für jedes Profil. Diese Einstellungen sind in der App fest vorgegeben, sodass eine veränderte Datei sie nicht abschwächen kann.

Das Passwort wird nie auf den Datenträger geschrieben und nirgendwohin gesendet. Sobald der Schlüssel abgeleitet ist, wird die Kopie des Passworts im Kern der App gelöscht, und der Schlüssel wird gelöscht, wenn Sie das Profil sperren. Das Sperren schließt außerdem alle Verbindungen und bricht eine Anmeldung ab, die noch läuft. Wenn Sie das Passwort vergessen, lässt sich das Profil nicht öffnen. Ein Zurücksetzen gibt es nicht, weil nirgends etwas aufbewahrt wird, womit es sich öffnen ließe.

Die Schnellentsperrung ist optional und standardmäßig ausgeschaltet. Unter Windows nutzt sie Windows Hello und das TPM, unter Android den Fingerabdrucksensor und den Android Keystore. Das System verwahrt den Schlüssel des Profils, nie Ihr Passwort, und dieser Schlüssel wird nie synchronisiert. Unter Android ist die Cloud-Sicherung des Systems für die Daten der App ausgeschaltet.

Wenn unter Windows die Remotedesktopverbindung einen Server mit gespeichertem Passwort öffnet, übergibt die App das Passwort in einer kurzlebigen .rdp-Datei. Das Passwort darin ist mit Windows DPAPI für Ihr Windows-Benutzerkonto verschlüsselt, und die Datei wird gelöscht, sobald die Remotedesktopverbindung sie gelesen hat (spätestens nach 30 Sekunden; eine Datei, die nach einem Absturz liegen geblieben ist, wird beim nächsten Start entfernt).

2. Synchronisierung (Cloud sync)

Die Synchronisierung ist ausgeschaltet, bis Sie sich anmelden. Jedes Profil hat einen eigenen zufälligen 256-Bit-Datenschlüssel, der im verschlüsselten Profil liegt. Vor dem Hochladen wird jeder Eintrag (ein Server, Zugangsdaten, ein Schlüssel, eine Notiz …) einzeln mit diesem Schlüssel verschlüsselt, mit AES-256-GCM und einer neuen zufälligen Nonce.

Zu jedem verschlüsselten Eintrag erhält der Server eine zufällige ID, die Art des Eintrags, einen Zeitstempel und eine Markierung, die angibt, ob der Eintrag gelöscht wurde. Der Zeitstempel enthält eine zufällige ID des Geräts, das die Änderung vorgenommen hat. An der Größe des verschlüsselten Eintrags lässt sich ungefähr ablesen, wie groß der Eintrag ist. Der Server speichert außerdem den Namen jedes Profils. Bekannte Host-Schlüssel, der Befehlsverlauf, die Überwachungseinstellungen und die Einstellungen, die nur für dieses Gerät gelten, werden nie synchronisiert.

Das speichert der Server für einen Eintrag: (Beispiel)

{
  "uuid": "6f1c2e0a9b7d4c3e8a5f0d1b2c3e4f50",
  "entity_type": "servers",
  "updated_at": "001761043562118:00000:9f3a61c2d4e5b7a8",
  "deleted": false,
  "blob": "4e8a1f0c2b9d3e7a5c6f8b1d0a2e4c6b8d0f1a3c5e7b9d1f…"
}

3. Ein Profil auf einem neuen Gerät öffnen

Um ein synchronisiertes Profil auf einem anderen Gerät zu öffnen, braucht dieses Gerät den Datenschlüssel des Profils. Deshalb speichert der Server einen weiteren Datensatz: den Datenschlüssel, verschlüsselt mit einem Schlüssel, der mit denselben Argon2id-Einstellungen aus Ihrem Profilpasswort abgeleitet wird. Der Server kann ihn nicht öffnen.

Das ist zugleich der wichtigste Ansatzpunkt für einen Angreifer, falls er jemals die Daten des Servers stehlen sollte: Er könnte versuchen, Ihr Profilpasswort offline zu erraten. Jeder Rateversuch kostet eine vollständige Argon2id-Berechnung. Ein langes Passwort, das Sie nirgendwo sonst verwenden, hält Ihre Daten daher sicher.

4. Ihr Kontopasswort

Ihr Sync-Konto hat ein eigenes Passwort, getrennt von Ihrem Profilpasswort. Es wird bei der Anmeldung über HTTPS an den Server gesendet, und der Server speichert davon nur einen bcrypt-Hash. Nach 5 falschen Passworteingaben pausiert die Anmeldung per Passwort für 15 Minuten.

Der Dienst läuft hinter Cloudflare; Cloudflare wickelt die HTTPS-Verbindung für ihn ab. Wie der Server könnte daher auch Cloudflare Ihr Kontopasswort bei der Anmeldung sehen, Ihre Einträge aber nur in verschlüsselter Form.

Verwenden Sie Ihr Profilpasswort nie als Kontopasswort. Dann kann nichts, was der Server oder Cloudflare jemals sieht, Ihre Profile öffnen.

5. Ein Profil teilen

Zum Teilen von Profilen hat jedes Konto ein X25519-Schlüsselpaar. Der private Schlüssel ist mit einem Schlüssel verschlüsselt, der aus Ihrer Freigabe-Passphrase abgeleitet wird (wieder mit Argon2id), und die Passphrase verlässt nie Ihr Gerät. Jedes Mitglied eines geteilten Profils erhält den Datenschlüssel des Profils, versiegelt mit seinem eigenen öffentlichen Schlüssel.

Wenn Sie jemanden einladen, verwendet die App den öffentlichen Schlüssel, den der Server für diese E-Mail-Adresse liefert. Ändert sich der Schlüssel eines Mitglieds später, weist die App Sie darauf hin und zeigt einen Fingerabdruck, den Sie mit der Person abgleichen können. Der Server kennt die Namen geteilter Profile und weiß, wer Mitglied ist, aber nicht, was darin steht.

6. Wenn der Server böswillig wäre

Bei guter Sicherheit geht es nicht nur darum, was ein Server tun soll. Hier steht, was jemand mit voller Kontrolle über den Server tun könnte und was nicht.

Was diese Person nicht könnte

  • Ihre Einträge lesen oder ihren Inhalt unbemerkt ändern
  • Die gespeicherte Kopie Ihres Profilschlüssels ohne Ihr Profilpasswort öffnen
  • Ihr Profilpasswort oder Ihre Freigabe-Passphrase erfahren – die App sendet beides nie
  • Die App auf Ihrem Gerät verändern: Es gibt keine automatischen Aktualisierungen; die App zeigt nur an, dass eine neue Version vorliegt

Was diese Person könnte

  • Versuchen, ein schwaches Profilpasswort offline zu erraten, mit einer langsamen Argon2id-Berechnung pro Versuch
  • Ihr Kontopasswort abfangen, wenn Sie sich das nächste Mal anmelden
  • Einträge löschen, ältere Versionen zurückspielen oder Änderungen zurückhalten. Bevor eine Synchronisierung etwas löscht, speichert die App eine Kopie Ihres Profils auf Ihrem Gerät
  • Einen falschen öffentlichen Schlüssel liefern, wenn Sie jemanden zu einem geteilten Profil einladen
  • Die Angaben sehen, die in der Tabelle oben aufgeführt sind

7. Alles, womit sich die App verbindet

Ihre eigenen Server sowie die Proxys und Jump-Hosts, die Sie dafür einrichten. Der Sync-Server, nur wenn Sie angemeldet sind. Und GitHub, um nach einer neueren Version zu suchen: Wenn sich die Profilliste öffnet und wenn Sie „Check for updates“ wählen, fragt die App die öffentliche Liste der Releases auf GitHub ab. Diese Anfrage enthält nur den Namen und die Version der App.

Die App enthält keinen Code für Nutzungsanalyse, Absturzberichte oder Werbung. Für die Synchronisierung vertraut die App nur ihrer eigenen eingebauten Liste von Zertifizierungsstellen, und sie folgt nie einer Umleitung. So kann sie nicht unbemerkt auf einen anderen Server umgelenkt werden.

8. Was ein Remote-Desktop von Ihrem Gerät bekommt

Die Zwischenablage. Text, den Sie in einen RDP- oder VNC-Tab einfügen, geht an diesen Server, und bevor Sie einfügen, wird ihm nichts angeboten. Wenn Share the clipboard eingeschaltet ist (die Standardeinstellung, für jeden Server einzeln schaltbar), wird Text, der auf dem Remote-Desktop kopiert wird, in die Zwischenablage dieses Geräts gelegt. Dabei geht es nur um Text, nie um Dateien, und VNC überträgt nur reinen ASCII-Text.

Dateien nur mit dem eingebauten RDP-Client auf einem Computer und nur, wenn Sie für diesen Server einen Ordner oder ein Laufwerk auswählen, auf Wunsch schreibgeschützt. Der Server sieht die Freigabe als Laufwerk unter \\tsclient und sonst nichts von Ihrem Computer. Jeder Pfad, den er anfragt, wird geprüft: kein .., und auf dem Weg wird keinem Link gefolgt. So ist nichts außerhalb dessen erreichbar, was Sie ausgewählt haben.

Diese Einstellungen bleiben auf diesem Gerät und werden nie synchronisiert. Daher kann niemand, mit dem Sie ein Profil teilen, sie einschalten.

Prüfen Sie es selbst

Sie müssen sich bei nichts davon auf unser Wort verlassen. Hier sind Wege, das zu prüfen, von einfach bis fortgeschritten.

  1. Den Code lesen

    Die App ist Open Source. Die Links auf dieser Seite führen genau zu den Codezeilen, in denen das jeweils passiert, und zwar in der Version, die diese Seite beschreibt (c9dec31).

  2. Die Verbindungen beobachten

    Verwenden Sie eine Firewall oder einen Netzwerkmonitor. Sie sehen Ihre eigenen Server, den Sync-Server nur, solange Sie angemeldet sind, und api.github.com, wenn sich die Profilliste öffnet. Sonst nichts.

  3. Ansehen, was der Server speichert

    Für Fortgeschrittene: Nehmen Sie Ihr Anmeldetoken aus dem Datenordner der App (cloud_token.json) und fragen Sie Ihre Daten bei der API ab, mit dem Header X-Auth-Token: GET /api/sync/profiles oder POST /api/sync mit einer leeren Liste von Datensätzen. Zurück kommen nur IDs, Arten, Zeitangaben, Markierungen und verschlüsselter Text. Melden Sie sich danach in der App ab, um diese Sitzung zu beenden.

  4. Den Datenverkehr mitlesen

    Für Fortgeschrittene: Starten Sie auf Ihrem Computer einen kleinen Proxy, der Anfragen an den echten Server weiterreicht, und stellen Sie in der App als Sync-Server http://127.0.0.1 mit dem Port des Proxys ein. Unverschlüsseltes HTTP erlaubt die App nur für Ihren eigenen Computer. Sie sehen, was die App sendet und dass Ihre Einträge verschlüsselt sind. (Ein Proxy-Zertifikat, das Sie Ihrem System hinzufügen, funktioniert nicht, weil die App ihre eigene Liste von Zertifizierungsstellen verwendet.)

  5. Ihre eigenen Daten entschlüsseln

    Für Fortgeschrittene: Mit Ihrem Passwort können Sie Ihre eigenen Daten mit jedem Argon2id- und AES-GCM-Werkzeug öffnen, anhand der Einstellungen in der Tabelle unten. Ohne das Passwort kann das niemand.

  6. Ihren Download prüfen

    Vergleichen Sie die Prüfsumme mit SHA256SUMS im Release (ab Version 0.4), prüfen Sie das Zertifikat der Android-App mit apksigner oder bauen Sie die App aus dem Quellcode.

Die Einstellungen für Ihre eigenen Werkzeuge

SchlüsselableitungArgon2id, Version 0x13, 64 MiB Speicher, 3 Durchläufe, 4 Lanes, 32-Byte-Schlüssel, zufälliges 16-Byte-Salt
Profildatei„OMNV“ · Version 1 · Salt (16 Byte) · Nonce (12 Byte) · AES-256-GCM-Verschlüsselung der mit zstd komprimierten SQLite-Datenbank, mit 16-Byte-Tag
Synchronisierter Eintraghex(Nonce (12 Byte) · AES-256-GCM-Chiffrat und Tag), mit dem 256-Bit-Datenschlüssel des Profils
Gespeicherte Kopie des Profilschlüsselshex(0x02 · Salt (16 Byte) · Nonce (12 Byte) · AES-256-GCM-Verschlüsselung des 32-Byte-Datenschlüssels), mit dem aus Ihrem Profilpasswort abgeleiteten Schlüssel
TeilenX25519, HKDF-SHA256, AES-256-GCM

Was diese Seite nicht verspricht

  • Submarine hat noch kein unabhängiges Sicherheitsaudit durchlaufen. Die bisherigen Prüfungen hat der Autor durchgeführt.
  • Ein schwaches oder mehrfach verwendetes Passwort ist der schwächste Punkt. Verwenden Sie ein langes Profilpasswort, das Sie nirgendwo sonst nutzen, und für Ihr Konto ein anderes Passwort.
  • Telnet und einfaches VNC sind von Haus aus unverschlüsselt. Die App kennzeichnet sie und kann sie über einen SSH-Server leiten. Über einfaches VNC geht auch Text aus der Zwischenablage, den Sie einfügen oder den der Server kopiert, unverschlüsselt durch das Netzwerk.
  • Der eingebaute RDP-Client ist experimentell (er wird aus einem Commit von IronRDP gebaut, nicht aus einem Release) und ist ausgeschaltet, bis Sie ihn für einen Server wählen.
  • Diese Seite beschreibt die App auf dem Stand c9dec31. Wenn sich der Code ändert, ändert sich diese Seite mit.