MIFARE é uma marca registrada da Philips (hoje NXP) para uma série de integrados usados na confecção de cartões e tags de RFID. O nome também é usado para se referir a uma série de tecnologias proprietárias baseadas no padrão ISO/IEC 14443 Type A.
Os cartões e tags MIFARE possuem, além de uma identificação única gravada na fábrica e inalterável, uma memória não volátil que pode ser lida e escrita. Um dos objetivos do MIFARE é viabilizar aplicações onde o conteúdo de um cartão não possa ser duplicado ou alterado. Um exemplo destas aplicações é o bilhete eletrônico para transporte público (de onde vem o nome).
Existem vários modelos com características diversas, vou tomar como base o MIFARE Classic com memória de 1K (datasheet aqui); os conceitos descritos valem para os outros modelos.
A memória disponível é dividida em setores, numerados a partir de zero. Cada setor pode ser protegido de uma forma independente dos demais. O setor, por sua vez, é dividido em blocos de 16 bytes. O último bloco de cada setor é usado para configurar a proteção do setor. O primeiro bloco do primeiro setor é o "bloco do fabricante" e não pode ser alterado. Ele contem a identificação única do cartão ou tag.
Mapa da Memória, MIFARE Clássico 1K |
No caso do MIFARE Classic 1K, temos 16 setores, cada um com 4 blocos. Conferindo, 16 x 4 x 16 = 1024 bytes. Repare, entretanto, que temos apenas 16 x 3 x 16 = 752 bytes para armazenamento de dados. Os demais bytes são usados para configuração da proteção. (Para sermos mais precisos, quatro dos bytes do último setor podem eventualmente ser usados para dados, mas não recomendo).
Além de leitura e gravação, os cartões/tag MIFARE possuem comandos seguros para incrementar e decrementar valores armazenados em um formato especial (veja no datasheet). Eles são essenciais em aplicações onde o cartão/tag é usado para bilhetagem.
O bloco de configuração tem o seguinte formato:
- Seis bytes com a chave "A"
- Três bytes com a configuração da proteção
- Um byte não usado
- Seis bytes com a chave "B" (ou livres, se a configuração não usar a chave A)
Armazenamento da configuração de acesso |
No cartão de 1K cada uma das partes controla diretamente o acesso a um bloco (reparar que estamos, inclusive, controlando o acesso ao bloco que controla o acesso). Os três bits de cada parte definem qual chave é necessária para leitura e escrita e são interpretados de forma diferente para os blocos de dados e o bloco de configuração:
Antes de qualquer operação de leitura ou escrita é necessário fazer uma autenticação, usando uma das chaves. Uma pegadinha é que uma chave que possa ser lido não pode ser usada para autenticação. A chave A nunca pode ser lida, mas a leitura da chave B pode ser permitida (três primeiras linhas da primeira tabela acima), neste caso a chave B passa a ser um dado ao invés de chave.
Em todo acesso o cartão ou tag verifica se o bloco de configuração é valido, se não for todo o setor é bloqueado de forma definitiva (uma forma fácil de perder um setor).
Os cartões/tags novos vem com o acesso configurado para permitir ler e escrever nos blocos de dados com a chave A ou B. Porém, o bloco de configuração só pode ser lido ou escrito usando a chave A e a chave B pode ser lida. Portanto, apenas a chave A pode ser usada para autenticação; o fabricante precisa informá-la para que o cartão/tag possa ser usado.
É preciso muito cuidado ao configurar o acesso, pois você pode impedir totalmente futuras gravações e leituras. Lembre-se também que a chave A nunca pode ser lida, portanto é bom você saber exatamente o que gravou. Não é difícil programar erroneamente uma configuração que impeça o uso do setor.
Uma pergunta que você certamente está se fazendo é se se toda esta segurança já foi quebrada. No caso dos modelos mais antigos, sim, com auxílio de hardwares e softwares especiais. Porém existem algumas formas da aplicação se precaver contra a alteração indevida dos dados.
Nenhum comentário:
Postar um comentário