Blog/Opublikowano: Zaktualizowano:

Bądź pierwszy w kolejce, gdy Gaavala pojawi się w Chrome Web Store. Dołącz do listy

Jak Gaavala chroni dźwięk Twoich spotkań: architektura z prywatnością na pierwszym miejscu

Dźwięk spotkania trafia zaszyfrowanym połączeniem bezpośrednio z przeglądarki do Soniox. Backend Gaavala obsługuje logowanie, plan i zużycie; nie otrzymuje dźwięku spotkania.

Dźwięk spotkania płynie z przeglądarki → do Soniox. Naszych serwerów nie ma na tej drodze.
Dźwięk spotkania idzie z przeglądarki do Soniox — po drodze nie ma serwera Gaavala

Podstawowa zasada prywatności

Większość narzędzi tłumaczeniowych w modelu SaaS podąża za znajomym przepływem danych:

  1. Twoja przeglądarka przechwytuje dźwięk spotkania
  2. Dźwięk trafia na backend dostawcy
  3. Backend dostawcy przekazuje dźwięk do silnika speech-to-text
  4. Transkrypcje wracają przez backend dostawcy
  5. 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:

  1. Twoja przeglądarka przechwytuje dźwięk spotkania z karty
  2. Twoja przeglądarka otwiera bezpośredni WebSocket do Soniox
  3. Dźwięk płynie bezpośrednio przez ten WebSocket
  4. Soniox zwraca transkrypcje wprost do Twojej przeglądarki
  5. 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 dźwięku Twojego spotkania — 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:

  • Bezpośrednie przesyłanie dźwięku do Soniox zmniejsza liczbę pośrednich etapów technicznych, ale nie zeruje obowiązków ochrony danych. Oceniaj Gaavala wraz z podmiotem podprzetwarzającym Soniox, uwzględniając cel, retencję i wymagane umowy. Sama architektura nie dowodzi zgodności z HIPAA ani SOC 2.
  • 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. 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 z dźwiękiem spotkania 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 spotkania.

Krok 5: Wyświetlanie transkrypcji i opcjonalne podsumowanie

Transkrypcje są przechowywane na urządzeniu w lokalnej bazie rozszerzenia i automatycznie usuwane po 7 dniach. Pobrane samodzielnie eksporty pozostają pod Twoją kontrolą. Podsumowania AI powstają na urządzeniu. Serwery Gaavala nie otrzymują transkrypcji; lokalną historię trzeba jednak uwzględnić przy udostępnianiu lub czyszczeniu urządzenia.

Jeśli chcesz odpowiadać bez mówienia, przeczytaj przewodnik po dostępnych spotkaniach.

Jakie dane widzą serwery Gaavala

Oto główne rodzaje danych, którymi zajmuje się nasz backend, we wszystkich funkcjach:

DaneKiedyRetencjaUwagi
Token odświeżający sesji GaavalaLogowanieCzas życia tokenu — wygasłe rekordy usuwane codziennieTwój token OAuth Google/Microsoft nigdy nie jest przechowywany
Profil użytkownika (e-mail, imię)LogowanieCzas życia kontaDo rozliczeń i wsparcia
Status subskrypcjiZawszeCzas życia kontaPoziom planu, stan wersji próbnej
Dane płatności (Pro)Gdy płaciszTak długo, jak wymagają tego przepisy podatkowe, także po usunięciu kontaKwota, podatek, waluta, kraj, data i metoda płatności przekazane przez naszego partnera płatniczego; dane Twojej karty pozostają u partnera płatniczego
Żądania tymczasowego klucza SonioxNa sesjęWyłącznie log żądaniaBez dźwięku
Licznik minut transkrypcjiNa sesjęCzas życia kontaGrupowany miesięcznie, do egzekwowania limitów
Próbka referencyjna do klonowania głosu (Pro)Tylko jeśli ją nagraszDo czasu usunięcia Twojego głosu lub kontaSzyfrowana (AES-256-GCM), używana wyłącznie do zbudowania Twojego głosu; to nie jest dźwięk spotkania
Zgłoszenia problemów technicznychTylko gdy wyślesz zgłoszenie180 dniDane diagnostyczne, które zdecydujesz się wysłać; bez tekstu transkrypcji
Język interfejsuZa każdym razem, gdy korzystasz z rozszerzenia po zalogowaniuCzas życia kontaAby nasze e-maile docierały do Ciebie w Twoim języku
Adres e-mail na liście oczekujących (strona internetowa)Tylko jeśli zapiszesz się na listę oczekującychDo czasu, gdy poprosisz nas o jego usunięcieRazem z językiem strony i źródłem kampanii; używany wyłącznie do potwierdzenia adresu i ogłoszenia premiery
Anonimowa analityka strony internetowejDopiero po zaakceptowaniu plików cookiePrzechowywana przez Google Analytics, nie w naszej bazie danychTylko 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 dźwięku spotkań
  • Buforów dźwięku spotkań ani pośrednich reprezentacji
  • Biometrycznych danych głosowych z Twoich spotkań (jedyne nagranie głosu, jakie przechowujemy, to opisana wyżej próbka do klonowania głosu w planie Pro — i tylko jeśli ją nagrasz)
  • 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.

