Zugangssystem und Diskussion:Zugangssystem: Unterschied zwischen den Seiten

Aus Maschinendeck Wiki
(Unterschied zwischen Seiten)
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(Die Seite wurde neu angelegt: „== Überarbeiten == Hier hat sich Einiges verändert, der Artikel sollte mit neuen Informationen angereichert und besser strukturiert werden. --~~~~“)
 
Zeile 1: Zeile 1:
{{Überarbeiten}}
== Überarbeiten ==
 
Hier hat sich Einiges verändert, der Artikel sollte mit neuen Informationen angereichert und besser strukturiert werden. --[[Benutzer:MikO|MikO]] ([[Benutzer Diskussion:MikO|Diskussion]]) 11:12, 20. Mär. 2023 (CET)
{{Project
|Why=Zugang zum Space für (fast) alle
|What=hardware, software
|Status=running
|Tags=ESP8266
|Who=Gtrs, Morlac
}}
 
Wir haben unseren Raum und jetzt wollen wir unseren Mitgliedern auch den Zugang ermöglichen.
 
== Problem ==
Um in den Raum zu kommen müssen zwei Türen geöffnet werden:
* Haustür
* Elektrisches Rollo
* Zugang zur Toilette
 
Die Zugangstür verfügt über ein Standart-Zylinderschloss. Das Rollo kann von außen mit einem Schlüssel oder von innen Verfahren werden.
 
==Der Plan==
===Haustür===
Vermieter ist einverstanden. Ein Elektrischer Öffner mit Schlüssel installiert.
 
 
===Elektrisches Rollo===
Tagsüber ist es für gewöhnlich offen, da die Hausbewohner es auch benutzen.
 
Einige Mitglieder haben sich die Verkabelung schon einmal angesehen,  
für mich ist die Sicherheit der Benutzer im Vordergrund.
 
 
===Zugang zur Toilette===
Muss geplant und geklärt werden, wie es am besten zu realisieren ist.
 
===Aktueller Stand===
Der Tür-PI ist fast fertig, er hat schon ein neues Gehäuse und wird zzt verdrahtet, es sind 3 Schlüssel für das Rolltor angeschafft.
 
==Zur Anwesenheitschallenge==
Dazu gibt es verschiedene Ideen, die erste schließt die alte Methode ein, die neue auch eine Bestätigung via RFID Karte, die aber alleine die Tür nicht öffnen kann.
Ich persönlich bin immer für eine 2FA bzw Anwesenheitschallenge+Anmeldung auf Seite
 
 
==Angreifermodelle==
die selben wie letztes mal. Zusätzliche können gerne hier gelistet werden.
 
 
 
-----------------------------------------------------------------------------------
 
==Alternativen==
 
Einige Dinge zum aktuellen Protokoll:
* Presence Challenge gibt keinen wesentlichen Mehrwert
* Online vs. Offline: Benutzer-IDs+Codes koennen auch auf dem Microcontroller hinterlegt werden
 
