Masarykova univerzita Fakulta informatiky

Modul pro generování VoIP datového toku end-to-end šifrovaných messengerů

Bakalářská práce

Ondřej Charbulák

Brno, jaro 2020 Masarykova univerzita Fakulta informatiky

Modul pro generování VoIP datového toku end-to-end šifrovaných messengerů

Bakalářská práce

Ondřej Charbulák

Brno, jaro 2020 Na tomto místě se v tištěné práci nachází oficiální podepsané zadání práce a prohlášení autora školního díla. Prohlášení

Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.

Ondřej Charbulák

Vedoucí práce: Mgr. Adam Janovský

i Poděkování

Rád bych poděkoval svému vedoucímu Mgr. Adamovi Janovskému za veškeré rady a skvělé vedení bakalářské práce. Dále bych chtěl poděkovat Mgr. Jakubovi Čuperovi, Ph.D., a všem svým kolegům za cenné připomínky, vstřícnost a podporu při tvorbě této práce.

ii Shrnutí

Tato práce se zabývá kódováním hlasu a jeho následným přenosem po síti pomocí paketů. Tento jev je zkoumán u několika populárních mobilních aplikací umožňujících hovor prostřednictvím VoIP (Voice over Internet Protocol). Cílem práce je zjistit, zda jsou tyto aplikace zranitelné útokem podle autorů C. V. Wright et al. (IEEE S&P 2008, Spot me if you can). Součástí práce je návrh a implementace nástroje packetizer, jehož vstupem je zvolený hlasový korpus, výstupem jsou soubory obsahující délky paketů a fonémy náležící těmto paketům.

iii Klíčová slova

VoIP, C++, WhatsApp, , audio kodek, , Silk, hlasový kor- pus TIMIT

iv Obsah

1 Úvod 1

2 Definice základních pojmů 3 2.1 Padding ...... 3 2.2 Pulzně kódová modulace ...... 3 2.3 Variable bitrate ...... 4 2.4 Constant bitrate ...... 4 2.5 Discontinuous transmission ...... 6

3 Výběr messengerů 7 3.1 Požadované vlastnosti messengerů ...... 7 3.2 Chytání a analýza paketů ...... 7 3.3 Kandidátní messengery ...... 8 3.3.1 Telegram ...... 8 3.3.2 WhatsApp ...... 9 3.3.3 Facebook Messenger ...... 11 3.3.4 Signal ...... 12 3.3.5 Skype ...... 13 3.3.6 Viber ...... 14 3.4 Shrnutí ...... 15

4 TIMIT Korpus 17 4.1 Formát WAV ...... 17 4.1.1 Hlavička RIFF ...... 18 4.1.2 Hlavička NIST ...... 18 4.1.3 Formát a zpracování TIMIT .WAV souborů . . . 18 4.2 Textové soubory ...... 19 4.2.1 Soubory .WRD ...... 19 4.2.2 Soubory .TXT ...... 19 4.2.3 Soubory .PHN ...... 19 4.2.4 Zpracování textových souborů ...... 19

5 Kodek Silk a jeho využití v aplikaci Skype 21 5.1 Kodek Silk ...... 21 5.2 Nastavení kodeku Silk ...... 21 5.3 Výchozí hodnoty pro Skype ...... 22

v 6 Kodek Opus a jeho využití v aplikaci WhatsApp 23 6.1 Kodek Opus ...... 23 6.2 Nastavení kodéru Opus ...... 23 6.3 Výchozí hodnoty pro WhatsApp ...... 24 6.3.1 Hlavička Opus paketu ...... 24 6.3.2 Tvorba nestandardních paketů ...... 25

7 Návrh a implementace nástroje packetizer 27 7.1 Programy encoder_skype a encoder_whatsapp ..... 27 7.1.1 Příklad výstupu s parametrem -j 0 ...... 28 7.1.2 Příklad výstupu s parametrem -j 1 ...... 28 7.2 Použití a výstup programu packetizer ...... 28 7.3 Použité technologie ...... 29

8 Závěr 30

Bibliografie 31

A Elektronická příloha 35

B Nástroj packetizer 36 B.1 Možnosti programu encoder_skype ...... 36 B.2 Možnosti programu encoder_whatsapp ...... 36 B.3 Možnosti programu packetizer ...... 38 B.4 Příklady výstupů programu packetizer ...... 40 B.4.1 Výstup pro Skype ve výchozím nastavení . . . . 40 B.4.2 Výstup pro WhatsApp ve výchozím nastavení . 45 B.5 Příklad výstupu programu encoder_skype ...... 45 B.6 Příklad výstupu programu encoder_whatsapp ...... 46

vi Seznam tabulek

vii Seznam obrázků

2.1 Graf s hodnotami audio vzorků. Na ose X je čas v sekundách, na ose Y je hodnota vzorku 4 2.2 Graf s velikostmi paketů o délce 20 ms. Na ose X je čas v sekundách, na ose Y velikost paketu v bajtech. 5 3.1 Ukázka paketů Telegramu 9 3.2 Ukázka paketů WhatsAppu 10 3.3 Ukázka RTP hlavičky WhatsApp paketu 11 3.4 Graf reprezentující počet přijatých paketů Facebook Messengeru za jednotku času (V jednom směru) 12 3.5 Ukázka paketů Signalu 13 3.6 Ukázka paketů Skypu 14 3.7 Ukázka paketů Viberu 15

viii 1 Úvod

VoIP (Voice over Internet Protocol) je technologie, která umožňuje pře- nos digitalizovaného hlasu po síti, jež využívá protokolu IP. V dnešní době existuje celá řada mobilních aplikací, které prostřednictvím VoIP umožňují bezpečnou komunikaci. V důsledku širokého použití této technologie se i její bezpečnost stala často zkoumaným tématem. V mi- nulosti byla objevena celá řada útoků, jako je například man-in-the- middle attack, spam through Internet telephony (SPIT), nebo Denial of Service (DoS) [1, kap. 3, 4]. Aplikace pro zaručení bezpečnosti hovoru typicky implementují end-to-end šifrování, díky kterému je obsah pře- nášených dat znám jen koncovým uživatelům, pro ostatní jsou tato data viditelná pouze v zašifrované podobě. Aby bylo možné přenášet hlas po síti, je nutné jej nejprve převést do vhodné podoby. K tomuto účelu bylo navrženo několik audio kodeků, jako je například Opus (kap. 6.1) nebo Silk (kap. 5.1), jejich výstupem jsou pakety. Jelikož by byl přenos hovoru v nekomprimované podobě značně neefektivní, tyto kodeky mají za cíl produkovat co nejmenší ob- jem dat tak, aby zároveň byla udržována určitá kvalita daného hovoru. Takové kodeky mají typicky ztrátovou kompresi, krom toho mohou využívat různých technik, jak dále snížit množství přenášených dat. Jednou z těchto technik je variable bitrate, zkráceně VBR, kterému se věnuje kapitola 2.3. V roce 2008 autoři článku Spot me if you can [2] ukázali, že kódování, jehož součástí je VBR, se dá zneužít. Autorům se povedlo na základě délky zašifrovaných paketů určovat původní mluvené fráze, a to s prů- měrnou přesností 50 procent, v určitých situacích až 90 procent [2]. V takových případech se šifrování paketů stává zcela neúčinné. Autoři nejdříve ukázali, že každý foném odpovídá určité přenosové rychlosti, což je přímý důsledek použití VBR. Autoři dále popsali, jak vytvořit a použít Skrytý Markovův model1 pro hledání frází v zašifrovaných paketech. Pro využití jejich techniky je potřeba následující: ∙ znalost jazyka zkoumané konverzace ∙ příslušná zašifrovaná data

1. Angl. Hidden Markov Model (HMM)

1 1. Úvod

∙ data potřebná k vybudování Skrytého Markovova modelu, tě- mito daty jsou dvojice délka paketu a foném Cílem této práce bylo zanalyzovat populární messengery2 podpo- rující VoIP hovory, určit, jaký kodek používají, a vybrat z nich takové messengery, na které lze aplikovat výše popsaný útok. Výsledkem této práce je implementace nástroje packetizer, pomocí kterého je možné vytvořit trénovací data pro strojové učení. Účelem tohoto strojového učení je rozpoznávat fráze na základě délek po sobě jdoucích zašif- rovaných VoIP paketů. Vstupem nástroje je vybraný hlasový korpus a výstupem je datová sada, jejíž položky jsou délka paketu a foném, případně fonémy v paketu obsažené. Implementace strojového učení není předmětem této práce. Následující kapitola vysvětluje několik důležitých pojmů, včetně již zmíněného VBR. V kapitole 3 se věnuji analýze několika popu- lárních messengerů, které podporují VoIP hovory. Na základě této analýzy jsou zvoleny messengery vhodné pro útok popsaný v článku [2]. Kodeky vybraných messengerů jsou popsány v kapitolách 5.1 a 6, v těchto kapitolách se rovněž zabývám jejich konkrétním nastavením pro dané aplikace. Kapitola 4 je věnována zpracování korpusu TIMIT3 , a to jak audio nahrávek, tak i příslušných fonetických přepisů. Kapi- tola 7 se zabývá implementací nástroje packetizer, popisuje způsob použití, formát výstupu a možnosti rozšíření. V závěru je shrnuta použitelnost pro budoucí strojové učení a jeho očekávané výsledky.

2. Z angl. messaging applications - aplikace podporující okamžité zasílání zpráv (instant messaging). 3. Celým názvem DARPA TIMIT Acoustic-Phonetic Continuous Speech Corpus, viz https://catalog.ldc.upenn.edu/LDC93S1

2 2 Definice základních pojmů

V této kapitole jsou definovány pojmy, které jsou používány napříč touto prací. Pro tvorbu následujících příkladů byl vždy použit audio soubor SA2.WAV z korpusu TIMIT. Tento soubor je součátí elektronické přílohy (viz příloha A).

2.1 Padding

Padding1 je zarovnání délky přenášených dat na určitou velikost. To- hoto zarovnání bývá dosaženo vložením dodatečných bajtů do pů- vodní zprávy. Bajty mohou být vloženy na úrovni kodeku, to podpo- ruje mimo jiné i Opus [3, kap. 3.2.5.]. Padding může být přidán během šifrování, nebo samostatně v rámci použitého protokolu. Příkladem protokolu, který podporuje padding je RTP2 [4, kap. 5.].

2.2 Pulzně kódová modulace

