Como funcionam os controles Rolling Codes/Hopping Code

No princípio a inocência

Houve uma época em que acionar o alarme de um carro era feito através do envio de um código de tamanho e forma fixa. O famoso e muito utilizado HT6P20-B da Holtek transmite  28 bits imutáveis a cada aperto do botão do controle.
O receptor era então sincronizado com este código e toda vez que este recebesse o código ele efetuava uma ação como travar/destravar o alarme, abrir e fechar o portão ou ligar uma lampada.

E os ladrões viraram nerds …

Enfim, um código fixo imutável poderia ser facilmente copiado e retransmitido por qualquer outro transmissor que o receptor nem saberia de quem se tratava. Mais conhecido como Clonagem ou Replay Attack.

Assim é o funcionamento do controle Learning Code.

Criptografia rolante

Uma forma de mudar isto era obviamente criptografar a informação – o ID do controle – . Mas se você pegar um código que nunca muda e criptografa-lo o resultado sera somente outro código fixo.

Para isso é necessário que se mude o código transmitido a cada aperto do botão ou tempo programado de forma que um possível intruso (homem do meio) não consiga prever qual o próximo código a ser gerado.

Para que o código varie constantemente normalmente é usado um contador interno que é  incrementado a cada aperto do botão. Assim monta-se uma bloco contendo o contador e algumas outras informações como o botão apertado e o nível da bateria do controle e criptografa-se este bloco com algum algoritmo criptográfico.

Como o contador constantemente varia o bloco transmitido será sempre diferente. Assim somente o receptor com a chave para descriptografar conseguirá ler o conteúdo.

E aqui fica o pulo do gato. Mesmo que um ladrão pegue uma transmissão legítima e reenvie ao receptor este verá que o contador desta transmissão já foi aceito antes, então ignora a transmissão. O receptor só ira aceitar uma transmissão válida se este bloco conter um contador inédito.

Veja que uma forma de ataque é poluir o espectro RF para que sua transmissão não chegue ao receptor – portão, carro – e o atacante consiga pegar esta transmissão e reenviar posteriormente ao receptor para efetuar a ação. Como o contador não foi recebido o receptor aceitará a transmissão. Por isso é bom certificar-se que o carro ‘travou’ o alarme do que simplesmente apertar o botão e nem dar bola.

Keeloq

Keeloq é um algoritmo proprietário da Microchip que criptografa um bloco de 32 bits com uma chave de 64 bits. Os chips mais famosos no Brasil atualmente utilizando ele são os HCS200 e HCS301 que pré-programados com a chave transmitem um código que sempre varia devido a um contador que é incrementado a cada aperto do botão.

As empresas tem uma chave única para todos os controles (ou segmentos de produtos, região). Se você descobrir a chave você clona qualquer carro ou portão do mesmo alarme.

AES128

Alguns estão começando a implementar um sistema rolling code com o AES128. A tendência é utilizar a mudança do contador de forma temporal ( a cada 1ms por exemplo).

A ideia é simples e de fácil implementação em um Arduino, para testar dois Arduinos e um par TX-RX são necessários. Um envia o código criptografado e o outro descriptografa, verifica e aciona:

Seja:
uint32 Contador
uint24 ID
uint4 Botão
Faça a cada 1ms:
Incremente o contador (ou outra forma de variação)
Se o botão for apertador faça:
Monte um bloco de 128 bits  contendo o contador, o botão e se quiser o ID.
Criptografe este bloco com a chave
Some a este bloco o ID (logo será um bloco de 24+128bits) e transmita

Clonagem

Se você pretende clonar algum controle Keeloq boa sorte. Há uma técnica utilizando o ataque de sub-channel onde é observado o consumo de energia de um receptor implementado em PIC e conhecidos os consumos específicos de cada instrução é possível estimar a chave. Porém é uma técnica avançada.

Para saber mais (todos em inglês) …

Anúncios

9 comentários

  1. Fiquei curioso em saber como o portão aprende o código do controle. O cadastro. Como nada é feito no controle, apenas no receptor, como há o cadastro sem ser vulnerável? Nos bits enviados pelo controle a cada acionamento, tem uma parte não cifrada, na qual consta um números serial do controle (28bits) e o botão acionado (4 bits) e status (2 bits). Então deve ser algo com o serial. Mas o que? Não pode simplesmente usar o número serial como chave da cifra, pois ele vai aberto a cada transmissão. Só se controle e receptor, mais especificamente o chip, usam algum algoritmo fixo que ainda não foi descoberto. Estranho…

    Curtir

    1. Imagino que esteja falando do HCS201. Que é composto por 34 bits fixos contendo Nivel Bateria + Botão + Serial e 32 bits cifrado contendo Botão + Uma porção do Serial + Contador.
      Como o Contador é incrementado a cada acionamento a parte cifrada muda constantemente porém a parte fixa não. A parte fixa ajuda o receptor a achar as informações do contador em sua memória e a conferir a transmissão com a Porção do Serial dentro da parte cifrada.
      Para o receptor aprender aperta-se todos os botões. Neste caso o controle transmite o valor do SEED que é um código gravado pelo fabricante na EEPROM do controle. O receptor então usa este SEED para junto do SERIAL gerar uma chave que deverá ser igual a que o controle usa para encriptar.
      Veja que não é obrigatório usar o SEED. Pode-se por exemplo usar uma mesma chave para todos os controles. Ou usar uma parte do serial para gerar a chave no ato de aprender. Mas seria muito mais seguro uma chave para cada controle que seria gerada pelo serial e/ou SEED.

      Curtir

      1. O meu Rossi Rolling code o aprendizado ocorre apertando apenas um dos botões, não os dois. Então imagino que o chip contém dentro dele, desde fábrica, uma espécie de chave para realizar a criptografia. Mas ai seria uma segurança baseada na obscuridade (desconhecimento do algoritmo e da chave).

        Curtir

      2. Não tenho nenhum Rossi para ver qual é o chip interno. Mas as opções são diversas. Os HCSxxx são apenas o mais usados. A IntelBras usa outro método.

        Curtir

    1. A empresa Positron usa HCS o que será muito improvável que seja clonado. Mas isto envolve mudar o Alarme do carro e não somente comprar o controle, pois o controle esta ‘amarrado’ ao alarme instalado no carro.

      Curtir

  2. Tenho uma receptora Wiegand para verficação e definição de condigos gerados por cada controle onde determino de quem é um especificado controle, a minha duvida é qual a diferença do Holling e do Hopping, pois o holling ele não identifica a codificação.

    Att.

    Curtir

    1. Rolling Code e Hopping Code são nomes comerciais da mesma forma de codificação. Rolling ‘rola’ o código o que é o mesmo que Hopping que ‘salta’ os códigos. Wiegand é basicamente um sistema de identificação de código fixo facilmente clonável, semelhante aos controles Learning Codes.
      Controles Rolling Code não foram feitos para serem gravados em receptores que não contenham a chave para descriptografar o conteúdo protegido. Porém um programador experiente conseguirá fazer um receptor que aceite somente a parte fixa dos controles Rolling Codes e usá-los com um Learning Code.

      Curtir

  3. Comprei um controle clonador da China pra copiar o controle do meu portão, Garen 433,92 mhz cód. fixo. Porém ele faz a cópia mas não aciona o portão. No frequencímetro não aparece o cód. fixo do clonador de led vermelho. Tentei jogar o cód direto na placa não funcionou também.

    Este é meu video.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s