Cel: jak zrobić kod QR do łatwego udostępniania WiFi?
Motywacja
Na obudowach ruterów często można znaleźć nalepki z kodami 2D, które po zeskanowaniu pozwalają podłączyć się do WiFi bez wpisywania haseł. To całkiem wygodne, zwłaszcza jeśli ma się skomplikowane hasło oraz dużo gości, co w styczniu 2022 jest nierozsądne - dużo gości, nie skomplkowane hasło - ale bądźmy dobrej myśli, jeszcze kiedyś będzie bezpiecznie robić zgromadzenia w domu.
Inżynieria wsteczna
Mam do dyspozycji ruter z kodem 2D. Po zeskanowaniu kodu moim telefonem nie
widzę zdekodowanego tekstu: urządzenie od razu “ułatwia mi życie”, oferując
podłączenie do sieci (o co zresztą chodzi, nie ma co narzekać). Zamiast
instalować specjalną apkę do podglądania kodów użyję komputera, a konkretnie
zbarimg z pakietu zbar-tools.
$ zbarimg nieznany-qr.png
QR-Code:WIFI:T:WPA2;S:domyslna-nazwa-sieci;P:domyslne-haslo;;
Aha! W zasadzie wiem już wszystko czego potrzebuję, ale poszukam jeszcze
standardu. qr code wifi standard?
Znalazłem ładne podsumowanie na wiki projektu zxing (Zebra). Wygląda na to, że to oni są autorami standardu, który przyjął się powszechnie. Za ich stroną:
- Składnia jest taka jak w standardzie MeCard - to prefiks
WIFI:i lista parklucz:wartośćrozdzielanych średnikami, znaki specjalne można wpisywać z\, np.\:. - Typ zabezpieczeń:
T:[WEP|WPA|WPA2-EAP|nopass]. Jeśli sieć jest niezabezpieczona, można ustawićT:nopasslub w ogóle pominąć to pole. - SSID:
S:nazwa-sieci. - Hasło:
P:haslo. - Jest też opcjonalne ustawienie do podłączania się do sieci ukrytej (
H:true) oraz zestaw zaawansowanych opcjiWPA2-EAP.
Uwaga: Jeśli SSID lub hasło jest tekstowe, ale może zostać zinterpretowane jako liczba
w systemie szesnastkowym, należy użyć cudzysłowów (S:"BACA", a nie S:BACA).
Rozwiązanie
QR-Code: to prefiks doklejany przez zbarimg - typ rozpoznanego kodu.
Nowy kod będzie wyglądał tak (koduję go pythonowym qr z pakietu qrcode):
$ qr 'WIFI:T:WPA2;S:inna-nazwa;P:lepsze-haslo;;' > wifi_qr.png

Co jeszcze można umieścić w kodzie QR?
- numer telefonu/sms:
tel:+48...,sms:+48..., - mail:
mailto:...@..., - współrzędne geograficzne:
geo:0:0, - dane kontaktowe (MeCard, vCard, …)
…i wiele innych, w tym przede wszystkim dowolny link. Aplikacje mogą rejestrować rozmaite typy rozpoznawanych URI i związanych z nimi akcji, więc właściwie lista zastosowań nie ma końca.
Rozmaitości
- Rozwinięcie skrótu SSID to Service Set IDentifier.
- Pokazywanie haseł w miejscu publicznym oczywiście nie jest bezpieczne - ale ostatecznie jeśli chodzi nam o udostępnienie komuś wifi, to nie ma wielkiej różnicy, czy powiemy mu jakie jest hasło, czy wyciągniemy kartkę z kodem :)
zbarcamuruchamia wykrywnie kodów kreskowych w obrazie przechwytywanym z kamery - fajna zabawka, potencjalnie bardzo przydatna.- Narzędzia z
zbar-toolspotrafią skanować także inne kody kreskowe (np. EAN13).
Linki
- Wiki XZing - rozmaite typy danych w QR https://github.com/zxing/zxing/wiki/Barcode-Contents
- Standard vCard: https://en.wikipedia.org/wiki/VCard
- Standard MeCard (zwięźlejszy): https://en.wikipedia.org/wiki/MeCard_(QR_code)
- Zmiana tekstu w kody QR - python-qrcode: https://github.com/lincolnloop/python-qrcode
