Bagaimana saya bisa menggunakan 2FA (otentikasi dua faktor) ketika saya menghubungkan perangkat baru ke broker, jika itu mungkin?
Karena tampaknya lebih mudah, faktor kedua dapat menjadi solusi perangkat lunak pertama tetapi saya akan menyambut ide tentang cara memperkenalkan token keras (mungkin RFID).
Masuk akal jika perangkat hanya mengotentikasi pada koneksi pertama dan server akan mengingat klien "lama".
Idenya mungkin tidak biasa atau tidak cocok - jika itu adalah ide yang buruk, tolong beri saya alasannya.
security
mqtt
authentication
Bence Kaulics
sumber
sumber
Jawaban:
Anda memerlukan proxy broker, atau server web ...
Pertama-tama, Anda benar - benar membutuhkan layanan otentikasi di suatu tempat yang terhubung ke broker Anda untuk melakukan 2FA menggunakan topik tertentu (
/auth/RFID
, ...). Itu kemudian akan memungkinkan klien untuk mempublikasikan informasi (lihat di bawah).Masalah pertama yang dapat saya lihat di sini adalah bahwa siapa pun yang berlangganan topik ini dapat membaca informasi dari topik itu, tetapi Anda dapat mengunci topik !
Anda kemudian dapat memberi tahu (memaksa) semua perangkat Anda untuk mempublikasikan informasi
/proxy/mytopic
. Dengan fitur clientId dari mqtt, layanan auth dapat memeriksa apakah pesan yang dikirim dari topik ini berasal dari perangkat yang diautentikasi yang menggunakan 2FA sebelumnya, dan kemudian menerbitkan pesannya sendiri atas nama perangkat untuk/proxyout/mytopic
dengan id perangkat di payload.Masalahnya sekarang adalah memeriksa perangkat yang dapat menerima pesan jika mereka dikonfirmasi, karena, yah, MQTT adalah semua tentang publikasi massal. Layanan auth perlu memiliki daftar perangkat yang diautentikasi dan memeriksa apakah mereka memenuhi syarat untuk penerimaan. Sekali lagi, enkripsi muatan dan dekripsi sisi perangkat ...
Saya pikir solusi saya sangat berlebihan kemampuan MQTT. Karena itu Anda harus menggunakan soket atau server web ...
sumber
Spesifikasi MQTT v5 mendatang menambahkan dukungan untuk
AUTH
paket kontrol, yang memungkinkan otentikasi tantangan / respons. Karena MQTT v5 dukungan yang belum selesai mungkin masih berubah, tetapi tampaknya masuk akal untuk menganggap bahwa AUTH akan tetap dalam beberapa bentuk atau lainnya dan bahwa 2FA dapat ditambahkan dengan menggunakannya.Anda dapat melihat draft kerja spec saat ini di halaman dokumen komite OASIS MQTT .
sumber
Sesuai spesifikasi, pesan hubungkan opsional dapat memberikan nama pengguna dan kata sandi. Ini divalidasi terhadap ACL yang disimpan di suatu tempat di broker. Jadi, itu adalah faktor otentikasi pertama yang bisa Anda manfaatkan. Pesan CONNACK dari broker akan merespons jika otentikasi melewati.
Untuk menerapkan faktor kedua jika otentikasi, cara terbaik adalah mengirim pesan koneksi kustom dengan faktor lain. Pesan CONNACK dalam kasus ini harus merujuk pada keberhasilan atau kegagalan faktor otentikasi kedua. Oleh karena itu, broker dan klien harus mengimplementasikan pesan khusus melebihi dan di atas spesifikasinya.
sumber
Untuk mencapai 2FA di jaringan MQTT, saya telah membuat layanan berikut untuk otentikasi yang terhubung ke Broker.
Ketika klien MQTT terhubung ke broker melalui SSL / TLS, ia pertama kali menerbitkan ID-nya sendiri untuk topik device_id , ID Verifier memverifikasi bahwa itu adalah klien otentik dan kemudian Token Generator dipanggil yang menghasilkan token dan menerbitkan token pada topik yang dikunci device_token .
Perangkat klien mendapatkan token ini dan selanjutnya menerbitkannya ke topik yang diverifikasi_token . Segera setelah topik dipublikasikan pada memverifikasi_token , verifikasi token membandingkan nilai pada topik device_token dan verifikasi_token jika cocok, tambahkan id perangkat ke kumpulan perangkat yang diverifikasi dan biarkan perangkat menerbitkan data. Ini meningkatkan keamanan karena satu-satunya perangkat yang diverifikasi terhubung ke topik untuk menerbitkan data.
Saya juga telah menggunakan opsi konfigurasi MQTT_KEEPALIVE untuk menjaga klien tetap aktif ketika tidak ada data yang dikirim atau diterima untuk menjaga perangkat klien tetap hidup di kumpulan perangkat dan mencegahnya diverifikasi lagi setelah ditambahkan ke kumpulan perangkat. namun untuk tujuan keamanan saya membekukan perangkat ke 2FA setiap 24 jam.
sumber