Pulzně kódová modulace, zkráceně PCM3 je metoda nekomprimova- ného ukládání audio signálu v digitální podobě. Pro popis PCM se používají dva základní parametry, jedním je vzorkovací frekvence4, která udává počet uložených vzorků za jed- notku času, typicky za 1 sekundu. Jednotkou je hertz [Hz] a běžně jsou používány hodnoty od 8 kHz do 48 kHz. Druhým parametrem je bitová hloubka5, která udává, kolik bitů je použito na uložení jednoho vzorku audia. Typicky je použito 8, 16, nebo 24 bitů na jeden vzorek. Jednotlivé vzorky odpovídají hodnotám signálu v daném čase, hodnoty blízko nuly reprezentují ticho, u hodnot blížícím se amplitudě je tomu naopak. Na obrázku 2.1 je graf sestavený z jednotlivých vzorků souboru SA2.WAV. Ticho na začátku a pauzy mezi jednotlivými slovy se zde projevují hodnotami blízko nuly.

1. Česky „výplň“. 2. Real-time Transport Protocol 3. Z angl. pulse-code modulation. 4. Angl. sample rate 5. Angl. bit depth

3 2. Definice základních pojmů

Obrázek 2.1: Graf s hodnotami audio vzorků. Na ose X je čas v sekun- dách, na ose Y je hodnota vzorku

2.3 Variable bitrate

Audio kodek, jenž podporuje variable bitrate (VBR), dokáže složitější části audia kódovat vyšší přenosovou rychlostí a méně složité naopak nižší. Výsledkem jsou různě velké pakety. Rozdíl mezi velikostmi pa- ketů je nejvíce znatelný, když je porovnáno zakódované ticho s řečí. Na obrázku 2.2 jsou velikosti jednotlivých paketů, které vznikly pou- žitím kodeku Silk (viz kap. 5.1), opět se jedná se o soubor SA2.WAV, je zde vidět spojitost mezi tichými pasážemi audia a nízkými velikostmi paketů. Jelikož je v průměrném hovoru každý z účastníků potichu přibližně 63 procent celkového času [5, kap. 18], celkově by přenos měl být výrazně úspornější, komplexní části pak mohou mít vyšší přenosovou rychlost, a tím pádem být kvalitnější.

2.4 Constant bitrate

Opakem VBR je Constant bitrate, zkráceně CBR. Při použití CBR budou mít výsledné pakety pokaždé stejnou délku. Zejména u telefonní ko- munikace je použití CBR nevhodné, existuje však několik situací, proč by jeho použití mohlo být žádoucí. Například protokol pro přenos by

4 2. Definice základních pojmů

Obrázek 2.2: Graf s velikostmi paketů o délce 20 ms. Na ose X je čas v sekundách, na ose Y velikost paketu v bajtech.

mohl podporovat pouze data fixní délky. CBR je také možné použít, pokud je přenos dat limitován pouze maximální přenosovou rychlostí a chceme využít veškerou dostupnou kapacitu daného komunikač- ního kanálu [3, kap. 2.1.8.], [6]. Opus dokáže pracovat v režimu CBR. Následuje příklad výstupu programu encoder_whatsapp6, v obou případech bylo použito nastavení7 -j 1, měnilo se pouze nastavení --opus-vbr. Na výstupech jsou pouze velikosti vytvořených paketů v bajtech.

--opus-vbr 1: 253,307,372,303,247,322,320,357,328, 330,339,349,355,368,377,381,305,343,319,344,320,290 --opus-vbr 0: 400,400,400,400,400,400,400,400,400, 400,400,400,400,400,400,400,400,400,400,400,400,400

Konstantní velikost budou mít vždy data přenášená paketem (pay- load), samotný paket může mít odlišné velikosti, například kvůli různě velkým hlavičkám použitého protokolu, tento rozdíl by však neměl být výrazný (řádově několik bajtů).

6. Viz kapitola 7. 7. Viz příloha B.2.

5 2. Definice základních pojmů 2.5 Discontinuous transmission

Další technikou pro úsporu přenosové rychlosti je Discontinuous Trans- mission, neboli DTX. Pokud část hovoru obsahuje ticho nebo šum, není tato část při použití DTX vůbec odeslána. DTX je součástí jak Silk, tak i Opus kodeku. Níže je příklad délek paketů při použití programu encoder_skype s ukázkovým vstupem, jediný argument programu, který byl změněn, je ---dtx: --silk-dtx 0: 28,28,32,35,30,33,32,45,47,38,37,43, 54,53,63,62,65,59,62,52,53,45,50,46,49,44,45,47,41, 39,42,40,36,34,35,34,30,30,32,31,30,50,73,59, ... --silk-dtx 1: 28,28,32,35,30,0,0,45,47,38,37,43,54, 53,63,62,65,59,62,52,53,45,50,46,49,44,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,50,73,59,63,65,63,64,50,58, ... Na výstupu jsou velikosti jednotlivých paketů. V místech, kde jsou při použití DTX nuly, kodek vyhodnotil, že data obsažené v těchto paketech obsahují ticho či šum, a proto není třeba je odesílat.

6 3 Výběr messengerů

Výběr messengerů vhodných pro implementaci útoku v článku [2] probíhal v několika fázích. Nejprve bylo nutné určit požadavky, které na messengery klademe, pak následovala analýza paketů, které puto- valy po síti mezi dvěma telefony během námi uskutečněných hovorů. Analýza měla za úkol odhalit informace o tom, jaký kodek daná apli- kace využívá, popřípadě jaké jsou jeho konkrétní atributy. Na základě této analýzy a veřejně dostupných informací týkajících se zkoumaných messengerů byly vybrány dva, které se jevily jako nejvhodnější.

3.1 Požadované vlastnosti messengerů

Pro útok popsaný v článku [2] je nezbytné, aby kódování hovoru používalo VBR. Druhým požadavkem je, aby nebyl použit padding v jakékoli jeho formě. Posledním faktorem ovlivňujícím výběr messengerů byla dostup- nost informací o tom, jaký kodek daný messenger používá. Ne u všech aplikací je kodek přímo specifikován autory, často je uvedená pouze použitá knihovna, např. PJSIP1 , nebo API, jako je WebRTC2, které jsou využívány celou řadou aplikací a mohou podporovat velké množství audio i video kodeků. V tomto případě je hledání konkrétního kodeku daného messengeru značně náročné a vyžaduje hlubší analýzu.

3.2 Chytání a analýza paketů

Pro každou aplikaci byl uskutečněn několikaminutový hovor se dvěma účastníky. Bylo důležité, aby některé části konverzace obsahovaly ticho, a jiné zase mluvu, díky čemuž lze snadno rozpoznat VBR. Některé z aplikací existují i ve verzi pro prohlížeč. V rámci této analýzy byla vždy použita lokální instalace, a to v nejnovější dostupné

1. Domovské stránky PJSIP: https://www.pjsip.org/ 2. Domovské stránky WebRTC: https://webrtc.org/

7 3. Výběr messengerů verzi3. Pro uskutečnění hovorů byly použity telefony s operačním systémem Android ve verzi 8.0.0. Pakety byly zaznamenány pomocí aplikace tcpdump4, a dále zpra- covány programem Wireshark5.

3.3 Kandidátní messengery

Pro účely této práce jsem zvolil několik populárních messengerů, o kte- rých je známo, že podporují VoIP hovory. Jmenovitě jsou to Telegram, WhatsApp, Facebook Messenger, Signal, Skype, Viber. V následujících podkapitolách jsou popsány jejich vlastnosti.

3.3.1 Telegram Telegram6 je multiplatformní open-source aplikace pro zasílání zpráv, fotek, videí a dalších souborů, buď mezi jednotlivými uživateli, nebo v rámci skupin. Telegram se jevil jako vhodný kandidát právě díky tomu, že je open-source. Telegram používá kodek Opus [7]. Konkrétní parametry tohoto kodeku lze získat přímo z implementace7 VoIP části aplikace. Telegram využívá vlastního protokolu MTProto8 , který popisuje mimo jiné šifrování a autentizaci zpráv. Protokol také specifikuje padding, konkrétně v délce 12 až 1024 bajtů. Odesílaná data (payload) a padding jsou šifrována pomocí šifry AES-256 v režimu IGE. [8] Z nachytaných paketů9 je zřejmé, že přenášená data jsou zarovnána po 16 bajtech, na obrázku 3.1 je náhled na tyto pakety prostřednic- tvím programu Wireshark. Přestože z popisu protokolu vyplývá, že je použit padding, byla zkontrolována jeho přítomnost. Kvůli použitému zarovnání dat není Telegram vhodným kandidá- tem pro náš útok a nástroj packetizer jej nepodporuje.

3. Pro Viber, Skype, Facebook Messenger a Signal k datu 25. března 2020. Pro Telegram a WhatsApp 18. února 2020. 4. Dostupné z https://www.tcpdump.org/ 5. Dostupné z https://www.wireshark.org/ 6. Viz https://telegram.org/ 7. Viz https://github.com/grishka/libtgvoip 8. Viz https://core.telegram.org/mtproto 9. Viz soubor telegram.pcap, součást přílohy.

8 3. Výběr messengerů

Obrázek 3.1: Ukázka paketů Telegramu

3.3.2 WhatsApp WhatsApp10 je multiplatformní freeware podporující zasílání zpráv i VoIP hovory, vlastní jej společnost Facebook a se svými dvěma mili- ardami uživatelů[9] patří mezi nejpopulárnější messengery vůbec. Konkrétní kodek není autory WhatsAppu zveřejněn, nicméně bylo zjištěno, že WhatsApp používá Opus. Jeho vzorkovací frekvence je 16 kHz a přenosová rychlost je přibližně 20 kbps. Dále bylo uvedeno, že se přenosová rychlost nemění, když je hovořící ztlumen. [10] WhatsApp white paper [11] popisuje, jakým způsobem je implemen- továno end-to-end šifrování. Tento dokument zmiňuje použití SRTP11 pro šifrování hovorů a videohovorů, to je uvedeno i v analýze [13]. Pakety putující po síti mají RTP hlavičku v otevřeném tvaru, díky tomu z ní lze vyčíst potenciálně užitečné informace, samotný payload je zašifrovaný šifrou AES [12, kap. 5]. Při pohledu na odchycení pakety12 (obrázek 3.2) můžeme usoudit, že přenášená data neobsahují padding. Na obrázku je dále vidět, že čas mezi jednotlivými pakety (sloupec Delta time) odpovídá zhruba 160 milisekundám, ne všechny pakety ale spadají do tohoto časového intervalu. Další pro nás přínosná informace je Timestamp. Podle pří- slušného RFC [4, str. 13] tato hodnota souvisí se vzorkováním audia

