Deanonimizacja głosu na przykładzie zeznań świadków w komisji ds. Amber Gold

Jako krótkofalowiec czasem zajmuję się analizą dźwięków. Zwykle jest to na potrzeby łączności radiowej, ale wyrabia to swoistą czujność na zagadnienia związane z dźwiękiem, która przydaje się w niecodziennych okolicznościach.

Od wielu miesięcy mają miejsce dwa spektakle polityczne: komisja badająca aferę reprywatyzacyjną i komisja badająca aferę Amber Gold. Ta ostatnia komisja jest ciekawa, ponieważ prowadzi przesłuchania niejawnych agentów ABW. Przesłuchania te są anonimizowane, urządzenie anonimizujące obsługiwane jest przez techników ABW.

O autorze Jacek Lipkowski: Z wykształcenia mgr inż. chemik, ale od zawsze byłem związany z informatyką. Bezpieczeństwo informatyczne stało się moim hobby od momentu pierwszego dostępu do systemów sieciowych (w latach 90). Z czasem i jedno, i drugie hobby przerodziło się w pracę. Czas wolny wypełniam innym hobby – krótkofalarstwem (znak wywoławczy SQ5BPF).

Rzadko trafia się okazja, aby przyjrzeć się technice używanej przez służby. Dodatkowo materiały z komisji są z założenia dostępne publicznie, więc możemy je swobodnie analizować i publikować wyniki.

Na cechy charakterystyczne głosu składa się nie tylko jego wysokość, ale też sposób akcentowania, używanie charakterystycznych zwrotów itp. Anonimizację robi się albo w sposób uproszczony, przetwarzając głos przez jakiś algorytm go modyfikujący (w najprostszym wypadku przez obniżenie lub podwyższenie tonu głosu). Można również użyć wokodera, czyli systemu do analizy dźwięku, głównie mowy, zwykle dającego informację o częstotliwościach i amplitudach harmonicznych w głosie oraz umożliwiającego syntezę dźwięku z takich informacji (dla celów anonimizacji po odpowiednim przetworzeniu, jest to też jedna z metod stratnej kompresji mowy). Sposób bardziej zaawansowany, mający na celu usunięcie elementów mowy umożliwiających identyfikację, może polegać na czytaniu przez lektora lub syntezator mowy transkryptu wypowiedzi, która została pozbawiona zwrotów charakterystycznych dla rozmówcy.

Analizy zostały wykonane za pomocą następujących narzędzi:

Spectrum Lab – głównie do podglądu widma w czasie rzeczywistym (oprogramowanie pod Windows, ale działa pod w miarę nowym wine),

SoX (dostępny też w każdej dystrybucji Linuksa) – do łatwego przetwarzania dźwięku,

Audacity (dostępny też w każdej dystrybucji Linuksa) – do wycinania i sklejania kawałków sampli (można też użyć do przetwarzania dźwięku, ale nie jest skryptowalny w sposób tak łatwy jak sox),

najlepszego urządzenia do przetwarzania sygnałów (własnego mózgu).

Celowo użyto jak najprostszych narzędzi.

Posiedzenie komisji z dnia 21 marca 2018

Głos można anonimizować na różne sposoby, najprościej jest po prostu obniżyć/podwyższyć wysokość dźwięku o jakiś współczynnik. Na potrzeby artykułu przyjmijmy roboczą (naiwną) hipotezę iż zastosowano tę metodę. Aby odnaleźć ten współczynnik, wystarczy posiadać przykład dźwięków (np. mowy) przed i po zastosowaniu anonimizacji. Z pomocą przychodzi nam przerwane z przyczyn technicznych przesłuchanie z 21 marca 2018 roku (które proponuję obejrzeć w całości):

Przesłuchanie zostało przerwane, ponieważ słychać było głos agentki ABW (świadek nr 9), a zaraz potem jego „zanonimizowaną” wersję. Najprawdopodobniej obok mikrofonu agentki znalazł się drugi bez podłączonego urządzenia anonimizującego. W okolicy 14:50 tego nagrania słychać, jak technik mówi „próba, próba”, a zaraz po tym wersję zanonimizowaną.

