Así se hizo Hex NFC: la app de herramientas NFC definitiva

Hex NFC es una herramienta NFC de nivel profesional desarrollada desde cero en 4 meses. Este artículo repasa cómo se desarrolló y qué supuso.

Matthew Scott11 min de lectura
An NFC chip with a passport on the left and a PASMO transit card on the right.

Nota

Hex NFC se lanza en los próximos días; más información en apps.hex.pro/hex-nfc

Hace unos 4 meses, durante un viaje de fin de semana a Melbourne, la idea de la primera app de Hex Pro me golpeó como un camión con un conductor borracho al volante. Y la comparación es acertada, porque esa fue exactamente la sensación que tuve a los 2 meses de proyecto.

NFC: un panorama desolador

Unos días antes había estado ayudando a mi gimnasio a montar un sistema de pago para su minirrefrigerador (que yo mismo, tan amablemente, había donado 3 días después de comprarlo en Bunnings, una cadena de ferreterías, por 1000 AUD, al darme cuenta de que hacía demasiado ruido para tenerlo en mi dormitorio). El joven emprendedor que quería sacarse unos dólares extra vendiendo bebidas energéticas pensaba hacer que la gente le pagara por PayID. Como ingeniero de software que se respeta a sí mismo, no podía permitirle un enfoque tan descuidado. Así que me ofrecí a implementarle gratis un sistema de pago por NFC.

En realidad, hasta entonces nunca había trabajado con etiquetas NFC, pero me informé, entré en AliExpress y pedí un paquete de 10 NTAG213. Luego improvisé un pequeño portal de pago con Stripe. Cuando fui a programar las nuevas etiquetas NFC con la URL del portal, me encontré con algo interesante. La app de NFC más grande de la App Store de iOS tenía 14.000 reseñas, no, cientos de miles de instalaciones, si no millones. Así que, naturalmente, la instalé y la probé. ¿Y qué me encontré? La app era una basura total de mala calidad. No podía creer que esto fuera lo mejor que había. ¿De verdad no podíamos hacer nada mejor? Sinceramente, sin ánimo de ofender a su desarrollador. En retrospectiva, ahora entiendo los retos a los que debió de enfrentarse para desarrollarla. Pero se puede decir que fue el catalizador de Hex NFC.

Una introducción a NFC

Para los no iniciados: ¿qué es exactamente NFC? Son las siglas de Near Field Communication (comunicación de campo cercano), un término 'muy técnico' para decir "acerca el dispositivo a la etiqueta para escanearla".

Los chips NFC son en realidad computadoras diminutas, microchips de silicio de verdad capaces de realizar operaciones lógicas y almacenar datos. La mayoría son demasiado simples para lo primero, pero algunos pueden hacer cosas como cifrar y realizar operaciones matemáticas sobre números aleatorios (respuestas a desafíos). Lo más fascinante de los chips NFC es que no tienen fuente de alimentación propia. En su lugar, tu dispositivo lector (en este caso, un iPhone) proyecta un campo electromagnético que alimenta el chip NFC. Una tecnología realmente genial, y la cosa mejora. El chip responde oscilando un ritmo magnético que el lector detecta y convierte en bits legibles.

Lo complicado aquí es que hay una gran variedad de modelos y fabricantes de chips NFC, cada uno con sus propios protocolos y su propia arquitectura, y no todas sus hojas de datos son especialmente transparentes.

Los retos de trabajar con NFC

Lo primero que hice al volver de Melbourne a la Sunshine Coast fue empezar a construir emuladores virtuales de distintos chips NFC. En aquel momento no tenía acceso a muchas etiquetas NFC. Mi inventario inicial eran 5 NTAG213 de la expedición al gimnasio y dos misteriosas tarjetas de transporte público (una Pasmo japonesa y una Myki de Melbourne), que el iPhone podía escanear, pero sin dar pistas evidentes sobre ellas.

Pensé que, si la documentación de los chips NFC disponible en línea era lo bastante sólida, podría evitar tener que conseguir chips NFC físicos de cada tipo. Bastaría con pasar mi lógica por los emuladores y dar por hecho que funcionaba. Qué ingenuo era entonces.

El NTAG213, de hecho, fue bastante bien. Es el tipo de chip NFC de consumo más popular y está bien documentado. Un dispositivo probado en batalla, usado en todo el mundo y muy conforme con los estándares abiertos.

Cuando empecé a trabajar con esas dos misteriosas tarjetas de transporte, me di cuenta de que las cosas no iban a ser tan sencillas como pensaba. La tarjeta Pasmo resultó ser de fabricación Sony, una tarjeta inteligente FeliCa que se usa en todos los sistemas de transporte público de Japón, con capacidades que superan a las de prácticamente cualquier otro chip de su tipo. La Myki era una MIFARE DESFire EV3 de solo lectura, fabricada por NXP, el mismo fabricante que el NTAG213.