10. Domovské stránky: https://www.whatsapp.com/ 11. Secure Real-time Transport Protocol, viz [12, 4] 12. Viz soubor whatsapp.pcap, součást přílohy.

9 3. Výběr messengerů

Obrázek 3.2: Ukázka paketů WhatsAppu

(sampling instant), její počáteční hodnota je náhodná a s každým ode- slaným paketem je inkrementována o počet navzorkovaných bloků dat. Rozdíl mezi dvěma po sobě jdoucími časovými značkami se rovná 2560. V kontextu kodeku Opus toto číslo udává délku rámce: Samplerate[Hz] Framesize = Duration[ms] (3.1) 1000 Pokud toto číslo podělíme již zmíněnou vzorkovací frekvencí (16000 Hz), dostáváme 160 milisekund, což odpovídá položce Delta time. Na Android WhatsApp klientu byl proveden call trace13 příchozího hovoru. [14] Mezi daty jsou uvedeny vzorkovací frekvence 16 kHz i 8 kHz, je tedy možné, že kodek nemusí nutně být v režimu 16 kHz, jak tomu bylo v našem případě. O nepřítomnosti paddingu svědčí i hodnota bitu P(padding bit) v RTP hlavičce [4, kap. 5.1.], viz obrázek 3.3. Na obrázku 3.3 lze vidět i položku Payload type s hodnotou 120, která by mohla obsahovat dodatečné informace o způsobu kódování, jako je vzorkovací frekvence, počet kanálů atd., nicméně tato hodnota

13. Procedura umožňující získat informace o směrování dat daného hovoru.

10 3. Výběr messengerů

Obrázek 3.3: Ukázka RTP hlavičky WhatsApp paketu

spadá mezi dynamické, to znamená, že její význam může být libovolný a je interpretován samotnou aplikací. [15, kap. 6.] WhatsApp splňuje všechny výše definované předpoklady a nástroj packetizer jej podporuje. Použití kodeku Opus a jeho nastavení pro WhatsApp je popsáno v kapitole 6.

3.3.3 Facebook Messenger Facebook Messenger14 je multiplatformní aplikace vytvořena v roce 2011 společností Facebook. Mezi funkce této aplikace patří bezplatné hovory a videohovory, zasílání zpráv a souborů, end-to-end šifrování. Facebook využívá mobilní verze WebRTC s optimalizacemi pro mobilní zařízení. Mezi používané kodeky patří Opus, iSAC, iSAC Low Complexity15. Který z těchto kodeků je použit závisí na prostředí, resp. platformě, na které se nachází konkrétní instance této aplikace. Je tedy obtížné s jistotou určit, který kodek je zrovna využíván [16]. Délka jednotlivých paketů se jeví jako konstantní. To může zna- menat, že použitý kodek je v režimu CBR. V průběhu hovoru se tato délka několikrát změnila, ale ne tak, jak tomu bývá u VBR. Velikosti paketu neodpovídají žádnému násobku, jak tomu bylo u Telegramu.

14. Domovské stránky: https://www.messenger.com/ 15. Tyto kodeky jsou součástí WebRTC, viz https://developer.mozilla.org/ en-US/docs/Web/Media/Formats/WebRTC_codecs

11 3. Výběr messengerů

Obrázek 3.4: Graf reprezentující počet přijatých paketů Facebook Mes- sengeru za jednotku času (V jednom směru)

Tyto změny velikosti paketů mohou být důsledkem reakce aplikace na měnící se kvalitu internetového připojení. Oproti předchozím aplikacím jsou pakety přenášeny v méně pra- videlných intervalech, to je znázorněno na obrázku 3.4. Místa s výraz- ným poklesem přijatých paketů by naznačovala použití DTX. Je zřejmé, že Facebook Messenger nepoužívá VBR, proto jej nástroj packetizer nepodporuje.

3.3.4 Signal Signal16 je multiplatformní open-source messenger podporující zasílání zpráv a hovory o dvou účastnících. Signal byl vytvořen v roce 2014 organizací Signal Technology Foundation17, která vznikla za účelem vytvářet bezpečnou technologii chránící soukromí a svobodu projevu. U nachytaných paketů (obrázek 3.5) je vidět použití CBR, pakety jsou posílány pravidelně po dvaceti milisekundách. Autory Signalu byl záměrně použit Opus v režimu CBR právě proto, aby nebylo možné provést útok na principu článku Spot me if you can. Nemá tedy smysl podrobněji aplikaci zkoumat [17, Sekce VoIP security].

16. Domovksé stránky: https://signal.org/ 17. Viz https://signalfoundation.org/

12 3. Výběr messengerů

Obrázek 3.5: Ukázka paketů Signalu

3.3.5 Skype Skype18 je jedna z nejpopulárnějších mupliplatformních aplikací pod- porujících VoIP i hovory do veřejné telefonní sítě19. Byla vytvořená v roce 2003 a později odkoupena společností Microsoft. Během svého vývoje Skype vystřídal několik kodeků [18], momen- tálně využívá, mimo jiné, i Silk. Skype podporuje RTAudio, G.711, G.722, a Silk, ne všechny jsou ale určené pro hovor mezi dvěma uživateli (peer-to-peer) prostřednictvím VoIP. [19] Kodek Siren je určen pro konference, G.711 a G.722 jsou typicky používány pro konference, popřípadě pro PSTN. RTAudio je proprietární kodek vyvinutý a používaný společností Microsoft [20]. Kdyby jej Skype využíval, nebylo by možné podporo- vat Skype v nástroji packetizer, je však pravděpodobnější, že prefe- rovaným kodekem je Silk. Tomu napovídá například fakt, že Silk je novější, Skype jej podporuje od verze 4.0, která vyšla v roce 2009. Ve starších desktop verzích Skypu bylo možné zobrazit20, jaký kodek je používán během hovoru, tím byl typicky Silk. Skype posílá RTP pakety, ty mají proměnlivou délku, což svědčí o použití VBR. Na obrázku 3.6 je příklad paketů, podstatný je sloupec Timestamp, jeho hodnoty jsou inkrementovány vždy o 320. Tato hod-

18. Domovksé stránky: https://www.skype.com/en/ 19. Angl. PSTN - public switched telephone network 20. Viz http://www.skaip.org/features/calls/info/windows

13 3. Výběr messengerů

Obrázek 3.6: Ukázka paketů Skypu

nota udává počet vzorků, které byly zpracovány (viz rovnice 3.1) [21, kap. 4.1.]. Číslo 320 je tabulková hodnota, která odpovídá buď 20 milisekun- dám ve wideband, nebo 40 milisekundám narrowband. Jelikož jsou pa- kety odesílány přibližně co 20 milisekund, jedná se o wideband, tomu odpovídá vzorkovací frekvence 16 kHz a bitrate 8 až 30 kbps. [21, tab. 2] Za předpokladu, že Skype využívá Silk i ve verzích pro telefony, je vhodným kandidátem pro náš útok. Nástroj packetizer jej podporuje, ale pouze s kodekem Silk.

3.3.6 Viber

Viber21 je cross-platform aplikace podporující VoIP hovory a instant messaging, vznikl v roce 2010 a patří mezi nejpopulárnější messengery především v Rusku a na Ukrajině. Měnící se velikost paketů ukazuje, že je pravděpodobně použito VBR. Stejně, jako tomu bylo u Facebook Messengeru, pakety nechodí v pravidelných intervalech, viz hodnoty Delta time na obrázku 3.7.

21. Domovské stránky: https://www.viber.com/en/

14 3. Výběr messengerů

Obrázek 3.7: Ukázka paketů Viberu

V roce 2011 bylo oznámeno, že Viber využívá VoIP engine od spo- lečnosti SPIRIT22. SPIRIT podporuje širokou řadu kodeků23, nikde ale není uvedeno, který z nich je použit pro Viber. [22] Kvůli nedostatku informací o použitém protokolu a kodeku a kvůli potenciálně zastaralým informacím o použití SPIRIT není Viber vhod- ným kandidátem pro náš útok a není ani podporován nástrojem packetizer.

3.4 Shrnutí

Mezi analyzovanými aplikacemi se WhatsApp a Skype jeví jako nej- vhodnější pro replikaci útoku Spot me if you can, a to především díky dostupným informacím o nastavení jejich kodeků. Nástroj packetizer podporuje kodeky Silk a Opus, jejich použití se věnují kapitoly 5.1 a 6.1. Některé ze zkoumaných messengerů by bylo možné podrobněji analyzovat podobně, jako to popisuje článek [13]. Dosavadní způsob

22. Viz https://www.spiritdsp.com/ 23. Seznam speech kodeků SPIRIT: https://www.spiritdsp.com/products_vm/ speech-codecs/

15 3. Výběr messengerů

analýzy je snadno aplikovatelný na libovolný messenger, zejména pokud je open-source.

16 4 TIMIT Korpus

TIMIT1 je hlasový korpus vydaný v roce 1988 pro agenturu DARPA [23]. Tento korpus byl také použit autory útoku v článku [2]. Korpus obsahuje celkem 6300 nahrávek, jedná se o 10 foneticky bohatých ang- lických vět, kde každá věta je řečena 630 různými mluvčími. Ke každé nahrávce, která je uložena ve formátu .WAV náleží několik textových souborů s různými typy přepisů: ∙ typ .TXT obsahuje přepis celé věty ∙ typ .WRD obsahuje jednotlivá slova, každé na samostatném řádku ∙ typ .PHN obsahuje jednotlivé fonémy, každý na samostatném řádku Všechny tyto typy navíc obsahují na začátku každého řádku 2 celo- číselné hodnoty udávající počáteční a koncový vzorek audia. Interval určený těmito dvěma mezními hodnotami může obsahovat foném, slovo, či celou větu, podle typu souboru. [24, kap. 5.] Korpus TIMIT byl pro účely této práce byl zvolen z následujících důvodů: ∙ je veřejně dostupný2 , bez poplatku nebo nutnosti registrace ∙ formát textových i audio souborů umožňuje jednoduché zpra- cování ∙ jiné veřejně dostupné hlasové korpusy neobsahují fonetický přepis Pro zpracování korpusu TIMIT nástrojem packetizer je nutné nejprve porozumět formátu a obsahu jednotlivých souborů, které se v korpusu nachází. Následující sekce se věnují popisu a zpracování nejprve audio, pak textových souborů.

