ฉันจะใช้ 2FA ในเครือข่าย MQTT ได้อย่างไร


12

ฉันจะใช้ 2FA (การตรวจสอบความถูกต้องด้วยสองปัจจัย) ได้อย่างไรเมื่อฉันเชื่อมต่ออุปกรณ์ใหม่กับโบรกเกอร์หากเป็นไปได้

เนื่องจากดูเหมือนง่ายกว่าปัจจัยที่สองอาจเป็นโซลูชันซอฟต์แวร์อันดับแรก แต่ฉันยินดีรับแนวคิดเกี่ยวกับวิธีแนะนำฮาร์ดโทเค็น (บางทีอาจเป็น RFID)

มันจะสมเหตุสมผลถ้าอุปกรณ์ควรรับรองความถูกต้องเฉพาะที่การเชื่อมต่อครั้งแรกและเซิร์ฟเวอร์จะจำลูกค้า "เก่า"

ความคิดอาจผิดปกติหรือไม่เหมาะสม - ถ้าเป็นความคิดที่ไม่ดีโปรดบอกเหตุผลว่าทำไม


คุณสามารถบอกเราได้ว่าคุณคิดอย่างไรว่าอุปกรณ์สามารถทำ 2FA ได้เนื่องจากเป็นอุปกรณ์เดียว
Goufalite

@Goufalite ตัวอย่างเช่นเมื่อฉันติดตั้งอุปกรณ์ใหม่ฉันต้องให้กุญแจด้วยตนเอง (โดยใช้แท็ก RFID เป็นต้น) ซึ่งจะใช้ระหว่างการตรวจสอบสิทธิ์ สำหรับซอฟต์แวร์ 2FA ฉันไม่ทราบว่าสามารถตั้งค่าบริการบางอย่างในบ้านของฉันซึ่งอุปกรณ์ใหม่สามารถร้องขอโทเค็นที่อ่อนนุ่มคล้ายกับเซิร์ฟเวอร์คีย์ส่วนตัวหรือไม่
Bence Kaulics

คำตอบ:


8

คุณต้องการตัวแทนนายหน้าหรือเว็บเซิร์ฟเวอร์ ...

ครั้งแรกของทุกท่านอย่างแน่นอนต้องมีการตรวจสอบอยู่ที่ไหนสักแห่งให้บริการเชื่อมต่อกับโบรกเกอร์ของคุณเพื่อดำเนินการ 2FA โดยใช้หัวข้อที่เฉพาะเจาะจง ( /auth/RFID... ) จากนั้นจะอนุญาตให้ลูกค้าเผยแพร่ข้อมูล (ดูด้านล่าง)

ปัญหาแรกที่ฉันเห็นที่นี่คือทุกคนที่สมัครเป็นสมาชิกของหัวข้อนี้สามารถอ่านข้อมูลของหัวข้อนั้น แต่คุณสามารถล็อคหัวข้อ !

จากนั้นคุณสามารถบอกได้ (แรง) ทุก/proxy/mytopicอุปกรณ์ของคุณเพื่อเผยแพร่ข้อมูลให้กับ ด้วยคุณสมบัติ clientId ของ mqtt บริการรับรองความถูกต้องสามารถตรวจสอบว่าข้อความที่ส่งจากหัวข้อนี้มาจากอุปกรณ์ที่ได้รับการรับรองความถูกต้องซึ่งใช้ 2FA ก่อนหน้านี้แล้วเผยแพร่ข้อความของตัวเองในนามของอุปกรณ์เพื่อ/proxyout/mytopicระบุ ID ของอุปกรณ์

ขณะนี้ปัญหากำลังตรวจสอบอุปกรณ์ที่สามารถรับข้อความหากได้รับการตรวจสอบความถูกต้องเนื่องจาก MQTT นั้นเกี่ยวกับสิ่งพิมพ์จำนวนมาก บริการรับรองความถูกต้องจะต้องมีรายการอุปกรณ์ที่ผ่านการตรวจสอบความถูกต้องและตรวจสอบว่าอุปกรณ์นั้นมีสิทธิ์ได้รับหรือไม่ อีกครั้งการเข้ารหัส payload และถอดรหัสอุปกรณ์ ...

ฉันคิดว่าทางออกของฉันเกินความสามารถของ MQTT มากเกินไป คุณควรใช้ซ็อกเก็ตหรือเว็บเซิร์ฟเวอร์ ...


@ tim3in ขออภัยในความล่าช้า หลังจากทั้งหมดนี้เป็นคำตอบให้เมื่อ 2,5 ปีที่แล้ว ... อาจมีการเปลี่ยนแปลงและนี่เป็นเพียงข้อเสนอสถาปัตยกรรมทั่วไป คุณทำ POC ด้วยโซลูชันของคุณหรือไม่
Goufalite

ฉันได้วางแผนไว้แล้ว คุณจะสามารถตรวจสอบได้หรือไม่
tim3in

7

ข้อมูลจำเพาะ MQTT v5 ที่กำลังจะมาถึงเพิ่มการรองรับAUTHแพ็คเก็ตควบคุม เนื่องจาก MQTT v5 ยังไม่ได้รับการสนับสนุนขั้นสุดท้ายอาจยังคงมีการเปลี่ยนแปลง แต่ดูเหมือนว่ามีเหตุผลที่จะสันนิษฐานว่า AUTH จะยังคงอยู่ในรูปแบบอื่นหรืออื่น ๆ และสามารถเพิ่ม 2FA ได้โดยใช้

คุณสามารถดูแบบร่างการทำงานปัจจุบันของข้อมูลจำเพาะได้ที่หน้าเอกสาร OASIS MQTT


