TAG RFID Mifare 1KB rotto?

Ciao a tutti,

sto utilizzando il programma di esempio per Arduino DumpInfo, che, come sapete, stampa

Card UID: 2C .. .. ..
PICC type: MIFARE 1KB
Sector Block   0  1  2  3   4  5  6  7   8  9 10 11  12 13 14 15  AccessBits
[...]

Se utilizzo una scheda ottengo il dump di tutti i settori con gli access bits, se ne utilizzo un'altra ottengo sempre PCD_Authenticate() failed: Timeout in communication.

Ho fatto un po' di ricerche in giro ma non sono riuscito a capire cosa possa essere successo al tag.

Quello che posso dire è che stavo giocherellando anche con NFC Tools per Android per leggere il TAG.

Questa la situazione al primo scan:

Come si può notare, c'è la scritta NdefFormatable.

Ho provato a scrivere un testo nel tag, tramite questa funzione e la situazione è cambiata in questo modo:

Ora la scritta NdefFormatable è diventata Ndef (non so cosa sia cambiato) e compaiono una serie di altre informazioni che ho evidenziato.

Ora la domanda è: perché questo TAG è leggibile da Android e non lo è più tramite la scheda RC522? Cosa ho combinato? :smiley: Prima leggevo il dump correttamente.

Grazie in anticipo

NFC Tool è in grado di identificare i chip Mifare 1K Classic, il fatto che in tipo tag ti risponda unknown è piuttosto sospetto.

Tipo di tag Unknown me lo restituisce anche su una scheda per la quale riesco ad effettuare il dump. Per sospetto che intendi? È difettosa la scheda?

Scarica tag info e vedi se la scheda monta davvero una mifare o una cinesata di clone

Queste sono le informazioni che sono riuscito a ottenere:

** TagInfo scan (version 4.11.59 [β4011059]) 2016-01-03 14:58:32 **

-- INFO ------------------------------

# IC manufacturer:
NXP Semiconductors

# IC type:
MIFARE Classic (EV1) (MF1S50)

# Application information:
No access possible
This Android device does not support MIFARE Classic tags

-- NDEF ------------------------------

# No NFC data set available:
No access; this Android device does not support MIFARE Classic technology

-- EXTRA ------------------------------

# Memory size:
1 kB
* 16 sectors, with 4 blocks per sector
* 64 blocks, with 16 bytes per block

-- TECH ------------------------------

# Technologies supported:
ISO/IEC 14443-3 (Type A) compatible
ISO/IEC 14443-2 (Type A) compatible

# Android technology information:
Tag description:
* TAG: Tech [android.nfc.tech.NfcA]
android.nfc.tech.NfcA
* Maximum transceive length: 253 bytes
* Default maximum transceive time-out: 618 ms


# Detailed protocol information:
ID: 2C:F4:2F:00
ATQA: 0x0400
SAK: 0x08

# Memory content:
No access possible
This Android device does not support MIFARE Classic tags

--------------------------------------

Ho provato a fare la scansione di un altro TAG RFID che funziona sicuro al 100% :slight_smile: (lo uso ogni giorno) e ottego lo stesso identico risultato che ho con il presunto tag fallato:

Card UID: 2. .. .. 0
PICC type: MIFARE 1KB
Sector Block   0  1  2  3   4  5  6  7   8  9 10 11  12 13 14 15  AccessBits
  15     63  PCD_Authenticate() failed: Timeout in communication.
  14     59  PCD_Authenticate() failed: Timeout in communication.
  13     55  PCD_Authenticate() failed: Timeout in communication.
  12     51  PCD_Authenticate() failed: Timeout in communication.
  11     47  PCD_Authenticate() failed: Timeout in communication.
  10     43  PCD_Authenticate() failed: Timeout in communication.
   9     39  PCD_Authenticate() failed: Timeout in communication.
   8     35  PCD_Authenticate() failed: Timeout in communication.
   7     31  PCD_Authenticate() failed: Timeout in communication.
   6     27  PCD_Authenticate() failed: Timeout in communication.
   5     23  PCD_Authenticate() failed: Timeout in communication.
   4     19  PCD_Authenticate() failed: Timeout in communication.
   3     15  PCD_Authenticate() failed: Timeout in communication.
   2     11  PCD_Authenticate() failed: Timeout in communication.
   1      7  PCD_Authenticate() failed: Timeout in communication.
   0      3  PCD_Authenticate() failed: Timeout in communication.

E' come se questi tag, con delle informazioni al loro interno avessero qualcosa di strano tale per cui va in timeout la comunicazione.
Forse dovrei utilizzare un altro programma Arduino per la lettura? Suggerimenti?

Timeout in communication restituisce in caso di autenticazione fallita.

Hai qualche link diretto a documentazione che spiega questa cosa?
Non capisco perché ci sia questa autenticazione (non ho messo alcuna crittografia sul tag, sempre se di questo si tratta).

I mifare sono di default cifrati con la chiave 0 0 0 0 0 0, puoi fare riferimento al datasheet per comprendere, per la libreria dovresti rivolgerti a chi l'ha sviluppata.

Ciao,

sto dando un’occhiata al codice sorgente della libreria MFRC522, e ad un certo punto leggo:

// All keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
	for (byte i = 0; i < 6; i++) {
		key.keyByte[i] = 0xFF;
	}
PICC_DumpMifareClassicToSerial(uid, piccType, &key);

In ogni caso, le schede che riesco a leggere, superano la parte di autenticazione con la chiave impostata come sopra. E’ come se scrivendo un valore sul tag con NFC Tools, venga utilizzata una chiave diversa. Possibile?

