2FA'yı bir MQTT ağında nasıl kullanabilirim?


12

Mümkünse aracıya yeni bir aygıt bağladığımda 2FA'yı (iki faktörlü kimlik doğrulama) nasıl kullanabilirim?

Daha kolay göründüğü için, ikinci faktör önce bir yazılım çözümü olabilir, ancak sert belirteçlerin (RFID belki) nasıl tanıtılacağı konusunda fikirleri memnuniyetle karşılarım.

Cihazların yalnızca ilk bağlantıda kimlik doğrulaması yapması ve sunucunun "eski" istemcileri hatırlaması mantıklı olacaktır.

Fikir alışılmadık veya uygunsuz olabilir - eğer kötü bir fikirse, lütfen bana nedenlerini verin.


Eğer bir cihaz olduğu için 2FA yapabileceğini düşünüyorum nasıl söyler misin bir cihaz?
Goufalite

@ Goufalite Örneğin yeni bir cihaz kurduğumda, kimlik doğrulama sırasında kullanılacak bir anahtarı manuel olarak (örneğin bir RFID etiketi ile) sağlamam gerekiyor. Yazılım 2FA'ya gelince, evimde yeni cihazların özel anahtar sunucusu gibi yumuşak belirteçler isteyebileceği bir servis ayarlanıp ayarlanamayacağını bilmiyorum.
Bence Kaulics

Yanıtlar:


8

Bir aracı proxy'sine veya bir web sunucusuna ihtiyacınız var ...

Her şeyden önce, belirli konuları ( , ...) kullanarak 2FA gerçekleştirmek için brokerınıza bağlı bir yerde kesinlikle bir kimlik doğrulama hizmetine ihtiyacınız var /auth/RFID. Daha sonra istemcinin bilgi yayınlamasına izin verir (aşağıya bakın).

Burada görebildiğim ilk sorun, bu konuya abone olan herkesin bu konunun bilgilerini okuyabilmesi, ancak konuları kilitleyebilmenizdir !

Daha sonra tüm cihazlarınıza bilgi yayınlamasını söyleyebilir (zorlayabilirsiniz) /proxy/mytopic. Mqtt'ın clientId özelliği ile, Auth hizmeti bu konudan gönderilen iletilerin daha önce 2FA kullanan kimliği doğrulanmış bir cihazdan olup olmadığını kontrol edebilir ve ardından cihaz adına kendi mesajını yükte cihazın kimliği ile yayınlayabilir /proxyout/mytopic.

Şimdi sorun , kimlik doğrulaması yapıldıysa iletileri alabilen aygıtları kontrol etmektir , çünkü MQTT tamamen toplu yayın ile ilgilidir. Yetkilendirme hizmetinin, kimliği doğrulanmış aygıtların bir listesine sahip olması ve alım için uygun olup olmadıklarını kontrol etmesi gerekir. Yine, yük tarafı şifreleme ve şifre çözme cihaz tarafı ...

Çözümümün MQTT yeteneklerine göre çok fazla olduğunu düşünüyorum. Bu nedenle bir soket veya bir web sunucusu kullanmalısınız ...


@ tim3in geç cevap verdiğim için üzgünüm. Sonuçta bu 2,5 yıl önce verilen bir cevaptı ... belki işler değişti ve bu sadece genel bir mimari öneriydi. Çözümünüzle bir POC yaptınız mı?
Goufalite

Ben planladım. İnceleyebilecek misiniz?
tim3in

7

Yakında çıkacak olan MQTT v5 belirtimi, AUTHkontrol paketi için destek / yanıt kimlik doğrulamasına izin veren destek ekler . MQTT v5 henüz kesinleşmediği için destek yine de değişebilir, ancak AUTH'ın bir şekilde veya başka bir şekilde kalacağını ve 2FA'nın bunu kullanarak eklenebileceğini varsaymak makul görünmektedir.

Spesifikasyonun güncel çalışma taslaklarını OASIS MQTT komite belgeleri sayfasında görebilirsiniz.


5

Spesifikasyona göre, bağlantı mesajı isteğe bağlı olarak kullanıcı adı ve şifre sağlayabilir. Bu, aracıda bir yere kaydedilmiş bir ACL'ye göre doğrulanır. Bu, yararlanabileceğiniz ilk kimlik doğrulama faktörünüzdür. Kimlik doğrulaması gerçekleşirse aracıdan CONNACK iletisi yanıtlanır.

Kimlik doğrulama durumunda ikinci faktörü uygulamak için en iyi yol, diğer faktörle özel bir bağlantı mesajı göndermek olmalıdır. Bu durumda CONNACK mesajı, ikinci kimlik doğrulama faktörünün başarısını veya başarısızlığını ifade etmelidir. Bu nedenle, aracı ve istemci belirtimin üzerinde özel mesajlar uygulamalıdır.


4

MQTT ağında 2FA elde etmek için, Broker'a bağlı kimlik doğrulama için aşağıdaki hizmetleri oluşturdum.

  1. Kimlik doğrulayıcı
  2. Jeton Oluşturucu
  3. Jeton Doğrulayıcı

MQTT istemcisi SSL / TLS üzerinden aracıya bağlandığında, önce kendi kimliğini device_id konusuna yayınlar , Kimlik Doğrulayıcı onun gerçek istemci olduğunu doğrular ve daha sonra bir belirteç oluşturan ve belirteç kilitli konu device_token'da token yayınlayan Token Generator çağrılır .

İstemci cihaz bu belirteci alır ve daha sonra verify_token konusuna yayınlar . En kısa sürede konu üzerinde yayınlanır yayınlanmaz verify_token belirteç doğrulayıcı konu en değerlerini karşılaştırır device_token ve verify_token o doğrulanmış cihaz havuzuna cihazın kimliğini ekleyip cihaz verilerini yayınlamak izin eşleşirse. Verileri yayınlamak için yalnızca doğrulanmış cihazlar konulara bağlandığından güvenliği artırır.

Ayrıca, istemci aygıtını aygıt havuzunda canlı tutmak ve aygıt havuzuna eklendikten sonra tekrar doğrulanmasını önlemek için hiçbir veri gönderilmediğinde veya alınmadığında istemciyi etkin tutmak için MQTT_KEEPALIVE yapılandırma seçeneğini kullandım. ancak güvenlik amacıyla cihazı her 24 saatte bir 2FA'ya donduruyorum.


3
Jetonu yalnızca doğru müşterinin alması nasıl sağlanır?
Helmar

Benzersiz kullanılarak @Helmar ClientID ve ayrı konu cihazının kayıt sırasında önceden tanımlanmış olan her müşteri için belirteci depolanması için kullanılmaktadır. İstemci aslında bu konuya abone olur. Jetonu kontrol için yeniden yayınladığında, doğrulayıcı hangi istemcinin bu jetonu yayınladığını bilmesi için kimliğini jeton verileriyle ekler. clientid , aynı kimliği veritabanındaki sunucuya kaydettikten sonra cihaz tarafında Güvenli Öğe kullanılarak korunabilir .
tim3in

@Helmar, yorumunuzu buna eklemek ister misiniz? Çözümüm hakkındaki herkesin görüşlerini takdir ediyorum.
tim3in

2
evet, ama tüm token yanıtlarını görmek için '#' a abone olmamı durduracak
hardillb

Jeton yanıtları olan @hardillb konuları Goufalite'den bahsedildiği gibi kilitlenir. Böylece sadece önceden belirlenmiş cihaz görebilir. Kayıt aşamasında cihazlar belirli konulara bağlanır ve her cihaz, jeton yanıtları için ayrı konular atar.
tim3in
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.