Per innalzare il livello di sicurezza del protocollo di riconoscimento delle RFID Card (da clonazione a distanza, sniffing e intrusione informatica), si propone di estendere gli algoritmi di cifratura, descritti nel post Algoritmi di cifratura proprietari, alle RFID card nella versione MIFARE Classic.
MFRC-522 RC522 RFID Modulo IC Card
Componente molto economico, ma ai test, risultato molto affidabile e dotato di una notevole libreria di applicazioni. E' possibile realizzare operazioni di lettura e scrittura di transponder a 13,56MHz; richiede un'alimentazione a 3.3V. |
Arduino Nano V3.0 Scheda di Microcontrollore CH340 ATmega328P |
RFID Chip con 13,56 MHz Transponder MIFARE Classic (1kbytes) |
RFID PVC Card 13,56 MHz Transponder MIFARE Classic (1kbytes) |
La RFID Card nella versione MIFARE Classic dispone di una memoria non volatile scrivibile e leggibile di 1kByte. E' dotata di un identificativo univoco di 4 byte ed è quest'ultimo che, nelle applicazioni più semplici,
viene utilizzato per il riconoscimento e il controllo di accessi dal lettore RFID. Tuttavia, come è noto, la comunicazione fra Card e Lettore RFID è facilmente intercettabile, avvenendo con comunicazione radio a 13.56 MHz. E' sufficiente captare
a distanza la comunicazione (con attrezzatura reperibile online per poche decine di Euro) per poter clonare una Card, che fornisca lo stesso codice univoco di identificazione.
Una strategia, per irrobustire e rendere più sicuro il protocollo di comunicazione fra Card e Lettore RFID, è quella di utilizzare per l'identificazione l'intera dotazione di memoria della Card, con una cifratura di difficile duplicazione, con l'avvertenza di non rallentare eccessivamente la comunicazione e
l'obiettivo di rendere impossibile la clonazione, attraverso la captazione di una singola o poche sessioni di riconoscimento.
STRUTTURA CARD
Una Card MIFARE Classic è composta di 16 settori, ogni settore è composto da 4 blocchi di 16 byte (in totale 1.024 byte).
Il blocco 0 contiene la Card Id e non va alterato;
il quarto blocco di ogni settore contiene le chiavi di cifratura MIFARE e non si può utilizzare;
Quindi sono 47 i blocchi programmabili: 1,2,4,5,6,8,9,10,12,13,14,16,17,18,20,21,22,24,25,26,28,29,30,32,33,34,36,37,38,40,41,42,44,45,46,48,49,
50,52,53,54,56,57,58,60,61,62
La cifratura è realizzata a livello di blocco che, essendo composto da 16 byte, può applicare l'algoritmo descritto nel post Algoritmi di cifratura proprietari con unità di cifratura di 128 bit.
Si suggerisce che la stringa codificata in ogni blocco abbia la seguente struttura:
Byte | Descrizione |
---|---|
00-02 | numero progressivo di programmazione di lotto (16.777.216 valori differenti prima di ripetere la sequenza) |
03 | identificatore di blocco: permette di evitare che una card sia clonata ripetendo il contenuto di uno o più blocchi noti |
04-07 | Identificatore univoco di card (come riportato nei byte 00-03 del blocco 0): permette di evitare la clonazione su una card del contenuto di un'altra card |
08-0E | Identificatore univoco di dispositivo; contiene il codice del dispositivo da comandare |
0F | Livello della Card; 00 indica una card Utente; FF indica una card Passepartout; altre codifiche sono possibili con i codici rimanenti |
La soluzione più semplice ed economica per realizzare un Programmatore di RFID Card che abbia un'essenziale Interfaccia Utente è quella di usare un Arduino Nano (anche compatibile), che è dotato di una connessione USB. Lo schema proposto è il seguente:
Fig.1 |
che può dare luogo alla semplice compatta realizzazione prototipale:
Fig.2 |
Un essenziale codice, per realizzare le funzioni di programmazione RFID Card con lo schema di Fig.1, si può trovare qui di seguito.
Da notare che questo codice chiama due routine che nella libreria standard MFRC522 non esistono; occorre sostituire ai corrispondenti file di tale libreria i file
MFRC522.h e MFRC522.cpp opportunamente modificati.
Se non si vuole usare il Monitor seriale di Arduino IDE (non molto user friendly), si può usare il programma SuperUser_Programmer.exe (sviluppato in Visual Basic 6), che
semplifica la gestione dei comandi al dispositivo.
Nessun codice disponibile |