4.1 Formát WAV

WAV je formát pro ukládání audia vytvořený společnostmi Microsoft a IBM, typicky je používán pro nekomprimované audio, podporuje však různé formy, včetně komprimovaných. Obvyklá struktura sou-

1. Domovské stránky: https://catalog.ldc.upenn.edu/LDC93S1 2. Viz https://github.com/philipperemy/timit

17 4. TIMIT Korpus

boru je hlavička následovaná daty. V rámci této podkapitoly jsou definovány 2 typy hlaviček, RIFF a NIST. Samotnému obsahu audio dat se věnuje sekce 4.1.3.

4.1.1 Hlavička RIFF Ve formátu WAV bývá standardně použita hlavička RIFF, která obsa- huje informace jako je vzorkovací frekvence, počet kanálů, velikost dat, bitová hloubka a další. Tato hlavička začíná čtyřmi bajty obsahující hexadecimální hodnoty písmen RIFF, význam následujíchích bajtů je přesně daný. Celkově má tato hlavička typicky 44 bajtů, pak následují data. Alternativně může začínat RIFX, to značí ukládání dat ve for- mátu big-endian namísto little-endian. Nástroj packetizer podporuje obě varianty. [25]

4.1.2 Hlavička NIST Audio soubory korpusu TIMIT mají neobvyklý formát NIST SPHERE. Hlavička začíná osmi znaky, NIST_1A a znak nového řádku. Dalších 8 znaků je velikost hlavičky, což je 1024 bajtů. Obsah hlavičky je prostý text obsahující podobné údaje jako RIFF. Packetizer podporuje i tento formát3. [26]

4.1.3 Formát a zpracování TIMIT .WAV souborů V TIMIT je použita vzorkovací frekvence 16 kHz, jeden kanál (mono), data jsou ve formátu 16-bit PCM (viz sekce 2.2). Jeden vzorek jsou 2 bajty ve formátu little-endian, ty reprezentují celočíselnou hodnotu ve dvojkovém doplňkovém kódu. Pokud by audio obsahovalo 2 kanály (stereo), v jednom vzorku by se nacházely 4 bajty (2 pro levý a 2 pro pravý kanál). Data zbavená hlavičky je možné dát na vstup oběma použitým kodekům bez dalších transformací. V případě, že by vznikla potřeba zpracovávat data jiného formátu, bylo by nutné implementovat pří- slušnou konverzi.

3. Také existuje převodník mezi RIFF a NIST, viz https://www.ldc.upenn.edu/ language-resources/tools/sphere-conversion-tool

18 4. TIMIT Korpus 4.2 Textové soubory

Struktura textových souborů je jednotná pro všechny 3 typy (.PHN, .WRD a .TXT). Na začátku každého řádku se nachází dvě kladné, celo- číselné značky, které udávají pořadové číslo počátečního a koncového vzorku příslušného audio souboru. Následuje obsah, který se nachází v uvedeném intervalu.

4.2.1 Soubory .WRD V souborech typu .WRD jeden řádek odpovídá jednomu slovu. Jed- notlivá slova jsou vždy malými písmeny, navíc z nich byly odstraněny spojovníky, např. výraz stake-out odpovídá dvěma řádkům se slovy stake a out. Součástí korpusu je slovník všech použitých slov, včetně jejich fonetického přepisu. [24, timitdic.txt]

4.2.2 Soubory .TXT Jedná se o soubor, který obsahuje přepis celé věty, včetně velkých písmen a jiných značek, o které je .WRD soubor ochuzen. První značka má vždy hodnotu 0, druhá odpovídá poslednímu vzorku audia.

4.2.3 Soubory .PHN Obsahem .PHN souborů jsou fonémy přepsané specifickým způso- bem, který nevyužívá mezinárodní fonetickou abecedu. Použité sym- boly mohou mít až tři znaky, krom znaků značících jednotlivé typy hlásek (frikativa, nazální samohláska, polosamohláska, ...) se zde na- víc mohou vyskytovat symboly značící různé formy pauzy (pau, epi) a symbol h#, který značí začátek, konec, popřípadě událost, která není součástí mluvy. [27, phonecode.txt] Ve slovníku všech použitých slov je navíc značen primární a sekundární větný přízvuk4.

4.2.4 Zpracování textových souborů Při kódování audio dat je vždy zpracován určitý počet vzorků, např. 20 ms audia může odpovídat 320 vzorkům (viz rovnice 3.1). Jestliže

4. Znaky 1 a 2, v souborech .PHN se nevyskytují.

19 4. TIMIT Korpus

začneme na vzorku n, pak je kodekem zpracován interval [n, n + 319]. Druhý interval je obsažen v textových souborech, vždy na začátku řádku. Pokud se tyto dva intervaly prolínají, znamená to, že v paketu je zakódován daný foném. Přiřazování fonémů k paketům je jedna z hlavních funkcí pro- gramu packetizer. Níže je uvedena část jeho výstupu, na jednotlivých řádcích je vždy velikost paketu, jeden či více fonémů a jedno či více slov. Intervaly těchto fonémů a slov se překrývají s intervalem daného paketu. ... 50;n;"don’t" 58;n,ae;"don’t","ask" 73;ae;"ask" ... Zde se jedná o část výstupu pro Skype, celý výstup je uveden v příloze B.4.1. Příklad výstupu pro WhatsApp se nachází v příloze B.4.2.

20 5 Kodek Silk a jeho využití v aplikaci Skype

Tato kapitola je věnována kodeku Silk. V první části jsou stručně uve- deny jeho vlastnosti, následuje popis jeho rozhraní a možná nastavení. V poslední části kapitoly jsou popsány výchozí hodnoty pro Skype.

5.1 Kodek Silk

Silk je audio kodek původně vyvinutý společností Skype Technologies S.A.R.L pro program Skype, tato společnost byla později zakoupena firmou Microsoft [28]. Silk byl vyvinut jako náhrada za kodek SVOPC, který byl navržen především pro stolní zařízení [29]. Kodek Silk se později stal otevřeným softwarem a byl z něj vyvinut kodek Opus.

5.2 Nastavení kodeku Silk

Součástí kodeku Silk je dekodér a kodér. Pro nás je důležité nastavení kodéru, které je definované řídící strukturou1, ta je při inicializaci a kó- dování jednotlivých paketů předávána příslušným funkcím. Pomocí řídící struktury kodéru lze měnit tato nastavení [30]: ∙ API_sampleRate – vzorkovací frekvence vstupního audia, va- lidní hodnoty jsou 8000, 12000, 16000, 24000, 32000, 44100 a 48000 Hz. ∙ maxInternalSampleRate – maximální interní vzorkovací frek- vence enkodéru. Validní hodnoty jsou 8000, 12000, 16000 a 24000 Hz. Enkodér může samovolně přejít na nižší hodnotu. ∙ packetSize – počet vzorků v jednom paketu, záleží na zvolené vzorkovací frekvenci a musí odpovídat době trvání 20, 40, 60, 80 nebo 100 ms, viz rovnice 3.1. ∙ bitRate – cílová velikost datového toku během aktivního ho- voru, je to hodnota v rozmezí 5000 až 100000 bps2. ∙ packetLossPercentage – odhadovaná ztráta odchozích paketů v procentech (0 až 100), při použití FEC tento parametr ovliv- ňuje množství redundantních informací.

1. Konkrétně SKP_SILK_SDK_EncControlStruct. 2. bits per second - počet bitů za sekundu

21 5. Kodek Silk a jeho využití v aplikaci Skype

∙ complexity – udává míru kompromisu mezi kvalitou a složi- tostí kódování. Podporované hodnoty jsou 0, 1 a 2, přičemž 2 je nejkvalitnější a nejnáročnější na výpočet. ∙ useInBandFEC – zapíná in-band3 FEC (Forward Error Correction), toto schéma samoopravného kódování umožňuje posílat re- dundantní informace o dříve odeslaném paketu. Rozhodnutí, zda bude FEC použito, záleží na enkodéru a je ovlivněno něko- lika faktory, jako je zadaná velikost datového toku nebo ztráta paketů. Validní hodnoty jsou 0 a 1. ∙ useDTX – zapíná DTX (viz sekce 2.5), podporované hodnoty jsou 0 a 1.

5.3 Výchozí hodnoty pro Skype

Na základě informací z kapitoly 3.3.5 můžeme několik nastavení zafi- xovat, případně zvolit smysluplnou výchozí hodnotu. Obě vzorkovací frekvence jsou nastaveny na 16 kHz. Parametr packetSize má hodnotu 320, což znamená, že je v paketu obsaženo 20 ms audia. Zbylá nastavení je možné v nástroji packetizer změ- nit prostřednictvím argumentů programu, viz příloha B.1. Výchozí hodnota pro parametr bitRate je 30000, jelikož je to doporučená ta- bulková hodnota pro použitou vzorkovací frekvenci [21, kap. 3]. DTX je vypnuto, hodnota parametru complexity je nastavena na hodnotu 2, protože je žádoucí dosáhnout co největší kvality, pokud neexistuje omezující faktor, jako je nedostatek výkonu nebo šířky pásma. FEC je ve výchozím nastavení povolené a ztráta paketů je nastavena na nulu. Je nutné podotknout, že packet loss je v nástroji packetizer kon- stantní. Pokud by bylo potřeba měnit tuto hodnotu dynamicky, např. pro jednotlivé pakety, bylo by nutné dodatečně tuto funkcionalitu implementovat.

3. In-band zde značí, že je použit stejný kanál pro opravný kód, jako pro data. V tomto případě se jedná o Silk pakety.

22 6 Kodek Opus a jeho využití v aplikaci What- sApp

Tato kapitola popisuje kodek Opus, jsou zde stručně uvedeny jeho vlastnosti a nastavení, které podporuje. Dále je v této kapitole uve- deno, jaká nastavení jsou použita pro simulaci aplikace WhatsApp v implementaci nástroje packetizer.

6.1 Kodek Opus

Opus1 je mnohostranný open-source audio kodek, který byl navržen pro přenos hudby a hovorů po internetu [31]. Opus je vyvíjen od roku 2007 a je standardizován v RFC 6716 [3]. V principu je Opus spojení dvou kodeků, konkrétně kodeku Silk a CELT2, přičemž každý z nich je použit v jiné situaci. Silk, původně vytvořený pro Skype, je efektivnější při kódování hlasu, kdežto CELT je vhodnější pro kódování hudby a audia obecně. Je nutné dodat, že Opus obsahuje natolik modifikovanou verzi Silk kodeku, že není nijak kompatibilní se samostatným Silk kodekem, jak jej definuje standard. [3, 31, 32]

