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
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).
- Schlüsselableitung (Argon2id-Einstellungen) lib.rs:237–254
- AES-256-GCM mit neuer Nonce lib.rs:256–263
- Speichern der Profildatei lib.rs:431–486
- Das Passwort für die Remotedesktopverbindung (DPAPI) rdp.rs:178–193
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…"
}- Verschlüsseln jedes synchronisierten Eintrags lib.rs:1050–1056
- Was für jeden Eintrag gesendet wird lib.rs:1086–1124
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.
- Die gespeicherte Kopie des Profilschlüssels lib.rs:1551–1569
- Öffnen auf einem neuen Gerät lib.rs:1574–1594
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.
- Die Anmeldeanfrage cloud.rs:105–108
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.
- Die Suche nach neuen Versionen about.rs:75–139
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.
- Die Pfade innerhalb des freigegebenen Ordners halten rdp_share.rs:121–147
- Was die Zwischenablage über VNC übertragen darf vnc_client.rs:180–188
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.
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).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.
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.
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.)
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.
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üsselableitung | Argon2id, 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 Eintrag | hex(Nonce (12 Byte) · AES-256-GCM-Chiffrat und Tag), mit dem 256-Bit-Datenschlüssel des Profils |
| Gespeicherte Kopie des Profilschlüssels | hex(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 |
| Teilen | X25519, 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.