Potnijmy to na dwa nagrania za pomocą audacity:

kom1.wav – wersja oryginalna „próba, próba”

kom2.wav – wersja „zanonimizowana”

Przygotujmy sobie sklejone wersje tych dwóch komunikatów, rozdzielone ciszą:

#trochę pogłośnijmy bo jest za cicho sox kom1.wav kom1x.wav gain +16 #zróbmy sobie wav-y z ciszą sox -n -r 44100 cisza1.wav trim 0.0 1 sox -n -r 44100 cisza2.wav trim 0.0 0.1 #sklejmy to razem sox cisza1.wav kom1x.wav cisza2.wav kom2.wav out.wav

Warto zobaczyć spektrogram pliku out.wav, na przykład za pomocą programu Spectrum Lab. Pliki z ciszą służą do oddzielenia wypowiedzi na spektrogramie i jako „rozbiegówka” dla Spectrum Lab. Oś czasu jest od dołu (najstarsze) do góry (najnowsze). Od razu widać różnicę wysokości dźwięku wersji oryginalnej (oznaczonej jako A) i wersji zanonimizowanej (oznaczonej jako B). Ciekawostką jest również symetryczny względem 3900Hz „wzór” w wersji zanonimizowanej, jest to najprawdopodobniej aliasowanie przetwornika C/A w aparaturze przetwarzającej dźwięk.

Aby ustalić naukowo, o ile zmieniono częstotliwość, można porównać częstotliwości na spektrogramie (co jest mało dokładne) albo użyć korelatora (np. z pakietu gnuradio) i określić, dla jakiej zmiany wysokości dźwięku mamy największą korelację. Podejście hobbystyczno-inżynierskie jest dużo prostsze. Jako krótkofalowiec wiem, że bardzo dobry sprzęt do analizy dźwięku mam zainstalowany pomiędzy uszami. Spróbujmy odtworzyć wersję oryginalną i wersję zanonimizowaną, podnosząc jej wysokość o różne wartości, i zobaczyć, dla jakiej wartości brzmią one najbardziej podobnie. Użyjemy do tego funkcji pitch soxa.

Piszemy prosty skrypt:

#!/bin/bash for i in `seq 100 25 1000` do echo "wartosc pitch: $i"; echo ( play kom1x.wav; play kom2.wav pitch $i play kom1x.wav; play kom2.wav pitch $i ) >/dev/null 2>&1 echo -n "wcisnij enter"; read a done

Po jego uruchomieniu wychodzi na to, że najlepszą zgodność uzyskuje się dla wartości pitch 775 (na moje ucho oczywiście). Wartość pitch to ilość „centów” (definicja centów). Na potrzeby artykułu przygotujmy plik

sox kom2.wav kom2_poprawione.wav pitch 775

poprawiony kom2_poprawione.wav

proszę porównać z kom1x.wav

Potwierdźmy to na innym fragmencie z tego samego nagrania w okolicach 4:57 (przed pracami wykonanymi przez technika ABW), tym razem jest to głos agentki, a nie technika:

kom3.wav – oryginał

sox kom3.wav kom3x.wav gain +16 #najpierw pogłośnijmy

kom4.wav – zanonimizowane

Sprawdzając, tak jak poprzednio, jaka wartość pitch powoduje że nagrania są najbardziej podobne do siebie, otrzymujemy wartość około 300. Wniosek z tego, iż albo technik zmienił ustawienie anonimizacji, albo użyto wokodera, którego działanie nie polega tylko na stałym przesunięciu wysokości dźwięku (dla uproszczenia naiwnie załóżmy to pierwsze).

Sprawdźmy to jeszcze na nagraniu głosu agentki po zmianie ustawień przez technika w okolicach 15:31.

kom5.wav – oryginał

kom6.wav – zanonimizowane

play kom5.wav gain +16 ; play kom6.wav pitch 775

Faktycznie przy podniesieniu nagrania zanonimizowanego o pitch 775 otrzymujemy bardzo podobne brzmienie do oryginału (a przy 300 głos jest za niski). Wniosek: podczas swoich prac technik zmienił ustawienie z odpowiednika efektu pitch 300 na 775.