6.2 Nastavení kodéru Opus

Nastavení Opus kodéru se z části podobá Silku, není ale tak přímočaré a také lze pro Opus nastavit více parametrů. Informace o nastavení kodéru jsou čerpány z příslušné dokumentace [33]. Některé parametry je nutné zvolit už při vytváření kodéru, patří mezi ně: ∙ vzorkovací frekvence v Hz, validní hodnoty jsou 8000, 12000, 16000, 24000 a 48000 ∙ počet kanálů audia, 1 (mono) nebo 2 (stereo) ∙ application – udává zamýšlený způsob využití, zda bude kódovaný hovor, či hudba. Validní hodnoty jsou OPUS_APPLI- CATION_VOIP, OPUS_APPLICATION_AUDIO a OPUS_APPLICATION- _RESTRICTED_LOWDELAY

1. Domovské stránky: https://opus-codec.org/ 2. Z angl. Constrained Energy Lapped Transform 23 6. Kodek Opus a jeho využití v aplikaci WhatsApp

Po vytvoření instance kodéru lze nastavit další parametry pomocí speciální funkce opus_encoder_ctl, která jako první parametr bere ukazatel na již existující instanci kodéru, druhý parametr udává, co se má nastavit a na jakou hodnotu. Následuje příklad volání této funkce za účelem nastavení bitové rychlosti: opus_encoder_ctl(ptr,OPUS_SET_BITRATE(20000)); První parametr je ukazatel na kodér dříve vytvořený pomocí vo- lání funkce opus_encoder_create nebo opus_encoder_init. Druhý parametr je makro pro nastavování parametru bitrate. Přehled všech maker je uveden v již zmíněné dokumentaci, konkrétně v kapitole 4.6. Výčet nastavení podporovaných nástrojem packetizer je uveden v příloze B.2.

6.3 Výchozí hodnoty pro WhatsApp

Přestože bylo v kapitole 3.3.2 získáno mnoho informací o kódování WhatsAppu, většina nastavení není jednoznačná, proto je nutné od- hadnout smysluplné výchozí hodnoty. Většina parametrů byla pone- chána na výchozí hodnotě, kterou udává dokumentace [33, kap. 4.6.1], seznam těchto hodnot je také uveden v příloze B.2. V kapitole 3.3.2 bylo určeno, že jeden paket pokrývá 160 ms hovoru, standard kodeku Opus ovšem nedovoluje dobu delší, než je 120 ms [3, kap. 3.2.5.]. Implementace kodeku se v tomto případě striktně drží standardu a při pokusu o vytvoření 160 milisekundového pa- ketu skončí volání kodéru s chybou číslo -1, což znamená „chybný argument“. Domnívám se, že mohou existovat dva způsoby, jak je vytvářen paket WhatsAppu. Jeden z těchto způsobů vyžaduje modi- fikaci hlavičky Opus paketu. Význam této hlavičky je proto popsán v následující části.

6.3.1 Hlavička Opus paketu Validní Opus paket musí obsahovat alespoň jeden bajt, který je nazý- vaný TOC3 a udává, co obsahuje daný paket.

3. Z angl. Table of Content

24 6. Kodek Opus a jeho využití v aplikaci WhatsApp

Na prvních pěti bitech je konfigurace paketu, která udává šířku pásma, použitý režim kodéru a délku rámců4 obsažených v paketu [3, tabulka 2.]. Šestý bit signalizuje počet kanálů (mono nebo stereo), na zbylých dvou bitech je kód c udávající počet rámců v paketu. Tento kód může nabývat čtyř hodnot: ∙ c 0 – v paketu je pouze jeden rámec ∙ c 1 – v paketu jsou 2 stejně velké rámce ∙ c 2 – v paketu jsou 2 rámce o různých velikostech ∙ c 3 – libovolný počet rámců V případech c 0 a c 1 následují za TOC přímo rámce, velikost rámců lze vyvodit z celkové délky paketu. V případě c 2 jsou za TOC vloženy 1 až 2 bajty, které udávají velikost5 prvního rámce, pak následují oba rámce. V případě c 3 musí mít paket alespoň 2 bajty, druhý bajt, podobně jako TOC, obsahuje několik údajů o následujícím obsahu, označme jej B. První bit bajtu B signalizuje použití VBR, druhý bit značí, zda je použit Opus padding. Na zbylých šesti bitech, značených jako M, je uložen počet rámců v paketu. Celková doba trvání paketu, tedy počet rámců vynásobený časem jednotlivých rámců, nesmí přesahovat 120 ms, tento limit je nastaven standardem [3, kap. 3.2.5.]. Po bajtu B je v paketu uložena velikost všech rámců kromě posled- ního6, pak následují jednotlivé rámce. Za hlavičku považujeme TOC, bajt B a délky rámců.

6.3.2 Tvorba nestandardních paketů První možností je řadit několik menších Opus paketů za sebe a vytvo- řit tak jeden RTP payload. Může se jednat například o 8 paketů, kde každý reprezentuje 20 ms audia, nebo o 2 pakety po 80 milisekundách. Hlavička jednotlivých paketů zůstává nezměněná. Případný dekodér by data mohl zpracovat přímo bez dalších změn. Druhou možností je upravit hlavičku paketu tak, aby obsahovala rámce o celkovém trvání 160 ms, to vyžaduje „manuální“ sestavení

4. V kontextu Opusu je paket složen z jednoho nebo více rámců, jedná se o data reprezentující úsek audia o dané délce. 5. Zda je velikost uložena na 1 nebo 2 bajtech lze vyvodit z hodnoty prvního bajtu [3, kap. 3.2.1.]. 6. M-1 velikostí, každá na 1-2 bajtech, poslední velikost je dána implicitně.

25 6. Kodek Opus a jeho využití v aplikaci WhatsApp

rámců z několika menších paketů a vytvoření příslušného bajtu B. Uvažme 2 pakety o 80 ms, oba nechť mají kód 3 a obsahují 4 rámce po 20 ms. Nový paket pak bude obsahovat stejný TOC, jako jeden z těchto paketů, bajt B bude značit, že v paketu je celkem 8 rámců, pak bude následovat 7 velikostí rámců a nakonec samotné rámce. Při dekódování by bylo nutné data rozdělit, jelikož by standardní dekodér označil tento paket za chybný. V nástroji packetizer jsou podporovány obě varianty, viz kap. 7.

26 7 Návrh a implementace nástroje packetizer

Tato kapitola pojednává o nástroji packetizer, což je projekt obsahující několik spustitelných souborů. V následujícím textu je popsán účel těchto programů, smysl jejich výstupu a způsob použití. Závěr kapitoly se věnuje technické stránce implementace a použitým knihovnám. Při sestavení nástroje packetizer vzniknou ve složce modules tři spustitelné soubory, konkrétně encoder_skype, encoder_whatsapp a packetizer. První dva zmíněné programy mají stejný účel i způsob použití. Programy slouží k zakódování audia kodekem příslušného messengeru a je jim věnována následující sekce.

7.1 Programy encoder_skype a encoder_whatsapp

Díky tomu, že jsou některá nastavení pro daný messenger neměnná a u zbytku jsou zvoleny smysluplné výchozí hodnoty, je možné jed- noduše použít daný kodek a zkoumat jeho výstup. Aplikacím musí být zadán parametr --input, což je cesta k .WAV souboru, který je následně zpracován. Aplikace vypíší na standardní výstup velikosti vytvořených paketů, pokud je navíc přítomen přepínač -c, za délkou každého paketu následuje jeho obsah hexadecimálně. Použití programu encoder_skype je přímočaré, podporovaná na- stavení jsou vysvětlena v kapitole 5.2 a jejich výčet je uveden v příloze B.1. Příklad výstupu se nachází v příloze B.5. Program encoder_whatsapp má navíc 2 parametry, konkrétně --frame-size a --join. První parametr udává velikost rámce v mi- lisekundách. Jelikož je pro Opus maximální velikost paketu 120 ms, je vytvořeno několik menších paketů1, které jsou následně spojeny do jednoho paketu o délce 160 ms. Smysluplné hodnoty parametru --frame-size jsou 20, 40 a 80. Způsob, jak jsou rámce spojeny, je ovliv- něn parametrem --join, který může nabývat hodnot 1 nebo 0. Způsob spojování je popsán v kapitole 6.3.2 a pro úplnost je zde uveden pří- klad, na kterém lze pozorovat vliv těchto parametrů.

1. Ty jsou zde označovány jako rámce.

27 7. Návrh a implementace nástroje packetizer

7.1.1 Příklad výstupu s parametrem -j 0 Začátek výstupu s parametry -c -i SA2.WAV -j 0: 254,4b88181d1f2020221b0c9252886f427dd... Prvních 5 bitů z bajtu 4b udává konfiguraci 9 (SILK-only Wideband 20 ms), následující bit značí 1 kanál (mono), zbylé 2 bity udávají kód c 3 (libovolné množství rámců v paketu). Následující byte s hodnotou 88 pak určuje, že je použito VBR, není přítomný padding a v paketu se nachází 8 rámců.

7.1.2 Příklad výstupu s parametrem -j 1 Začátek výstupu s parametry -c -i SA2.WAV -j 1: 253,480c9252886f427ddb4e418aba3896036... Podle prvního bajtu má paket podobnou konfiguraci, jako v před- chozím případě. Liší se pouze kód c, zde má hodnotu 0, což značí, že v paketu je pouze 1 rámec, který pokrývá 20 ms. Příklady celých výstupních paketů lze nalézt v příloze B.6, příloha B.2 obsahuje podporovaná nastavení programu.

7.2 Použití a výstup programu packetizer

Program packetizer využívá jak kodek Opus, tak i Silk. Nastavení pro tyto kodeky jsou stejná, jako tomu bylo u dříve popsaných programů. Parametr --input má v programu packetizer jiný význam, než v předchozích případech. Hodnotou tohoto parametru je cesta k adre- sáři, který obsahuje čtveřice souborů .WRD, .PHN, .TXT a .WAV. Tento adresář je procházen rekurzivně, program tedy zpracovává všechny čtveřice, které se nachází v některých z podsložek adresáře. Jestli má být vytvářen výstup pro Skype, nebo WhatsApp, je ur- čeno --out-whatsapp a --out-skype. Hodnotou těchto parametrů je adresář, který bude obsahovat výsledné .CSV soubory. Pro správné fungování programu packetizer musí být alespoň jeden z těchto parametrů uveden. Formát výstupu byl již popsán v kapitole 4.2.4 a proto zde není znova uváděn. Při zpracovávání podadresářů není adresářová struk- tura pro výstup kopírována, původní umístění vstupní čtveřice sou- borů je zachováno v názvu výstupních souborů.

