การสื่อสารผ่านบลูทู ธ เป็นไปได้หรือไม่


35

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

ดังนั้นคำถามของฉันคือใช้การสื่อสารผ่านบลูทู ธ มีวิธีสื่อสารโดยไม่จับคู่หรือไม่? กล่าวอีกอย่างคือในระดับที่ง่ายมากสมมติว่าตัวรับบลูทู ธ ของฉันคาดว่าจะมีรหัส "abc123" อุปกรณ์ Bluetooth เช่นโทรศัพท์ได้รับการตั้งโปรแกรมให้ส่งรหัสนี้อย่างต่อเนื่อง เมื่อได้รับรหัสแล้วระบบจะเริ่มทำตามที่ควรจะได้รับเมื่อเข้าถึง ระบบดังกล่าวจะลบอุปสรรคการจับคู่แน่นอนค่าใช้จ่ายของการรักษาความปลอดภัย

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


มีโหมดบลูทู ธ ที่ทำเช่นนั้น แต่ฉันไม่รู้ว่ามันเรียกอะไร มันถูกใช้สำหรับการส่งโฆษณาท้องถิ่นเพื่อส่งผ่านโทรศัพท์มือถือ
jippie

2
มีโมดูล 433Mhz ต่างๆซึ่งจะส่งสัญญาณเปิด / ปิด "ทันที"; มักใช้ใน openers ประตูโรงรถ พวกเขายังมีราคาถูกและใช้งานง่ายแม้ว่าพวกเขาจะไม่ให้ความปลอดภัยโดยธรรมชาติ
pjc50

คำตอบ:


24

ใช่มันเป็นไปได้ทั้งหมด ฉันแสดงความคิดเห็นเกี่ยวกับเรื่องนี้ก่อนหน้านี้และตั้งแต่ได้ดูมันต่อไป คุณสามารถมีอุปกรณ์บลูทู ธ เรียกส่งสัญญาณการเปิดใช้งานผ่านชื่อที่เรียกง่าย

ชื่อที่จำง่ายคือชื่อที่มนุษย์อ่านได้ที่ปรากฏในรายการเมื่อคุณค้นหาอุปกรณ์บลูทู ธ เพื่อจับคู่ ความเร็วในการเปิดใช้งานนี้ขึ้นอยู่กับความรวดเร็วของอุปกรณ์ที่รับสัญญาณสำหรับชื่อที่เป็นมิตร คุณยังไม่ได้กล่าวถึงประเภทของอุปกรณ์รับสัญญาณที่คุณใช้ แต่ฉันพบPDF นี้ (หน้า 35) รายละเอียดกระบวนการสำหรับการอัปเดตชื่อที่เป็นมิตรของอุปกรณ์ Bluetooth ในระยะ

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

นอกจากนี้คุณยังอาจดูเป็นเจตนาเปิดตัวเองขึ้นไปBluejacking ฉันไม่คุ้นเคยกับมัน แต่ถ้าการรักษาความปลอดภัยไม่ใช่ปัญหาก็สามารถใช้งานได้


2
สมบูรณ์แบบดูเหมือนว่าจะมีแนวโน้มมากที่สุด ฉันชอบความเรียบง่ายของวิธีการชื่อที่เป็นมิตรและ Bluejacking ก็ดูเหมือนว่าจะเป็นตัวเลือกที่ดีเช่นกัน
capcom

12

คำตอบสั้น ๆ คือใช่สามารถใช้บลูทู ธ ได้โดยไม่ต้องจับคู่ อย่างไรก็ตามมันจะยังคงเป็นลิงก์แบบจุดต่อจุดเสมอ นอกจากนี้ยังมีปัญหาที่อาจเกิดขึ้นกับการไม่ใช้การจับคู่ (ส่วนใหญ่ขาดความปลอดภัยและขาดการสนับสนุนที่ดีสำหรับโหมดการทำงานนี้) ไม่ว่าจะสามารถทำได้ขึ้นอยู่กับฮาร์ดแวร์บลูทู ธ ของผู้รับ ฉันสมมติว่าคุณกำลังใช้บลูทู ธ 'มาตรฐาน' แทนบลูทู ธ พลังงานต่ำ (ซึ่งแตกต่างอย่างสิ้นเชิงและไม่รองรับโทรศัพท์มือถือเป็นพิเศษ) หากคุณกำลังใช้พลังงานต่ำเครื่องส่งสัญญาณของคุณจะเป็นอุปกรณ์ที่ใช้พลังงานต่ำและเครื่องรับของคุณจะเป็นสิ่งที่รับฟังข้อความ ฉันไม่ได้ใช้สิ่งนี้ดังนั้นฉันไม่สามารถให้ข้อมูลใด ๆ กับคุณได้ดังนั้นฉันจะใช้บลูทู ธ 'ปกติ'