Sprawdźmy, jak to brzmi przy dłuższym tekście – wyciąłem i posklejałem tekst przysięgi po anonimizacji i umieściłem go w pliku przysiega.wav

sox przysiega.wav przysiega_poprawione.wav pitch 300

Plik przysiega_poprawione.wav brzmi dosyć podobnie do ujawnionego głosu agentki.

Posiedzenie komisji 9 kwietnia 2018

Posiedzenie komisji szybko zostało zawieszone z powodów technicznych i zwołano kolejne posiedzenie 9 kwietnia 2018 roku, nagranie dostępne jest tu:

Jest to przesłuchanie „świadka nr 10”, ale z mediów możemy się dowiedzieć, iż jest to ta sama osoba co przesłuchiwana 21 marca. Przy okazji w 0:31 dowiadujemy się, iż „nie doszło do wycieku danych umożliwiających identyfikację funkcjonariusza”. Ponieważ najprawdopodobniej jest to ten sam świadek, spróbujemy zastosować pierwsze wykryte ustawienie urządzenia anonimizującego głos i porównamy, czy głos po podniesieniu częstotliwości jest podobny do tego, co znamy z nagrania z 21 marca 2018.

W pliku wypowiedz_20180409.wav mamy zanonimizowany głos funkcjonariuszki.

sox wypowiedz_20180409.wav wypowiedz_20180409_poprawione.wav pitch 300

Głos z pliku wypowiedz_20180409_poprawione.wav faktycznie brzmi podobnie do tego z przerwanego posiedzenia 21 marca 2018.

Podsumowanie

Czy faktycznie udało się nam zdeanonimizować wypowiedzi agentki? Tego nie wiadomo (ale na pewno nie ujawniliśmy jej głosu, ponieważ on był już ujawniony i posłużył nam jako punkt odniesienia).

Czy urządzenie używane jest tylko z dwoma ustawieniami, odpowiadającymi parametrowi soxa pitch 300 i pitch 775, czy też są inne ustawienia albo jest to parametr płynnie regulowany? I czy technik ma pozwolenie, aby go dowolnie ustawiać, czy na rozkaz ustawia konkretne wartości? Tego nie wiadomo.

Czy urządzenie faktycznie zmienia tylko wysokość dźwięku, czy coś jeszcze? Tego nie wiadomo.

Ten artykuł można ciągnąć w nieskończoność. Istnieje wiele nagrań z pracy komisji, a na nich elementy, które mogłyby potencjalnie być punktem odniesienia do próby poznania, jak działa urządzenie anonimizujące używane przez ABW.

Na możliwość rozpoznania wpływa nie tylko tembr głosu, ale również sposób wypowiedzi. Ponieważ nie zdecydowano się na pełną anonimizację, gdzie musiałby być przekazywany nie głos a tekst (być może później czytany przez lektora lub syntezator), można wysnuć wniosek, że oceniono, iż potencjalna deanonimizacja nie będzie prowadzić do negatywnych skutków. Być może jednym z jej celów jest zwiększenie dramaturgii przesłuchań.

Przykładowym nagraniem, na którym można własnoręcznie potrenować, jest nagranie świadka nr 6 z 26 lutego 2018. W tym przypadku punkt odniesienia znajduje się w ostatnich 2 minutach filmu, ostatnie słowo „prokuratura” jest najprawdopodobniej przekazane po wyłączeniu urządzenia anonimizującego.

Zachęcam do wypróbowania soxa na innych nagraniach z posiedzeń komisji i wysnucia własnych wniosków. Wiedząc, o jaki współczynnik należy zmienić częstotliwość, można użyć również efektu „Change pitch” z audacity, dzieląc wartość pitch przez 100 (przykładowo używając wartości 3.0 Semitones, aby osiągnąć to, co efekt pitch 300 z sox). Niezależnie od tego, czy uda się nam poznać głos agentów, czy nie, jest to ciekawa zabawa :)

Komplet plików WAV do pobrania.

VY 73 de SQ5BPF

Odtwarzacz dźwięku może nie działać jeśli ktoś np. wyłączył JavaScript lub używa blokerów reklam.