KeycardAccess prototype
KeycardAccess è il sistema di apertura porte / autenticazione di Mittelab. È basato sulle seguenti tecnologie:
- FreeIPA (per Identity management)
- MIFARE DESfire EV1 (per le card NFC)
- PN532 (Lettore RFID/NFC)
- OrangePi Nano
Il sistema è pensato per essere ragionevolmente:
- Sicuro
- Non clonabile
- Robusto (resistente a perdita di rete e di corrente elettrica)
- Low cost
Il sistema di apertura
Ogni porta avrà una OrangePi Zero con lettore basato sull'integrato PN532. Ogni Pi avrà una replica di FreeIPA (il nostro sistema di autenticazione centrale) e quindi una copia completa del database di utenti. Ogni Pi controlla il proprio motore che aprirà la porta. Il sistema meccanico di apertura è stato già progettato e realizzato da wifasoi e glavermi.
La tessera
La tessera socio è già stata realizzata, e si basa sul sistema MIFARE DESfire EV2. Queste tessere sono equiparate a smart card, e possono utilizzare gli stessi protocolli delle carte contactless.
Come funziona la DESfire?
La carta è divisa in applicazioni, che corrispondono vagamente a cartelle di un file system. Ogni applicazione può contenere file e chiavi. I file possono essere di vari tipi, tra i quali:
- File standard
- File standard con backup (mantiene n copie)
- File strutturato (record) ciclico
- File strutturato (record) lineare
- File di valore (supporta operazioni di credito/debito)
Le chiavi specificano permessi per leggere determinati file.
Come gestiamo autenticazione e autorizzazione
Le idee di base sono due, una più facile e una più difficile (ma più sicura)
1. Ogni tessera ha un file con dentro scritto il nome utente e una stringa segreta. Il lettore legge il file in questione e controlla nel database utenti se l'utente è autorizzato ad aprire. Questo sistema dovrebbe essere molto semplice da implementare, ma non è molto sicuro, infatti se qualcuno ottiene il file, può autenticarsi come quell'utente.
2. Ogni tessera genera una coppia di chiavi asimmetriche, e la chiave pubblica viene trasferita nel sistema di autenticazione. Il lettore quindi chiede alla tessera di firmare una stringa di challenge e poi verifica da chi è stata firmata. Questo sistema è molto più sicuro in quanto la chiave privata non lascia mai la tessera (è letteralmente impossibile trasferirla mediante il protocollo) ma è un po' più complesso da fare.
Software
Esistono già librerie FOSS per parlare con le tessere, principalmente libnfc con libfreefare e liblogicalaccess. Le prime due sono documentate un po' male, ma le ho testate e funzionano con il nostro lettore e la tessera. La seconda è da testare.
Sarebbero quindi da sviluppare due software:
- Uno che parte da una tessera vuota, e imposta la chiave master (PICC key), crea l'applicazione e il layout necessario
- Una che legge la tessera e fa l'autenticazione
Materiali
Librerie utilizzate:
Applicazione pratica
Laser cutter:
- TODO link a git → disegni
- TODO note aggiuntive
Progetti simili
Link utili
* https://www.olimex.com/Products/Modules/RFID/MOD-RFID1356MIFARE/