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. Annahme: 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. 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. (Ebenso kann es Gast-Zutrittscodes geben, die dann nur beschränkt gültig sind.)

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

Secret Keys

  • 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)

Protokollablauf

(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=HMAC(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=HMAC(C1++,KH1) und PC=Filter4ZiffernAus(HMAC(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.
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)