Methoden fuer Benutzereingabe: [https://mindool.com/p/HFE3dt5CKh6 Vergleich]
* Numpad
* Barcode Scanner
* Kamera fuer QR-Code
* RFID/NFC
* Wifi
* Funk ISM-Band
 
Online vs. Offline [https://mindool.com/p/BSHkWNHpTPK Vergleich]
 
Ideensammlung fuer weiteres Vorgehen: [https://mindool.com/p/USsv7vNpKI Tuer Hackathon]
 
Für die RFID/NFC Alternative scheint die Mifare DESFire EV1 Karte interessant zu sein, diese unterstützt Authentifizierung mittels AES. Im Application-Report der unter https://www.ti.com.cn/cn/lit/an/sloa213/sloa213.pdf zu finden ist, kann die Authentifizierungsmethode nachgelesen werden. Das simple authentifizieren über die UID funktioniert nicht, da es Karten gibt, bei der auch diese geschrieben werden kann. Als Reader könnte der PN532 von Interesse sein, allerdings ist bei diesem nicht klar, ob er die Authentifizierung der DESFire EV1 unterstützt. Andere Mifare-Karten könnten verwendet werden allerdings sind die S50 karten (Classic 1K, Classic 4K) und die DESFire ausgeschlossen, da diese den anfälligen Crypto 1 Algorithmus verwenden oder über Brute-Force angreifbar sind.
 
==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 [https://learn.adafruit.com/assets/17227|4-stelliges 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.)
 
# Der Benutzer besucht die Webseite und authentifiziert sich. Er klickt auf einen Button, und der Pi startet den Login-Vorgang (CSRF-geschützt)
# Der Pi sendet dem ESP eine "Trigger"-Nachricht.
# Der ESP berechnet TC=AES(C0++,KH0) und sendet TC an Pi
# Pi berechnet TCR=HMAC(TC,K0) und sendet TCR an ESP
# ESP assertet TCR==HMAC(TC,K0).
# ESP berechnet OC=AES(C1++,KH1) und PC=Filter4ZiffernAus(AES(C1++,KH1)). Wichtig: C1 wird tatsächlich zweimal inkrementiert.
# ESP zeigt PC auf Display an.
# ESP sendet OC and Pi.
# Benutzer liest PC von Display ab, und tippt es auf Webseite ein.
# Pi würfelt AC (z.B. Hardware-Zufallszahlengenerator in der CPU).
# Pi berechnet OCR=HMAC(PC||OC||AC, K1) und sendet OCR und AC an ESP
# ESP assertet OCR==HMAC(PC||OC||AC, K1) und öffnet Tür
# ESP berechnet ACR=HMAC(AC,K2) und sendet ACR als Response an Pi
# 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.
 
[[File:schliesssystem-protokoll-draft-0.jpeg|1000px]]
 
== Shoppingliste ==
 
=== Maschinendeck tut kaufen tun... ===
 
* Keymatic (1-2)
* Schließzylinder (nochmal nachmessen!) ✔
* [http://www.exp-tech.de/adafruit-quad-alphanumeric-display-white-0-54-digits-w-i2c-backpac I2C-LED-Display] ✔
* SD-Karte ✔
* Schlüsselkasten (s. oben)
* [http://www.pollin.de/shop/dt/NTM1ODQ2OTk-/Stromversorgung/Netzgeraete/Festspannungs_Netzgeraete/Schaltnetzteil_MEANWELL_RS_15_5_5_V_3_A.html Netzteil] ✔
* [http://www.pollin.de/shop/dt/ODk3OTM1OTk-/Bauelemente_Bauteile/Gehaeuse/Kunststoffgehaeuse_0021_002_074.html Gehäuse] ✔
* Frontplatte weiß Plastik, min. 12x12 cm
 
=== Kommt von privat ===
* ESP8266 (-> Guido)
* Kondensator & Widerstand für Zeitsteuerung
* Transistoren und Dioden für Relais
* Step down AMR1117 o.ä. (-> Guido)
* Relais 14V~ (-> Guido)
* Raspberry Pi (-> Kaiser)
* 5V-Pi-Netzteil
* Frontplatte für Display und ESP-Gehäuse
* Abstandshalter LED-Display zu Frontplatte, ca. 4 mm
 
== Umsetzung ==
 
'Einbau von [http://www.amazon.de/gp/product/B00FFE1BUE/ref=s9_dcbhz_bw_d0_g60_i1_bs KeyMatic] und Steuerung über RasPi
 
 
 
=== Raspberry Pi ===
 
0. pi-Benutzer-Passwort geändert
1. ungefähr dieser Anleitung gefolgt: https://www.digitalocean.com/community/tutorials/how-to-set-up-uwsgi-and-nginx-to-serve-python-apps-on-ubuntu-14-04
2. zusaetzliche Abhaengigkeiten im Python virtualenv: pip install RPi.GPIO
 
 
=== Probleme ===
 
 
Manchmal blockiert Python das serielle Device zum RFM69. Ob das der Fall ist kann man sehen mit:
 
 
    #!/bin/bash
   
    lsmod | grep cdc_acm
    lsof | grep ACM

Version vom 20. März 2023, 11:12 Uhr

Überarbeiten

Hier hat sich Einiges verändert, der Artikel sollte mit neuen Informationen angereichert und besser strukturiert werden. --MikO (Diskussion) 11:12, 20. Mär. 2023 (CET)