Eigenes Produkt

Orbit

Wie wird aus „ungefähr teilen“ eine überprüfbare technische Grenze?

Orbit zeigt vier Freigabemodi für einen privaten Kreis: genau, ungefähr, auf Anfrage und nicht teilen.
iOS-Simulatorzustand. Die sichtbare Auswahl entspricht unterschiedlichen Datenpfaden, nicht nur vier Textlabels.

Orbit teilt Standorte in privaten Kreisen. Genauigkeit, Empfänger und Dauer werden auf dem Gerät entschieden; der Server verteilt verschlüsselte Daten.

Bereich
Privates Standortteilen
Zeitraum
2026
Status
Testtracks · v0.3
Plattformen
iOS, Android, Web-Viewer
Leistungen
Flutter-App, Native Background Engine, Backend, Ende-zu-Ende-Verschlüsselung

Ausgangslage

Standortfreigabe ist kein einzelner Schalter. Personen können für verschiedene Kreise genaue, ungefähre, angefragte oder keine Position teilen und müssen diese Entscheidung später nachvollziehen können.

Verantwortung

Produkt- und Protokollentwurf, Flutter-Oberfläche, native Hintergrund-Engine, Ende-zu-Ende-Verschlüsselung, Node/Fastify-Backend, PostgreSQL-Datenmodell und Testtrack-Builds.

Ergebnis

Version 0.3 auf Testtracks mit iOS- und Android-Clients, gerätebezogenen Schlüsseln, Freigaben pro Kreis, Begleitungen mit Frist und befristetem Web-Viewer.

Orbit zeigt eine Übersicht darüber, welche Person einen Standort anfragen kann und welche Freigaben aktiv sind.
Die Ansicht „Wer sieht was?“ macht Empfänger, Anfragen und Freigaben gemeinsam prüfbar.
Orbit zeigt die Personenübersicht einer privaten Standortfreigabe.
Reale iOS-Simulatoraufnahme aus der Projektdokumentation. Namen sind Testdaten.

„Ungefähr“ darf nicht nur eine unscharfe Karte sein

Wenn eine App eine genaue Position empfängt, an den Server sendet und erst bei der Anzeige einen großen Kreis darüberlegt, besitzt der Server weiterhin den exakten Wert. Orbit vergröbert deshalb auf dem Gerät, bevor die Nutzlast verschlüsselt und übertragen wird.

Die aktuelle Implementierung behandelt diese Vergröberung als Zustand. Eine Person verlässt eine grobe Zelle erst, wenn sie mindestens 250 Meter über deren Grenze hinausgegangen ist und dort zehn Minuten verbleibt. Spätestens nach 15 Minuten kann ein Heartbeat den aktuellen Zustand bestätigen. Diese Hysterese verhindert ein verräterisches Flattern zwischen zwei Zellen. Ohne sie könnten viele schnelle Zellenwechsel die genaue Bewegung trotz grober Einzelwerte wieder annähern.

Die Größenordnung der ungefähren Freigabe liegt bei etwa drei Kilometern. Sie ist ein Produktkompromiss: groß genug, um einen präzisen Aufenthaltsort nicht einfach weiterzureichen, klein genug für die Information, ob jemand noch in derselben Gegend ist. Sie ist keine mathematische Anonymitätsgarantie. Randlage, seltene Orte oder zusätzliche Informationen können weiter Rückschlüsse zulassen.

Verschlüsselung folgt dem Empfänger, nicht nur dem Kreis

Orbit verschlüsselt Standortdaten pro Empfängergerät. HPKE dient der Schlüsselvereinbarung, AES-GCM der Nutzlastverschlüsselung und Ed25519 der Signatur. Der Server prüft Berechtigungen, speichert Umschläge und verteilt sie, ohne Standort, gespeicherte Orte oder Nachrichten im Klartext zu benötigen.

Ein Kreisname allein wäre dafür zu grob. Personen können mehrere Geräte besitzen, neue Geräte koppeln oder ein Gerät verlieren. Die Engine führt deshalb Empfängergeräte und Schlüssel-Epochen. Eine neue Epoche grenzt zukünftige Nachrichten von einem alten Schlüsselstand ab. Der Versandpfad erzeugt die Nutzlast für die tatsächlich berechtigten Empfänger der aktuellen Epoche.