28 7. Návrh a implementace nástroje packetizer

Nechť vstupním parametrem --input je cesta k adresáři s názvem TIMIT, který obsahuje podadresáře TEST/DR1/FAKS0/, přičemž nej- hlubší složka obsahuje čtveřici souuborů s názvem SA2. Dále nechť parametr --out-skype má hodnotu out-skype. po spuštění programu packetizer s uvedenými parametry vznikne složka out-skype se sou- borem TEST-DR1-FAKS0-SA2.CSV.

7.3 Použité technologie

Nástroj packetizer byl implementován v jazyce C++17. Pro tvorbu projektu byl použit CMake2. Projekt má několik závislostí, které jsou zde uvedeny včetně jejich účelu: ∙ Boost3 – vyhodnocování argumentů programu ∙ PEGTL4 – zpracování textových souborů TIMIT korpusu ∙ Opus5 – implementace kodeku Opus ∙ Silk6 – implementace kodeku Silk ∙ Catch27 – framework pro psaní testů Součástí projektu je soubor README.md, který obsahuje informace potřebné pro zprovoznění projektu, konkrétní verze použitých kniho- ven a popis adresářové struktury projektu. Soubor je součástí elektro- nické přílohy.

2. Viz https://cmake.org/. 3. Viz https://www.boost.org/. 4. Viz https://github.com/taocpp/PEGTL. 5. Viz https://github.com/xiph/opus.git. 6. Viz https://github.com/ploverlake/silk.git. 7. Viz https://github.com/catchorg/Catch2.

29 8 Závěr

Cílem této práce bylo analyzovat několik populárních VoIP messen- gerů a vybrat takové, které jsou potenciálně zranitelné útokem podle článku [2]. Pro tento útok je nutná znalost audio kodeku dané apli- kace. Po průzkumu vybraných messengerů a analýze odchycených paketů byl zjištěn kodek pro aplikace Skype a WhatsApp, včetně jeho důležitých parametrů. V rámci této práce jsem implementoval nástroj packetizer, který umožňuje kódování audio souborů tak, jako to dělá Skype nebo What- sApp během hovoru. Díky jednoduché struktury projektu je nástroj snadno rozšiřitelný o další messengery včetně takových, jejichž ko- dek nebyl nástrojem dosud použit. Nástroj také umožňuje vytvářet data nutná pro trénování strojového učení. Tato výstupní data mají přímočarou strukturu a lze je díky tomu jednoduše zpracovat. Na základě výstupů programu packetizer a zjištěného nastavení parametrů kodeků se domnívám, že útok je proveditelný na oba analy- zované messengery. Dále se domnívám, že pakety WhatsAppu, které mají dlouhou dobu trvání 160 ms, se mohou ukázat jako problematické, jelikož obsahují příliš mnoho dat na to, aby bylo možné jednoznačně určit obsah paketu na základě jeho délky. Předpokládám, že v návaznosti na tuto práci proběhne vývoj onoho strojového učení a že útok bude pro alespoň jeden z messengerů úspěšný. Existuje mnoho VoIP messengerů, které by bylo možné analyzovat obdobným způsobem jako v této práci. Pro účely strojového učení by mohl nástroj packetizer implementovat rozhraní pro jazyk Python, případně další. Součástí budoucího vývoje by mohla být podpora více hlasových korpusů.

30 Bibliografie

1. THERMOS, P.;TAKANEN, A. Securing VoIP Networks, Threats, Vul- nerabilities, and Countermeasures [online]. 2007 [cit. 26. dub. 2020]. ISBN 978-0321437341. Dostupné z: https://www.researchgate. net/publication/318707676_Securing_VoIP_Networks_Threats_ Vulnerabilities_and_Countermeasures. 2. WRIGHT, C. V.; BALLARD, L.; COULL, S. E.; MONROSE, F.; MASSON, G. M. Spot me if you can: Uncovering Spoken Phrases in Encrypted VoIP Conversations [online]. 2008 [cit. 10. led. 2020]. Dostupné z: https://www.cs.jhu.edu/~cwright/oakland08. pdf. 3. VALIN, JM.; VOS, K.; TERRIBERRY, T. Definition of the Opus Audio Codec [Internet Requests for Comments]. RFC Editor, 2012 [cit. 7. červ. 2020]. ISSN 2070-1721. Dostupné z: https://tools.ietf. org/html/rfc6716. RFC. RFC Editor. 4. SCHULZRINNE, H.; CASNER, S.; FREDERICK, R.; JACOBSON, V. RTP: A Transport Protocol for Real-Time Applications [Internet Requests for Comments]. RFC Editor, 2003 [cit. 20. květ. 2020]. ISSN 2070-1721. Dostupné z: https://tools.ietf.org/html/ rfc3550. STD. RFC Editor. 5. CHU, Wai C. algorithms: Foundation and evolution of standardized coders [online]. John Wiley & Sons, Inc., 2003 [cit. 7. červ. 2020]. ISBN 0-471-37312-5. Dostupné z: http : / / dsp - book.narod.ru/ChuSCA.pdf. 6. CONTRIBUTORS, Wikipedia. Constant bitrate — Wikipedia, The Free Encyclopedia [online]. 2014 [cit. 7. červ. 2020]. Dostupné z: https://en.wikipedia.org/w/index.php?title=Constant_ bitrate&oldid=620882707. 7. Telegram Desktop – Official Messenger [online] [cit. 23. ún. 2020]. Dostupné z: https://github.com/telegramdesktop/tdesktop. 8. Mobile Protocol: Detailed Description [online] [cit. 23. ún. 2020]. Do- stupné z: https://core.telegram.org/mtproto/description. 9. Two Billion Users: Connecting the World Privately [online]. 2020 [cit. 9. dub. 2020]. Dostupné z: https://blog.whatsapp.com/two- billion-users-connecting-the-world-privately.

31 BIBLIOGRAFIE

10. HANCKE, P. What’s up with WhatsApp and WebRTC? [online]. Ed. HART, C. 2015 [cit. 15. květ. 2020]. Dostupné z: https:// webrtchacks.com/whats-up-with-whatsapp-and-webrtc/. 11. WhatsApp Encryption Overview: Technical white paper [online]. What- sApp, 2017 [cit. 16. květ. 2020]. Dostupné z: https://scontent. whatsapp.net/v/t61.22868-34/68135620_760356657751682_ 6212997528851833559_n.pdf/WhatsApp-Security-Whitepaper. pdf?_nc_sid=41cc27&_nc_oc=AQmJVkOLDj96ty_cf_oyGPkK0b26SuT- MJYjowsUiKcadztXnCDuwhwhtVS - eFetQno & _nc _ ht = scontent . whatsapp . net & oh = 207d1f1704bba30c733e15e083efb82a & oe = 5EE29D53. 12. BAUGHER, M.; MCGREW, D.; NASLUND, M.; CARRARA, E.; NORRMAN, K. The Secure Real-time Transport Protocol (SRTP) [Internet Requests for Comments]. RFC Editor, 2004 [cit. 20. květ. 2020]. ISSN 2070-1721. Dostupné z: https://tools.ietf.org/ html/rfc3711. RFC. RFC Editor. 13. SCHIRRMACHER, M. Analyzing WhatsApp Calls with Wireshark, radare2 and Frida [online]. 2020 [cit. 16. květ. 2020]. Dostupné z: https://medium.com/@schirrmacher/analyzing- whatsapp- calls-176a9e776213. 14. GEER, T. WhatsApp incoming call trace [online]. 2015 [cit. 15. květ. 2020]. Dostupné z: https://gist.github.com/tvandergeer/ ecc1380641801d4c7c0f. 15. SCHULZRINNE, H.; CASNER, S. RTP Profile for Audio and Vi- deo Conferences with Minimal Control [Internet Requests for Com- ments]. RFC Editor, 2003 [cit. 20. květ. 2020]. ISSN 2070-1721. Dostupné z: https://tools.ietf.org/html/rfc3551. STD. RFC Editor. 16. HANCKE, P. Facebook Messenger likes WebRTC [online]. Ed. HART, C. 2015 [cit. 15. květ. 2020]. Dostupné z: https://webrtchacks. com/facebook-webrtc/. 17. MARLINSPIKE, M. Video calls for Signal now in public beta [online]. 2017 [cit. 9. květ. 2020]. Dostupné z: https://signal.org/blog/ signal-video-calls-beta/. 18. COURTNEY, J. Skype 3.2 Sets New Standard for Sound Quality [on- line]. 2007 [cit. 10. dub. 2020]. Dostupné z: https://web.archive. org/web/20080201032937/http://skypejournal.com/blog/ 2007/03/skype_32_sets_new_standard_for.html.

32 BIBLIOGRAFIE

19. Plan network requirements for Skype for Business [online]. 2020 [cit. 10. dub. 2020]. Dostupné z: https : / / docs . microsoft . com / en- us/skypeforbusiness/plan- your- deployment/network- requirements/network-requirements. 20. Overview of the Microsoft RTAudio Speech codec [online]. 2008 [cit. 10. dub. 2020]. Dostupné z: https://www.microsoft.com/en- us/download/details.aspx?id=7515. 21. SPITTKA, J.; ASTROM, H.; VOS, K. RTP Payload Format and File Storage Format for SILK Speech and Audio Codec [online]. 2011 [cit. 10. dub. 2020]. Dostupné z: https://github.com/ploverlake/ silk/blob/master/src/SILK_SDK_SRC_FIX_v1.0.9/doc/SILK_ RTP_PayloadFormat.pdf. 22. Viber Turns to SPIRIT for High Quality HD Mobile VoIP Calling [online]. 2011 [cit. 21. květ. 2020]. Dostupné z: https://www. spiritdsp.com/news/140-viber-turns-to-spirit-for-high- quality-hd-mobile-voip-calling/. 23. WIKIPEDIA CONTRIBUTORS. TIMIT — Wikipedia, The Free En- cyclopedia [online]. 2020 [cit. 7. břez. 2020]. Dostupné z: https: / / en . wikipedia . org / w / index . php ? title = TIMIT & oldid = 958778537. 24. GAROFOLO, John S.; LAMEL, Lori F.; FISHER, William M.; FIS- CUS, Jonathan G.; PALLETT, David S.; DAHLGREN, Nancy L.; ZUE, Victor. The DARPA TIMIT Acoustic-Phonetic Continuous Spe- ech Corpus [online]. Linguistic Data Consortium, Philadelphia, 1993 [cit. 7. břez. 2020]. Dostupné z: https : / / catalog . ldc . upenn.edu/docs/LDC93S1/timit.readme.html. 25. WAVE PCM soundfile format [online] [cit. 7. břez. 2020]. Dostupné z: http://soundfile.sapp.org/doc/WaveFormat/. 26. JANET, Stan. NIST SPHERE Header Structure [online]. 1991 [cit. 7. břez. 2020]. Dostupné z: https://www.isip.piconepress. com/projects/speech/software/tutorials/production/fundamentals/ v1.0/section_02/text/nist_sphere.text. 27. GAROFOLO, John S.; LAMEL, Lori F.; FISHER, William M.; FIS- CUS, Jonathan G.; PALLETT, David S.; DAHLGREN, Nancy L.; ZUE, Victor. Documentation for TIMIT [online]. Linguistic Data Consortium, Philadelphia, 1993 [cit. 7. břez. 2020]. Dostupné z: https://catalog.ldc.upenn.edu/docs/LDC93S1/.