เท่าที่ฉันเห็นมันมีสองประเด็นที่ต้องเอาชนะ:

  1. ปิดการจับคู่พิน

  2. การเริ่มต้นการเชื่อมต่ออัตโนมัติ

ฉันจะครอบคลุมหมายเลข 2 ก่อนเพราะฉันได้รับความประทับใจว่านี่คือสิ่งที่คุณสนใจจริงๆ (ขอโทษถ้าฉันอ่านผิด) ในการทำเช่นนี้จากโทรศัพท์หรืออุปกรณ์ 'ต้นแบบ' อื่น ๆ มันจะต้องค้นหาอุปกรณ์บลูทู ธ ระยะไกลอย่างต่อเนื่อง เมื่อได้รับการยอมรับหนึ่งที่สามารถใช้ได้มันจะเชื่อมต่อกับมันโดยอัตโนมัติและส่งข้อมูลบางอย่างหรืออื่น ๆ ที่จะเริ่มต้นสิ่งที่จำเป็นต้องมีการกระทำ คนอื่น ๆ ได้กล่าวถึงการใช้ชื่อที่เป็นมิตรกับบลูทู ธ สำหรับกระบวนการนี้และนั่นเป็นวิธีหนึ่ง ประสบการณ์ของฉันเกี่ยวกับชื่อที่เป็นมิตรกับบลูทู ธ (โดยเฉพาะ แต่ไม่เฉพาะกับสแต็คบลูทู ธ ของ Microsoft) คือพวกเขาไม่ได้มีวิธีการสแกนที่แข็งแกร่ง คุณน่าจะทำได้ดีกว่าการใช้คลาสอุปกรณ์บลูทู ธซึ่งออกอากาศในเวลาเดียวกันกับที่อยู่อุปกรณ์ที่ไม่ซ้ำกัน คลาสอุปกรณ์นี้มีรายการที่ระบุไว้ล่วงหน้าจำนวนมากสำหรับสิ่งต่าง ๆ เช่นโทรศัพท์มือถือแล็ปท็อปเดสก์ท็อป ฯลฯ ฯลฯ หากคุณใช้คลาสอุปกรณ์ที่ไม่ได้มาตรฐานอย่างใดอย่างหนึ่ง (เช่น 00:00:00) คุณจะสามารถทำได้ทันที เพื่อกรองอุปกรณ์บลูทู ธ ส่วนใหญ่ออกไป จากนั้นคุณสามารถเชื่อมต่อกับอุปกรณ์ที่เหลือและทำการสื่อสารที่รับทราบคำขอเพื่อเริ่มการกระทำของคุณ หากคุณทำสิ่งนี้ให้คลุมเครืออย่างเหมาะสม (หรือตรวจสอบชื่อที่จำง่ายเป็นข้อพิจารณาที่สอง) ก็ควรกรองอุปกรณ์ที่ไม่ถูกต้องใด ๆ ที่เหลืออยู่โดยปริยาย


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

  1. Bluegiga WT12: ใช้คำสั่ง SET BT AUTH *
  2. National Semiconductor LMX9838: ใช้คำสั่ง GAP_SET_SECURITY_MODE พร้อมโหมดความปลอดภัย 1 (ไม่มีการจับคู่)

เป็นต้น

การเชื่อมต่อกับอุปกรณ์นั้นสามารถทำได้โดยไม่ต้องจับคู่ หากอุปกรณ์ที่เริ่มต้นการเชื่อมต่อเหมือนกับผู้รับสัญญาณสิ่งนี้จะตรงไปตรงมามาก หากคุณใช้ Windows PC คุณสามารถสร้างกระบวนการเชื่อมต่อใหม่และเลือก "ไม่ใช้พิน" แม้ว่า Windows อาจยังคงขอ PIN เมื่อคุณเชื่อมต่อ (ปกติจะใช้งาน 0000 แต่ มันเป็นขุยมาก) หากคุณใช้ python กับ pybluez มันง่ายมาก:

import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))

แต่ถ้าคุณต้องการที่จะเชื่อมต่อจากโทรศัพท์มือถือจะได้รับมากความซับซ้อนมากขึ้น Android SDK ดูเหมือนจะไม่รองรับการเชื่อมต่อที่ไม่ได้ใช้งานจริง:

Android Bluetooth API ปัจจุบันจำเป็นต้องมีการจับคู่อุปกรณ์ก่อนที่จะสามารถทำการเชื่อมต่อ RFCOMM ได้ (การจับคู่จะดำเนินการโดยอัตโนมัติเมื่อคุณเริ่มการเชื่อมต่อที่เข้ารหัสด้วย Bluetooth API)

