Jak Gaavala chroni dźwięk Twoich spotkań: architektura z prywatnością na pierwszym miejscu
Każdego dnia pracy miliony profesjonalistów dołączają do spotkań, na których omawia się informacje wrażliwe — negocjacje fuzji, konsultacje z pacjentami, strategię prawną, zapowiedzi wyników kwartalnych, decyzje kadrowe. Gdy takie spotkania przecinają barierę językową, tłumaczenie w czasie rzeczywistym staje się niezbędne. Większość narzędzi do tłumaczenia spotkań wymaga jednak wysłania surowego dźwięku do chmury dostawcy, tworząc dokładnie ten rodzaj powierzchni narażenia danych, której zespoły prawne, compliance i bezpieczeństwa coraz częściej nie mogą zaakceptować.
Gaavala została zaprojektowana tak, aby całkowicie usunąć się z drogi dźwięku. Gdy prowadzisz spotkanie przez nasze rozszerzenie Chrome, Twój dźwięk nie wędruje przez serwery Gaavala. Płynie bezpośrednio z Twojej przeglądarki do silnika speech-to-text Soniox przez szyfrowany WebSocket — a nasz backend nie widzi z niego ani jednego bajtu.
Ten wpis pokazuje dokładnie, jak to działa, jakie dane przechodzą przez sieć i jak ta architektura odwzorowuje się na typowe wymogi zgodności.
Podstawowa zasada prywatności
Większość narzędzi tłumaczeniowych w modelu SaaS podąża za znajomym przepływem danych:
- Twoja przeglądarka przechwytuje dźwięk spotkania
- Dźwięk trafia na backend dostawcy
- Backend dostawcy przekazuje dźwięk do silnika speech-to-text
- Transkrypcje wracają przez backend dostawcy
- Po drodze serwery dostawcy często logują, buforują lub przechowują dźwięk
Każdy przeskok w tym łańcuchu to granica zaufania. Każdy przeskok to miejsce, w którym błąd w logowaniu, wyciek poświadczeń, wezwanie sądowe albo nieuczciwy inżynier mogą ujawnić treść Twojego spotkania. Im więcej stron dotyka dźwięku, tym trudniej udowodnić audytorowi, że nikt go nie zachował.
Gaavala całkowicie eliminuje etap pośrednika. Przepływ danych wygląda tak:
- Twoja przeglądarka przechwytuje dźwięk spotkania z karty
- Twoja przeglądarka otwiera bezpośredni WebSocket do Soniox
- Dźwięk płynie bezpośrednio przez ten WebSocket
- Soniox zwraca transkrypcje wprost do Twojej przeglądarki
- Backend Gaavala nigdy nie bierze w tym udziału
Rozszerzenie Chrome działające na Twoim komputerze jest jedynym fragmentem naszego kodu, który kiedykolwiek dotyka Twojego dźwięku — i nie wysyła tego dźwięku do nas.
Dlaczego wybraliśmy tę architekturę
Gdy przebudowywaliśmy Gaavala na rozszerzenie Chrome, podjęliśmy świadomą decyzję architektoniczną: rozszerzenie będzie uwierzytelniać użytkowników przez nasz backend, zarządzać stanem subskrypcji i serwować metadane — ale nigdy nie znajdzie się na drodze dźwięku. Uzasadnienie było proste:
- Powierzchnia zgodności: każdy bajt dźwięku klienta, który przetwarzamy, to bajt, z którego musimy się rozliczyć w ocenach skutków (DPIA), raportach SOC 2 i negocjacjach umów BAA. Najczystszy sposób, by utrzymać tę powierzchnię na zerze, to nigdy nie dotknąć dźwięku.
- Promień rażenia incydentu: naruszenie serwera przetwarzającego dźwięk jest z zasady gorsze niż naruszenie serwera przetwarzającego metadane tekstowe. Wolimy, żeby nasze najbardziej wrażliwe systemy obsługiwały najmniej wrażliwe dane.
- Opóźnienie: każdy przeskok przez pośrednika dokłada czas obiegu. Bezpośrednie strumieniowanie z przeglądarki do Soniox usuwa cały jeden przeskok, co daje zauważalnie mniejsze opóźnienie napisów.
- Koszty zgodne z prywatnością: prowadzenie własnego pośrednika audio oznaczałoby płacenie za transfer i moc obliczeniową na każdym spotkaniu. Nieprowadzenie go oszczędza pieniądze i chroni klientów. Gdy bodźce są zgodne, architektura ma skłonność pozostawać uczciwa.
Droga danych w szczegółach
Przyjrzyjmy się temu, co faktycznie dzieje się, gdy uruchamiasz transkrypcję na spotkaniu.
Krok 1: Uwierzytelnianie
Gdy logujesz się do Gaavala po raz pierwszy, rozszerzenie używa API chrome.identity.launchWebAuthFlow w Chrome, aby przeprowadzić wymianę OAuth Authorization Code z Google albo z Microsoftem. Dostawca tożsamości zwraca kod autoryzacyjny do Twojej przeglądarki, a rozszerzenie wymienia go na naszym backendzie na sesyjny token JWT Gaavala. Ten JWT jest przechowywany w chrome.storage.local i służy do uwierzytelniania kolejnych wywołań API do naszego backendu.
Nic z tego nie dotyczy dźwięku. Przepływ OAuth jest wyłącznie tekstowy — tokeny, oświadczenia, pola profilu.
Krok 2: Tymczasowy klucz Soniox
Gdy klikasz „Start" na spotkaniu, rozszerzenie wywołuje API naszego backendu, aby poprosić o krótkotrwały klucz tymczasowy Soniox. Ten klucz ma trzy istotne właściwości:
- Jest ograniczony wyłącznie do speech-to-text — do niczego innego w powierzchni API Soniox
- Wygasa w minutach, nie w dniach
- Jest wystawiany raz na sesję i nie jest utrwalany na Twoim urządzeniu
Wzorzec klucza tymczasowego jest kluczowy dla całej historii prywatności. Gdyby Gaavala umieściła długoterminowy klucz API Soniox wewnątrz paczki rozszerzenia, każdy mógłby go wydobyć. Zamiast tego wystawiamy jednorazowe klucze, generowane na żądanie, powiązane z Twoją uwierzytelnioną sesją i unieważniane krótko po jej zakończeniu.
Nasz backend loguje wyłącznie metadane tego żądania — który użytkownik, o której godzinie, w jakim planie. Nie widzi żadnego dźwięku, bo żaden dźwięk nie został jeszcze przechwycony.
Krok 3: Przechwytywanie dźwięku karty
Dołączasz do swojej rozmowy w Microsoft Teams, Zoomie, Google Meet albo Webexie w karcie Chrome. Rozszerzenie Gaavala otwiera panel boczny i prosi o rozpoczęcie przechwytywania dźwięku. Gdy potwierdzasz, rozszerzenie używa API tabCapture w Chrome — API dostępnego wyłącznie dla rozszerzeń, które pozwala przechwycić dźwięk aktywnej karty za wyraźną zgodą użytkownika i z widocznym wskaźnikiem.
Chrome kieruje przechwycony dźwięk do dokumentu offscreen, który Gaavala uruchamia w tle. Dokument offscreen to odizolowana strona, której rozszerzenie może użyć do obsługi przetwarzania dźwięku bez utrzymywania widocznego interfejsu. Wewnątrz tego dokumentu Gaavala otwiera MediaStream, podłącza go do AudioContext i przygotowuje do strumieniowania.
Co ważne, dźwięk przechodzi też przez lokalny graf audio, który odtwarza go z powrotem w Twoich głośnikach. Oznacza to, że wciąż normalnie słyszysz spotkanie, gdy Gaavala je przechwytuje — nic nie jest wyciszane ani przekierowywane.
Krok 4: Bezpośredni WebSocket do Soniox
Dokument offscreen otwiera następnie połączenie WebSocket bezpośrednio do Soniox (wss://stt-rt.soniox.com/...). To połączenie:
- Używa TLS 1.2 lub nowszego
- Jest uwierzytelniane krótkotrwałym kluczem tymczasowym z kroku 2
- Wychodzi ze stosu sieciowego Twojej przeglądarki — pakiety płyną z Twojego systemu operacyjnego do Soniox, a nie do Gaavala
Ramki audio przechwycone z karty są kodowane jako PCM i wysyłane przez WebSocket. Soniox przetwarza je w czasie rzeczywistym i strumieniuje z powrotem tokeny transkrypcji tym samym połączeniem. Te tokeny — fragmenty tekstu ze znacznikami czasu i etykietami mówców — trafiają wprost do dokumentu offscreen, który przekazuje je do panelu bocznego w celu wyświetlenia.
W żadnym momencie tej pętli pakiet audio nie dociera do serwera prowadzonego przez Gaavala. Możesz to sprawdzić samodzielnie w Chrome DevTools: otwórz zakładkę Network z filtrem WS, gdy Gaavala działa, a zobaczysz dokładnie jeden WebSocket — do hosta soniox.com — i zero ruchu wychodzącego do gaavala.com, który zawierałby dźwięk.
Krok 5: Wyświetlanie transkrypcji i opcjonalne podsumowanie
Tokeny transkrypcji renderują się na trzech powierzchniach: w panelu bocznym, w pływającej nakładce na karcie spotkania oraz w buforze w pamięci używanym do eksportu. Żadna z nich nie serializuje dźwięku. Obsługują wyłącznie tekst.
Gdy na koniec spotkania uruchamiasz podsumowanie AI, powstaje ono w całości na Twoim urządzeniu, dzięki wbudowanemu w Chrome AI (Gemini Nano). Tekst transkrypcji nigdy nie opuszcza Twojego komputera — nie jest wysyłany na backend Gaavala ani do żadnej firmy trzeciej. Treść spotkania, czy to dźwięk, czy tekst, w ogóle nigdy nie przechodzi przez backend Gaavala; jedyne, co przez niego kiedykolwiek przechodzi, to metadane uwierzytelniania i subskrypcji.
Jakie dane widzą serwery Gaavala
Oto dokładna lista danych, którymi zajmuje się nasz backend, we wszystkich funkcjach:
| Dane | Kiedy | Retencja | Uwagi |
|---|---|---|---|
| Token odświeżający sesji Gaavala | Logowanie | Czas życia tokenu — wygasłe rekordy usuwane codziennie | Twój token OAuth Google/Microsoft nigdy nie jest przechowywany |
| Profil użytkownika (e-mail, imię) | Logowanie | Czas życia konta | Do rozliczeń i wsparcia |
| Status subskrypcji | Zawsze | Czas życia konta | Poziom planu, stan wersji próbnej |
| Żądania tymczasowego klucza Soniox | Na sesję | Wyłącznie log żądania | Bez dźwięku |
| Licznik minut transkrypcji | Na sesję | Czas życia konta | Grupowany miesięcznie, do egzekwowania limitów |
| Anonimowa analityka strony internetowej | Dopiero po zaakceptowaniu plików cookie | Przechowywana przez Google Analytics, nie w naszej bazie danych | Tylko strona internetowa — rozszerzenie zgłasza anonimowe liczniki błędów, które nie zawierają identyfikatora użytkownika |
A oto dokładna lista danych, których nasz backend nie widzi:
- Surowego dźwięku spotkania (w żadnym formacie i w żadnym momencie)
- Skompresowanych strumieni audio
- Buforów audio ani pośrednich reprezentacji
- Biometrycznych danych głosowych
- Tożsamości mówców poza anonimowymi identyfikatorami, które przypisuje Soniox
- Tekstu transkrypcji — podsumowania powstają na urządzeniu, a transkrypcje nigdy nie opuszczają Twojego komputera
Gdyby sąd zażądał od Gaavala dźwięku konkretnego spotkania, technicznie prawdziwa odpowiedź brzmiałaby, że go nie mamy i nie możemy go odzyskać. Nigdy nie istniał w naszych systemach.
Sprawdź to samodzielnie
Jedną z zalet działania w formie rozszerzenia Chrome jest to, że całe środowisko uruchomieniowe da się zbadać. Twój zespół IT może zweryfikować nasze deklaracje o prywatności, nie ufając ani jednemu słowu z tego wpisu:
Metoda 1 — inspekcja sieci. Otwórz chrome://extensions, znajdź Gaavala, kliknij „service worker" albo „inspect views > background page". W DevTools przejdź do zakładki Network i filtruj po WS (WebSocket). Uruchom spotkanie. Zobaczysz dokładnie jeden otwarty WebSocket, do hosta soniox.com. Żaden dźwięk nie idzie do gaavala.com.
Metoda 2 — inspekcja manifestu. W chrome://extensions rozwiń „Details" (Szczegóły) przy Gaavala i przejrzyj uprawnienia. Sekcja host_permissions deklaruje dokładnie te źródła, do których rozszerzenie może sięgnąć. Zobaczysz punkty końcowe Soniox do strumieniowania i punkty końcowe Gaavala do uwierzytelniania i subskrypcji. Nie ma uprawnienia hosta z symbolem wieloznacznym ani niezadeklarowanego dostępu do sieci.
Metoda 3 — inspekcja kodu. Rozszerzenie dostarcza service worker, dokument offscreen, panel boczny i skrypty treści. Chrome udostępnia je wszystkie do inspekcji przez narzędzia deweloperskie. Twój zespół bezpieczeństwa może w każdej chwili podpiąć się do strony w tle albo do dokumentu offscreen i odczytać stan uruchomieniowy — łącznie z potwierdzeniem, że obiekt strumienia audio nigdy nie jest serializowany do żądania fetch ani XHR w stronę naszej domeny.
Manifest i uprawnienia hostów publikujemy jako część wpisu w Chrome Web Store i chętnie przyjmujemy zewnętrzne przeglądy bezpieczeństwa.
Mapowanie na wymogi zgodności
GDPR (RODO) i minimalizacja danych
Artykuł 5 ust. 1 lit. c GDPR ustanawia zasadę minimalizacji danych: dane osobowe muszą być „adekwatne, stosowne oraz ograniczone do tego, co niezbędne". Dane głosowe są danymi osobowymi w rozumieniu GDPR, a danymi biometrycznymi, jeśli służą do identyfikacji.
Architektura Gaavala wprost odpowiada tej zasadzie. Utrzymując dźwięk całkowicie poza naszymi systemami, ograniczamy przetwarzane dane osobowe do absolutnego minimum potrzebnego do prowadzenia biznesu subskrypcyjnego — adres e-mail, imię, stan rozliczeń. Dla klientów przeprowadzających DPIA nasz backend jest w praktyce przezroczysty w zakresie przetwarzania dźwięku: nie ma czego oceniać, bo nic do nas nie dociera.
Soniox jest osobnym podmiotem przetwarzającym w Twoim łańcuchu zgodności. Możesz niezależnie ocenić jego podejście do prywatności, a Soniox publikuje warunki przetwarzania danych, które obejmują bezpośrednie połączenie nawiązywane przez Twoją przeglądarkę.
HIPAA i dźwięk zawierający PHI
Zgodnie z HIPAA każdy dostawca, który przetwarza, przechowuje lub przesyła chronione informacje zdrowotne (PHI), musi podpisać umowę Business Associate Agreement. Konsultacje medyczne często zawierają PHI — nazwiska pacjentów, diagnozy, plany leczenia.
Ponieważ backend Gaavala nigdy nie otrzymuje dźwięku spotkania, tor audio pozostaje poza zakresem BAA Gaavala. Relacja, którą oceniasz w odniesieniu do przetwarzania dźwięku, łączy Ciebie bezpośrednio z Soniox — Gaavala nie jest tu partnerem biznesowym dla tych danych, ponieważ dane nas nie dotykają. Jeśli generujesz podsumowania AI, powstają one na urządzeniu dzięki wbudowanemu w Chrome AI — tekst transkrypcji zostaje na Twoim komputerze, więc funkcja podsumowań również nie wprowadza Gaavala ani żadnego dodatkowego dostawcy do łańcucha przetwarzania PHI.
Ryzyko dostawcy w SOC 2
Audyty SOC 2 wymagają od organizacji udokumentowania i oceny wszystkich zewnętrznych dostawców w łańcuchu przetwarzania danych. Każdy dostawca dokłada złożoności do opisu systemu i poszerza zakres oceny ryzyka.
W architekturze Gaavala Soniox jest podmiotem przetwarzającym, z którym masz do czynienia bezpośrednio, a nie za pośrednictwem Gaavala. Twój rejestr ryzyka dostawców powinien oceniać Soniox na jego własnych warunkach, co wiele zespołów bezpieczeństwa uznaje za prostsze niż ocenianie relacji z podmiotem podprzetwarzającym. Zakres Gaavala w Twoim rejestrze ryzyka jest węższy: obsługujemy tożsamość i rozliczenia — nie surowy dźwięk i nie tekst transkrypcji ani podsumowania, który nigdy nie opuszcza komputera użytkownika.
Dlaczego forma rozszerzenia Chrome ma znaczenie
Duża część powyższych gwarancji prywatności zależy od tego, że Gaavala działa jako rozszerzenie Chrome ze wzorcem połączeń prosto do dostawcy. Rozważaliśmy — i odrzuciliśmy — kilka alternatyw:
- Serwerowy pośrednik audio: prosty do wdrożenia, ale zmusiłby nas do obsługi dźwięku każdego klienta na własnej infrastrukturze. Właśnie tego wyraźnie chcieliśmy uniknąć.
- Aplikacja webowa z wbudowanym STT: przechwytywanie dźwięku karty ze strony internetowej wymaga
getDisplayMedia, które w każdej sesji wyświetla użytkownikowi systemowe okno wyboru i wiąże rozszerzenie z tą kartą, którą wskaże. Gorzej: nie ma niezawodnego sposobu, by strona internetowa utrzymała strumień audio w tle, gdy użytkownik pracuje w innych kartach. - Natywna aplikacja desktopowa: dałaby nam większą kontrolę, ale dołożyłaby tarcia przy instalacji, kosztów podpisywania i pracy specyficznej dla każdego systemu. A i tak nie usunęłaby naszej roli jako przetwarzającego dźwięk, gdybyśmy nie byli ostrożni — co oznacza, że odtworzylibyśmy wszystkie te same problemy.
Forma rozszerzenia Chrome jako jedyna umożliwiła architekturę prywatności, jakiej chcieliśmy. tabCapture, dokumenty offscreen i model service workera z Manifest V3 razem pozwalają rozszerzeniu obsłużyć dźwięk w całości na komputerze użytkownika, otwierać bezpośrednie połączenia z usługami zewnętrznymi i utrzymywać stan w tle potrzebny na długich spotkaniach — bez kierowania czegokolwiek przez nas.
To, co wciąż musimy robić dobrze
Architektura prywatności nie kończy się na „nie dotykamy dźwięku". Są też sąsiednie kwestie, które traktujemy poważnie:
- Generowanie kluczy tymczasowych: krótkotrwałe klucze Soniox, które wystawiamy, mogłyby zostać nadużyte, gdyby nasz backend wygenerował klucz dla atakującego. Uwierzytelniamy każde żądanie Twoim tokenem JWT, ograniczamy tempo wystawiania kluczy i logujemy anomalie.
- Aktualizacje rozszerzenia: zaktualizowana wersja rozszerzenia mogłaby teoretycznie zmienić wzorzec sieciowy. Wersjonujemy manifest, publikujemy listy zmian, a Chrome Web Store pokazuje każde nowe uprawnienie przed zainstalowaniem aktualizacji.
- Tekst podsumowania: podsumowania powstają w całości na urządzeniu, dzięki wbudowanemu w Chrome AI (Gemini Nano), więc transkrypcja nigdy nie trafia na nasz backend — w obecnej architekturze to ryzyko nie istnieje. Jeśli nawet lokalne przetwarzanie AI przekracza to, na co dane spotkanie może sobie pozwolić, funkcję podsumowania można po prostu zostawić nieużywaną; nic innego od niej nie zależy.
- Próbka referencyjna do klonowania głosu (Pro): jeśli tworzysz osobisty klon głosu, Twoja próbka trwająca ~20 sekund jest przechowywana w postaci zaszyfrowanej (AES-256-GCM) na serwerach Gaavala, używana wyłącznie do zbudowania Twojego głosu i usuwana na żądanie — zobacz Politykę prywatności.
- Żądania organów: publicznie zobowiązujemy się odpowiadać na żądania prawne wyłącznie w zakresie danych, które faktycznie posiadamy. W przypadku dźwięku odpowiedź zawsze będzie brzmieć: „nie mamy go".
Porównanie z innymi narzędziami do tłumaczenia spotkań
Jak model prywatności Gaavala wypada na tle innych popularnych narzędzi do tłumaczenia spotkań?
| Funkcja | Gaavala | Otter.ai | Zoom AI Companion | Teams Copilot | Interprefy |
|---|---|---|---|---|---|
| Dźwięk dociera do backendu dostawcy | Nie (prosto do Soniox) | Tak (serwery Ottera) | Tak (serwery Zooma) | Tak (serwery M365) | Tak (serwery platformy) |
| Dźwięk przechowywany po spotkaniu | Nie | Tak (domyślnie) | Opcjonalnie | Opcjonalnie | Różnie |
| Używany do trenowania modeli | Nie | Możliwość rezygnacji | Możliwość rezygnacji | Kontrole enterprise | Nieznane |
| Możliwość samodzielnego audytu sieci | Tak (DevTools) | Nie | Nie | Nie | Nie |
| Działa jako rozszerzenie (audytowalne) | Tak | Nie | Nie | Nie | Nie |
| Działa w Teams/Zoom/Meet/Webex | Tak | Częściowo | Nie | Nie | Różnie |
Różnica, która ma znaczenie: w każdym innym wierszu tej tabeli ufasz deklaracjom dostawcy o tym, jak obchodzi się z dźwiękiem na swoich serwerach. W przypadku Gaavala nie ma serwerów, którym trzeba by ufać w kwestii dźwięku, bo na naszych serwerach nie ma dźwięku. Tę deklarację da się zweryfikować standardowymi narzędziami deweloperskimi Chrome.
Prywatność jest domyślna, a nie płatna
Bezpłatny poziom Gaavala daje Ci tę samą architekturę z bezpośrednim połączeniem do Soniox, tę samą diaryzację mówców i to samo pokrycie 60 języków. Pro odblokowuje 120 minut dziennie, Speak Mode i klonowanie głosu — nie prywatność. Nie uważamy, by osoby dbające o prywatność musiały płacić więcej za bezpieczeństwo swoich danych.
Jeśli Twoja organizacja historycznie odrzucała narzędzia do tłumaczenia spotkań, bo compliance nie zgadzał się na wysyłanie dźwięku do chmury dostawcy, Gaavala powstała właśnie z myślą o tej rozmowie. Ten tor zaprojektowano tak, by Twoje zespoły prawne, bezpieczeństwa i compliance miały mniej do przeglądania, a nie więcej.
Jednorazowa bezpłatna wersja próbna: 5 minut transkrypcji, nigdy się nie resetuje. Bez karty kredytowej. Bez rejestracji na stronie internetowej.