Ho il compito di decodificare il testo cifrato acquisito da un lettore di schede crittografato. Il lettore di carte utilizza lo schema DUKPT (derivato chiave unica per transazione) e la crittografia 3DES. Non ho alcun problema con la crittografia 3DES in quanto è un algoritmo comune implementato da librerie note come BouncyCastle e Java JCE.
Prima di questo incarico, non ho avuto nessun incontro con DUKPT, quindi sono un novizio completo a questo.
Da quanto ho letto finora, DUKPT utilizza un meccanismo di derivazione chiave basato su una Base Derivation Key (BDK) che è fondamentalmente una chiave segreta condivisa e numeri di serie chiave per la particolare transazione. Nel caso del lettore di schede, ogni volta che faccio scorrere (anche con la stessa scheda), il testo cifrato sarebbe diverso e il KSN sarebbe diverso. Conoscendo il BDK, il KSN, l'algoritmo di crittografia (che in questo caso è 3DES) e il testo cifrato, come faccio a ricavare la chiave per la transazione sulla base di queste informazioni? Immagino che ci sia una sorta di funzione di derivazione della chiave, giusto?