Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
1 contributor

Users who have contributed to this file

154 lines (115 sloc) 6.26 KB
Note: English version below.
### Polski: Protokół STQC ####
System ten jest wykorzystywany przez urządzenia firmy Digitex/Platan (wywołanie
selektywne do CB SW-xx, systemy profesjonalne DSP-xx).
Zawarte tu oprogrmowanie zawiera enkoder STQC, oraz moduł dekodera STQC do
programu multimon-ng. Dokumentacja do multimon-ng oraz Internet zawiera
liczne przyłady użycia tego programu, więc nie zostaną one tu przytoczone
(i tam odsyłam po odpowiedzi na ewentualne pytania). Program multimon-ng
można uruchomić pod systemami linux, *bsd (w tym macos), oraz windows (w
dwóch ostatnich przypadkach proszę nie kierować do mnie zapytań jak to zrobić).
System STQC składa się z 5 tonów:
0 - 980Hz
1 - 1197Hz
2 - 1446Hz
3 - 1795Hz
4 - 2105Hz
Sekwencja wywołania jest przeliczana na system czwórkowy, cyfry są używane do
wyboru tonów 0-3. Powtarzające się tony są zastępowane przez ton 4 (enkoder
zakłada, że najpierw zostało wysłane 0). Nieużywane cyfry zastępowane są
0. Tony mają długość 100ms. Cyfry nadawane są od najbardziej znaczącej.
Zwykle stosowane są sekwencje 7 i 8 tonowe. Całkowite wywołanie to
(zwykle) 7 tonów (prawdopodobnie adres odbiornika), 200ms przerwy i 8 tonów
(prawdopodobnie komenda).
Przykład (zakoduj 1231 jako sekwencja 8 tonów):
1231 (podstawa 10) = 00103033 (podstawa 4).
Zmiana powtapodstawacych się cyfr na 4: 40103034
Zmiana cyfr na tony [Hz]: 2105 980 1197 980 1795 980 1795 2105
Protokół jest tak prosty, że może być zaimplementowany nawet jako skrypt
shellowy. W razie wątpliwości polecam RTFS.
Prosta implementacja enkodera znajduje się w stqc.sh.
Enkoder ktory robi cale wywolanie stqc (7 tonow, przerwa 200ms, 8 tonow)
znajduje sie w stqc2.sh.
Prosta implementacja dekodera w 1 linijce shella:
$ SEQ=40103034; echo "ibase=4; 0$SEQ"|sed -re 's/([0-3])4/\1\1/g'|bc -l
1231
Przykładowe tony można pozyskać np. z filmów na youtube (najprościej
szukać po nazwie "dsp-50").
Aby odkodować należy użyć np multimon-ng -c -a STQC
# Uwaga dla strażaków
Wiele osób chciałoby zrobić dekoder, aby mieć własne powiadomienie,
niezależne od syreny OSP. Powiadomienie takie można wykonać za pomocą
multimon-ng z obsługą STQC. Jako odbiornik można wykorzystać zarówno
sprzętowy odbiornik (np. stary transceiver na pasmo 2m, może być z
uszkodzonym nadajnikiem) i monitorować jego wyjście za pomocą karty
dźwiękowej. Można też wykorzystać tani tuner DVB-T z układem RL2832 jako
odbiornik SDR (proszę szukać w internecie przykładów integracji multimon-ng
np z rtl_fm, gnuradio lub innym odbiornikiem SDR). Częstotliwości są
opublikowane w internecie, można też je samemy znaleźć. Wyjście z multimon-ng
można śledzić za pomocą programu expect i w zależności od pojawiających
się sekwencji uruchamiać skrypty realizujące powiadamianie (np. wysłanie
sms, maila, odtwarzanie dźwięku, wysłanie komunikatu na jakiś serwis
społecznościowy itp. wykorzystanie systemu linux daje tu prawie nieograniczone
możliwości prostej integracji za pomocą skryptów, bez tworzenia dedykowanego
do tego oprogramowania).
Za pomocą enkodera STQC (skrypt stqc.sh) można wygenerować sekwencję tonów.
Taką sekwencję można najprawdopodobniej zaprogrmować w strażackich
radiotelefonach służbowych, co umożliwiłoby sygnalizację w przypadku klęski
żywiołowej (jeśli nie działałby system wysyłający powiadomienia).
Jeśli to oprogrmowanie zostanie użyte z pożytkiem dla strażaków lub innych,
prosiłbym o informację.
Uwaga: to oprogramowanie nie może zastąpić normalnego systemu powiadamiania.
# Bezpieczeństwo STQC
W przypadku użycia systemu wywołania o stałej sekwencji w kanale radiowym
(dotyczy to każdego publicznie dostepnego kanału komunikacji),
każdy ma możliwość nasłuchu tej sekwencji (nasłuchu a nie podsłuchu, ponieważ
transmisja nie jest w jakikolwiek sposób zabezpieczona technicznie).
Daje to nieograniczone możliwości jej ponownego wykorzystania, nawet bez
znajomości szczegółów protokołu (replay attack). M.in. z takich powodów
tego typu systemy nie są już używane w sytuacjach gdzie trzeba zapewnić
jakiekolwiek bezpieczeństwo (przykładowo systemy ze zmiennym kodem są
powszechnie używane w pilotach do samochodów od lat '90).
Jeśli kanał komunikacyjny nie jest publicznie dostępny (np linia
telefoniczna), to system ten może być dalej stosowany.
Protokół został rozpracowany na podstawie opublikowanej w internecie listy
sekwencji tonów dla liczb 0-21: http://forum.atnel.pl/topic4641.html , oraz
publicznie dostępnych w internecie filmów przedstawiających działanie centralki
DSP-50 (zawierających sekwencje tonów). Nie testowałem oprogramowania na
danych uzyskanych z nasłuchu, ponieważ w mojej okolicy (chyba) nie ma takich
systemów.
Używanie systemów posiadających te (podstawowe) podatności (publicznie
dostępny kanał, stała sekwencja sterująca) jest faktem. Optymizm skłania
do wniosku, że jest to wynik starannej analizy (zagrożeń, kosztów itp), a
nie inercji.
Powyższa analiza jest moją własną. Jeśli ktoś ma inne zdanie/argumenty chętnie
bym je poznał. Zapraszam do _konstruktywnej_ dyskusji.
73 de Jacek Lipkowski <sq5bpf@lipkowski.org>
##### English: STQC Protocol ####
Note: the english version is intentionally short, as this system is used
probably only in Poland.
The STQC system consists of 5 tones:
0 - 980Hz
1 - 1197Hz
2 - 1446Hz
3 - 1795Hz
4 - 2105Hz
The call sequence is base-4 encoded, and the digits are used to select tones
0-3. If a tone would repeat, then tone 4 is used (the encoder assumes that 0
was transmitted first). The usused most-significant digits are filled with 0.
The tones are 100ms long. The digits are transmitted most significant digit
first.
Call lengths of (usually) 7 and 8 tones are commonly used. The full call is
7 tones (probably receiver address) + 200ms + 8 tones (command)
For example (encode 1231 into 8 tones):
1231 (base 10) = 00103033 (base 4).
Change repeating tones to 4: 40103034
Change numbers to tones [Hz]: 2105 980 1197 980 1795 980 1795 2105
The protocol is really simple and can be implemented even as a shell-script.
I hope this explanation is enough, if in doubt RTFS.
See stqc.sh for a very simple implementation in shell.
Simple one-line decoder in shell:
$ SEQ=40103034; echo "ibase=4; 0$SEQ"|sed -re 's/([0-3])4/\1\1/g'|bc -l
1231
If you want example tones to decode, search for "dsp-50" on youtube.
Use multimon-ng -c -a STQC to decode.
73 de Jacek Lipkowski <sq5bpf@lipkowski.org>
You can’t perform that action at this time.