Assolutamente, le chiavi sono modificabili a piacimento.


Come vedi ogni settore ha il suo blocco sector trailer (il 3) in questo sono contenute le chiavi di cifratura (key A e B) e i bit di accesso, che dicono al micro come permettere l'accesso ai dati, mediante quale chiave e in che modalità. Se vai a scrivere in questo blocco senza cognizione di causa vai a fare danni irreversibili senza l'impiego di tecniche di cracking del protocollo crypto 1 (il protocollo di cifratura di questi chip).

OK grazie.

Facendo la scansione di un altro tag funzionante, leggo questo:

Sector Block   0  1  2  3   4  5  6  7   8  9 10 11  12 13 14 15  AccessBits
  15     63   00 00 00 00  00 00 FF 07  80 69 FF FF  FF FF FF FF  [ 0 0 1 ]

Effettivamente vedo che key a = 00 00 00 00 00 00 e key B = FF FF FF FF FF FF.
Chiaramente ancora non so se e come modificarlo, ma leggendo la parte di codice che avevo riportato nel mio post precedente, dovrebbe funzionare solo per i valori da 0 a 5, che in questo caso sono tutti 00 e non tutti FF.

Per quello che capisco, lui prova ad autenticarsi con la key = FF… ma da 0 a 6 sono tutti 00. Come fa a funzionare?

Il sistema è più complesso, i byte 6 7 8 del Sector trailer gestiscono gli accessi al blocco

Mediante queste regole


Quindi non è detto che devi fare l'autenticazione proprio con la key A, ma dipende da come sono impostati gli access bits e il blocco a cui vuoi accedere e in che modalità.

OK, l'argomento comincia a farsi complesso.
Spero che studiandomi il data sheet di questo tag Mifare, riesco a vederci più chiaro.

Da quello che vedo:

Access bits:
byte 6: 1 1 1 1 1 1 1 1 -> 255(base 10)
byte 7: 0 0 0 0 0 1 1 1 ->   7(base 10)
byte 8: 1 0 0 0 0 0 0 0 -> 128(base 10)

User Data:
byte 9: 0 1 1 0 1 0 0 1 -> 105(base 10)

Ma nella riga che ho riportato, l'ultima colonna mostra:

AccessBits
[ 0 0 1 ]

Ora faccio confusione con questi altri access bits. C'è una correlazione con i precedenti?

Detto ciò, e prendendo in considerazione gli access bits [0 0 1], secondo la prima tabella posso solo leggere i blocchi 0, 1 e 2 del TAG usando la chiave A o la chiave B.

Secondo la tabella successiva (per il sector trailer) invece, posso modificare il valore della chiave A usando la chiave A, modificare i byte 6,7 e 8 usando la chiave A, leggere e scrivere la chiave B usando sempre la chiave A.

Corretto?

Ho fatto caso inoltre ai simboli di negato sui byte 6 e 7. Vanno invertiti rispetto a come ho scritto i singoli bit?

Grazie

Corretto.
Semplicemente i bit di accesso vanno inseriti in doppia copia una normale ed una negata, sinceramente non ho idea del perchè.

Eccomi di nuovo! :slight_smile:

ho cercato di studiarmi il codice della libreria MFRC522 per capire un attimo come funziona l'autenticazione ecc..

Da quello che sono riuscito a capire, il tag mifare che non riesco più a leggere è come se fosse stato protetto da una password (della quale ignoro il valore), nel momento in cui ho scritto qualcosa tramite NFC Tools per Android.

Volendo provare in qualche modo a recuperare questa chiave (tramite nfc tools dove riesco a leggere i dati scritti non so se si può fare), come potrei fare? Mi pare che ci sia un punto nel codice della libreria MFRC522 dove proprio si fa l'autenticazione e lì, viene stampato il messaggio "PCD_Authenticate() failed: Timeout in communication."

Per provare ad autenticarmi, devo riscrivere del codice? Modificare la libreria? Non so...

Recuperare un codice di autenticazione del genere non è semplice, parlo solo per curiosità, visto che la procedura potrebbe benissimo essere usata per scopi malevoli. Il brute force è da dimenticare, la chiave di autenticazione è una combinazione di 6 byte, quasi 300 bilioni di combinazioni possibili, good luck.
Per nota le mifare classic sono state sostituire da modelli piu avanzati proprio per un problema di sicurezza con il loro protocollo di autenticazione, che sfrutta l'algoritmo di cifratura CRYPTO-1. Le Mifare Plus usano infatti un implementazione di AES che con le tecnologie attuali è giudicato inviolabile.
Quindi se ti vuoi buttare nel disperato tentativo di recuperare la chiave buona fortuna, ho letto in giro di alcune implementazioni gia pronte per linux.
Poi sempre per cultura ti rimando a questo articolo.

Grazie per le informazioni.
E' chiaro che l'intento è quello di sperimentare a scopo di studio, su un tag che ho erroneamente bloccato io, non so come! :smiley:

Anche io ho letto di alcune implementazioni per Linux (tipo mfoc) ma mi sembra che non siano per Arduino, quindi ora non avrei idea di come fare per utilizzarle. Avevo letto dei problemi di sicurezza legati al CRYPTO-1, ma non credo che questi tag "tarocchi" che ho comprato siano Mifare Plus.

Se sono per Linux per Arduino non andranno, probabilmente saranno in Python, si potrebbero riadattare magari per la Yun.

Tu ci hai mostrato degli screen di una lettura di un mifare classic, non di un mifare plus.