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:nopass
lub 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 :)
zbarcam
uruchamia wykrywnie kodów kreskowych w obrazie przechwytywanym z kamery - fajna zabawka, potencjalnie bardzo przydatna.- Narzędzia z
zbar-tools
potrafią 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