Imagina que quiero identificar a los usuarios de forma más segura que utilizando un nombre de usuario / contraseña, por ejemplo. un token de hardware. Sin embargo, no puedo emitirles tarjetas inteligentes. ¿Es una buena idea tratar de usar tarjetas bancarias habilitadas para NFC para ese propósito, por ejemplo? con el siguiente flujo (nota: esto no realiza ninguna transacción, ya que no va a ninguna puerta de enlace del emisor de la tarjeta):
- Se supone que el usuario tiene instalada una aplicación de teléfono inteligente específica
- solicitudes de usuario para iniciar sesión en un sitio web
- Se le pide al usuario que presente la tarjeta sin contacto al teléfono con la aplicación abierta (o la aplicación se abre automáticamente en contacto con NFC)
- El usuario presenta la tarjeta y se le solicita un PIN, que escribe en la aplicación
- La aplicación ha obtenido un desafío único del servidor, que envía a la tarjeta
- La tarjeta firma el desafío
- El desafío firmado y un número de tarjeta de crédito transformado (por ejemplo, utilizando bcrypt) se envían al servidor
- El servidor hace coincidir el número transformado (que sirve como identificador) con el usuario que solicitó el inicio de sesión desde un navegador, verifica el desafío firmado con la clave pública de la tarjeta y permite al usuario ingresar.
Si eso no suena demasiado absurdo, algunas preguntas de seguimiento:
- ¿Es el tamaño de la clave de las tarjetas bancarias lo suficientemente grande?
- ¿El protocolo EMV permite la firma de un desafío de tal manera (sé que lo hace como parte de un flujo de transacciones, pero puede haber algunas advertencias)?
- ¿Se puede crear una aplicación de propósito general (Android / iOS), o las tarjetas tienen variaciones significativas en sus implementaciones de EMV?
- ¿Los pares de llaves EMV tienen certificados X.509 correspondientes emitidos por alguna CA? ¿Y se pueden verificar los certificados revocados?