Czy komunikacja Bluetooth jest możliwa bez parowania?


36

Pracuję na urządzeniu, które może bezprzewodowo aktywować system „natychmiast”. Pierwszą rzeczą, jaka przyszła mi do głowy, było zastosowanie technologii RFID, która ma zaletę natychmiastowej i taniej komunikacji. Jestem jednak zainteresowany wykorzystaniem funkcji Bluetooth mojego telefonu do wykonania tego zadania.

Więc moje pytanie brzmi: aby korzystać z komunikacji Bluetooth, czy istnieje sposób na komunikację bez parowania? Innymi słowy, na bardzo uproszczonym poziomie, załóżmy, że mój odbiornik Bluetooth oczekuje kodu „abc123”. Urządzenie Bluetooth, takie jak telefon, jest zaprogramowane do ciągłego przesyłania tego kodu. Po otrzymaniu kodu system zaczyna robić wszystko, co powinien, po udzieleniu dostępu. Taki system usunąłby oczywiście barierę parowania kosztem bezpieczeństwa.

Czy to możliwe? Nie rozumiem protokołów Bluetooth na bardzo technicznym poziomie, ale jeśli ktoś może dać mi przewagę, mogę zacząć uczyć się od tego momentu. Nie uważaj mojego ograniczonego rozumienia za ograniczenie.


Istnieje tryb Bluetooth, który właśnie to robi, ale nie wiem, jak się nazywa. Służył do wysyłania lokalnych reklam do przekazywanych telefonów komórkowych.
jippie

2
Istnieją różne moduły 433 MHz, które będą nadawać sygnał „wł. / Wył.” „Natychmiast”; często stosowany w napędach do bram garażowych. Są również tanie i łatwe w obsłudze, chociaż nie zapewniają nieodłącznego bezpieczeństwa.
pjc50,

Odpowiedzi:


25

Tak, to całkowicie możliwe. Skomentowałem to wcześniej i od tego czasu zajrzałem dalej. Możliwe, że wyzwalające urządzenie Bluetooth wyśle ​​sygnał aktywacyjny za pomocą przyjaznej nazwy .

Przyjazna nazwa to czytelna dla człowieka nazwa, która pojawia się na liście podczas wyszukiwania urządzenia Bluetooth do sparowania. Szybkość aktywacji zależy od tego, jak szybko urządzenie odbierające odpytuje przyjazne nazwy. Nie wspomniałeś, jakiego rodzaju urządzenia odbiorczego używasz, ale znalazłem ten plik PDF (str. 35) szczegółowo opisujący proces aktualizacji przyjaznych nazw urządzeń Bluetooth znajdujących się w zasięgu.

Możesz wyszukiwać przyjazne nazwiska tak często, jak potrzebujesz. Jeśli urządzenie wyzwalające zmieni przyjazną nazwę na kod aktywacyjny, abc123urządzenie odbierające będzie mogło zobaczyć tę nazwę bez parowania i aktywować dowolne zadanie, które próbujesz wykonać. Pozwala to również na posiadanie wielu kodów aktywacyjnych, myślę, że możesz uzyskać do 248 bajtów na przyjazną nazwę Bluetooth.

Możesz także celowo otworzyć się na Bluejacking . Nie znam tego, ale jeśli bezpieczeństwo nie jest problemem, może działać.


2
Idealnie, wydaje się to najbardziej obiecujące. Podoba mi się prostota metody przyjaznej nazwy, a Bluejacking wydaje się również doskonałym kandydatem.
capcom

12

Krótka odpowiedź brzmi: tak, można używać Bluetooth bez parowania. Jednak nadal będzie to zawsze połączenie punkt-punkt. Istnieją również potencjalne problemy z niestosowaniem parowania (głównie brak bezpieczeństwa i brak dobrego wsparcia dla tego trybu działania). To, czy da się to zrobić, zależy od sprzętu Bluetooth odbiornika. Zakładam, że używasz „standardowego” Bluetooth zamiast Bluetooth o niskim zużyciu energii (który jest zupełnie inny i nie jest szczególnie dobrze obsługiwany w telefonach komórkowych). Jeśli używasz niskoenergetycznego, nadajnik byłby urządzeniem niskoenergetycznym, a odbiornik byłby czymś, co nasłuchuje wiadomości. Nie korzystałem z tego, więc nie mogę podać żadnych informacji na ten temat, więc pozostanę przy „normalnym” Bluetooth.