El objetivo era crear la herramienta NFC definitiva, algo que dejara a las demás muy atrás. A medida que crecían los requisitos de capacidades y aprendía más sobre la cantidad y variedad de chips realmente disponibles, supe que no podría evitar las pruebas en el mundo real. Así que pedí una amplia variedad de chips para intentar maximizar mi cobertura. Puedes ver la lista completa aquí.

Y así empezó en serio el desarrollo de los emuladores. Cada chip tuvo el suyo, y probé meticulosamente cada operación y cada capacidad sobre silicio real para asegurarme de que los emuladores se correspondieran lo más fielmente posible con los chips reales. No fue tarea fácil, y llevó muchísimo tiempo, pero valió la pena al 100%. Dediqué cientos de horas a conseguir una fiabilidad impresionante y la posibilidad de hacer pruebas unitarias contra cada modelo de silicio real.

Licencias, procedencia de los datos y paquetes de terceros

Uno de los grandes obstáculos de este proyecto es que quería desarrollar este paquete sin depender de ninguna biblioteca ni dependencia externa (con la excepción de Apple). Todo el espíritu de Hex Pro es privacidad, confianza e integridad. Es un conjunto de principios que me inculcaron de niño, y de verdad creo que hacer las cosas bien conduce a un mayor éxito que hacer lo más conveniente. A lo largo de mi carrera profesional siempre he hecho todo lo posible por mantener la confianza de los clientes, y la confianza implícita que se me ha dado en mis puestos siempre ha llevado a relaciones de trabajo más eficientes y productivas. Así que, para mis futuros clientes, es una prioridad extenderles ese mismo respeto.

Por eso evité por completo los paquetes de terceros, lo que al final da como resultado una app mucho más limpia y desarrollada íntegramente de forma nativa. Nadie va a colar en esta nada que yo no sepa. Dicho esto, tuve que desarrollar mis propias implementaciones del siguiente código:

  • Aritmética de números grandes y curvas elípticas para PACE (curvas Brainpool).

  • Controladores de chips y manejo de NDEF.

  • Lectores de historial de transporte (para chips FeliCa)

  • Biblioteca de nombres de estaciones del transporte público japonés

PACE, el problema de los pasaportes

Una de las funciones singulares de Hex NFC es su capacidad de leer los datos de un pasaporte electrónico. Es una capacidad especialmente fascinante e infrautilizada de los dispositivos iOS. Supe de su existencia hace un año, al autenticarme en una app de identidad gestionada por un gobierno. Se puede decir que las posibilidades de demostrar tu identidad con solo acercar tu documento me tenían completamente cautivado. Como sabía que era posible, sabía que tenía que incluirla.

Mi única preocupación era que estuviera restringida a las apps de organismos gubernamentales. No tenía por qué preocuparme, porque resulta que los chips de los pasaportes electrónicos están bien documentados y es sorprendentemente fácil trabajar con ellos... Eso sería así si Apple ofreciera soporte nativo para los algoritmos de cifrado del tipo PACE. No hubo suerte, y con mi restricción de "sin paquetes de terceros", eso significaba que tenía que desarrollar mi propia implementación de Brainpool. Una tarea que llevó muchísimo tiempo y que valió la pena al 100%. Las capacidades resultantes de escaneo de pasaportes son fascinantes, y tuve el privilegio de probarlas con un pasaporte australiano y, convenientemente, con uno nepalí. Es una función que recomiendo de verdad que la gente pruebe por su cuenta; te fascinaría la información que se guarda en la partición accesible del chip de tu pasaporte (a menos que seas estadounidense, en cuyo caso es prácticamente nada).

Nombres de las estaciones del transporte público japonés

El otro gran reto para mí fueron las tarjetas de transporte japonesas. Una capacidad que sabía que era posible, pero que nunca había visto en un lector NFC. Estas tarjetas son fascinantes. Pueden guardar todo tipo de información. Llevan la cuenta del saldo de la tarjeta, conservan un historial de cuándo y dónde validas al entrar y salir del transporte público, e incluso registran cuándo gastas dinero en tiendas de conveniencia o máquinas expendedoras.