33 BIBLIOGRAFIE

28. CONTRIBUTORS, Wikipedia. SILK — Wikipedia, The Free Encyclo- pedia [online]. 2020 [cit. 28. červ. 2020]. Dostupné z: https://en. wikipedia.org/w/index.php?title=SILK&oldid=957381243. 29. Skype’s new super-wideband codec [online]. 2009 [cit. 28. červ. 2020]. Dostupné z: https://wirevolution.com/2009/01/13/skypes- new-super-wideband-codec/. 30. Silk SDK API [online]. 2012 [cit. 10. dub. 2020]. Dostupné z: https://github.com/ploverlake/silk/blob/master/src/ SILK_SDK_SRC_FIX_v1.0.9/doc/SILK_SDK_API.pdf. 31. Opus FAQ [online]. 2012 [cit. 21. červ. 2020]. Dostupné z: https: //wiki.xiph.org/OpusFAQ. 32. VALIN, JM.; VOS, K.; TERRIBERRY, T.; MAXWELL, G. The Opus Codec [online]. 2013 [cit. 21. červ. 2020]. Dostupné z: https:// opus-codec.org/static/presentations/opus_ccbe2013.pdf. 33. Opus 1.2 [online]. 2017 [cit. 24. červ. 2020]. Dostupné z: https: //opus-codec.org/docs/opus_api-1.2.pdf.

34 A Elektronická příloha

Elektronickou přílohu tvoří archiv attachments.zip, který obsahuje zdrojové kódy nástroje packetizer, pakety zkoumané v kapitole 3 a ukázkovou čtveřici souborů SA2.PHN, SA2.WRD, SA2.TXT a SA2.WAV vyňatou z korpusu TIMIT1. Tento archiv je dostupný na adrese https://is.muni.cz/th/dw60j/.

1. Konkrétně se jedná o soubory v adresáři TIMIT/TEST/DR1/FAKS0/.

35 B Nástroj packetizer

B.1 Možnosti programu encoder_skype

Výstup programu encoder_skype s parametrem --help. The encoder_skype program Program takes. file as an input, creates packets as Skype would.

Options: -c[--content] Print content of each packet in hex -i[--input] arg Path to input audio file -h[--help] Print help message

SILK parameters: --silk-complexity arg (=2) Set encoder complexity (0 - 2) --silk-bitrate arg (=30000) Set encoder bitrate( inb/s) --silk-inband-fec arg(=1) 0= Disable inband FEC --silk-packet-loss arg (=0) Packet loss percentage, 0-100 --silk-dtx arg(=0) 0= DisableDTX

B.2 Možnosti programu encoder_whatsapp

Výstup programu encoder_whatsapp s parametrem --help. The encoder_whatsapp program Program takes.wav file as an input, creates packets as WhatsApp would.

Options: -c[--content] Print content of each packet in hex -i[--input] arg Path to input audio file

36 B. Nástroj packetizer

-j[--join] arg (=0) Select’join’ implementation, 0 or1 -f[--frame-size] arg (=20)OPUS encoder frame size, must be divisor of 160 -h[--help] Print help message

OPUS parameters: --opus-complexity arg (=10) Set encoder complexity (0 - 10) --opus-bitrate arg (=20000) Set encoder bitrate(in bp/s) --opus-vbr arg(=1) 0=CBR,1= VBR --opus-vbr-constraint arg(=1) 0= unconstrainedVBR --opus-max-bandwidth arg (=FULLBAND) Set max bandwidth, supported values below --opus-bandwidth arg (=AUTO) Set bandwidth, supported values below --opus-inband-fec arg(=0) 0= Disable inbandFEC --opus-packet-loss arg (=0) Packet loss percentage, 0-100 --opus-dtx arg(=0) 0= Disable DTX

OPUS bandwidth settings: -AUTO -FULLBAND -MEDIUMBAND -NARROWBAND -SUPERWIDEBAND -WIDEBAND

The’join’ implementation options: 0 - Single packet header, modified to containt 160 ms of audio, goes against the standard

37 B. Nástroj packetizer

1 - Simply add packets after one another, this results in multiple headers, complies with standard

B.3 Možnosti programu packetizer

Výstup programu packetizer s parametrem --help. The packetizer program

This program is capable of encoding.WAV files using OPUS orSILK codec to get packets. Output is.CSV file which contains packet lenghs and phonemes inside those packets. In order to get WhatsApp(uses OPUS) or Skype(usesSILK) output, specify corresponding output directory. Porgram expects input files in the same format as inTIMIT corpus, that is.WAV,.TXT,.PHN and.WRD file, each named the same, program iterates specified input directory recursively, searching for these quartets. Bellow are all the available options for both messengers, if you do not enable one of them, the corresponding options will have no effect.

Options: -i[--input] arg Path to corpus directory --out-whatsapp arg WhatsApp output directory --out-skype arg Skype output directory -h[--help] Print help message

OPUS parameters: --opus-complexity arg (=10) Set encoder complexity (0 - 10) --opus-bitrate arg (=20000) Set encoder bitrate(in bp/s)

38 B. Nástroj packetizer

--opus-vbr arg(=1) 0=CBR,1= VBR --opus-vbr-constraint arg(=1) 0= unconstrainedVBR --opus-max-bandwidth arg (=FULLBAND) Set max bandwidth, supported values below --opus-bandwidth arg (=AUTO) Set bandwidth, supported values below --opus-inband-fec arg(=0) 0= Disable inbandFEC --opus-packet-loss arg (=0) Packet loss percentage, 0-100 --opus-dtx arg(=0) 0= Disable DTX

Additional WhatsApp options: -j[--join] arg (=0) Select’join ’ implementation, 0 or1 -f[--frame-size] arg (=20)OPUS encoder frame size, must be divisor of 160

SILK parameters: --silk-complexity arg (=2) Set encoder complexity (0 - 2) --silk-bitrate arg (=30000) Set encoder bitrate(inb/s) --silk-inband-fec arg(=1) 0= Disable inbandFEC --silk-packet-loss arg (=0) Packet loss percentage, 0-100 --silk-dtx arg(=0) 0= Disable DTX

OPUS bandwidth settings: -AUTO -FULLBAND -MEDIUMBAND -NARROWBAND -SUPERWIDEBAND -WIDEBAND

39 B. Nástroj packetizer

The’join’ implementation options: 0 - Single packet header, modified to containt 160 ms of audio, goes against the standard 1 - Simply add packets after one another, this results in multiple headers, complies with standard

B.4 Příklady výstupů programu packetizer

Výstup programu packetizer kde vstupem je čtveřice souborů SA2.PHN, SA2.WRD, SA2.TXT a SA2.WAV.

B.4.1 Výstup pro Skype ve výchozím nastavení

# Sentence:"Don’t ask me to carry an oily rag like that." # Packets: 181, Samples: 58061, Samples per packet: 320 28;h# 28;h# 32;h# 35;h# 30;h# 33;h# 32;h# 45;h# 47;h# 38;h# 37;h# 43;h# 54;h# 53;h# 63;h# 62;h# 65;h# 59;h# 62;h# 52;h#

40 B. Nástroj packetizer

53;h# 45;h# 50;h# 46;h# 49;h# 44;h# 45;h# 47;h# 41;h# 39;h# 42;h# 40;h# 36;h# 34;h# 35;h# 34;h# 30;h# 30;h# 32;h# 31;h# 30;h# 50;h#,d,ow;"don’t" 73;ow;"don’t" 59;ow;"don’t" 63;ow;"don’t" 65;ow;"don’t" 63;ow;"don’t" 64;ow,n;"don’t" 50;n;"don’t" 58;n,ae;"don’t","ask" 73;ae;"ask" 51;ae;"ask" 46;ae;"ask" 51;ae;"ask" 57;ae;"ask" 66;ae;"ask" 76;ae;"ask" 90;ae,s;"ask" 72;s;"ask" 64;s;"ask"

41 B. Nástroj packetizer

72;s;"ask" 65;s;"ask" 50;s,epi;"ask" 28;epi 33;epi 55;epi 63;epi,m;"me" 68;m,iy;"me" 69;iy;"me" 52;iy;"me" 47;iy;"me" 55;iy;"me" 62;iy,tcl;"me","to" 35;tcl;"to" 60;tcl,t,ix;"to" 67;ix;"to" 62;ix;"to" 34;ix,kcl;"to","carry" 31;kcl;"carry" 53;kcl,k;"carry" 70;k;"carry" 65;k;"carry" 82;k,eh;"carry" 64;eh;"carry" 54;eh;"carry" 53;eh;"carry" 53;eh;"carry" 53;eh,r;"carry" 66;r;"carry" 59;r;"carry" 63;r;"carry" 52;r;"carry" 73;r;"carry" 69;r,iy;"carry" 62;iy;"carry" 45;iy;"carry" 36;iy;"carry" 56;iy,ix;"carry","an" 62;ix;"an" 66;ix;"an"

42 B. Nástroj packetizer

