Tenjin

Ein Media Server, der Ihnen gehört: eigene Bibliotheken, eigene Nutzerverwaltung, optionales Relay für den Zugriff von unterwegs.

Version 0.1.0 · In Entwicklung

Windows · macOS · Linux · Android · Android TV · Fire TV

Tenjin-Desktop-Client: Startseite mit der Reihe „Weiterschauen“ und den Bibliotheken

Jeder Server ist seine eigene Vertrauensinstanz

Ein Media Server besitzt ein Schlüsselpaar, stellt Tokens aus und entscheidet allein über Rechte. Das Relay prüft Tokens nur gegen den öffentlichen Schlüssel des Servers; Konten, Rechte und Nutzerdaten liegen ausschließlich auf dem Media Server.

Server-Identität

Beim ersten Start erzeugt der Server ein Ed25519-Schlüsselpaar. Die Server-ID ist der Fingerprint des öffentlichen Schlüssels; Clients pinnen ihn bei der Kopplung. Ed25519

Ersteinrichtung ohne Weboberfläche

Der Server schreibt einen einmaligen Einrichtungscode in Konsole und Log und kündigt sich per mDNS im LAN an. Der Nutzer gibt den Code im Client ein, legt das Admin-Konto an und pinnt den Serverschlüssel. Headless: tenjin-server --setup. mDNS · Einrichtungscode

Relay-Identität

Das Relay ist über einen Domainnamen erreichbar und trägt ein öffentliches Zertifikat, zum Beispiel von Let's Encrypt. Server registrieren sich mit einem Registrierungscode und halten eine ausgehende Steuerverbindung; eine Portfreigabe ist nicht nötig. Let's Encrypt · Registrierungscode

Anmeldung und Tokens

Die Passwortprüfung findet immer Ende-zu-Ende zwischen Client und Media Server statt, auch im Relay-Modus C; die Anmeldeanfrage wird dort durchgereicht. Vorgesehen ist ein PAKE-Verfahren (OPAQUE), damit das Passwort den Server nie im Klartext erreicht.

Anmeldung und Tokens, auch über das RelayClientRelay (Weg B)Media ServerVerbindung zu Server-IDdurchgereichtPasswortprüfung immer Ende-zu-Ende zwischen Client und Server;das Relay sieht nur verschlüsselte Pakete.Anmeldung (PAKE), GerätekennungAccess Token (ca. 15 min) + Refresh Token (gerätegebunden)Tokens sind mit dem Serverschlüssel signiert (Ed25519);Felder: srv, sub, libs, age, bw, streams, dev, expAPI-Aufruf mit Access TokenAntwortErneuerung mit Refresh Tokenneues Token-Paar, altes Refresh Token ungültig (Rotation)Taucht ein ersetztes Refresh Token nach der Kulanzfrist wieder auf,sperrt der Server alle Tokens des Geräts und warnt im Aktivitätslog.Verbindung über Relay mit TokenSignatur offline gegen den öffentlichen Serverschlüssel prüfendurchgereicht
Anmeldung und Tokens · UML-SequenzdiagrammIn voller Größe öffnen

Der Server stellt ein Access Token mit kurzer Laufzeit (etwa 15 Minuten) und ein gerätegebundenes Refresh Token aus. Das Refresh Token wird bei jeder Erneuerung ersetzt. Taucht ein ersetztes Token nach einer Kulanzfrist wieder auf, sperrt der Server alle Tokens des Geräts und warnt im Aktivitätslog. Erkennung, Kulanzfrist und Gültigkeit (Standard 30 Tage) stellt der Administrator ein. Das Relay gibt keine eigenen Tokens aus.

Feld Inhalt
srv Server-ID des Ausstellers
sub Lokale Nutzer-ID
libs Freigegebene Bibliotheks-IDs
age FSK-Grenze
bw Maximale Bitrate lokal und remote
streams Maximale gleichzeitige Streams
dev Geräte-ID
exp Ablaufzeit

Tokens sind mit dem Serverschlüssel signiert; das Relay prüft sie offline. Quick Connect meldet Fernseher und andere Geräte ohne Tastatur an: Das Gerät holt sich einen sechsstelligen Code, ein angemeldetes Handy oder ein Rechner gibt ihn frei, das Gerät bekommt sein eigenes Token-Paar.

Quick Connect: Anmeldung ohne TastaturFernseherMedia ServerHandy (angemeldet)Code anfordernsechsstelliger Code, begrenzt gültigCode anzeigenCode eingeben und freigebenCode dem Konto des Handys zuordnenCode mit eigenem Geheimnis einlöseneigenes Token-Paar für den FernseherVon unterwegs genügt die Relay-Adresse;feste Relay-Adressen im Programm gibt es nicht.
Quick Connect · UML-SequenzdiagrammIn voller Größe öffnen

Drei Wege, drei Vertrauensstufen

Weg B (Standard): Das Relay sieht

  • Server-ID und Geräte-ID der Verbindung
  • Zeitpunkte, Paketgrößen, Datenmenge
  • Die Signatur des Tokens, die es offline prüft

Weg B: Das Relay sieht nicht

  • Passwörter oder Anmeldedaten
  • Titel, Bilder, Streams, Fortschritt
  • Sitzungsschlüssel der QUIC-Verbindung

Weg C (Relay-Terminierung) muss der Relay-Administrator je Server ausdrücklich einschalten, und der Server-Administrator kann ihn für seinen Server ablehnen. Nur dann sieht das Relay Inhalte, etwa um Streams zwischenzuspeichern oder zu transkodieren.

Kontoverknüpfung und Sync

Wer auf zwei Servern ein Konto hat, kann sie verknüpfen: Server 1 erzeugt eine zufällige 128-Bit-Sync-ID und ein Link-Geheimnis, der Client übergibt beides an Server 2, beide Server tauschen einen Schlüssel für diese Paarung aus. Favoriten und Fortschritt laufen danach Ende-zu-Ende zwischen den Servern über das Relay; das Relay sieht nur die pseudonyme Sync-ID.

Weitere Maßnahmen

  • Brute-Force-Schutz: Verzögerung und Sperre nach Fehlversuchen; Audit-Log für Anmeldungen und Admin-Aktionen.
  • Geheimnisse (API-Schlüssel, SMB-, NFS- und WebDAV-Zugangsdaten) liegen verschlüsselt, der Schlüssel im Schlüsselspeicher des Betriebssystems: DPAPI (Windows), Keychain (macOS), Schlüsseldatei mit Rechten 0600 (Linux, QTS).
  • Bildadressen tragen keine Tokens und werden nur versioniert gecacht; ein geändertes Bild hat eine neue Adresse.
  • Der Player holt Streams über einen lokalen Proxy des Clients; Tokens bleiben im Client.
  • Der Relay-Steuerkanal ist ausgehend; auf dem Media Server muss kein Port geöffnet werden.

Stand und Grenzen

Tenjin 0.1.0 ist ein Entwicklungsstand: Datenbankschema und Protokoll können sich bis 1.0 noch ändern. Ein externes Sicherheits-Review steht noch aus; die Maßnahmen oben beschreiben das Konzept und den aktuellen Stand der Umsetzung. Wer dem Relay-Betreiber nicht vertraut, betreibt das Relay selbst oder bleibt bei Weg A.