O que é a emulação de cartão pelo host no Android?
A emulação de cartão pelo host deixa um aplicativo Android responder ele mesmo a um leitor externo, por software, em vez de encaminhar a troca para um chip de elemento seguro. Ela removeu o porteiro de hardware que um dia controlava quem podia distribuir uma aplicação de cartão, e mudou o problema de segurança para o sistema operacional e para a nuvem.
O que ela substituiu
Antes da emulação de cartão pelo host, apresentar um cartão a partir de um celular significava pôr a credencial num elemento seguro: um chip de hardware, fisicamente presente no aparelho ou no SIM, e controlado por quem fosse dono daquele hardware.
Esse controle era o obstáculo. Um banco ou uma operadora de transporte que quisesse distribuir uma aplicação de cartão tinha de negociar acesso com um fabricante de aparelhos ou com uma operadora de telefonia, uma relação por vez. A tecnologia funcionava e os arranjos comerciais não escalavam.
Como ela funciona
O Android encaminha a troca para um aplicativo em vez de para um chip. O Google documenta o mecanismo sob o nome de emulação de cartão pelo host.
Um aplicativo declara quais aplicações de cartão consegue tratar, usando identificadores que os terminais pedem pelo nome. Quando um leitor pede um deles, o sistema operacional acorda o aplicativo registrado e passa a troca para ele. O aplicativo responde, comando a comando, por software.
A consequência é que nenhum porteiro de hardware está envolvido. Qualquer desenvolvedor pode publicar um aplicativo que responda a um leitor, sem pedir permissão a um fabricante.
Para onde foi a segurança
Ela não desapareceu, ela mudou de lugar, e entender para onde é a diferença entre usar isso direito e construir algo frágil.
Um elemento seguro resiste à extração física das chaves dele. Um aplicativo rodando no processador principal não resiste, e é por isso que as credenciais tratadas desse jeito costumam ser credenciais de curta duração buscadas num servidor, em vez de um segredo permanente guardado no aparelho. Roube a credencial e ela expira. Roube o aparelho e a credencial não vale nada sem aquilo que a desbloqueava.
Então o modelo passou de proteger um segredo em hardware para limitar quanto vale um segredo roubado. Os dois funcionam, e falham de modos diferentes.
Quando usá-la
Ela é o mecanismo certo quando você controla as duas pontas: o seu próprio aplicativo no celular, os seus próprios leitores em campo. Programas de fidelidade, controle de acesso de um sistema que você opera, bilheteria em que você também opera as catracas.
Ela é a ferramenta errada para se passar por uma credencial que outra pessoa emitiu. Registrar-se para tratar um identificador não lhe dá as chaves que o cartão verdadeiro guarda, então o terminal vai recusar a troca ainda que o seu aplicativo tenha respondido.
E a emulação de cartão pelo host aberta, disponível a qualquer aplicativo, é só do Android. Desde o iOS 17.4 a Apple oferece um equivalente controlado pela plataforma NFC e SE dela: um aplicativo que receba a autorização da Apple, sob um acordo comercial, pode emular cartões, mas apenas por esse caminho controlado e não por um caminho aberto. Qual dos dois caminhos você tem em geral decide o projeto antes de qualquer outra coisa.
Perguntas frequentes
A emulação de cartão pelo host precisa de conexão com a internet?
A troca com o leitor não precisa, mas as implementações que usam credenciais de curta duração precisam de conectividade para obtê-las. Se o celular funciona sem rede depende de quantas credenciais foram buscadas com antecedência, e não do mecanismo em si.
Ela é menos segura que um elemento seguro?
Ela é segura de outra forma. Um elemento seguro protege uma chave permanente em hardware, enquanto este modelo limita o valor daquilo que pode ser extraído. Para muitos usos o segundo é adequado e muito mais fácil de distribuir.
Eu posso usá-la para emular um cartão MIFARE Classic?
Não. O mecanismo trata a troca de comandos padrão usada pelas aplicações de cartão, não esquemas proprietários que operam abaixo dessa camada. É uma de várias razões pelas quais os sistemas baseados no Classic resistem às credenciais de celular.
Existe um equivalente no iOS?
Não um equivalente aberto. A Apple oferece um caminho controlado desde o iOS 17.4, a plataforma NFC e SE dela, disponível apenas a aplicativos que receberam a autorização da Apple sob um acordo comercial, e não um mecanismo geral que qualquer aplicativo possa usar. Um projeto para as duas plataformas não pode presumir que a abordagem aberta do Android se transporta.