====== 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 [[user>wifasoi]] e [[user>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 [[https://github.com/nfc-tools/libnfc|libnfc]] con [[https://github.com/nfc-tools/libfreefare|libfreefare]] e [[http://liblogicalaccess.islog.com|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:
* https://github.com/nfc-tools
* https://desfire.readthedocs.io/
===== Applicazione pratica =====
Laser cutter:
* TODO link a git -> disegni
* TODO note aggiuntive
====== Progetti simili ======
* https://github.com/RandomWireTechnologies
* https://www.codeproject.com/Articles/1096861/DIY-electronic-RFID-Door-Lock-with-Battery-Backup?msg=5304529
====== Link utili ======
* https://www.olimex.com/Products/Modules/RFID/MOD-RFID1356MIFARE/
* **Responsabile**: g5pw
* **Membri**: g5pw, wifasoi, glavermi
* **Data inizio**: 1/1/2017
* **Data fine**: in corso