Moim zdaniem do rozwiązania są dwa problemy:

  1. Wyłączanie parowania pinów

  2. Automatyczne inicjowanie połączenia

Najpierw zajmę się numerem 2, ponieważ mam wrażenie, że to naprawdę Cię interesuje (przepraszam, jeśli źle to czytam). Aby to zrobić za pomocą telefonu lub innego „głównego” urządzenia, musiałby stale wyszukiwać zdalne urządzenia Bluetooth. Gdy rozpozna taki, który ma zastosowanie, automatycznie się z nim połączy i wyśle ​​dane lub inne, które zainicjują wszelkie wymagane działania. Inni wspominali o użyciu przyjaznej nazwy Bluetooth w tym procesie i jest to z pewnością jeden ze sposobów na to. Moje doświadczenia związane z przyjaznymi nazwami Bluetooth (szczególnie, ale nie wyłącznie ze stosem Microsoft Bluetooth) są takie, że nie są one tak niezawodną metodą skanowania. Prawdopodobnie lepiej by było użyć Klasy urządzeń Bluetooth, który jest nadawany w tym samym czasie co unikalny adres urządzenia. Ta klasa urządzeń ma dużą liczbę wstępnie określonych pozycji, takich jak telefony komórkowe, laptopy, komputery stacjonarne itp. Jeśli użyjesz jednej z niestandardowych klas urządzeń (np. 00:00:00), natychmiast będziesz w stanie aby odfiltrować ogromną większość urządzeń Bluetooth. Następnie możesz połączyć się z pozostałym urządzeniem i wykonać komunikację potwierdzającą żądanie w celu zainicjowania akcji. Jeśli uczynisz to odpowiednio niejasnym (lub sprawdzisz przyjazną nazwę jako drugą kwestię), powinno ono domyślnie odfiltrować wszelkie pozostałe nieprawidłowe urządzenia.


Jeśli chodzi o numer 1, parowanie pinów nie jest szczególnie logiczne, jeśli tworzysz przejściowe połączenia, ale nadal może być najlepszym sposobem na osiągnięcie tego, co chcesz zrobić. Aby uniknąć parowania pinów, można je wyłączyć i nawiązać niesparowane połączenie. Jak to zrobić, zależy od implementacji odbiornika Bluetooth, ale oto kilka przykładów:

  1. Bluegiga WT12: użyj polecenia SET BT AUTH *
  2. National Semiconductor LMX9838: użyj polecenia GAP_SET_SECURITY_MODE z trybem bezpieczeństwa 1 (bez parowania)

itp.

Podłączenie do urządzenia można wtedy wykonać bez parowania. Jeśli urządzenie inicjujące połączenie jest takie samo jak odbiornik, jest to bardzo proste. Jeśli używasz komputera z systemem Windows, możesz przejść przez żmudne tworzenie nowego procesu połączenia i wybrać opcję „nie używaj kodu PIN”, chociaż system Windows prawdopodobnie nadal poprosi o kod PIN podczas łączenia (0000 zwykle działa, ale jest bardzo łuszcząca się). Jeśli używasz Pythona z pybluez, jest to bardzo proste:

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

Jeśli jednak chcesz połączyć się z telefonu komórkowego, staje się to znacznie bardziej skomplikowane. Wygląda na to, że zestaw Android SDK nie obsługuje połączeń niesparowanych:

Obecne interfejsy API Androida Bluetooth wymagają sparowania urządzeń przed nawiązaniem połączenia RFCOMM. (Parowanie odbywa się automatycznie po zainicjowaniu szyfrowanego połączenia z interfejsami API Bluetooth.)