Nagrywanie i usuwanie próbki opisuje klonowanie własnego głosu.

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 spotkań 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.

Przepływ danych ogranicza treści otrzymywane przez backend. DPIA powinna jednak obejmować całą usługę, historię lokalną, opcjonalne próbki głosu oraz Soniox jako podmiot podprzetwarzający.

Soniox nadal znajduje się w Twoim łańcuchu zgodności, jako dostawca usług mowy, z którym umowę zawarła Gaavala: Gaavala posiada konto Soniox i wystawia krótkotrwały klucz, za pomocą którego łączy się Twoja przeglądarka, a nasza Polityka prywatności wymienia Soniox wśród podmiotów trzecich, którym udostępniamy dane. DPIA obejmuje więc Soniox jako część usługi Gaavala, a nie jako dostawcę, z którym to Ty zawierasz umowę.

HIPAA i dźwięk zawierający PHI

Według wytycznych HHS dotyczących business associates dostawca przetwarzający elektroniczne chronione informacje zdrowotne (ePHI) w imieniu podmiotu objętego HIPAA lub innego business associate może sam mieć status business associate. Jeżeli taka relacja zachodzi, potrzebne są odpowiednie postanowienia umowy BAA. Wytyczne HHS dotyczące chmury wyjaśniają zastosowanie tych zasad do usług chmurowych. Oceń rzeczywistą usługę, przepływy danych i umowy.

Backend Gaavala nigdy nie otrzymuje dźwięku spotkania, więc PHI wypowiedziane podczas spotkania nigdy nie są przechowywane na serwerach Gaavala. Dźwięk spotkania jest jednak przesyłany do Soniox, dostawcy usług mowy, z którym umowę zawarła Gaavala, i tam przetwarzany, dlatego ocena HIPAA musi objąć tę ścieżkę jako część usługi Gaavala — nie jest to relacja wyłącznie między Tobą a Soniox. 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ń nie dodaje do łańcucha przetwarzania PHI ani serwerów Gaavala, ani innego dostawcy.

Ryzyko dostawcy w SOC 2

Kryterium CC9.2 w AICPA Trust Services Criteria dotyczy oceny ryzyka związanego z dostawcami i partnerami biznesowymi oraz zarządzania nim. Ocena zależy od zdefiniowanego systemu, usług i zobowiązań oraz od roli dostawcy w tym zakresie.

W architekturze Gaavala Twoja przeglądarka łączy się z Soniox bezpośrednio, ale relacja z dostawcą przebiega przez Gaavala: Gaavala posiada konto Soniox, więc Twój rejestr ryzyka dostawców wymienia Soniox jako podmiot podprzetwarzający Gaavala w zakresie rozpoznawania mowy, a nie jako dostawcę, z którym to Ty zawierasz umowę. Bezpośrednie połączenie zawęża natomiast własny zakres Gaavala: nasze serwery odpowiadają za dane konta, takie jak tożsamość, rozliczenia i wykorzystanie usługi, a także za próbkę do klonowania głosu użytkownika Pro, jeśli zostanie nagrana — nie za dźwięk spotkań i nie za 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 przechwytywać dźwięk spotkania na komputerze użytkownika, strumieniować go bezpośrednim połączeniem do silnika speech-to-text i utrzymywać stan w tle potrzebny na długich spotkaniach — bez kierowania dźwięku spotkania przez nas.

To, co wciąż musimy robić dobrze

Architektura prywatności nie kończy się na „nie dotykamy dźwięku spotkań". 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 dwuminutowa próbka 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 spotkań odpowiedź zawsze będzie brzmieć: „nie mamy go".

Porównanie z innymi narzędziami do tłumaczenia spotkań

Osobno porównuj miejsce przesyłania dźwięku i transkrypcji, czas ich przechowywania oraz osoby z dostępem. Zakaz trenowania modeli nie oznacza automatycznie braku retencji. Sprawdź aktualną politykę prywatności, podmioty podprzetwarzające i możliwości usuwania danych wybranej usługi.

Nie — zgodnie z polityką Zoom treści klientów nie służą do trenowania modeli AI.

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 dotąd odrzucała narzędzia do tłumaczenia spotkań, bo dział compliance nie zgadzał się na serwery twórcy narzędzia stojące między Twoimi spotkaniami a silnikiem speech-to-text, Gaavala powstała właśnie z myślą o takiej sytuacji. Ten tor zaprojektowano tak, by Twoje zespoły prawne, bezpieczeństwa i compliance miały mniej do przeglądania, a nie więcej.

Dołącz do listy

Jednorazowa bezpłatna wersja próbna: 5 minut transkrypcji, nigdy się nie resetuje. Bez karty kredytowej. Bez rejestracji na stronie internetowej.


Powiązane artykuły