É quase impossível pegar as chaves criptografadas e copiar os chaveiros Mifare para interfones, mas é bem possível montar um dispositivo que faça isso. Não vou falar aqui sobre o que é o Mifare e entrar em detalhes técnicos, apenas direi que essa tecnologia é usada agora, por exemplo, em interfones, e para copiar um chaveiro de interfone, você precisa conhecer as chaves criptográficas com as quais foi fechado.
Atenção! Este artigo é apenas para fins educacionais. Lembramos que qualquer penetração nos sistemas de informação pode ser processada por lei.
Muitas pessoas interessadas na tecnologia MIfare provavelmente possuem o leitor / gravador de cartão / chaveiro Mifare mais simples, constituído por um módulo PN532 e um adaptador USB-UART:

Por um refinamento simples e barato, este dispositivo pode ser fabricado para capturar
Dados de autenticação do leitor, com a ajuda da qual as chaves criptográficas são calculadas, necessárias para a leitura e cópia. Também existem dispositivos disponíveis comercialmente para esse fim - SMKey, Proxmark3, Chameleon e outros. Estes são dispositivos com muitas funções, convenientes, mas não baratos.
Chamo a atenção de você uma opção de orçamento mais baseada em um "conjunto pequeno de cavalheiros" semelhante do módulo PN532 e um adaptador USB-UART, que permite capturar dados de um leitor Mifare, como um interfone, e calcular as chaves criptográficas com as quais o leitor se refere à etiqueta.
O dispositivo desenvolvido possui basicamente uma placa de depuração "popular" e barata, baseada no processador STM32F103C8T6, também chamado de "BluePill" com o módulo PN532 e o adaptador USB-UART conectados a ele. Esta unidade está conectada via cabo USB-OTG a um smartphone no Android. Tudo isso é montado em uma versão mock-up sem solda, com a ajuda de jumpers, e tem algo parecido com isto, embora seja apresentável, mas bastante funcional:

O diagrama de montagem é muito simples e é apresentado em forma de texto:
PN532 ___________________STM32F103C8T6
SCK _____________________ PA5 (SPI1_SCK)
MISO ____________________ PA6 (SPI1_MISO)
MOSI ____________________ PA7 (SPI1_MOSI)
SS ______________________ PB0 (GPIO_OUTPUT)
SIGIN ___________________ PB11 (TIM2_CH4)
SIGOUT __________________ PA12 (TIM1_ETR)
SIGOUT __________________ PA0 (TIM2_ETR)
VCC _____________________ + 5V
GND_____________________GND
USB-UART ________________ STM32F103C8T6
RX ______________________ PA9 (USART1_TX)
TX ______________________ PA10 (USART1_RX)
+ 5V _____________________ + 5V
GND_____________________GND
IMPORTANTE! Os comutadores de interface PN532 devem estar no modo SPI! Você pode fazer o flash do STM32 usando o utilitário FlashLoaderDemonstrator por meio do adaptador USB-UART existente.
Aqui está uma demonstração da captura de uma chave criptográfica de um simulador de leitor de interfone (Arduino + PN532):
Como os leitores da IronLogic (IL), por trabalharem com quem este dispositivo foi desenvolvido, estão tentando ler uma tag com uma chave criptográfica calculada com base no UID dessa tag, é necessário primeiro definir esse UID. Você pode fazer isso de duas maneiras - manualmente ou ler a partir da tag. Depois disso, capturamos e aguardamos o cálculo das chaves criptográficas.
A próxima guia do programa “Record on Classic” usa a capacidade das versões anteriores dos leitores de IL de gravar cópias em espaços em branco baratos do Mifare Classic. Esse método baseia-se no fato de que o leitor de IL após a autorização envia ao intercomunicador não o UID original da tag, mas as informações registradas no primeiro bloco (no caso geral, o mesmo que o UID do original). Para fazer isso, precisamos capturar e calcular a chave de criptografia do rótulo, que servirá como espaço em branco, fechar o setor zero com ele e escrever quatro bytes do UID do rótulo, que serve como um protótipo, no primeiro bloco desse rótulo. Para fazer isso, nem precisamos pegar a chave de criptomoeda original e remover seu despejo, basta descobrir seu UID, mas isso só é verdade se o original for "original" e não uma cópia, você ainda precisará ler o primeiro bloco e já escreva para uma cópia. Para tornar mais claro, considere este exemplo - suponha que desejamos fazer uma cópia da chave original com o UID 0xEBD52AC5, que também está escrito no primeiro bloco do original, em uma etiqueta regular do Mifare Classic com um UID, digamos 0x12345678. Para fazer isso, com a ajuda do dispositivo apresentado, apropriadamente chamado por um camarada Shaitan-Mashina, encontramos a criptomoeda para esse UID e para o objeto específico (entrada, casa ...) que precisamos. Deixe a chave de criptografia ser 0xABCDEF098765 e edite o setor zero do despejo de cópia da seguinte maneira:

