Volver a las guías

¿Puede tu móvil leer una tarjeta DESFire? iPhone vs Android

iPhone y Android pueden detectar una tarjeta DESFire, pero la exponen de forma distinta. Qué permite cada uno a una app y por qué las claves de la tarjeta mandan.

Publicado

Respuesta corta

Sí, ambos móviles pueden detectar una tarjeta DESFire, y una app en cualquiera de los dos puede comunicarse con ella. Lo que puedas leer después depende de las claves de la tarjeta, no del teléfono. Si quieres leer una tarjeta DESFire con el móvil, las diferencias reales están en cómo iOS y Android entregan la tarjeta a una app.

Qué es una tarjeta DESFire

MIFARE DESFire es la familia de chips de NXP para tarjetas seguras: credenciales de acceso, tarjetas de campus y similares. Se comunica por NFC-A, que según NFC Tools es compatible con la gran mayoría de los smartphones NFC recientes. Si las generaciones te suenan a chino, nuestra guía de DESFire EV2 vs EV3 explica qué cambió, y los tipos de etiqueta del NFC Forum aclaran dónde encajan las etiquetas Type 4.

A diferencia de una pegatina NTAG, una tarjeta DESFire guarda los datos en aplicaciones, cada una protegida con sus propias claves. Un móvil puede detectar la tarjeta y leer su identificador sin ninguna clave. El contenido es otra cosa. Sin la clave correcta, la tarjeta no lo entrega.

Cómo trata el iPhone las DESFire

En iPhone, las apps usan Core NFC. La descripción general de Core NFC de Apple indica que una app puede interactuar con etiquetas ISO 7816, ISO 15693, FeliCa y MIFARE, que necesita hardware NFC y que no está disponible en extensiones de apps.

Las reglas de la sesión

Una tarjeta DESFire se lee mediante NFCTagReaderSession. Según la documentación de NFCTagReaderSession, tu app necesita el entitlement com.apple.developer.nfc.readersession.formats y un NFCReaderUsageDescription no vacío. Solo puede haber una sesión de lectura activa a la vez. Además, la sesión no admite seleccionar identificadores de aplicación de pago, así que una tarjeta de pago queda fuera.

Dos formas de ver la misma tarjeta

Cómo llega la tarjeta a la app depende de un ajuste del Info.plist. La página de NFCMiFareTag explica que si la lista de select-identifiers de ISO 7816 incluye D2760000850101, el identificador de la aplicación NDEF en las etiquetas DESFire, la app recibe un NFCISO7816Tag. Si omites ese identificador, recibe un NFCMiFareTag, que ofrece sendMiFareCommand para comandos nativos y sendMiFareISO7816Command para APDU.

Esto confunde a mucha gente. En un hilo de los foros de desarrolladores de Apple, un desarrollador cuyos comandos DESFire nativos funcionaban en Android obtuvo errores en iOS. Un ingeniero de Apple respondió que el identificador de su lista era incorrecto, que ISO 7816 no es un requisito previo para los comandos nativos y que, en modo MIFARE, se envían con sendMiFareCommand.

Cómo trata Android las DESFire

Android es más abierto en este punto. La guía de NFC avanzado de Android enumera NfcA (ISO 14443-3A) e IsoDep (ISO 14443-4) entre las tecnologías que todo dispositivo Android con NFC debe admitir. MifareClassic es opcional. Una app llama a getTechList() para ver qué ofrece la etiqueta y luego abre la clase correspondiente de android.nfc.tech con el patrón habitual de conectar, operar y cerrar.

Esa página no menciona DESFire por su nombre. Hablar los comandos de DESFire es tarea del desarrollador de la app. NFC Tools indica que en Android la lectura y la escritura funcionan «sin ninguna restricción particular».

Qué móvil elegir

Para echar un vistazo rápido a una tarjeta sin bloquear, sirven los dos. Para trabajo DESFire a bajo nivel, Android es el camino más simple, porque no hay un ajuste de select-identifiers que se pueda equivocar. El iPhone se desenvuelve bien dentro de las reglas de Core NFC. Según NFC Tools, para leer y escribir hace falta un iPhone XS o XR o posterior, con el escaneo iniciado manualmente en la app. ¿No estás seguro de tu teléfono? Comprueba si tu móvil tiene NFC primero.

Un límite: esto trata de tarjetas que son tuyas o que estás autorizado a usar. Detectar una tarjeta no es lo mismo que copiarla, y NFCore no ayuda a copiar credenciales de acceso, transporte o pago.

En resumen

Ambas plataformas pueden comunicarse con DESFire. El iPhone ofrece un camino más estricto y bien documentado a través de Core NFC; Android da acceso directo a ISO-DEP. En cualquier caso, las claves marcan el límite. Un buen siguiente paso es escanear la tarjeta con NFCore en la App Store o en Google Play y ver qué familia de etiqueta indica.

Preguntas frecuentes

¿Puede un iPhone leer una tarjeta DESFire?

Sí. A través de Core NFC, una app puede detectar una tarjeta DESFire y comunicarse con ella, ya sea como NFCMiFareTag o como NFCISO7816Tag, según si D2760000850101 está en la lista de select-identifiers de la app. El contenido protegido sigue necesitando las claves correctas.

¿Android lee tarjetas DESFire sin configuración especial?

Los dispositivos Android deben admitir NfcA e IsoDep, así que un móvil puede detectar la tarjeta e intercambiar datos con ella. La app aún tiene que implementar los comandos de DESFire, y los archivos protegidos siguen necesitando las claves de la tarjeta.

¿Puede mi móvil copiar una tarjeta DESFire de acceso o de transporte?

Detectar una tarjeta no es copiarla. Los datos protegidos requieren claves que guarda el emisor de la tarjeta, y copiar credenciales que no son tuyas ni controlas queda fuera de lo que NFCore admite.