¿Cómo puedo usar 2FA (autenticación de dos factores) cuando conecto un nuevo dispositivo al corredor, si es posible?
Debido a que parece más fácil, el segundo factor puede ser una solución de software primero, pero agradecería cualquier idea sobre cómo introducir tokens duros (RFID tal vez).
Tendría sentido si los dispositivos se autenticaran solo en la primera conexión y el servidor recordara a los clientes "antiguos".
La idea puede ser inusual o inadecuada; si es una mala idea, por favor, dame las razones.
security
mqtt
authentication
Bence Kaulics
fuente
fuente
Respuestas:
Necesita un proxy de intermediario o un servidor web ...
En primer lugar, absolutamente necesita un servicio de autenticación en algún lugar conectado a su corredor para realizar el 2FA utilizando temas específicos (
/auth/RFID
, ...). A continuación, permitiría al cliente publicar información (ver más abajo).El primer problema que puedo ver aquí es que cualquier persona suscrita a este tema puede leer la información de ese tema, ¡pero usted puede bloquear los temas !
Luego puede indicar (forzar) a todos sus dispositivos para que publiquen información
/proxy/mytopic
. Con la función clientId de mqtt, el servicio de autenticación puede verificar si los mensajes enviados desde este tema provienen de un dispositivo autenticado que usó 2FA previamente, y luego publicar su propio mensaje en nombre del dispositivo/proxyout/mytopic
con la identificación del dispositivo en la carga útil.El problema ahora es buscar dispositivos que puedan recibir mensajes si están autenticados, porque, bueno, MQTT tiene que ver con la publicación masiva. El servicio de autenticación debe tener una lista de dispositivos autenticados y verificar si son elegibles para la recepción. Nuevamente, el cifrado de carga útil y el descifrado del lado del dispositivo ...
Creo que mi solución es muy exagerada sobre las capacidades de MQTT. Por lo tanto, debe usar un socket o un servidor web ...
fuente
La próxima especificación MQTT v5 agrega soporte para el
AUTH
paquete de control, que permite la autenticación de desafío / respuesta. Como MQTT v5 aún no está finalizado, el soporte todavía puede cambiar, pero parece razonable suponer que AUTH permanecerá de una forma u otra y que 2FA podría agregarse al usarlo.Puede ver los borradores de trabajo actuales de la especificación en la página de documentos del comité OASIS MQTT .
fuente
Según la especificación, el mensaje de conexión puede proporcionar opcionalmente un nombre de usuario y una contraseña. Esto se valida contra una ACL guardada en algún lugar del intermediario. Entonces, ese es su primer factor de autenticación que podría explotar. El mensaje CONNACK del intermediario responderá si se realizó la autenticación.
Para implementar el segundo factor de la autenticación, la mejor manera debería ser enviar un mensaje de conexión personalizado con el otro factor. El mensaje CONNACK en este caso debe referirse al éxito o al fracaso del segundo factor de autenticación. Por lo tanto, el agente y el cliente deben implementar mensajes personalizados además de la especificación.
fuente
Para lograr 2FA en la red MQTT, he creado los siguientes servicios de autenticación que están conectados a Broker.
Cuando el cliente MQTT se conecta al agente a través de SSL / TLS, primero publica su propia ID en el tema device_id , el Verificador de ID verifica que es el cliente auténtico y luego se invoca el generador de tokens que genera un token y publica el token en el tema bloqueado device_token .
El dispositivo cliente obtiene este token y lo publica aún más en un tema generate_token . Tan pronto como el tema se publique en verificar_token, el verificador de tokens compara los valores en el tema dispositivo_token y verificar_token si coincide, agregue la identificación del dispositivo al grupo de dispositivos verificado y permita que el dispositivo publique datos. Esto mejora la seguridad porque los únicos dispositivos verificados se conectan a los temas para publicar datos.
También he usado la opción de configuración MQTT_KEEPALIVE para mantener el cliente activo cuando no se envían o reciben datos para mantener vivo el dispositivo del cliente en el grupo de dispositivos y evitar que se verifique nuevamente una vez que se agrega al grupo de dispositivos. sin embargo, por razones de seguridad, congelo el dispositivo a 2FA cada 24 horas.
fuente