Zugangssystem

Aus Maschinendeck Wiki
Zur Navigation springen Zur Suche springen
Zugangssystem
Weshalb Zugang zum Space für (fast) alle
Was hardware, software
Wer
Status läuft



Wir haben unseren Raum und jetzt wollen wir unseren Mitgliedern auch den Zugang ermöglichen.

Problem

Um in den Raum zu kommen müssen drei Türen geöffnet werden:

  • Haustür
  • Zwischentür auf der Etage
  • Tür zum Raum

Die Haustür verfügt über einen elektrischen Öffner und eine Gegensprechanlage, die anderen Türen sind rein mechanisch mit Profilzylindern. Unser Raum ist nicht an die Gegensprechanlage angeschlossen.

Der Plan

Haustür

In den Türöffner wird ein Relais samt $Microcontroller mit $Funk eingebaut um den Öffner fernzusteuern. Alternativ könnte das Relais irgendwo in der Gegensprechanlage eingebaut werden (z.B. Netzwerkstatt). Todo:

  • Vermieter fragen
  • Prüfen ob genug Strom und Platz im Türöffner ist

Zwischentür

Einbau von KeyMatic und Steuerung über RasPi Todo:

  • Prüfen ob Schließzylinder geeignet ist -> muss für Keymatik auf der Innenseite rausstehen
  • Prüfen wie die Rosette befestigt ist / zerstörungsfrei demontiert werden kann -> geht anscheinend zerstörungsfrei (wird so beworben)
  • Mit der zweiten Mietpartei auf der Etage sprechen
  • KeyMatic bei notebooksbilliger für ca. 125 Euro

Raumtür

Das Protokoll

Für die Außentür könnte folgendes Protokoll verwendet werden.

Grundsätzliches

  • Ein ESP8266 kontrolliert ein Relais, welches den Türöffner auslöst. Er ist über Freifunk mit dem Internet verbunden und besitzt ein LED-Display, welches von Aussen sichtbar ist. Dieses dient dazu, sicherzustellen, dass ein Benutzer, der eintreten möchte, auch tatsächlich vor Ort anwesend ist (oder ein großes Teleskop und Sichtverbindung/Periskop besitzt).
  • Irgendwo sitzt ein Pi (der dann auch die Zwischentür steuert). Dort läuft eine Webseite.
  • Benutzer bekommen SSL-Client-Zertifikate ausgestellt, wenn sie zutrittsberichtigt sind. Benutzer können Gast-Zutrittslinks erstellen und an Gäste vergeben. Die Links sind nur einmal benutzbar und laufen innerhalb weniger Stunden ab. Sie sind an die Gültigkeit des Zertifikats des Ausstellers gebunden.

Protokoll-Bestandteile

Challenges

Challenges sind 128-Bit-Werte sofern nicht anders angegeben.

  • TC = Trigger Challenge
  • OC = Opening Challenge
  • PC = Presence Challenge (4-stelliger Zahlencode)
  • AC = Acknowledge Challenge

Challenge Responses

  • TCR = Trigger Challenge Response
  • OCR = Opening Challenge Response
  • ACR = Acknowledge Challenge Response

Secret Keys

PRNG keys werden verwendet, um mittels AES-CTR aus einem internen Counter nicht-vorhersagbare Challenges zu generieren.

  • KH0 = Trigger PRNG Key
  • KH1 = Opening PRNG Key
  • K0 = Trigger Key
  • K1 = Opening Key
  • K2 = Acknowledge Key

Interne Counter des ESPs

  • C0 = Interner Counter im RAM
  • C1 = Interner Counter, der alle 100 Iterationen im Flash des ESPs gespeichert wird. Beim Booten wird er um 100 erhöht und sofort nochmal abgespeichert. (Write Cycle Reduction für den Flash)

Angreifermodell

  • Der Angreifer hat volle Kontrolle über das WLAN (d.h., Verbindung Pi<->ESP).
  • Der Angreifer kann die PC vom Display ablesen sofern angezeigt.
  • Der Angreifer kann sich nicht am Pi authentifizieren.
  • Der Angreifer hat keinen Zugriff auf den Flash-Speicher des ESPs.
  • Der Angreifer besitzt kein gültiges Client-Zertifikat für das Webinterface.
  • Der Angreifer hat keinen Zugriff auf den Pi.

Protokollablauf (siehe Bild unten)

(Mit || ist die Konkatenation gemeint.)

  1. Der Benutzer besucht die Webseite und authentifiziert sich. Er klickt auf einen Button, und der Pi startet den Login-Vorgang (CSRF-geschützt)
  2. Der Pi sendet dem ESP eine "Trigger"-Nachricht.
  3. Der ESP berechnet TC=AES(C0++,KH0) und sendet TC an Pi
  4. Pi berechnet TCR=HMAC(TC,K0) und sendet TCR an ESP
  5. ESP assertet TCR==HMAC(TC,K0).
  6. ESP berechnet OC=AES(C1++,KH1) und PC=Filter4ZiffernAus(AES(C1++,KH1)). Wichtig: C1 wird tatsächlich zweimal inkrementiert.
  7. ESP zeigt PC auf Display an.
  8. ESP sendet OC and Pi.
  9. Benutzer liest PC von Display ab, und tippt es auf Webseite ein.
  10. Pi würfelt AC (z.B. Hardware-Zufallszahlengenerator in der CPU).
  11. Pi berechnet OCR=HMAC(PC||OC||AC, K1) und sendet OCR und AC an ESP
  12. ESP assertet OCR==HMAC(PC||OC||AC, K1) und öffnet Tür
  13. ESP berechnet ACR=HMAC(AC,K2) und sendet ACR als Response an Pi
  14. Pi assertet ACR==HMAC(AC,K2) und sendet Tür-auf-Signal an KeyMatic (wie auch immer)

Anmerkungen

  • Die Kommunikation zwischen Pi und ESP ist nicht verschlüsselt (braucht sie auch nicht zu sein).
  • Im ESP ist gleichzeitig immer nur eine Session aktiv (d.h., OC und PC werden überschrieben, falls noch eine alte Session läuft)
  • Session-Timeouts werden verwendet (bspw. nur 30 Sekunden zur Eingabe von PC)
  • C0 wird im RAM gespeichert und kann dadurch durch einen Stromausfall auf einen definierten Wert gesetzt werden. Dies ist aber hier okay, da dadurch nur TC vorhersagbar wird, was nur dazu führt, dass ein Angreifer mehrfach triggern kann, was wiederum nur Flashspeicherabnutzung und ungewollten Displayanzeigen führt.

Nicht-ausgeschlossene Angriffe

* Hat der Angreifer volle Kontrolle über den ESP, kommt er in den Flur. Er braucht aber immer noch ein gültiges Zertifikat, um auch die Zwischentür zu öffnen.
* Hat der Angreifer volle Kontrolle über den Pi, kommt er rein.

Schliesssystem-protokoll-draft-0.jpeg