(z http://developer.android.com/guide/topics/connectivity/bluetooth.html ). Można to obejść na wiele sposobów, ale są one bardzo skomplikowane i nie są dobrze obsługiwane. Jeśli używasz iPhone'a, łączność Bluetooth to zupełnie inna puszka robaków (licencjonowanie itp.), Więc zostawię to na razie.


Powiedziawszy to wszystko, prawie każdy interfejs API, na jaki kiedykolwiek spojrzałem, pozwala na parowanie isparowanie do wykonania (z godnym uwagi wyjątkiem python / pybluez, ale to tylko opakowanie wokół stosu Microsoft w systemie Windows, więc zawsze możesz bezpośrednio wywołać funkcję niskiego poziomu). Tak więc, jeśli zauważysz urządzenie z odpowiednią klasą urządzenia, dlaczego nie po prostu automatycznie sparować (ze wstępnie zdefiniowanym numerem PIN parowania), nawiązać połączenie, wysłać wymagane dane, rozłączyć, a następnie sparować. Nie wymagałoby to żadnej interwencji użytkownika i dopóki nie robisz tego tysiące razy (co może potencjalnie powodować problemy z zużyciem pamięci EEPROM), nie powinno to powodować żadnych problemów. Zaoszczędzi ci to również wielu kłopotów z próbą uzyskania różnych interfejsów API, aby działały dobrze z czymś, co postrzegane jest jako niestandardowa metoda korzystania z Bluetooth.


1
Dzięki za doskonałą odpowiedź! Dużo do zobaczenia teraz.
capcom

10

Można to osiągnąć dzięki technologii marki Bluetooth o nazwie Bluetooth Smart (lub Bluetooth Low Energy / Bluetooth 4.0), a także w zależności od posiadanego telefonu.

Główną zaletą Low Energy w porównaniu ze zwykłym Bluetooth jest to, że zużywa znacznie mniej energii, a oczekiwany czas życia urządzenia może wynosić lata w zależności od interwału połączenia i tego, ile reklamuje na baterii pastylkowej.

Aby rozwiązać ten problem, możesz umieścić ten kod w danych reklamowych mikroukładu. ( Bluetooth 4.0 Core Spec. Volume 3, Part C, Section 11.1.4 or 11.1.10)

Jest 3 głównych producentów układów, którzy produkują układy o niskiej energii (TI, CSR i Nordic Semiconductor)

Nordic ma układ łączności o nazwie nRF8001 (układ łączności, w pełni kwalifikowane urządzenie) i SoC nRF51822 . Zaletą korzystania z nRF8001 jest to, że możesz korzystać z wybranego procesora i nie musisz przejmować się specyfikacją Bluetooth, ponieważ jest to obsługiwane przez układ. Zaletą nRF51822 jest to, że jest to układ na chipie i zmniejsza on BOM, działa Cortex-M0 i powinien być w pełni kwalifikowany po wydaniu.

Mam układ 8051 SoC cc2540, a CSR układ SoC CSR µEnergy

Wszystko sprowadza się do twoich potrzeb i preferencji procesora oraz funkcjonalności / kosztu



1

Skutkiem udanego parowania jest klucz połączenia, sekret, który sparowane urządzenia udostępniają i umożliwiają im komunikację.

Jeśli można ustawić klucz połączenia w systemie, to tak, nie jest wymagane parowanie. Wystarczy ustawić ten sam klucz linku na obu urządzeniach. Po tym połączeniu można pomyślnie otworzyć, tak jakby dwa urządzenia zostały sparowane.

Na przykład w systemie Linux po sparowaniu infoplik jest zapisywany dla każdego sparowanego urządzenia pod / var / lib / bluetooth / local-device-address / remote-device-address /

Po Generalsekcji zawiera następujące: [LinkKey] Key=FF00112233445566778899AABBCCDDEE Type=5 PINLength=0

Można to ustawić bezpośrednio bez parowania. Jeśli to samo jest zapisane na zdalnym urządzeniu. Urządzenia są sparowane.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.