70;ix,n;"an" 59;n;"an" 66;n;"an" 68;n,oy;"an","oily" 66;oy;"oily" 57;oy;"oily" 57;oy;"oily" 63;oy;"oily" 75;oy;"oily" 72;oy;"oily" 72;oy;"oily" 53;oy;"oily" 58;oy,l;"oily" 69;l;"oily" 65;l;"oily" 55;l;"oily" 74;l;"oily" 74;l,iy;"oily" 73;iy;"oily" 56;iy;"oily" 49;iy;"oily" 51;iy;"oily" 57;iy,r;"oily","rag" 59;r;"rag" 69;r;"rag" 73;r;"rag" 77;r;"rag" 73;r,ae;"rag" 67;ae;"rag" 56;ae;"rag" 54;ae;"rag" 47;ae;"rag" 44;ae;"rag" 53;ae;"rag" 67;ae;"rag" 59;ae,gcl;"rag" 40;gcl;"rag" 40;gcl;"rag" 35;gcl,g;"rag" 65;g;"rag"

43 B. Nástroj packetizer

67;g,l;"rag","like" 67;l;"like" 75;l;"like" 81;l,ay;"like" 76;ay;"like" 84;ay;"like" 72;ay;"like" 68;ay;"like" 37;ay,kcl;"like" 32;kcl;"like" 35;kcl,k;"like" 70;k;"like" 62;k;"like" 60;k,dh;"like","that" 58;dh;"that" 50;dh;"that" 66;dh,ae;"that" 69;ae;"that" 67;ae;"that" 68;ae;"that" 66;ae;"that" 64;ae;"that" 65;ae;"that" 69;ae;"that" 63;ae;"that" 40;ae,tcl;"that" 41;tcl;"that" 44;tcl;"that" 35;tcl;"that" 29;tcl;"that" 38;tcl;"that" 37;tcl,h#;"that" 48;h# 50;h# 48;h# 47;h# 50;h# 50;h# 44;h# 45;h#

44 B. Nástroj packetizer

39;h# B.4.2 Výstup pro WhatsApp ve výchozím nastavení

# Sentence:"Don’t ask me to carry an oily rag like that." # Packets: 22, Samples: 58061, Samples per packet: 2560 253;h# 307;h# 372;h# 303;h# 247;h# 322;h#,d,ow,n;"don’t" 320;n,ae;"don’t","ask" 357;ae,s,epi;"ask" 328;epi,m,iy;"me" 330;iy,tcl,t,ix,kcl,k;"me","to","carry" 339;k,eh,r;"carry" 349;r,iy;"carry" 355;iy,ix,n,oy;"carry","an","oily" 368;oy;"oily" 377;oy,l,iy;"oily" 381;iy,r,ae;"oily","rag" 305;ae,gcl;"rag" 343;gcl,g,l,ay;"rag","like" 319;ay,kcl,k;"like" 344;k,dh,ae;"like","that" 320;ae,tcl;"that" 290;tcl,h#;"that" B.5 Příklad výstupu programu encoder_skype

Výstup programu encoder_skype s parametrem -c, kde vstupem (-i) je soubor SA2.WAV. 28,a78951589e2efd96dce59f9ebf73ab90f2675b78c38e03 162bf4760f 28,a8a5ff273eec0d2de05e9e3dc7bd33ad994e3d9caed066 69ee18d73f 32,a8a5ff266676deecb6ca8e45efa80a71fa21bf37431ce6 b5e0f490752fabeb4f

45 B. Nástroj packetizer

35,a8a5a24775bacb3d8a0b6ba0a8dce3b37bf5df646a527f 9cd1206c9efeba2a2552a39f 30,a8a25af03361fd432a748e4f8e3c20192d5f1767349660 0d2336f691d343 33,a8a5fe8282f9c52e44dc76e939651b5f723b23810b14e7 106db304b9aad45603bf 32,a8bc8fd544947aba0f72f308700ef4f17b411c77fc2d9c 948ac2533307ab0ea7 45,a4c66d46ede1a9743d717ee86f0199091358e983ee5562 6b92f21e046edf976fd1a9b430a90a67985fdaa019ff 47,ac17a82c95af61205d651ae36858d8e736a929e4db2da5 c15e4794294a465550c74166020565775271e8fdcb01a5 ff 38,a938efd6c1c043607d5af8546250e70503e9a8866f7f05 18ab4c32ce5652bf6df342b7bd1fff

B.6 Příklad výstupu programu encoder_whatsapp

Výstupy programu encoder_whatsapp s parametrem -c, kde vstupem (-i) je soubor SA2.WAV. S parametrem -j 0: 254 ,4b88181d1f2020221b0c9252886f427ddb4e418aba 3896036fffd008295eddbbc60d2ccb329f97c790a022cf d3ba9303734415f080822fa3989c2f4e20fc0d2c938ab1 b28aa41dcedc3b7f881e6ea9faa782e7f9fbab34329b46 d9e0ef0d2c8846ffdb7832c418f71ad51726d1330fa8e6 0a4e1406f8e6748c1f23a8800d2cbb8116caf67f3e9305 b8e850e1304ab1606d817560c8f63d653cb732b7ec0d2c c001fa2d72aec60623848a4c4da79f438d745fd59bd9d2 5040f1deac506789100d408a2e51ba3ee78de97f4d19b4 0569d68c155a42dac3a28219e080560467cf580145056e 1f8e8ff770666116fd32d848bc53c25601fd1b67ce1dfa 65a963 308 ,4b8822212227251e2d807206e63055a3b10bdceccb fe5f6204ce28bb94105593219572ffef39832e2541c812 309e017e5efa62b0365b0776f388e3d0f24505c22cff97 0b733304e1c41e20fa1274670e0739d33de1c63e26e49d 08fb21bc427d74ff5218a41180e0f5ecc8f70dac15e684 55005f042c099db1fbec40d7a93fe7455f05ad9943cd18

46 B. Nástroj packetizer c99940dabcedd7aa2abd5379b08047981e66284b048158 cfa91bbb802cdfa960c3292a98332fc33f00974b63e9e6 96aaa450823601bd3d624cdb106d02c9e75273b934718b f299e28b9fe19dbfe1a45a81676163d931abf6b7dfcb44 5ebf8aec1ec9b33081cdf08368c53131759143b8da406b 7ad1dec8ef09a32bc34489f9097b9cec20c5362ef3159b dc5d900fa206e7bd2c0008ae8008b24418647dcb4750ff f69027053c302f3ac835a4 373 ,4b88302f372a2c2d2c8a017175d215c3fb2d589b50 a6f052ec2ac66d25ed4431d177699cf6d2c1cc306fa57c 27fb90f2441978d8136ea2678089f3d553baeb29495343 2c9e9342287e817039f6b209611143b63f7832ae38ffdd 64d1930601e7bfb1a84baaffcc12899ee5f287919399b4 53a82073608fbd4aea964bcb39b946dca51e62f2385c63 39c66241a63c84782de46f4adef693cf1f653ae307e53a 89e01061a610230931fb988a58fb5eb6438dfdf3a62746 89e48904c849a36f348e3e6ef3c0bbe2abab488983f8cd 394a41362c6e7743994cc40a73af57c17ab6383956ed74 598dae448bd3603365ea9acf10d53ae0e0890ff061a5b4 b342da11828576c9fdcd97c722e596fc08ec966834b4ac 78013698e8a33831d40594933884506088c0dfa40742e0 bc894d086429ea134ecc95f0306561fcea8bf7ebac4579 f63ed3a6dd6290796eebeafda3c02b2da1b0fb0f427afd 11998ed25a9a486a17713a226c4b11765226a0d3210ea1 d860402d979cd6

S parametrem -j 1:

253 ,480c9252886f427ddb4e418aba3896036fffd00829 5eddbbc6480d2ccb329f97c790a022cfd3ba9303734415 f080822fa3989c2f4e20fc480d2c938ab1b28aa41dcedc 3b7f881e6ea9faa782e7f9fbab34329b46d9e0ef480d2c 8846ffdb7832c418f71ad51726d1330fa8e60a4e1406f8 e6748c1f23a880480d2cbb8116caf67f3e9305b8e850e1 304ab1606d817560c8f63d653cb732b7ec480d2cc001fa 2d72aec60623848a4c4da79f438d745fd59bd9d25040f1 deac50678910480d408a2e51ba3ee78de97f4d19b40569 d68c155a42dac3a28219e04880560467cf580145056e1f 8e8ff770666116fd32d848bc53c25601fd1b67ce1dfa65 a963 307,48807206e63055a3b10bdceccbfe5f6204ce28bb94

47 B. Nástroj packetizer

105593219572ffef39832e2541c84812309e017e5efa62 b0365b0776f388e3d0f24505c22cff970b733304e1c41e 20fa481274670e0739d33de1c63e26e49d08fb21bc427d 74ff5218a41180e0f5ecc8f70dac4815e68455005f042c 099db1fbec40d7a93fe7455f05ad9943cd18c99940dabc edd7aa2abd5379b0488047981e66284b048158cfa91bbb 802cdfa960c3292a98332fc33f00974b63e9e696aaa450 48823601bd3d624cdb106d02c9e75273b934718bf299e2 8b9fe19dbfe1a45a4881676163d931abf6b7dfcb445ebf 8aec1ec9b33081cdf08368c53131759143b8da406b7ad1 dec8ef09a32bc3444889f9097b9cec20c5362ef3159bdc 5d900fa206e7bd2c0008ae8008b24418647dcb4750fff6 9027053c302f3ac835a4 372 ,488a017175d215c3fb2d589b50a6f052ec2ac66d25 ed4431d177699cf6d2c1cc306fa57c27fb90f2441978d8 136ea267804889f3d553baeb294953432c9e9342287e81 7039f6b209611143b63f7832ae38ffdd64d1930601e7bf b1a84baaffcc1248899ee5f287919399b453a82073608f bd4aea964bcb39b946dca51e62f2385c6339c66241a63c 84782de46f4adef693cf1f653ae307e53a4889e01061a6 10230931fb988a58fb5eb6438dfdf3a6274689e48904c8 49a36f348e3e6ef3c0bbe2abab48488983f8cd394a4136 2c6e7743994cc40a73af57c17ab6383956ed74598dae44 8bd3603365ea9acf10d53ae0e048890ff061a5b4b342da 11828576c9fdcd97c722e596fc08ec966834b4ac780136 98e8a33831d4059493388450604888c0dfa40742e0bc89 4d086429ea134ecc95f0306561fcea8bf7ebac4579f63e d3a6dd6290796eebeafda3c0482b2da1b0fb0f427afd11 998ed25a9a486a17713a226c4b11765226a0d3210ea1d8 60402d979cd6

48