Come posso usare 2FA in una rete MQTT?


12

Come posso usare 2FA (autenticazione a due fattori) quando collego un nuovo dispositivo al broker, se è possibile?

Poiché sembra più semplice, il secondo fattore può essere prima una soluzione software, ma vorrei dare il benvenuto a idee su come introdurre token hard (forse RFID).

Avrebbe senso se i dispositivi dovessero autenticarsi solo alla prima connessione e il server ricordasse i client "vecchi".

L'idea potrebbe essere insolita o inadatta: se è una cattiva idea, ti prego di spiegarmi i motivi.


Puoi dirci come pensi che un dispositivo possa fare 2FA poiché è un dispositivo?
Goufalite,

@Goufalite Ad esempio, quando installo un nuovo dispositivo, devo fornire una chiave manualmente (ad esempio un tag RFID) che verrà utilizzata durante l'autenticazione. Per quanto riguarda il software 2FA, non so se un tipo di servizio potrebbe essere impostato nella mia casa da cui nuovi dispositivi potrebbero richiedere token soft, qualcosa come un server di chiavi private.
Bence Kaulics il

Risposte:


8

È necessario un proxy broker o un server web ...

Prima di tutto, hai assolutamente bisogno di un servizio di autenticazione da qualche parte collegato al tuo broker per eseguire il 2FA usando argomenti specifici ( /auth/RFID, ...). Consentirebbe quindi al cliente di pubblicare informazioni (vedi sotto).

Il primo problema che posso vedere qui è che chiunque sia iscritto a questo argomento può leggere le informazioni di quell'argomento, ma è possibile bloccare gli argomenti !

Puoi quindi dire (forzare) tutti i tuoi dispositivi a cui pubblicare informazioni /proxy/mytopic. Con la funzionalità clientId di mqtt, il servizio di autenticazione può verificare se i messaggi inviati da questo argomento provengono da un dispositivo autenticato che ha utilizzato 2FA in precedenza, quindi pubblicare il proprio messaggio per conto del dispositivo /proxyout/mytopiccon l'ID del dispositivo nel payload.

Il problema ora sta controllando la presenza di dispositivi in grado di ricevere messaggi se sono autenticati, perché, beh, MQTT riguarda la pubblicazione di massa. Il servizio di autenticazione deve disporre di un elenco di dispositivi autenticati e verificare se sono idonei alla ricezione. Ancora una volta, crittografia payload e decrittografia lato dispositivo ...

Penso che la mia soluzione sia eccessiva rispetto alle funzionalità MQTT. Pertanto, è necessario utilizzare un socket o un server Web ...


@ tim3in scusa per la risposta tardiva. Dopo tutto, questa è stata una risposta data 2,5 anni fa ... forse le cose sono cambiate e questa era solo una proposta di architettura generale. Hai fatto un POC con la tua soluzione?
Goufalite,

L'ho pianificato. Sarai in grado di rivederlo?
tim3in

7

L'imminente specifica MQTT v5 aggiunge il supporto per il AUTHpacchetto di controllo, che consente l'autenticazione challenge / response. Dato che MQTT v5 non è ancora finalizzato, il supporto potrebbe ancora cambiare, ma sembra ragionevole presumere che AUTH rimarrà in una forma o nell'altra e che 2FA potrebbe essere aggiunto utilizzandolo.

È possibile visualizzare le bozze di lavoro correnti delle specifiche nella pagina dei documenti del comitato MQTT di OASIS .


5

Secondo le specifiche, il messaggio di connessione può facoltativamente fornire un nome utente e una password. Questo è validato contro un ACL salvato da qualche parte sul broker. Quindi, questo è il tuo primo fattore di autenticazione che potresti sfruttare. Il messaggio CONNACK dal broker risponderà se l'autenticazione è passata.

Per implementare il secondo fattore se l'autenticazione, il modo migliore dovrebbe essere quello di inviare un messaggio di connessione personalizzato con l'altro fattore. Il messaggio CONNACK in questo caso dovrebbe riferirsi al successo o al fallimento del secondo fattore di autenticazione. Pertanto, il broker e il client devono implementare messaggi personalizzati oltre alla specifica.


4

Per ottenere 2FA nella rete MQTT ho creato i seguenti servizi per l'autenticazione che sono collegati a Broker.

  1. Verificatore ID
  2. Generatore di token
  3. Verifica token

Quando il client MQTT si connette al broker su SSL / TLS, pubblica prima il proprio ID sull'argomento device_id , il verificatore ID verifica che sia il client autentico e quindi viene invocato Token Generator che genera un token e pubblica il token sull'argomento bloccato device_token .

Il dispositivo client ottiene questo token e lo pubblica ulteriormente su un argomento verifica_token . Non appena l'argomento viene pubblicato su verifica_token, il verificatore token confronta i valori nell'argomento dispositivo_todo e verifica_token se corrisponde aggiunge l'ID del dispositivo al pool di dispositivi verificato e consente al dispositivo di pubblicare i dati. Ciò migliora la sicurezza perché gli unici dispositivi verificati vengono collegati agli argomenti per pubblicare i dati.

Ho anche usato l'opzione di configurazione MQTT_KEEPALIVE per mantenere attivo il client quando non vengono inviati o ricevuti dati per mantenere in vita il dispositivo client nel pool di dispositivi e impedire che venga verificato nuovamente una volta aggiunto al pool di dispositivi. tuttavia per motivi di sicurezza, il dispositivo viene trasferito a 2FA ogni 24 ore.


3
Come è garantito che solo il client corretto ottenga il token?
Helmar

@Helmar utilizzando l'unica IDcliente e argomento separato per memorizzare gettone per ogni cliente che viene predefinito al momento della registrazione del dispositivo. Il cliente si iscrive effettivamente a questo argomento. Quando ripubblica il token per il controllo, aggiunge il suo ID con i dati del token in modo che il verificatore sappia quale client ha pubblicato questo token. clientid può essere protetto utilizzando Secure Element sul lato dispositivo dopo aver registrato lo stesso ID sul server nel database.
tim3in

@Helmar ti piacerebbe aggiungere il tuo commento a questo? Apprezzerei le opinioni di tutti sulla mia soluzione.
tim3in

2
si, ma cosa mi impedisce di iscrivermi a '#' per vedere tutte le risposte dei token
hardillb

Gli argomenti di @hardillb che hanno risposte token sono bloccati come menzionato da Goufalite. Quindi solo il dispositivo prevenuto può vedere. In fase di registrazione i dispositivi sono associati ad argomenti specifici e ogni dispositivo ha assegnato argomenti separati per le risposte dei token.
tim3in
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.