Quando uso internet banking con la mia banca, uso qualcosa chiamato PIN sentry , cioè questo:
(wikimedia commons image)
Per usarlo inserisco la mia carta chip-a-pin (lato chip in) e premo uno dei tre pulsanti in alto: IDENTIFY, RESPOND o SIGN. La sentinella mi chiede il PIN e produce un codice a 8 cifre che poi uso all'interno di internet banking.
La sentinella stessa non contiene alcuna chiave che sia nel mio account (e EMV già utilizza la crittografia a chiave pubblica comunque) poiché posso usare la sentinella PIN di qualcun altro. Ma mi chiedo cosa faccia effettivamente generare quelle cifre.
La mia ipotesi
All'inizio pensavo che avesse eseguito un'autorizzazione offline per 1 unità di valuta, un'autorizzazione che semplicemente non sarebbe mai stata cancellata. Quindi la sentinella stamperà le prime cifre dell'HMAC. Ma questa ipotesi ha due problemi:
-
A un certo punto la carta vorrà andare online e rifiutare di eseguire un'autorizzazione offline. Ho provato questo (usando la sentinella più volte in sequenza e la carta non lo ha mai respinto).
-
EMV ha UN (numero imprevedibile, cioè numero casuale, a
9F37
) che viene generato dalla carta e inviato come parte di una transazione. Per quanto ne so, l'ONU è utilizzato nel calcolo HMAC, quindi un emittente che controlla HMAC ha bisogno dell'ONU. Tuttavia, se l'emittente riceve solo le cifre dall'HMAC, non può verificarlo.
Quindi sì, sono fuori di idee su come questa cosa possa funzionare. Ma ho ancora una domanda su questo dispositivo e PCI-DSS. Il riassunto della domanda è quindi:
Domanda
-
La sentinella PIN genera un codice numerico a 8 cifre, che è relativamente facile da bruteforce. Come può essere conforme allo standard PCI?
-
È improbabile che la sentinella PIN effettui una transazione per un'unità di valuta. Come può quindi utilizzare il chip per convalidare il PIN e produrre un output che può essere verificato dall'emittente?