(จากhttp://developer.android.com/guide/topics/connectivity/bluetooth.html ) มีหลายวิธีในการทำเช่นนี้ แต่มีความซับซ้อนและไม่รองรับ หากคุณกำลังใช้ iPhone การเชื่อมต่อบลูทู ธ เป็นเวิร์มต่าง ๆ (ใบอนุญาตเป็นต้น) ดังนั้นฉันจะทิ้งไว้นานแล้ว


ต้องบอกว่าทั้งหมดนี้ API ทุกตัวที่ฉันเคยดูอนุญาตให้จับคู่และการจับคู่ไม่ได้ดำเนินการ (ยกเว้นข้อเด่นของ python / pybluez แต่เป็นเพียง wrapper รอบ ๆ Microsoft stack บน Windows ดังนั้นคุณสามารถเรียกใช้ฟังก์ชันระดับต่ำได้โดยตรง) ดังนั้นเมื่อคุณเห็นอุปกรณ์ที่มีคลาสอุปกรณ์ที่เหมาะสมทำไมไม่จับคู่โดยอัตโนมัติ (ด้วยหมายเลขพินที่กำหนดไว้ล่วงหน้า) ทำการเชื่อมต่อส่งข้อมูลที่ต้องการยกเลิกการเชื่อมต่อแล้วยกเลิกการจับคู่ สิ่งเหล่านี้ไม่จำเป็นต้องมีการแทรกแซงของผู้ใช้และตราบใดที่คุณไม่ได้ทำหลายพันครั้ง (ซึ่งอาจทำให้เกิดปัญหากับการสึกหรอ EEPROM) ก็ไม่ควรทำให้เกิดปัญหาใด ๆ นอกจากนี้ยังช่วยให้คุณไม่ต้องยุ่งยากกับการพยายามใช้ API ที่แตกต่างกันให้ทำงานได้ดีกับสิ่งที่ถูกมองว่าเป็นวิธีการที่ไม่ได้มาตรฐานในการใช้บลูทู ธ


1
ขอบคุณสำหรับการตอบกลับที่ยอดเยี่ยม! มากสำหรับฉันที่จะมองเข้าไปในตอนนี้
capcom

10

สามารถทำได้ด้วยเทคโนโลยีภายในแบรนด์บลูทู ธ ที่เรียกว่าบลูทู ธ สมาร์ท (หรือบลูทู ธ พลังงานต่ำ / บลูทู ธ 4.0) และยังขึ้นอยู่กับโทรศัพท์ที่คุณมี

ประโยชน์หลักที่มีพลังงานต่ำผ่านบลูทู ธทั่วไปคือมันใช้พลังงานน้อยกว่ามากและอายุการใช้งานของอุปกรณ์อาจเป็นปีขึ้นอยู่กับช่วงเวลาการเชื่อมต่อและจำนวนโฆษณาบนแบตเตอรี่เซลล์แบบเหรียญ

เพื่อแก้ปัญหานี้คุณสามารถใส่รหัสที่เป็นปัญหาในข้อมูลการโฆษณาของชิป (ข้อมูลจำเพาะบลูทู ธ 4.0 คอร์เล่ม 3, ส่วน C, ส่วน 11.1.4 หรือ 11.1.10)

มีผู้ผลิตชิปรายใหญ่ 3 รายที่ผลิตชิปพลังงานต่ำ (TI, CSR และ Nordic Semiconductor)

นอร์ดิกมีชิปการเชื่อมต่อที่เรียกว่าnRF8001 (ชิปเชื่อมต่ออุปกรณ์ที่มีคุณสมบัติครบถ้วน) และ SoC nRF51822 ประโยชน์ของการใช้nRF8001คือคุณสามารถใช้โปรเซสเซอร์ที่คุณเลือกและไม่ต้องกังวลกับข้อกำหนดคุณสมบัติบลูทู ธเนื่องจากเป็นชิปที่จัดการโดย ประโยชน์ของnRF51822คือมันเป็นระบบบนชิปและลด BOM มันใช้ Cortex-M0 และควรมีคุณสมบัติครบถ้วนเมื่อวางจำหน่าย

TI มีชิป SoC 8051 cc2540และ CSR มีชิป SoC CSR CSR ergyEnergy

ทุกอย่างต้องขึ้นอยู่กับความต้องการและความชอบของคุณในโปรเซสเซอร์และฟังก์ชัน / ค่าใช้จ่าย


3

ใช่การสื่อสารบลูทู ธ เป็นไปได้โดยไม่ต้องจับคู่อุปกรณ์ ใช้insecureRfcomความเคารพของ RFCOM ที่ปลอดภัย ไม่ต้องการการจับคู่สำหรับการถ่ายโอนข้อมูล


ข้อมูลเพิ่มเติม: stackoverflow.com/questions/5308373/…
Erik Allik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.