====== 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