Das Protokoll verhindert nicht jede denkbare Beobachtung. Servermetadaten wie Zeitpunkte, Gerätebeziehungen oder Nachrichtenvolumen bleiben eine eigene Datenschutzfrage. Ein kompromittiertes Endgerät kann entschlüsselte Daten sehen. Die belastbare Aussage ist enger: Die fachlichen Inhalte werden auf dem Client pro berechtigtem Gerät verschlüsselt und liegen dem Verteilserver nicht als Klartext vor.

Freigabe ist eine laufende, widerrufbare Entscheidung

Jeder Kreis kann genaue, ungefähre, angefragte oder keine Position erhalten. Die Oberfläche „Wer sieht was?“ fasst Kreisregeln, einzelne Personen und vergangene Anfragen zusammen. Dadurch ist die wirksame Regel nicht nur beim Einrichten sichtbar.

Eine Freigabe lässt sich pausieren. „Alles beenden“ schaltet den lokalen Versand sofort ab und merkt den Widerruf für die Synchronisation vor. Das Gerät muss nicht erst einen Server erreichen, bevor es aufhört, neue Standorte zu erzeugen. Der Server kann bereits zugestellte verschlüsselte Daten damit nicht aus fremden Geräten zurückholen; auch diese Grenze gehört zur ehrlichen Beschreibung.

Neue Geräte werden über einen 25-stelligen Vergleichscode gekoppelt. Die Anmeldung verwendet einen E-Mail-Code statt eines dauerhaften Passworts. Beide Mechanismen lösen unterschiedliche Probleme: Der E-Mail-Code weist den Kontozugang nach, der Gerätevergleich bestätigt einen kryptografischen Gerätekanal.

Eine Hintergrund-Engine muss unabhängig von Flutter weiterarbeiten

Position und Fristen enden nicht, wenn die sichtbare Flutter-Oberfläche pausiert. Orbit nutzt deshalb eine eigene Engine in Swift und Kotlin, angebunden über Pigeon. Die gemeinsame Oberfläche formuliert Absicht und zeigt Zustand; die Plattformseite übernimmt Hintergrundortung, lokale Schlüssel und Betriebssystemgrenzen.

Begleitungen besitzen eine serverseitige Frist. Eine Meldung wie „noch nicht angekommen“ hängt damit nicht davon ab, ob das begleitete Telefon im kritischen Moment noch läuft. Das Backend kann den Ablauf bewerten. Der Standortinhalt bleibt davon getrennt und verschlüsselt.

Karten verwenden auf Apple-Plattformen MapKit und auf Android MapLibre. Auch hier liegt die gemeinsame Ebene nicht in einem kleinsten gemeinsamen Kartenwidget. Sie liegt im Produktmodell für Person, Kreis, Freigabemodus und Aktualität.

Was diese Arbeit für ähnliche Aufträge zeigt

Orbit zeigt, wie Datenschutzanforderungen zu konkreten Zustandsmaschinen, Schlüsselgrenzen und Offlineverhalten werden. Begriffe wie „ungefähr“, „pausiert“ oder „beendet“ erhalten erst durch diese Regeln eine technische Bedeutung.

Für ein anderes Produkt würde CIDIX nicht automatisch dasselbe Kryptoprotokoll einsetzen. Die übertragbare Leistung ist der Weg von einer verständlichen Nutzerentscheidung zu einer überprüfbaren Datenverarbeitung: Welche Daten entstehen auf welchem Gerät, wer kann sie öffnen, wie lange gilt eine Freigabe, und was passiert ohne Netz? Diese Fragen bilden Architektur und Oberfläche gemeinsam.

Technik und wofür sie da ist

Flutter
Gemeinsame Oberfläche
Riverpod
Zustand in der App
Swift
Hintergrund-Engine iOS
Kotlin
Hintergrund-Engine Android
Pigeon
Typsichere Brücke Flutter ↔ nativ
HPKE
Schlüssel pro Empfängergerät
AES-GCM
Verschlüsselte Inhalte
Ed25519
Geräte- und Kontosignaturen
Fastify 5
Backend-API
PostgreSQL
Datenmodell
MapKit
Karte auf iOS
MapLibre
Karte auf Android und im Web-Viewer