No primeiro bloco, escrevemos o UID do 0xEBD52AC5 original e no terceiro bloco os seis bytes da chave criptográfica encontrada para esta peça de trabalho são 0xABCDEF098765. Escrevemos o despejo no espaço em branco e obtemos uma cópia da chave do interfone. Algo como esse SMKey faz cópias do IronLogic para o Mifare Classic regular, e é isso que este programa de gravação faz. No campo "Código", inserimos ou lemos manualmente 4 bytes de UID a partir da chave original, que será gravada no 1º bloco da cópia. Iniciamos e seguimos as instruções do programa. Primeiro, lemos o UID da peça de trabalho, depois levamos o dispositivo ao intercomunicador e capturamos os dados de autenticação. Após a conclusão do cálculo, o programa oferecerá o espaço em branco para gravação de dados. Se mais de uma chave criptográfica for encontrada, depois de registrar a primeira opção, será dada a oportunidade de verificar a cópia recebida. Se a cópia não couber, tente a próxima chave calculada ou apague (restaure) o espaço em branco para uso futuro. Uma cópia também pode não funcionar porque o código que está escrito no 1º bloco da cópia foi definido incorretamente - por exemplo, se você tentar gravar o UID real não da chave original, mas de uma cópia feita usando o método acima. Nesse caso, você não deve usar a UID etiquetas e dados do 1º bloco, que podem ser obtidos na seção "Copiando um setor".
Este método também não funcionará para as versões mais recentes do software de leitura IL. Nesse caso, uma cópia pode ser feita copiando o 0º setor inteiro (4 blocos) em uma peça de trabalho que permite gravar o 0º setor usando a seção de aplicação “Setor de cópia”. Aqui, também encontramos primeiro a chave de criptomoeda original, lemos seu setor zero e depois escrevemos em branco. Devido à falta de espaços em branco OTP e OTP-2.0 disponíveis, até agora, esse recurso foi testado apenas em espaços em branco ZERO, embora as versões mais recentes dos leitores exijam o uso do OTP-2.0.
Bem, para iniciantes - a seção “Record UID” do aplicativo permite alterar o UID, restaurar o 0º bloco danificado e redefinir as chaves criptográficas dos espaços em branco do ZERO para o padrão.
Então - para resumir brevemente. Para fabricar esse dispositivo, compramos ou procuramos um módulo PN532, qualquer um dos adaptadores USB-UART FTDI, PL2303, CH340 ou CP2102, uma placa de depuração STM32F103C8T6, uma dúzia e meia de jumpers, um adaptador USB-OTG e um smartphone (tablet) no Android com OTG. Montamos o próprio dispositivo de acordo com o diagrama acima, flash * .bin com o arquivo STM32 e instalamos o aplicativo * .apk a partir do
arquivoem um smartphone. Para uma operação correta, o aplicativo no smartphone deve ser iniciado quando o adaptador USB-UART estiver conectado, por padrão ou por seleção manual, caso contrário, o aplicativo não terá acesso ao adaptador.
Quero dizer algumas palavras sobre o módulo PN532 - nem todos esses módulos são "igualmente úteis"! Dos três módulos (como na foto acima) que comprei, um não lia e escrevia tags, especialmente ZERO e OTP-2.0, mas funcionava normalmente no modo passivo com leitores de intercomunicação, o outro se comportava exatamente o oposto e apenas o terceiro mais- menos lidar com tags e interfones (embora pior do que os dois primeiros). Talvez eu esteja sem sorte e esse lote específico de módulos não tenha a melhor qualidade, mas outras pessoas se queixam deles. No entanto - para alguém com sorte. O que estou dizendo? Os módulos PN532 apareceram à venda por um layout ligeiramente diferente, que são mais caros, mas, de acordo com as avaliações, eles não têm esses problemas:

Se alguém encontrar o PN532, que não lê nem lê bem etiquetas, recomendo adicionar um módulo RC522 ao dispositivo, que vale um centavo, mas executa suas funções perfeitamente, de acordo com o seguinte esquema:
RC522____________________STM32F103C8T6
RST ______________________ PB12 (GPIO_OUTPUT)
SCK ______________________ PB13 (SPI2_SCK)
MISO _____________________ PB14 (SPI2_MISO)
MOSI _____________________ PB15 (SPI2_MOSI)
SDA ______________________ PA8 (GPIO_OUTPUT)
VCC ______________________ + 5V
GND______________________GND
Nesse caso, o PN532 funcionará apenas ao capturar dados do leitor, e todo o ônus de trabalhar com tags cairá sobre os ombros do RC522.
Concluindo, quero dizer que o desempenho do dispositivo em condições reais foi testado apenas nos leitores IronLogic da primeira geração, sem os filtros ZERO, OTP, OTP-2.0. Outras versões simplesmente não têm acesso; portanto, para os leitores de IL mais modernos, será necessário o desenvolvimento de software e, é claro, a presença desses leitores.
Arquivo