가능한 경우 새 장치를 브로커에 연결할 때 2FA (이중 인증)를 사용하려면 어떻게해야합니까?
더 쉬운 것처럼 보이기 때문에 두 번째 요소는 먼저 소프트웨어 솔루션이 될 수 있지만 하드 토큰을 도입하는 방법에 대한 아이디어를 환영합니다 (RFID).
장치가 첫 번째 연결에서만 인증해야하고 서버가 "오래된"클라이언트를 기억하는 것이 합리적입니다.
아이디어가 비정상적이거나 적합하지 않을 수 있습니다. 나쁜 아이디어 인 경우 이유를 알려주세요.
가능한 경우 새 장치를 브로커에 연결할 때 2FA (이중 인증)를 사용하려면 어떻게해야합니까?
더 쉬운 것처럼 보이기 때문에 두 번째 요소는 먼저 소프트웨어 솔루션이 될 수 있지만 하드 토큰을 도입하는 방법에 대한 아이디어를 환영합니다 (RFID).
장치가 첫 번째 연결에서만 인증해야하고 서버가 "오래된"클라이언트를 기억하는 것이 합리적입니다.
아이디어가 비정상적이거나 적합하지 않을 수 있습니다. 나쁜 아이디어 인 경우 이유를 알려주세요.
답변:
브로커 프록시 또는 웹 서버가 필요합니다 ...
우선, 특정 주제 ( , ...)를 사용하여 2FA를 수행하려면 브로커에 연결된 인증 서비스가 절대적으로 필요합니다 /auth/RFID. 그러면 클라이언트가 정보를 게시 할 수 있습니다 (아래 참조).
여기서 볼 수있는 첫 번째 문제는이 주제를 구독 한 사람은 누구나 해당 주제의 정보를 읽을 수 있지만 주제를 잠글 수 있다는 것입니다 !
그런 다음 모든 장치에 정보를 게시하도록 지시 (강제) 할 수 있습니다 /proxy/mytopic. 인증 서비스는 mqtt의 clientId 기능을 사용하여이 주제에서 전송 된 메시지가 이전에 2FA를 사용한 인증 된 장치에서 온 것인지 확인한 후 장치 대신 /proxyout/mytopic페이로드의 장치 ID 를 사용 하여 자체 메시지를 게시 할 수 있습니다 .
MQTT가 대량 게시에 관한 것이기 때문에 문제는 인증 된 경우 메시지 를 받을 수있는 장치를 검사 하는 것입니다. 인증 서비스에는 인증 된 장치 목록이 있어야하고 수신 가능한지 확인해야합니다. 다시 한 번, 페이로드 암호화 및 암호 해독 장치 쪽 ...
내 솔루션이 MQTT 기능보다 과잉이라고 생각합니다. 따라서 소켓이나 웹 서버를 사용해야합니다 ...
다가오는 MQTT v5 스펙은 AUTH제어 패킷에 대한 지원을 추가하여 챌린지 / 응답 인증을 허용합니다. MQTT v5가 아직 확정되지 않았기 때문에 지원이 여전히 변경 될 수 있지만 AUTH가 어떤 형태로 남아 있거나이를 사용하여 2FA를 추가 할 수 있다고 가정하는 것이 합리적입니다.
OASIS MQTT위원회 문서 페이지 에서 사양의 현재 작업 초안을 볼 수 있습니다 .
사양에 따라 연결 메시지는 선택적으로 사용자 이름과 암호를 제공 할 수 있습니다. 브로커 어딘가에 저장된 ACL에 대해 유효성이 검증됩니다. 이것이 바로 악용 할 수있는 첫 번째 인증 요소입니다. 인증이 진행되면 브로커의 CONNACK 메시지가 응답합니다.
인증 인 경우 두 번째 요소를 구현하려면 다른 요소와 함께 사용자 지정 연결 메시지를 보내는 것이 가장 좋습니다. 이 경우 CONNACK 메시지는 두 번째 인증 요소의 성공 또는 실패를 나타냅니다. 따라서 브로커와 클라이언트는 사양 이상으로 사용자 정의 메시지를 구현해야합니다.
MQTT 네트워크에서 2FA를 달성하기 위해 브로커에 연결된 다음 인증 서비스를 작성했습니다.
MQTT 클라이언트가 SSL / TLS를 통해 브로커에 연결하면 먼저 고유 ID를 device_id 주제에 공개하고 , ID 검증기는 인증 된 클라이언트인지 확인한 후 토큰 생성기를 호출하여 토큰을 생성하고 잠긴 주제 device_token 에 토큰을 공개합니다 .
클라이언트 장치는이 토큰을 가져 와서 verify_token 주제에 추가로 게시합니다 . 토픽이 verify_token에 게시 되 자마자 토큰 검증기는 토픽 device_token 및 verify_token 의 값 이 일치하는 경우 장치 ID를 확인 된 장치 풀에 추가하고 장치 게시 데이터를 허용합니다. 이는 검증 된 장치 만 토픽에 연결되어 데이터를 게시하므로 보안이 향상됩니다.
또한 MQTT_KEEPALIVE 구성 옵션을 사용하여 디바이스 풀에 클라이언트 디바이스를 유지하고 디바이스 풀에 추가 된 디바이스가 다시 확인되지 않도록하는 데이터가 전송되거나 수신되지 않을 때 클라이언트를 활성 상태로 유지했습니다. 그러나 보안을 위해 24 시간마다 2FA로 기기를 고정했습니다.