SesamV2
10. August 2023
Schon seit längerer Zeit nutze ich mein selbstgebautes System Sesam um die Haustür meiner Eltern mit meinem iPhone öffnen zu können. Das hat auch meistens gut funktioniert, insgesamt habe ich mit meinem iPhone schon mehr als 270 mal erfolgreich aufgesperrt. Ein kleiner Mangel war die Tatsache, dass ich nur mit meinem iPhone entsperren konnte, mehrere Geräte (wie meine Apple Watch) wurden nicht unterstützt. Teilweise habe ich mein Smartphone aber nicht dabei, etwa beim Joggen. Außerdem wollte ich die Möglichkeit schaffen, auch anderen Personen die App zu geben, und das System so nützlicher zu machen.

Allerdings kam ich zu dem Schluss, dass ein solches Update mit einem hohen Aufwand verbunden wäre, zumindest, wenn man es ordentlich macht. Schon lange wollte ich ein Framework zum generischen Datenaustausch zwischen Geräten aufsetzen, um dann damit viele meiner Anwendungen zu vereinheitlichen. Das benötigt aber plattformübergreifende kryptografische Operationen wie assymetrische Verschlüsselung und Signaturen, vernünftiges Gerätemanagement, Onboarding, etc. Um mir diesen Aufwand vorerst zu sparen, wollte ich aktuell auf einen einfacheren Ansatz setzen. Jedes Gerät erhält den gleichen symmetrischen Schlüssel, sowie eine Geräte-ID in Form einer fortlaufenden Nummer. So kann ich gerätespezifische Nachrichtencounter verwalten (gegen Relay-Angriffe), und die einzelnen Geräte relativ unabhängig voneinander behandeln. So bleibt die Anpassung der einzelnen Bestandteile (Gerät, Server, iOS App) relativ überschaubar.
Etwas mehr Arbeit benötigte die Erstellung der App für die Apple Watch, da ich das noch nie gemacht hatte. Ich konnte aber einiges an Code von der iOS App übernehmen, sodass die Entwicklung doch relativ schnell ging. Die Funktionalität beschränkt sich auf das Wesentliche: Ein Button zum Entsperren, ein Bildschirm für die notwendigen Einstellungen (Schlüssel, URLs, Geräte-ID, ...) und eine Übersicht der bisherigen Entsperrversuche.

Ein paar kleine Zusatzfeatures wurden es dann aber doch. Die Einträge der Historie können nun im Detail betrachtet und gelöscht werden, und es gibt eine Statistik der erfolgreichen Versuche. Außerdem kann bei Problemen mit der Verbindung automatisch ein weiterer Versuch mit einer anderen Verbindung (über den Server, oder lokal im WLAN) gestartet werden.
Um den Entsperrprozess möglichst schnell zu machen, habe ich noch ein Widget programmiert. Dadurch kann ein Button auf dem Watch Face hinzugefügt werden, der direkt eine Enstperrung startet.
Nun ist das System wirklich bequem zu nutzen, und auch Charlotte kann nun die iOS App nutzen, um sich ins Haus zu lassen. Mittlerweile wirkt das System sehr ausgereift, mal sehen welche Verbesserungen in Zukunft noch möglich sind.