Dokumentation

tessera ist ein selbst gehosteter SSH- und SFTP-Client. Diese Doku erklärt nicht nur, was das Programm tut, sondern warum es das so tut — jede Tastenbelegung, jede kryptografische Konstruktion und jede bewusst nicht getroffene Entscheidung.

Drei Wege hinein

Der Aufbau in einem Absatz

Auf jedem Gerät läuft ein Flutter-Client mit einer lokalen SQLite-Datenbank. Darin steht der entschlüsselte Arbeitsstand: Hosts, Gruppen, Snippets, Schlüssel, Einstellungen. Wer mehrere Geräte abgleichen will, betreibt zusätzlich einen kleinen Node-Server mit MariaDB. In dessen Datenbank liegen ausschließlich verschlüsselte Blobs.

Zwei Datenbanken, nicht verwechseln
Gerät A ──┐                                   ┌── Gerät C
          │      nur Ciphertext              │
Gerät B ──┼──▶  Sync-Server (Node + MariaDB) ◀─┘
          │      kein Endpunkt entschlüsselt etwas
          └── lokale SQLite je Gerät: der Klartext

Der Sync ist optional. Als reiner SSH- und SFTP-Client funktioniert tessera vollständig ohne Server. Ausgehend bleiben dann die Verbindungen zu deinen Hosts und der Blick nach Updates, der sich abschalten lässt. Wie das eingerichtet wird und was dabei fehlt, steht unter Ohne Server.

Begriffe

Diese Wörter tauchen überall wieder auf. Sie einmal zu lesen spart später Rätselraten.

Begriff Bedeutung
Vault Die Gesamtheit deiner verschlüsselten Datensätze. Ein Konto hat genau einen.
Vault Key 32 Byte Zufall. Öffnet den Vault. Liegt im Secure Storage der Geräte und im Wiederherstellungscode — nie beim Server.
Record Ein einzelner Datensatz: ein Host, eine Gruppe, ein Snippet, ein Schlüssel. Wird einzeln verschlüsselt.
Epoch Generationszähler des Vault Key. Steigt bei Entzug eines Geräts oder nach einer Wiederherstellung.
HLC Hybrid Logical Clock. Ordnet Änderungen über Geräte hinweg und löst Konflikte auf.
Geltungsbereich Wo ein Snippet gilt: an einem Host, einer Gruppe, einem Tag — oder überall.
Sprunghost Ein Host, über den ein anderer verbunden wird. Ketten sind erlaubt.
SAS Short Authentication String. Die sechs Ziffern, die beim Koppeln auf beiden Geräten übereinstimmen müssen.

Stand der Dinge

Diese Tabelle ist ehrlich gemeint. Was live noch ungeprüft ist, steht hier als live noch ungeprüft.

Bereich Stand
Sync-Server, Krypto-Layer, Sync-Engine vollständig mit verifizierten Testvektoren
Kopplung, Rotation, Wiederherstellung vollständig
Betrieb ohne Server vollständig einrichten, arbeiten, später nachrüsten — siehe Ohne Server
Terminal, Zwischenablage, Suche, Mitschnitt vollständig
Snippets, Schlüsselbund, Hosts und Gruppen vollständig
Remote Desktop (Windows) nutzbar Bild, Eingabe, Zwischenablage, Auflösung, Sprunghost und Ton — ohne Ordnerumleitung, siehe Remote Desktop
SFTP, Port-Weiterleitung, Sprunghost vollständig, live noch ungeprüft
Windows Referenzplattform
Android verfügbar live noch wenig geprüft
Tastenleiste, Vormerkung, Layoutklassen vollständig — siehe Auf dem Telefon
Linux, macOS vorbereitet — alles Plattformabhängige liegt hinter einer Abstraktion
iOS ungebaut Projekt und Code vollständig, Unveröffentlicht

Wie aktuell ist das hier?

Diese Doku gehört zum Quelltext und wird mit ihm zusammen geändert. Eine Repository-Regel schreibt vor, dass jede Änderung am Verhalten des Programms die betroffene Seite mitnimmt — nicht später, sondern im selben Zug. Was hier steht, beschreibt den Stand des Codes, nicht einen Plan.