5

ตามข้อกำหนดคุณสมบัติข้อความเชื่อมต่ออาจเลือกระบุชื่อผู้ใช้และรหัสผ่าน สิ่งนี้ผ่านการตรวจสอบกับ ACL ที่บันทึกไว้ในโบรกเกอร์ นั่นคือปัจจัยแรกของการพิสูจน์ตัวตนที่คุณสามารถใช้ประโยชน์ได้ ข้อความ CONNACK จากโบรกเกอร์จะตอบสนองหากการตรวจสอบผ่าน

เมื่อต้องการใช้ปัจจัยที่สองหากการรับรองความถูกต้องวิธีที่ดีที่สุดคือการส่งข้อความเชื่อมต่อที่กำหนดเองกับปัจจัยอื่น ๆ ข้อความ CONNACK ในกรณีนี้ควรอ้างถึงความสำเร็จหรือความล้มเหลวของปัจจัยการตรวจสอบที่สอง ดังนั้นนายหน้าและลูกค้าควรใช้ข้อความที่กำหนดเองมากกว่าข้อกำหนด


4

เพื่อให้บรรลุ 2FA ในเครือข่าย MQTT ฉันได้สร้างบริการต่อไปนี้สำหรับการตรวจสอบความถูกต้องซึ่งเชื่อมต่อกับโบรคเกอร์

  1. ตัวตรวจสอบ ID
  2. เครื่องกำเนิดโทเค็น
  3. Token Verifier

เมื่อเชื่อมต่อลูกค้า MQTT ไปยังโบรกเกอร์ผ่าน SSL / TLS มันเป็นครั้งแรกที่ตีพิมพ์ ID ของตัวเองเพื่อDEVICE_IDหัวข้อตรวจสอบรหัสตรวจสอบว่าเป็นของลูกค้าที่แท้จริงแล้ว Token Generator จะเรียกซึ่งจะสร้างโทเค็นและเผยแพร่โทเค็นในหัวข้อล็อกdevice_token

อุปกรณ์ลูกค้าได้รับโทเค็นนี้และต่อไปเผยแพร่ไปยังหัวข้อverify_token ทันทีที่มีการเผยแพร่หัวข้อในVerify_tokenตัวตรวจสอบโทเค็นจะเปรียบเทียบค่าที่หัวข้อdevice_tokenและVerify_tokenหากตรงกับที่เพิ่ม ID ของอุปกรณ์ไปยังกลุ่มอุปกรณ์ที่ตรวจสอบแล้วและอนุญาตให้เผยแพร่ข้อมูลอุปกรณ์ สิ่งนี้จะช่วยเพิ่มความปลอดภัยเนื่องจากอุปกรณ์ที่ได้รับการตรวจสอบเท่านั้นจะเชื่อมต่อกับหัวข้อเพื่อเผยแพร่ข้อมูล

ฉันยังใช้ตัวเลือกการกำหนดค่า MQTT_KEEPALIVE เพื่อให้ไคลเอ็นต์ใช้งานได้เมื่อไม่มีการส่งหรือรับข้อมูลเพื่อให้อุปกรณ์ไคลเอนต์ยังคงอยู่ในกลุ่มอุปกรณ์และป้องกันไม่ให้มีการตรวจสอบอีกครั้งเมื่อมีการเพิ่มลงในกลุ่มอุปกรณ์ อย่างไรก็ตามเพื่อความปลอดภัยฉันจึงปรับอุปกรณ์ให้กับ 2FA ทุก 24 ชั่วโมง


3
มีความปลอดภัยแค่ไหนที่ลูกค้าที่ถูกต้องเท่านั้นที่ได้รับโทเค็น
Helmar

@Helmar ใช้ที่ไม่ซ้ำกันClientIDและหัวข้อที่แยกต่างหากเพื่อเก็บ token สำหรับลูกค้าที่กำหนดไว้ล่วงหน้าที่ลงทะเบียนของแต่ละอุปกรณ์ ไคลเอนต์สมัครสมาชิกหัวข้อนี้จริง ๆ เมื่อทำการเผยแพร่โทเค็นเพื่อตรวจสอบอีกครั้งจะเพิ่ม id ด้วยข้อมูลโทเค็นเพื่อให้ผู้ตรวจสอบทราบว่าไคลเอ็นต์ใดได้เผยแพร่โทเค็นนี้ รหัสลูกค้าอาจได้รับการป้องกันโดยใช้องค์ประกอบความปลอดภัยที่ด้านอุปกรณ์หลังจากลงทะเบียนรหัสเดียวกันที่เซิร์ฟเวอร์ในฐานข้อมูล
tim3in

@Helmar คุณต้องการที่จะเพิ่มความคิดเห็นของคุณหรือไม่ ฉันจะขอบคุณมุมมองจากทุกคนในการแก้ปัญหาของฉัน
tim3in ใน

2
ใช่ แต่สิ่งที่จะหยุดฉันสมัครรับ '#' เพื่อดูการตอบสนองของโทเค็น
hardillb

@hardillb หัวข้อที่มีการตอบสนองโทเค็นถูกล็อคตามที่ Goufalite พูดถึง ดังนั้นเฉพาะอุปกรณ์ที่เหนือกว่าเท่านั้นที่สามารถดูได้ ที่อุปกรณ์เฟสการลงทะเบียนจะผูกกับหัวข้อเฉพาะและแต่ละอุปกรณ์ได้กำหนดหัวข้อแยกต่างหากสำหรับการตอบโทเค็น
tim3in
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.