Vai al contenuto
Lingua: IT

Come si autentica il codice su un tag protetto da password?

Inviando il comando di autenticazione del chip con la password, verificando la risposta del chip, e solo allora leggendo o scrivendo le pagine protette, tutto sulla stessa connessione. L'autenticazione dura al massimo quanto il tag resta alimentato, quindi ogni nuova connessione parte senza. Il comando appartiene al chip, non al tipo di tag.

La sequenza

Un tag protetto da password rifiuta le operazioni protette finché non riceve la password giusta, sui chip che ne offrono una; l'impostazione e il suo perimetro sono coperti dalla pagina della password. Il lato del codice è una sequenza breve su una connessione sola.

Si connette, con NfcA su Android o tramite una sessione di tag su iOS, e invia il comando di autenticazione del chip con la password, tramite transceive() o sendMiFareCommand. Verifica la risposta: sulla famiglia NTAG21x, la password di 32 bit arriva con un riscontro di 16 bit, PACK, secondo la scheda dell'NTAG213 su wakdev.com, e il codice confronta il riscontro che riceve con quello che ha configurato. Solo allora legge o scrive le pagine protette, prima di chiudere.

Il comando non fa parte di alcun tipo di tag. Il suo codice e il suo formato appartengono al chip, e NTAG21x, MIFARE Ultralight C, ICODE SLIX e NTAG 424 DNA ne hanno ciascuno uno proprio; le schede dei chip su wakdev.com rimandano alle schede tecniche che li definiscono. Sui chip ISO/IEC 15693 che hanno password, i comandi che le trattano stanno nell'intervallo dei comandi propri, come spiega la pagina di ISO/IEC 15693.

Che cosa fa finire l'autenticazione

Un tag passivo prende la sua energia dal campo del lettore, come spiega la pagina dell'alimentazione, e un'autenticazione è uno stato tenuto nel chip. Finisce al più tardi quando il tag lascia il campo; la scheda tecnica del chip dice quali altri eventi la fanno finire.

Quindi un secondo tentativo riparte dall'inizio. Dopo un TagLostException su Android o un readerTransceiveErrorTagConnectionLost su iOS, il tag che torna non è autenticato, e il codice che riprende con la scrittura protetta riceve un rifiuto. Lo stesso vale per una nuova sessione di tag su iOS, e per il nuovo oggetto Tag che Android crea ogni volta che il tag torna a portata.

Tieni l'autenticazione e le operazioni che sblocca su una connessione sola e su una classe di tecnologia sola. Aprire un'altra classe può far riselezionare il tag ad Android: nella pila libera, il codice della connessione lo può fare sui tag ISO-DEP e MIFARE Classic, quando la nuova classe vuole un'altra interfaccia del controller, e non fa niente su un tag di tipo 2. Se una riselezione faccia finire l'autenticazione lo fissa la scheda tecnica del chip, e la pila di un costruttore di telefoni può decidere altrimenti, quindi restare su una classe sola è la scelta che tiene su ogni telefono.

Dove vive la password

È il codice a inviare la password, quindi deve tenerla. Una password sola compilata dentro un'applicazione sta in ogni copia dell'applicazione, e chi la estrae può riscrivere ogni tag che protegge. Una password per tag sposta il problema su una tabella che l'applicazione va a prendere, il registro che la pagina della password chiama una base di dati da non perdere.

Una password è anche corta. Quella degli NTAG21x è di 32 bit, e certe famiglie di chip limitano i tentativi falliti, un'impostazione che la pagina della password raccomanda di accendere dove esiste.

Niente di tutto questo autentica il tag verso l'applicazione. Una copia del contenuto non porta alcuna password, come spiega la pagina della password contro l'autenticazione, quindi un'applicazione che deve sapere se un tag è autentico vuole un chip che risponda a una sfida crittografica.

Quello che le API di piattaforma non fanno

L'API NDEF di nessuna delle due piattaforme prende una password. Ndef.writeNdefMessage() su Android e writeNDEF su iOS scrivono su un tag che accetta la scrittura, e su un tag protetto falliscono come qualsiasi scrittura rifiutata, il guasto che la pagina dell'errore di protezione descrive dal lato di chi usa il telefono.

La via affidabile è autenticarsi con un comando grezzo e scrivere le pagine protette anch'esse con comandi grezzi, il che vuol dire costruire i byte NDEF e scriverli in un ordine sicuro, come descrive la pagina delle scritture interrotte. Web NFC non offre nessuno dei due passi.

Domande frequenti

Ndef.writeNdefMessage può scrivere su un tag protetto da password?

Non da sola. Le API NDEF non prendono alcuna password, quindi autenticati prima con un comando grezzo e scrivi sulla stessa connessione, con comandi grezzi per sicurezza.

Perché la mia scrittura fallisce dopo un secondo tentativo?

Il tag ha lasciato il campo ed è tornato non autenticato. Invia di nuovo il comando di autenticazione prima delle operazioni protette.

La password protegge il contenuto dalla lettura?

Solo sui chip e sulle impostazioni che proteggono la lettura. Quasi tutte le configurazioni proteggono la sola scrittura, come spiega la pagina della password.

Un'applicazione può tenere segreta la password?

Non da chi la estrae dall'applicazione. Qualsiasi applicazione che si autentica tiene la password che invia, quindi trattala come una serratura contro la riscrittura distratta.