Bastidores do Hex NFC: o app de ferramentas NFC definitivo
O Hex NFC é uma ferramenta NFC de nível profissional, desenvolvida do zero em 4 meses. Este artigo conta como ele foi criado e o que isso envolveu.


Nota
O Hex NFC será lançado nos próximos dias. Saiba mais em apps.hex.pro/hex-nfc
Há cerca de 4 meses, durante uma viagem de fim de semana a Melbourne, a ideia do primeiro app da Hex Pro me atingiu como um caminhão com um motorista bêbado ao volante. E a comparação é adequada, porque foi exatamente essa a sensação que tive 2 meses depois de começar o projeto.
Alguns dias antes, eu estava ajudando a academia que frequento a montar uma solução de pagamento para o frigobar deles (que eu, tão gentilmente, doei 3 dias depois de comprar na Bunnings por AU$ 1.000 e perceber que era barulhenta demais para ficar no meu quarto). O jovem empreendedor que queria ganhar uns trocados vendendo energéticos planejava receber de todo mundo por PayID. Como engenheiro de software que se preza, eu não podia deixá-lo seguir uma abordagem tão desleixada. Então me ofereci para implementar de graça uma solução de pagamento por NFC.
Na época eu nunca tinha trabalhado com tags NFC, mas pesquisei, entrei no AliExpress e encomendei um pacote com 10 NTAG213. Depois montei rapidamente um portal de pagamento com o Stripe. Quando fui gravar a URL do portal nas tags novas, me deparei com algo interessante. O maior app de NFC da App Store do iOS tinha 14.000 avaliações, ou melhor, centenas de milhares de instalações, se não milhões. Naturalmente o instalei e fui testar. O que encontrei? O app era uma merda completa de baixa qualidade. Eu não conseguia acreditar que aquilo era o líder do mercado. Será que realmente não dava para fazer melhor? Sinceramente, sem querer desmerecer o desenvolvedor. Em retrospecto, hoje entendo os desafios que ele deve ter enfrentado ao desenvolver o app. Mas é seguro dizer que foi esse o catalisador do Hex NFC.
Para quem não conhece, o que é NFC, afinal? A sigla vem de Near Field Communication (comunicação por campo de proximidade), um termo "altamente técnico" para "aproxime o aparelho da tag para ler".
Os chips NFC são, na verdade, computadores minúsculos: microchips de silício de verdade, capazes de executar operações lógicas e armazenar dados. A maioria é simples demais para a primeira parte, mas alguns conseguem executar ações como criptografia e fazer operações matemáticas com números aleatórios (respostas a desafios). O mais legal dos chips NFC é que eles não têm fonte de energia própria. Em vez disso, o aparelho leitor (neste caso, um iPhone) projeta um campo eletromagnético que alimenta o chip NFC. Uma tecnologia genial de verdade, e fica melhor. O chip então oscila um ritmo magnético em resposta, que o leitor detecta e converte em bits legíveis.
A parte complicada é que existe uma variedade de modelos e fabricantes de chips NFC, cada um com seus próprios protocolos e arquitetura, e nem todas as fichas técnicas são particularmente transparentes.
A primeira coisa que fiz ao voltar de Melbourne para a Sunshine Coast foi começar a construir emuladores virtuais para diferentes chips NFC. Na época, eu não tinha acesso a muitas tags NFC. Meu estoque inicial era de 5 NTAG213 da expedição à academia e dois misteriosos cartões de transporte público (um Pasmo japonês e um Myki de Melbourne), que o iPhone conseguia ler, mas sem dar pistas óbvias.
Imaginei que, se a documentação dos chips NFC fosse sólida o bastante na internet, eu poderia evitar a necessidade de ter chips NFC físicos de cada tipo. Bastaria rodar minha lógica nos emuladores e saber, a partir daí, que funciona. Como eu era ingênuo naquela época.
O NTAG213, na verdade, correu bem. É o tipo mais popular de chip NFC de consumo e é bem documentado. Um dispositivo testado em batalha, usado no mundo inteiro e fortemente aderente a padrões abertos.
Quando comecei a trabalhar naqueles dois cartões de transporte misteriosos, percebi que as coisas não seriam tão simples quanto eu pensava. O cartão Pasmo se revelou de fabricação da Sony, um cartão inteligente FeliCa usado em todos os sistemas de transporte público do Japão, com capacidades que superam praticamente todos os outros chips do mesmo tipo. O Myki era um MIFARE DESFire EV3 somente leitura, de fabricação da NXP, a mesma fabricante do NTAG213.
O objetivo era criar a ferramenta NFC definitiva, algo que realmente deixasse as outras para trás. À medida que os requisitos de capacidade cresciam e eu aprendia mais sobre a quantidade e a variedade de chips realmente disponíveis, percebi que não poderia evitar os testes no mundo real. Então encomendei uma grande variedade de chips para tentar maximizar minha cobertura. Você pode ver a lista completa aqui.
E assim o desenvolvimento dos emuladores começou para valer. Cada chip ganhou o seu, e testei meticulosamente cada operação e capacidade em silício real para garantir que os emuladores correspondessem aos chips reais o mais fielmente possível. Não foi fácil, e consumiu um tempo enorme, mas valeu 100% o esforço. Gastei centenas de horas para obter uma confiabilidade impressionante e a capacidade de rodar testes unitários contra cada modelo de silício real.
Um dos maiores obstáculos deste projeto é que eu queria desenvolver este pacote sem nenhuma dependência de bibliotecas externas (com exceção da Apple). O espírito da Hex Pro é privacidade, confiança e integridade. É um conjunto de valores que me foi incutido desde criança, e acredito de verdade que fazer as coisas direito leva a mais sucesso do que fazer o que é conveniente. Ao longo da minha carreira profissional, sempre fiz o máximo para manter a confiança dos clientes, e a confiança implícita que recebi nas minhas funções sempre resultou em relações de trabalho mais eficientes e produtivas. Então, para meus futuros clientes, é prioridade estender a eles esse mesmo respeito.
Por isso, evitei completamente pacotes de terceiros, o que no fim resulta em um app muito mais limpo e totalmente nativo. Ninguém vai enfiar nada neste aqui sem que eu saiba. Dito isso, tive de desenvolver minhas próprias implementações do seguinte código:
-
Matemática de números grandes e curvas elípticas (curvas Brainpool) para o PACE.
-
Drivers de chips e tratamento de NDEF.
-
Leitores de histórico de transporte (para chips FeliCa)
-
Biblioteca de nomes de estações do transporte público japonês
Um dos recursos únicos do Hex NFC é a capacidade de ler dados de passaportes eletrônicos (ePassport). É uma capacidade particularmente fascinante e pouco explorada dos dispositivos iOS. Soube da existência dela pela primeira vez há um ano, ao me autenticar em um app de identidade do governo. É seguro dizer que fiquei completamente encantado com as possibilidades de simplesmente encostar o documento para provar a identidade. Como sabia que era possível, sabia que tinha de ter isso.
Minha única preocupação era que fosse restrito a apps de órgãos governamentais. Não precisava ter me preocupado, porque acontece que os chips de passaporte eletrônico são bem documentados e surpreendentemente fáceis de trabalhar... Isso seria verdade se a Apple oferecesse suporte nativo ao tipo de algoritmo de criptografia que o PACE usa. Sem essa sorte, e com a minha restrição de "nenhum pacote de terceiros", precisei desenvolver minha própria implementação Brainpool. Uma tarefa extremamente demorada que valeu 100% o esforço. As capacidades resultantes de leitura de passaporte são fascinantes, e tive o privilégio de testá-las em um passaporte australiano e, convenientemente, em um passaporte nepalês. É um recurso que recomendo muito que as pessoas experimentem por conta própria; você ficaria fascinado com as informações guardadas na partição acessível do chip do seu passaporte (a menos que você seja americano, caso em que é praticamente nada).
O outro grande ponto para mim foram os cartões de transporte japoneses. Uma capacidade que eu sabia ser possível, mas que nunca tinha visto em um leitor NFC. Esses cartões são fascinantes. Eles conseguem guardar todo tipo de informação. Registram o saldo do cartão, mantêm um histórico de quando e onde você entrou e saiu do transporte público e até anotam quando você gasta dinheiro em lojas de conveniência ou máquinas de venda automática.
O grande desafio é que o governo japonês não ajuda muito quando se trata de mapear os IDs das estações para os nomes de verdade. Agora, se eu fosse um canalha, poderia simplesmente roubar os dados de coleções licenciadas de entusiastas na internet. Mas aqui fazemos as coisas direito, então decidi desenvolver nosso próprio banco de dados do zero. Fui em frente e descobri os nomes das estações no meu próprio Pasmo, depois perguntei pela vizinhança e consegui um Suica. Os dois traziam informações sobre por onde eu e o vizinho tínhamos viajado. A partir daí, comecei a trabalhar no banco de dados. Infelizmente, a coleção de nós dois, como turistas, era pequena. Abri uma exceção à minha regra de "nenhuma requisição de rede" aqui e incluí uma função "envie o seu" para quem quiser contribuir com suas próprias informações sobre nomes de estações. Com o tempo, espero que a gente construa uma tabela legítima de código aberto mapeando esses dados, capaz de competir com os entusiastas que (com razão) usam licenças para impedir que outros aproveitem seu trabalho.
O Hex NFC faz um grande esforço para tentar dar suporte a todo chip que a Apple permite ler. Não consegui ter em mãos todos os tipos de chip em silício físico, mas obtive cobertura suficiente para extrapolar a arquitetura dos chips que faltavam a partir das fichas técnicas e de modelos parecidos. Por exemplo, nunca consegui um NTAG215, mas a arquitetura é parecida o bastante com a do NTAG213 e do NTAG216 para que eu construísse um emulador que deve cobri-lo por completo.
Os chips que testei por completo em silício são os seguintes.
- NTAG 210µ
- NTAG213
- NTAG216
- NTAG424 DNA
- Ultralight EV1 128b
- Ultralight C
- ICODE SLIX
- ICODE SLIX2
- DESFire EV3
- FeliCa (Suica e Pasmo)
Também sei que o MIFARE Classic funciona; a Apple simplesmente não o lê.
Dá para imaginar, porém, que com leitura, gravação, criptografia, bloqueio permanente, tentativas de senha limitadas, apagamento/despejo de blocos de dados e mais, foi necessária uma quantidade enorme de testes de bancada. Você ficaria surpreso com quantas pequenas sutilezas as fichas técnicas deixaram passar e quantas atualizações os emuladores precisaram. Na verdade, a esta altura tenho bastante certeza de que os emuladores do Hex NFC são os melhores mapeamentos do silício real que existem na internet.
Junto com cada um deles, incluí todo tipo de registro útil que consegui imaginar. Entre eles:
Texto, links URL, links de apps Android/iOS, credenciais de Wi-Fi, contatos, e-mail, telefone, SMS, FaceTime, mapas, transferência por Bluetooth, endereços de criptomoedas, Atalhos, dados com modelo e bytes brutos, além de perfis sociais em 22 plataformas e busca em sete mecanismos.
Se alguém tiver recomendações ou pedidos de mais suporte, o [email protected] está aberto.
O que obtivemos é o que tenho certeza de ser o app NFC mais capaz e mais bem projetado do iOS. Ele oferece ferramentas de nível profissional, incluindo suporte à gravação de tags em massa, exibição superior de informações e dados, salvamento de modelos/predefinições de dados e um console de comandos avançado para os usuários avançados. É resistente, lida bem com toques malfeitos e pode ser usado para formatar chips de fábrica e, em alguns cenários, consertar chips danificados.
Então, se é tão bom, por que não o vendo em vez disso? Gastei centenas de horas trabalhando nele, e no passado as pessoas normalmente me pagaram ~AU$ 100 por hora pelo meu trabalho. Em tese, mais de AU$ 30.000 investidos nisso, se você fizer essa conta. Não deveria recuperar meus custos? Você talvez tenha notado até que ele é licenciado sob a BSL 1.1 (Business Source License), que é código disponível e se converte automaticamente em código aberto depois de alguns anos.
Bem, tenho planos maiores. A Hex Pro é uma startup neste momento, o que significa que não tenho reputação nem base de usuários estabelecidas. Minha esperança é que o Hex NFC estoure e se torne uma ferramenta popular, um concorrente de verdade para os apps de NFC mais populares. Eu nunca vou enfiar anúncios de terceiros em nenhum dos meus apps. Simplesmente não faço isso, por princípio. Mas, quando lançar outros projetos, gostaria de colocar um banner de promoção cruzada no rodapé da página inicial. Nada invasivo, mas o suficiente para apresentar meus outros trabalhos a quem aprecia a qualidade do Hex NFC e se interessa por outros apps de alta qualidade.
Então meu objetivo principal, além de oferecer ao mundo um software que fazia muita falta, é construir a reputação da Hex Pro e fazer promoção cruzada dos apps que de fato dão dinheiro.
Espero que os usuários apoiem essa iniciativa, e estou ansioso para ver as pessoas aproveitando o Hex NFC.
Para sua apreciação, apresento o Hex NFC.
Abre em uma nova aba