El gran desafío es que el gobierno japonés no ayuda precisamente a la hora de relacionar los ID de las estaciones con sus nombres reales. Ahora bien, si fuera un sinvergüenza, podría simplemente robar los datos de las colecciones de aficionados con licencia que hay en línea. Pero aquí hacemos las cosas bien, así que decidí desarrollar nuestra propia base de datos desde cero. Empecé por averiguar los nombres de las estaciones de mi propia Pasmo, luego pregunté por el vecindario y conseguí una Suica. Ambas aportaban información sobre por dónde habíamos viajado mi vecino y yo. A partir de ahí me puse a trabajar en la base de datos. Por desgracia, la colección de los dos, como turistas, era pequeña. Aquí hice una excepción a mi regla de 'sin peticiones de red' e incluí una función de 'envía la tuya' para quienes quieran aportar su propia información sobre nombres de estaciones. Con el tiempo, espero que construyamos una tabla legítima de datos abiertos que relacione esa información, capaz de competir con los aficionados que (con todo el derecho) protegen su trabajo con licencias para que otros no lo usen.

Variedad de chips y compatibilidad

Hex NFC hace un gran esfuerzo por ser compatible con todos los chips que Apple te deja escanear. No pude conseguir absolutamente todos los tipos de chip en silicio físico, pero obtuve cobertura suficiente para extrapolar la arquitectura de los chips que me faltaban a partir de las hojas de datos y de modelos similares. Por ejemplo, nunca conseguí un NTAG215, pero su arquitectura es lo bastante parecida a la del NTAG213 y el NTAG216 como para poder construir un emulador que debería cubrirlo por completo.

Estos son los chips que he probado a fondo en silicio.

  • NTAG 210µ
  • NTAG213
  • NTAG216
  • NTAG424 DNA
  • Ultralight EV1 128b
  • Ultralight C
  • ICODE SLIX
  • ICODE SLIX2
  • DESFire EV3
  • FeliCa (Suica y Pasmo)

También sé que la MIFARE Classic funciona; simplemente Apple no la escanea.

Pero, como puedes imaginar, entre lectura, escritura, cifrado, bloqueo permanente, intentos de contraseña limitados, borrado y volcado de bloques de datos y demás, hizo falta una cantidad enorme de pruebas de banco. Te sorprendería cuántos pequeños detalles se les escapan a las hojas de datos y cuántas veces hubo que actualizar los emuladores. A estas alturas estoy bastante seguro de que los emuladores de Hex NFC son las mejores representaciones del silicio real que hay en internet.

Compatibilidad con registros NDEF

Junto con cada uno de esos chips, incorporé todos los tipos de registro útiles que se me ocurrieron. Entre ellos, los siguientes:

Texto, enlaces URL, enlaces a apps de Android/iOS, credenciales de Wi-Fi, contactos, correo, teléfono, SMS, FaceTime, mapas, transferencia por Bluetooth, direcciones de criptomonedas, Atajos, datos con plantilla y bytes en crudo, además de perfiles sociales en 22 plataformas y búsquedas en siete motores.

Si alguien tiene recomendaciones o peticiones de más compatibilidad, [email protected] está abierto.

La obra maestra resultante

Lo que ha salido de todo esto es, estoy convencido, la app NFC más capaz y mejor diseñada de iOS. Ofrece herramientas de nivel profesional, como la escritura masiva de etiquetas, una presentación superior de la información y los datos, el guardado de plantillas y preajustes de datos, y una consola de comandos avanzada para los usuarios más exigentes. Es sólida, tolera bien los toques fallidos, y puede usarse para formatear chips de fábrica y, en algunos casos, reparar chips dañados.

Transparencia y por qué es gratis

Entonces, si es tan buena, ¿por qué no la vendo? Le dediqué cientos de horas, cuando en el pasado la gente solía pagarme unos 100 AUD por hora por mi trabajo. En teoría, más de 30.000 AUD invertidos, si lo contamos así. ¿No debería recuperar mis costes? Puede que incluso hayas notado que tiene licencia BSL 1.1 (Business Source License), es decir, con el código disponible, y que pasará automáticamente a ser de código abierto al cabo de unos años.

Bueno, tengo planes más ambiciosos. Hex Pro es ahora mismo una startup, lo que significa que no tengo una reputación ni una base de usuarios consolidadas. Mi esperanza es que Hex NFC despegue y se convierta en una herramienta popular, un competidor real de las apps de NFC más populares. Nunca pondré publicidad de terceros en ninguna de mis apps. Simplemente no lo haré, por principios. Pero cuando publique otros proyectos, me gustaría poner un banner de promoción cruzada en la parte inferior de la página de inicio. Nada invasivo, pero lo suficiente para poner mi otro trabajo delante de personas que aprecian la calidad de Hex NFC y se interesan por otras apps de alta calidad.

Así que mi objetivo principal, además de ofrecer al mundo una pieza de software que hacía mucha falta, es construir la reputación de Hex Pro y hacer promoción cruzada de las apps que sí generan ingresos.


Espero que los usuarios apoyen este proyecto, y tengo muchas ganas de ver a la gente disfrutar de Hex NFC.

Para tu consideración, te presento Hex NFC.