Tengo la tarea de descifrar el texto cifrado adquirido de un lector de tarjetas cifrado. El lector de tarjetas utiliza el esquema DUKPT (clave única derivada por transacción) y el cifrado 3DES. No tengo ningún problema con el cifrado 3DES, ya que es un algoritmo común implementado por bibliotecas conocidas como BouncyCastle y Java JCE.
Antes de esta tarea, no he tenido ningún encuentro con DUKPT en absoluto, por lo que soy un completo novato en esto.
Por lo que he leído hasta ahora, DUKPT utiliza un mecanismo de derivación de claves basado en una Clave de Derivación de Base (BDK) que es básicamente una clave secreta compartida y Números de Serie de la transacción en particular. En el caso del lector de tarjetas, cada vez que deslizo (incluso con la misma tarjeta), el texto cifrado sería diferente y el KSN sería diferente. Conociendo el BDK, el KSN, el algoritmo de cifrado (que en este caso es 3DES) y el texto cifrado, ¿cómo puedo obtener la Clave para la transacción basada en esta información? Me imagino que hay algún tipo de función de derivación de claves, ¿no?