ESP8266: Usar ESP Touch / SmartConfig é seguro?

Aparentemente, não.

Para quem não conhece, ESP Touch é o nome dado pela ESPRESSIF a um engenhoso método de comunicação de credenciais aparentemente copiado da Texas Instruments, que esta chama de SmartConfig (marca registrada Texas). Nesse método, um ESP8266 ainda não configurado, que não faz idéia de a qual rede se conectar e muito menos a senha, é colocado em “modo de monitoramento” e fica continuamente escutando o tráfego de todas as redes Wi-Fi a seu alcance (uma por vez, rapidamente).  Uma app rodando em um computador ou smartphone conectado a um roteador Wi-Fi o mais próximo do ESP8266 quanto possível transmite continuamente via pacotes UDP o SSID e a senha que você quer que o ESP8266 conheça.  Quando o ESP8266 finalmente esbarrar nessa informação ele se auto configura com o SSID e a senha coletados.

Nota: embora o protocolo permita que você transmita o SSID e a senha de um roteador diferente do qual está conectado, é recomendável que você se conecte ao mesmo roteador cuja senha quer dar ao dispositivo porque isso permite que a app detecte que o dispositivo se conectou (estarão no mesmo domínio de broadcast). Se o dispositivo se conectar a outro roteador provavelmente não será detectável. Por causa disso algumas apps nem te dão a opção de escolher o SSID.

Isso é possível mesmo numa rede criptografada porque a app codifica essa informação em um campo da transmissão Wi-Fi que qualquer um pode ver: o tamanho do pacote. É como usar código morse. O pacote continua criptografado, mas você pode ver o seu tamanho e esse tamanho corresponde a “uma letra” específica (não é exatamente assim, mas o princípio é esse).

Engenhoso e prático mas com um grande problema: qualquer outro dispositivo ou software compatível com SmartConfig ao alcance pode ver o mesmo tráfego e recuperar as credenciais de acesso. Aqui é explicado como se faz isso.

Aparentemente a Texas Instruments incluiu em versões mais recentes do Smart Config a capacidade de criptografar essa transmissão com AES. No caso a app e o dispositivo precisam ter combinado antes uma chave que vai ser usada para poder decodificar a transmissão (a app da Texas tem um campo para a chave, que vem em um QRCode no dispositivo). Essa é uma mudança trivial do ponto de vista do usuário, mas aparentemente não foi implementado no ESP8266. Segundo a documentação da biblioteca ESP8266 Arduino Core a sintaxe para iniciar o monitoramento é:

E apenas isso. Eu ficaria mais à vontade para usar o recurso se a sintaxe fosse algo como

E você precisasse colocar a mesma chave na app, junto com a senha do roteador.

A propósito, outro problema do SmartConfig é que raramente funciona e um dos problemas (mas não o único) é que o ESP8266 suporta apenas redes de 2.4GHz e a app não consegue diferenciar uma rede de 2.4GHz de uma de 5GHz. Pior ainda: se existirem duas redes com o mesmo SSID o Android dá preferência a se conectar à rede de 5GHz. Você ou o cliente do seu produto podem não se dar conta disso e o SmartConfig não vai funcionar. Usando o método “tradicional” de configuração se conectando ao SoftAP, pelo menos você tem menos chances de errar porque a varredura do ESP8266 só mostra as redes de 2.4GHz. Eu recomendo que você esqueça o SmarConfig e use SoftAP com CaptivePortal para a configuração.

This entry was posted in Informação and tagged . Bookmark the permalink.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *