Deberías usar tarjetas inteligentes. Pueden manejar el cifrado y solo divulgar su contenido en la presentación de una clave, así como cifrar la comunicación entre el lector y la tarjeta para que no funcione el rastreo.
Para las tarjetas contactadas, supongo que una tarjeta PKI funcionaría, donde la tarjeta prueba que tiene la clave privada de un certificado en particular, y la usa para extraer el registro del usuario de una base de datos. El problema es que en realidad no se pueden almacenar datos significativos (además de una clave privada), lo que requiere el uso de una base de datos y, por lo tanto, evita el uso sin conexión de la tarjeta. No sé si hay alguna tarjeta contactada que simplemente almacene datos arbitrarios y la devuelva al presentar una clave.
Para las tarjetas sin contacto (NFC) hay tarjetas Mifare que pueden almacenar datos y solo revelarlos en la presentación de una clave. No hacen criptografía (no hay concepto de criptografía asimétrica, solo son cosas simples como "dame la clave para el bloque de datos XX, si la clave está bien, te devuelvo el contenido del bloque"), pero por otro lado puede almacenar datos arbitrarios. datos y, por lo tanto, permite que los dispositivos fuera de línea sigan interactuando con la tarjeta y el sistema permanezca seguro (si se implementa correctamente).
Las claves en sí mismas no son brutables (demasiadas posibilidades) pero algunas tarjetas tenían fallas (Mifare classic por ejemplo) que permitían obtener una clave de sector y luego usar otra falla para recuperar todas las demás claves del sector del conocimiento de una sola uno. Sin embargo, estos defectos se han corregido en las últimas revisiones de las tarjetas.
Para su aplicación, las siguientes tarjetas pueden ser adecuadas:
- Mifare Ultralight EV1: utiliza una clave de 32 bits para proteger los datos almacenados en ella, aunque la comunicación con el lector no está cifrada y, por lo tanto, es vulnerable a la inhalación.
- Mifare Ultralight C: utiliza 3DES crypto entre el lector y la tarjeta, mejor seguridad que la anterior.
- Mifare Plus: versión mejorada de Mifare Classic que mitiga sus vulnerabilidades, usa claves y su propio criptografía de rollo propio, sin saber si se han descubierto fallas en esta nueva revisión desde que se repararon las vulnerabilidades Classic.
- Mifare DESFire EV2: la última revisión de la serie DESFire, admite AES crypto.
No importa qué tarjeta elijas de esta lista, te sugiero que la implementes así:
-
un bloque de datos con algún ID de usuario o referencia al registro del usuario en la base de datos, configurado para acceso público, por lo que no se necesita una clave (o una clave predeterminada de baja seguridad). También puede usar el UID de la tarjeta, pero tenga cuidado, pueden no ser únicos.
-
una vez que se lee ese bloque (o UID), la computadora adjunta al lector busca al usuario en la base de datos y obtiene su clave única por tarjeta para autenticar y recuperar otros bloques de datos confidenciales para demostrar realmente al usuario es quien pretende ser (a través de un nonce o un valor secreto almacenado allí) y alguien simplemente no clonó la identificación de usuario disponible públicamente del primer sector.
-
puede cifrar los datos de la tarjeta una vez más (puede usar el UID de la tarjeta como IV) con una clave que solo su infraestructura conoce (de preferencia, única por usuario), de esa manera si alguien aún se las arregla para obtener de los datos confidenciales almacenados en la tarjeta, no tendrán mucho sentido.
-
no use los UID para nada sensible, debe asumir que no son únicos, se pueden leer y duplicar fácilmente (a pesar de lo que dice NXP sobre la singularidad del UID, hay falsificaciones "mágicas" de Mifare disponibles que permiten cambiar el UID mediante un comando personalizado).