I misteriosi pacchetti APDU¶
La comunicazione delle informazioni tra la carta e il lettore è resa possibile grazie allo scambio di pacchetti detti APDU (Application Protocol Data Unit); essi rappresentano l’unità di comunicazione tra il lettore e la carta e la loro struttura è ben definita da ISO/IEC 7816-4 Organization, security and commands for interchange.
Esistono due tipi di APDU: quelli di comando e quelli di risposta. I primi richiedono un set di attributi attraverso cui il lettore è in grado di sapere quali operazioni compiere e quali dati inviare, i secondi contengono il risultato dell’operazione richiesta con in coda l'esito dell'operazione.
La tabella di figura 6 mostra la struttura dei comandi APDU che attraverso il lettore di Smart Card possiamo inviare alla carta MIFARE.
Figura 6 - Struttura dei comandi APDU
La tabella di figura 7 mostra un esempio di comando APDU per ottenere l'UID della MIFARE Classic 1K, la cui lunghezza è pari a 4 byte (vedi attributo Le). A fronte dei comandi inviati, riceviamo sempre una risposta che ha la struttura indicata dalla tabella di figura 8.
Figura 7 - Comando per ottenere l'UID della Smart Card MIFARE Classic 1K
Figura 8 - Struttura di risposta APDU
La tabella di figura 9 mostra la risposta ottenuta a fronte del comando APDU per richiedere l'UID (vedi figura 7) la cui lunghezza dell'UID è pari a 4 byte più 2 byte che segnalano l’esito del comando. L’UID è restituito con il byte meno significativo (LSB) a sinistra e quello più significativo (MSB) a destra (quindi usa il sistema little-endian).
Figura 9 - Risposta del comando APDU per ottenere l'UID della MIFARE Classic 1K
Confrontando i valori di SW1 e SW2 (Status Word) con quelli riportati dalla tabella mostrata in figura 10 è possibile evincere se l'esecuzione del comando è andato a buon fine.
Attenzione. I valori di SW1 e SW2 fanno riferimento al comando per ottenere l'UID della carta; questi valori potrebbero essere diversi per altre classi di comando, in particolare nei casi di errore.
Figura 10 - Codici di risposta APDU comando UID
Per maggiori dettagli sui comandi ed eventuali estensioni, consiglio sempre di consultare il datasheet della MIFARE Classic 1K. I comandi APDU di nostro interesse per implementare lo scenario descritto nella parte introduttiva dell'articolo, sono:
- comando per ottenere l'UID della carta;
- comando per leggere i dati da un determinato settore e blocco;
- comando per scrivere dati su un determinato settore e blocco della carta.