RFID
La Radio Frequency Identification (RFID) è un protocollo di comunicazione fisica che funziona attraverso la propagazione nell’aria di onde elettro-magnetiche per rilevare in maniera univoca e automatica di dispositivi compatibili.
I tag possono essere non solo letti, ma anche scritti, permettendo di modificare le informazioni contenute nella memoria del chip, aggiornandole all’occorrenza. Le letture e scritture possono essere effettuate automaticamente e senza visibilità ottica, poiché la comunicazione avviene attraverso le onde radio, bypassando scatole e altre confezioni sufficientemente sottili. Per lo stesso motivo, però, lo scambio di dati viene bloccato da materiali che assorbono o riflettono le onde elettromagnetiche, come i metalli. Grazie all’identificatore univoco di ogni transponder, tag multipli possono essere letti e scritti in contemporanea, velocizzando alcune operazioni di inventario o controllo.
Loading diagram...
Componenti
Un sistema RFID coinvolge due dispositivi.
Abbiamo un transponder, detto anche tag, che contiene al suo interno un piccolo chip con i dati di interesse ed una semplice antenna che rende il dispositivo un piccolo ed essenziale apparato radio ricetrasmittente. Quando viene eccitato da un apparato esterno (fisso o portatile) con il quale stabilisce un dialogo via radio, il tag restituisce poi il suo codice identificativo e/o le altre eventuali informazioni contenute. La semplicità dei componenti rende i tag RFID molto economici nonché facili da inserire in qualsiasi oggetto, come una carta di credito o un badge.
La comunicazione è gestita dal reader (o controller), che attraverso il segnale radio legge l’identificativo del tag e può leggerne o scriverne la memoria, trasmettendo poi il segnale all’host (PC) o in cloud. La potenza del controller, unitamente al tipo di antenna ad esso collegata, ne determina una delle performance più importanti, ossia la distanza di lettura (del tag), che può essere qualificata in 4 tipologie:
- Proximity: 10-25cm
- Vicinity: 25cm-1m
- Mid Range: 1m
- Long Range: 1m+
RFID passiva e attiva
La tecnologia RFID si può suddividere in due categorie principali: passiva e attiva.
Per quanto riguarda i tag passivi, il dispositivo è completamente dipendente dal lettore, che gli fornisce l’energia necessaria ad alimentare il microprocessore al proprio interno attraverso un campo elettromagnetico catturato dalla propria antenna. Per questo motivo la distanza di lettura è piuttosto limitata. In base alla frequenza a cui opera, vi sono ulteriori classificazioni:
- RFID passivo Low Frequency (LF) (125-135 KHz): per antifurti, chiavi, etc.
- RFID passivo High Frequency (HF) (13,56 MHz), definita negli standard ISO 14443 e ISO 15693; per libri, pallet, controllo accessi, abbigliamento etc.
- RFID passivo Ultra High Frequency (UHF) (868-915 MHz): regolata dalle autorità locali; per pallet, container, etc.
Nel caso di tag attivi, invece, il transponder è alimentato da una piccola batteria interna a lunga durata, il che lo rende in grado di trasmettere un segnale radio autonomamente. Quando interrogati dal sistema di lettura gli apparati RFID attivi sono in grado di trasmettere e ricevere dati anche a distanze di 100-500 metri (a seconda della loro frequenza e dell’ambiente circostante).
- RFID attivo Ultra High Frequency (UHF) (fino a 3 GHz) e Super High Frequency (SHF) (3–30 GHz): per controllo accessi, veicoli, localizzazione etc.
Esistono anche i tag semi-passivi, che sono alimentati da una batteria interna, ma non trasmettono segnali radio autonomamente, limitandosi a rispondere alle interrogazioni del lettore.
Loading diagram...
MIFARE
MIFARE è un marchio registrato di NXP Semiconductors, che produce una vasta gamma di tag RFID e smart card. Operano a 13,56 MHz e sono conformi allo standard ISO 14443A.
Sono molto popolari per il loro utilizzo in sistemi di pagamento e controllo accessi, grazie alla loro capacità di comunicare in maniera veloce e sicura con i lettori contactless.
I tag MIFARE sono divisi in due categorie principali:
- MIFARE Classic: i tag più comuni, con 1KB di memoria e 4 byte di chiave per ogni settore.
- MIFARE Ultralight: i tag più economici, con 512 byte di memoria e senza supporto per la crittografia.
Funzionalità
I tag MIFARE Classic offrono le seguenti funzionalità:
- Trasmissione di dati e alimentazione wireless
- Frequenza operativa di 13,56 MHz
- Distanza operativa di circa 100 mm (a seconda dell’antenna e del lettore)
- Velocità di trasmissione dati di 106 kbit/s
- Integrità dei dati garantita da CRC a 16 bit, parità, codifica bit e conteggio bit
- Anticollisione
- Supporto per 7 Byte Unique ID (UID), 4 Byte Non Unique ID (NUID) o 7 random ID
Cip MF1S50yyX/V1
Il chip MF1S50yyX/V1 è il cuore dei tag MIFARE Classic. Presenta diverse unità specializzate. Fra le più importanti abbiamo:
- Unita logica e aritmetica: i valori vengono memorizzati in un formato ridondante e possono essere incrementati o decrementati
- EEPROM: 1 kB di memoria non volatile, divisa in 16 settori da 4 blocchi ciascuno
- Unità crittografica: il protocollo di cifratura stream CRYPTO1 viene utilizzato per l’autenticazione e la cifratura durante lo scambio dei dati. L’ultimo blocco di ogni settore è chiamato “trailer” e contiene le due chiavi segrete, nonché i permessi di accesso per quel settore.
Loading diagram...
Struttura dati
I tag MIFARE sono divisi in settori e blocchi. L’intero tag possiede 16 settori, ognuno dei quali è a sua volta diviso in 4 blocchi da 16 byte ciascuno, per un totale di 64 byte per settore e 1024 byte per tag.
Loading diagram...
Il primo blocco del primo settore è riservato al costruttore.
Se siamo a che fare con i più comuni NUID, i primi 4 bytes contengono l’identificativo del tag.
Il quinto byte non è altro che un checksum dei primi 4 ottenuto tramite XOR: .
Ad esempio, se i primi 4 bytes sono 0xB3 0x61 0x47 0xF0
, il quinto byte sarà 0x65
.
Nel caso di UID a 7 byte, il checksum è calcolato sui primi 7 byte.
I bytes rimanenti possono essere usati a piacimento dal costruttore.
Loading diagram...
A partire dal secondo settore, i primi 3 blocchi possono essere utilizzati per memorizzare dati arbitrari a disposizione del lettore (nel primo settore, solo i due blocchi successivi al blocco 0). I blocchi di dati possono essere configurati con permessi di accesso differenti e si suddividono in blocchi di lettura/scrittura e blocchi valore. I blocchi valore consentono di effettuare delle operazioni aritmetiche più complesse sui dati che contengono (lettura, scrittura, incremento, decremento, ripristino e trasferimento). I dati nei blocchi valore hanno la dimensione di 4 byte. Si possono anche memorizzare indirizzi lunghi un byte. Il blocco ha anche una struttura ben precisa per minimizzare il rischio di errori. I primi 12 bytes contengono il valore, replicato due volte, con una delle due copie invertita. Gli ultimi 4 byte contengono l’indirizzo da un byte memorizzato quattro volte, di cui due invertito.
Loading diagram...
Il quarto blocco, invece, contiene le due chiavi di accesso al settore. Per essere precisi, i primi 6 byte del quarto blocco di un settore contengono la chiave A, seguiti da 3 byte che descrivono i permessi di accesso al settore (sola lettura, scrittura, etc.), un byte libero e infine 6 byte per la chiave B. Se la chiave B non è necessaria, lo spazio potrebbe essere utilizzato per memorizzare ulteriori dati.
Loading diagram...
Autenticazione a tre passi
Dopo aver selezionato una carta attraverso il suo UID, il lettore indica la zona di memoria a cui accedere e utilizza la chiave corrispondente per l’autenticazione a tre passi. Se l’autenticazione va a buon fine, tutte le comunicazioni successive sono cifrate.
I passaggi sono i seguenti:
- Il lettore specifica a quale settore accedere e sceglie la chiave A o B.
- La carta legge la chiave segreta e i permessi di accesso per quel settore. Quindi invia una nonce come sfida al lettore.
- Il lettore decifra la nonce con la stessa chiave utilizzata dal tag e calcola il risultato atteso. La risposta, insieme a una sfida casuale del lettore, viene quindi inviata alla carta.
- La carta verifica la risposta del lettore confrontandola con la propria sfida e quindi calcola la risposta alla sfida e la trasmette.
- Il lettore verifica la risposta della carta confrontandola con la propria sfida e inizia a richiedere operazioni di lettura/scrittura.
Loading diagram...
Il reader autenticato può richiedere le seguenti operazioni:
- Leggi blocco
- Scrivi blocco
- Decrementa il contenuto di un blocco e lo memorizza in un buffer di trasferimento
- Incrementa il contenuto di un blocco e lo memorizza in un buffer di trasferimento
- Muovi il contenuto di un blocco nel buffer di trasferimento
- Trasferisci il contenuto del buffer di trasferimento in un blocco
Integrità dei dati
Al fine di garantire l’integrità dei dati, soprattuto durante la comunicazione wireless, vengono impiegati:
- un CRC a 16 bit per blocco
- un bit di parità per byte
- un conteggio dei bit
- una codifica bit che distingue fra “0”, “1” e “non definito”
- monitoraggio del canale
Operazioni
Prima di poter accedere alla memoria, è necessario che il lettore abbia completato correttamente la procedura di autenticazione. Le operazioni consentite dipendono dalla chiave utilizzata e dai permessi di accesso impostati per il settore.
Operazione | Descrizione | Si applica a |
---|---|---|
Lettura | Legge il contenuto di un blocco | Tutti i blocchi |
Scrittura | Scrive il contenuto di un blocco | Tutti i blocchi |
Incremento | Incrementa il contenuto di un blocco e memorizza il risultato nel buffer di trasferimento | Blocchi valore |
Decremento | Decrementa il contenuto di un blocco e memorizza il risultato nel buffer di trasferimento | Blocchi valore |
Ripristino | Memorizza il valore di un blocco nel buffer di trasferimento | Blocchi valore |
Trasferimento | Trasferisce il contenuto del buffer di trasferimento in un blocco | Tutti i blocchi |
I comandi che un tag MIFARE supporta, con il proprio identificativo, sono elencati di seguito:
Command | ISO/IEC 14443 | Command code |
---|---|---|
Request | REQA | 26h (7 bit) |
Wake-up | WUPA | 52h (7 bit) |
Anticollision CL1 | Anticollision CL1 | 93h 20h |
Select CL1 | Select CL1 | 93h 70h |
Anticollision CL2 | Anticollision CL2 | 95h 20h |
Select CL2 | Select CL2 | 95h 70h |
Halt | Halt | 50h 00h |
Authentication with Key A | 60h | |
Authentication with Key B | 61h | |
Personalize UID Usage | 40h | |
SET_MOD_TYPE | 43h | |
MIFARE Read | 30h | |
MIFARE Write | A0h | |
MIFARE Decrement | C0h | |
MIFARE Increment | C1h | |
MIFARE Restore | C2h | |
MIFARE Transfer | B0h |
Permesso di accesso
I permessi di accesso sono definiti in 3 bit, memorizzati nel terzo blocco di ogni settore. Il loro valore può essere alterato da un lettore autorizzato. I bit sono così definiti:
Bit di accesso | Comandi validi | Blocco |
---|---|---|
c1-3, c2-3, c3-3 | Lettura, scrittura | 3 |
c1-2, c2-2, c3-2 | Tutte | 2 |
c1-1, c2-1, c3-1 | Tutte | 1 |
c1-0, c2-0, c3-0 | Tutte | 0 |
Loading diagram...
Le 8 combinazioni possibili hanno un significato diverso a seconda che si riferiscano a uno dei primi 3 blocchi del settore o all’ultimo (il trailer che contiene le chiavi). Per i blocchi dallo 0 al 2, i permessi hanno il seguente significato:
c1 | c2 | c3 | Leggere | Scrivere | Incrementare | Decrementare |
---|---|---|---|---|---|---|
0 | 0 | 0 | A/B | A/B | A/B | A/B |
0 | 1 | 0 | A/B | |||
1 | 0 | 0 | A/B | B | ||
1 | 1 | 0 | A/B | B | B | A/B |
0 | 0 | 1 | A/B | A/B | ||
0 | 1 | 1 | B | B | ||
1 | 0 | 1 | B | |||
1 | 1 | 1 |
Per l’ultimo blocco, si applicano invece i seguenti codici:
c1 | c2 | c3 | Leggere A | Scrivere A | Leggere Permessi | Scrivere Permessi | Leggere B | Scrivere B |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | A | A | A | A | ||
0 | 1 | 0 | A | A | ||||
1 | 0 | 0 | B | A/B | B | |||
1 | 1 | 0 | A/B | |||||
0 | 0 | 1 | A | A | A | A | A | |
0 | 1 | 1 | B | A/B | B | B | ||
1 | 0 | 1 | A/B | B | ||||
1 | 1 | 1 | A/B |