Como posso usar 2FA (autenticação de dois fatores) quando conecto um novo dispositivo ao broker, se isso é possível?
Como parece mais fácil, o segundo fator pode ser uma solução de software primeiro, mas gostaria de receber idéias sobre como introduzir tokens físicos (talvez RFID).
Faria sentido se os dispositivos deveriam se autenticar apenas na primeira conexão e o servidor se lembrasse de clientes "antigos".
A idéia talvez incomum ou inadequada - se for uma má idéia, por favor, me dê as razões.
security
mqtt
authentication
Bence Kaulics
fonte
fonte
Respostas:
Você precisa de um proxy de corretor ou um servidor da web ...
Primeiro de tudo, você precisa absolutamente de um serviço de autenticação em algum lugar conectado ao seu broker para executar o 2FA usando tópicos específicos (
/auth/RFID
, ...). Isso permitiria ao cliente publicar informações (veja abaixo).O primeiro problema que vejo aqui é que qualquer pessoa inscrita neste tópico pode ler as informações desse tópico, mas você pode bloquear tópicos !
Você pode dizer (forçar) todos os seus dispositivos para publicar informações
/proxy/mytopic
. Com o recurso clientId do mqtt, o serviço de autenticação pode verificar se as mensagens enviadas deste tópico são de um dispositivo autenticado que usava o 2FA anteriormente e, em seguida, publicar sua própria mensagem em nome do dispositivo/proxyout/mytopic
com o ID do dispositivo na carga útil.O problema agora é procurar dispositivos que possam receber mensagens se eles forem autenticados, porque, bem, o MQTT tem tudo a ver com publicação em massa. O serviço de autenticação precisa ter uma lista de dispositivos autenticados e verificar se eles são elegíveis para recepção. Novamente, criptografia de carga útil e descriptografia no lado do dispositivo ...
Acho que minha solução é muito exagerada sobre os recursos do MQTT. Portanto, você deve usar um soquete ou um servidor web ...
fonte
A próxima especificação do MQTT v5 adiciona suporte ao
AUTH
pacote de controle, o que permite autenticação de desafio / resposta. Como o MQTT v5 ainda não está finalizado, o suporte ainda pode mudar, mas parece razoável supor que o AUTH permanecerá de uma forma ou de outra e que 2FA pode ser adicionado usando-o.Você pode ver os rascunhos de trabalho atuais da especificação na página de documentos do comitê OASIS MQTT .
fonte
Conforme a especificação, a mensagem de conexão pode opcionalmente fornecer nome de usuário e senha. Isso é validado com relação a uma ACL salva em algum lugar no broker. Portanto, esse é seu primeiro fator de autenticação que você pode explorar. A mensagem CONNACK do broker responderá se a autenticação for concluída.
Para implementar o segundo fator se a autenticação, a melhor maneira deve ser enviar uma mensagem de conexão personalizada com o outro fator. A mensagem CONNACK neste caso deve se referir ao sucesso ou falha do segundo fator de autenticação. Portanto, o broker e o cliente devem implementar mensagens customizadas além da especificação.
fonte
Para obter 2FA na rede MQTT, criei os seguintes serviços para autenticação conectados ao Broker.
Quando o cliente MQTT se conecta ao broker sobre SSL / TLS, ele primeiro publica seu próprio ID no tópico device_id , o Verificador de ID verifica se é o cliente autêntico e, em seguida, o Token Generator é chamado, o que gera um token e publica o token no tópico bloqueado device_token .
O dispositivo cliente obtém esse token e o publica ainda em um tópico confirm_token . Assim que o tópico é publicado no confirm_token, o verificador de token compara os valores no tópico device_token e confirm_token se corresponder a ele, adicione o ID do dispositivo ao pool de dispositivos verificado e permita que o dispositivo publique dados. Isso melhora a segurança porque os únicos dispositivos verificados são conectados aos tópicos para publicar dados.
Também usei a opção de configuração MQTT_KEEPALIVE para manter o cliente ativo quando nenhum dado está sendo enviado ou recebido para manter o dispositivo do cliente ativo no pool de dispositivos e impedir que seja verificado novamente depois de adicionado ao pool de dispositivos. no entanto, por motivos de segurança, reduzo o dispositivo para 2FA a cada 24 horas.
fonte