KeycardAccess - Controllo accessi

Alla luce dei nuovi fatti (il costo relativamente spropositato per fare le copie della chiave di ingresso), si iniziava a pensare di creare un controllo accessi per la nostra sede. Il progetto si comporrebbe delle seguenti componenti:

Lettore Badge

Me ne sto occupando io, anche se lentamente. Pensavo usare MFRC-522 (lettore RFID) e un ESP8266 o ESP32(quando arriveranno) per il loro costo basso. Pensavo di usare il protocollo MQTT per dialogare con il server di gestione accessi… ma anche raw TCP andrebbe bene. Se si usa l’ESP32 si avrebbe abbastanza potenza per criptare la comunicazione lettore-server.
###Server di gestione accessi
Bisognerebbe realizzare un server che avverta l’apertura/chiusura della sede tramite i vari canali di comunicazione. L’idea era di usare MQTT, quindi il server diventerebbe lo “MQTT broker”. Funzioni di apertura e chiusura in intervalli di tempo prestabiliti per ogni utente non sarebbero male, ma partirei prima sul semplice e lascerei le migliorie al futuro.

Meccanizzazione delle porte della sede

Per la porta principale i problemi non sussistono, ma per le due porte della sede bisogna trovare una soluzione per aprire elettronicamente. le soluzioni sono tre:

  • sistema con motori che girano il pomello
  • rilascio del battente (come porta di ingresso)
  • serratura elettrica (che andrebbe a sostituire quella sulla porta)

Bisognerebbe trovare la soluzione migliore per il nostro caso.

Creazione della grafica/ acquisto tessere RFID

ne abbiamo parlato qui: Tessere soci e RFID
In soldoni: grafica già fatta, manca solo da chiedere il preventivo alla azienda fornitrice dei badge RFID.

questo post è una wiki… modifichiamo qua quando si decide qualcosa (o spell checking). si discute nei commenti.

per la meccanizzazione delle porte propongo di fissare un supporto in metallo sulle viti dell’apertura della porta e metterci davanti un semplice servo centrato sul punto di scatto della serratura. sarebbe facile e non rovinerebbe la porta…

2 Mi Piace

Il progetto è ufficialmente partito. Lo trovate sulla wiki e su tasks. I partecipanti (per ora) sono:

Se possibile vorrei unirmi al progetto :slight_smile:

Ogni mano è ben accetta!

Quanto prima bisogna buttare giù le specifiche definitive sulla Wiki, così possiamo iniziare.

Grazie :smiley:
A proposito della Wiki, ho buttato giù un paio di righe di appunti, senza la pretesa che siano considerate specifiche di progetto, giusto per smuovere le acque e spingere un pochino il progetto.
Modificatele pure a vostro piacimento…o cestinatele se sono inutili. :wink:

@an7x3m Come va il progetto? Ci sono cose che possiamo fare? A me piacerebbe portarlo avanti durante lo hackathon di questo weekend…

Eh…purtroppo come sai ero via, ma quando torno magari vediamo di dare un boost al progetto :wink:

1 Mi Piace

Sorry, pensavo avessi fatto qualcosa quando eri in sede settimana scorsa!

Yeah :slight_smile:

Eh, avrei voluto anch’io andare più avanti…ma siccome per me è quasi tutto nuovo, sto tutt’ora investendo il mio tempo nel documentarmi.
Cmq vedrò quanto prima di smanettare su un “prototipo” reale…

1 Mi Piace

Ciao a tutti!
Avverto che il progetto non è morto, ma “in pausa”. Nel frattempo io ho pensato un paio di modi su come fare il sistema in modo che sia:

  • Sicuro
  • Non clonabile
  • Relativamente robusto (resistente a perdita di rete e di corrente elettrica)
  • Relativamente 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.


(Fonte: NXP MF3Dx2_MF3DHx2_SDS Preliminary short data sheet Copyright NXP Semiconductors)

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

Questo è quanto, domande e commenti ben accetti!

1 Mi Piace