Как Gaavala защищает аудио ваших встреч: архитектура приватности
Каждый рабочий день миллионы специалистов подключаются к встречам, где обсуждается чувствительная информация: переговоры о слиянии, консультации с пациентами, юридическая стратегия, предварительные квартальные результаты, кадровые решения. Когда такие встречи пересекают языковые границы, перевод в реальном времени становится необходимостью. Но большинство инструментов перевода встреч требуют отправить ваше сырое аудио в облако вендора — а это ровно та поверхность раскрытия данных, которую юридические службы, комплаенс и безопасность всё чаще не могут согласовать.
Gaavala спроектирована так, чтобы полностью убрать себя с пути аудио. Когда вы проводите встречу через наше расширение Chrome, ваше аудио не проходит через серверы Gaavala. Оно передаётся напрямую из вашего браузера в движок распознавания речи Soniox по зашифрованному WebSocket — и наш бэкенд не видит ни единого его байта.
Эта статья разбирает, как именно это работает, какие данные пересекают сеть и как архитектура ложится на распространённые комплаенс-фреймворки.
Основной принцип приватности
Большинство SaaS-инструментов перевода следуют знакомой схеме движения данных:
- Ваш браузер захватывает аудио встречи
- Аудио загружается на бэкенд вендора
- Бэкенд вендора проксирует аудио в движок распознавания речи
- Транскрипты возвращаются через бэкенд вендора
- По пути серверы вендора нередко логируют, кэшируют или хранят аудио
Каждый переход в этой цепочке — граница доверия. Каждый переход — место, где баг в логировании, утечка учётных данных, судебный запрос или недобросовестный инженер могут раскрыть содержание вашей встречи. Чем больше сторон касается аудио, тем труднее доказать аудитору, что никто его не сохранил.
Gaavala полностью убирает шаг проксирования. Схема движения данных выглядит так:
- Ваш браузер захватывает аудио встречи из вкладки
- Ваш браузер открывает прямой WebSocket к Soniox
- Аудио передаётся напрямую по этому WebSocket
- Soniox возвращает транскрипты прямо в ваш браузер
- Бэкенд Gaavala не участвует вовсе
Расширение Chrome, работающее на вашей машине, — единственная часть нашего кода, которая вообще касается вашего аудио, и она не отправляет это аудио нам.
Почему мы выбрали такую архитектуру
Когда мы пересобирали Gaavala как расширение Chrome, мы приняли осознанное архитектурное решение: расширение аутентифицирует пользователей через наш бэкенд, ведёт состояние подписки и отдаёт метаданные — но никогда не находится на пути аудио. Рассуждение было простым:
- Поверхность комплаенса. Каждый байт клиентского аудио, который мы обрабатываем, — это байт, который придётся объяснять в DPIA, в отчётах SOC 2 и на переговорах по BAA. Самый чистый способ удержать эту поверхность на нуле — вообще не касаться аудио.
- Радиус поражения при взломе. Взлом сервера, который обрабатывает аудио, принципиально хуже взлома сервера, который обрабатывает текстовые метаданные. Мы предпочитаем, чтобы наши самые чувствительные системы работали с наименее чувствительными данными.
- Задержка. Каждый переход через прокси добавляет время кругового обхода. Прямая передача из браузера в Soniox убирает целый переход и заметно улучшает задержку субтитров.
- Издержки, совпадающие с приватностью. Собственный аудиопрокси означал бы плату за трафик и вычисления на каждой встрече. Его отсутствие экономит деньги и защищает клиентов. Когда стимулы совпадают, архитектура обычно остаётся честной.
Путь данных в деталях
Посмотрим, что на самом деле происходит, когда вы запускаете транскрипцию на встрече.
Шаг 1: Аутентификация
Когда вы впервые входите в Gaavala, расширение использует API chrome.identity.launchWebAuthFlow в Chrome, чтобы выполнить обмен OAuth Authorization Code с Google или Microsoft. Поставщик идентификации возвращает код авторизации в ваш браузер, а расширение обменивает его на нашем бэкенде на сессионный JWT Gaavala. Этот JWT хранится в chrome.storage.local и используется для аутентификации последующих вызовов нашего API.
Ничего из этого не связано с аудио. Поток OAuth — только текст: токены, claims, поля профиля.
Шаг 2: Временный ключ Soniox
Когда вы нажимаете "Start" (Начать) на встрече, расширение обращается к API нашего бэкенда за короткоживущим временным ключом Soniox. У этого ключа три важных свойства:
- Он ограничен только распознаванием речи — ничем иным из поверхности API Soniox
- Он истекает через минуты, а не дни
- Он выдаётся один раз на сессию и не сохраняется на вашем устройстве
Схема с временным ключом критична для истории приватности. Если бы Gaavala зашила долгоживущий API-ключ Soniox внутрь сборки расширения, извлечь его смог бы кто угодно. Вместо этого мы выпускаем одноразовые ключи: они создаются по запросу, привязаны к вашей аутентифицированной сессии и аннулируются вскоре после её завершения.
Наш бэкенд логирует только метаданные этого запроса: какой пользователь, во сколько, какой тариф. Аудио он не видит, потому что аудио ещё не захвачено.
Шаг 3: Захват аудио вкладки
Вы подключаетесь к звонку в Microsoft Teams, Zoom, Google Meet или Webex во вкладке Chrome. Расширение Gaavala открывает боковую панель и предлагает начать захват аудио. Когда вы подтверждаете, расширение использует API tabCapture в Chrome — доступный только расширениям API, который позволяет захватывать аудио активной вкладки с явного разрешения пользователя и с видимым индикатором.
Chrome направляет захваченное аудио в offscreen-документ, который Gaavala держит в фоне. Offscreen-документ — это изолированная страница, которую расширение может использовать для обработки аудио, не удерживая на экране видимый интерфейс. Внутри этого документа Gaavala открывает MediaStream, подключает его к AudioContext и готовит к передаче.
Существенно, что аудио параллельно проходит через локальный аудиограф, возвращающий звук в ваши колонки. Это значит, что вы продолжаете слышать встречу как обычно, пока Gaavala её захватывает: ничего не приглушается и не перенаправляется.
Шаг 4: Прямой WebSocket к Soniox
Затем offscreen-документ открывает WebSocket-соединение напрямую к Soniox (wss://stt-rt.soniox.com/...). Это соединение:
- Использует TLS 1.2 или выше
- Аутентифицируется короткоживущим временным ключом из шага 2
- Исходит из сетевого стека вашего браузера — пакеты идут от вашей ОС к Soniox, а не к Gaavala
Аудиокадры, захваченные из вкладки, кодируются в PCM и отправляются по WebSocket. Soniox обрабатывает их в реальном времени и передаёт токены транскрипции обратно по тому же соединению. Эти токены — фрагменты текста с временными метками и метками спикеров — приходят прямо в offscreen-документ, который передаёт их в боковую панель для отображения.
Ни в одной точке всего этого цикла аудиопакет не достигает сервера под управлением Gaavala. Вы можете проверить это сами в Chrome DevTools: откройте вкладку Network с фильтром WS, пока Gaavala работает, и увидите ровно один WebSocket — к хосту soniox.com — и нулевой исходящий трафик с аудио к gaavala.com.
Шаг 5: Отображение транскрипта и необязательное резюме
Токены транскрипции отрисовываются на трёх поверхностях: в боковой панели, в плавающем оверлее поверх вкладки встречи и во внутреннем буфере, который используется для экспорта. Ни одна из этих поверхностей не сериализует аудио. Они работают только с текстом.
Когда вы запрашиваете AI-резюме в конце встречи, резюме генерируется целиком на вашем устройстве встроенной AI-моделью Chrome (Gemini Nano). Текст транскрипта никогда не покидает вашу машину: он не отправляется ни на бэкенд Gaavala, ни какой-либо третьей стороне. Содержание встречи — будь то аудио или текст — вообще никогда не пересекает бэкенд Gaavala; единственное, что его пересекает, — метаданные аутентификации и подписки.
Какие данные видят серверы Gaavala
Вот точный перечень данных, с которыми работает наш бэкенд, по всем функциям:
| Данные | Когда | Хранение | Примечания |
|---|---|---|---|
| Сессионный refresh-токен Gaavala | При входе | Срок жизни токена — истёкшие записи удаляются ежедневно | Ваш OAuth-токен Google/Microsoft не сохраняется никогда |
| Профиль пользователя (email, имя) | При входе | Срок жизни аккаунта | Для биллинга и поддержки |
| Статус подписки | Всегда | Срок жизни аккаунта | Тариф, состояние пробного периода |
| Запросы временного ключа Soniox | На каждую сессию | Только лог запроса | Без аудио |
| Счётчик минут транскрипции | На каждую сессию | Срок жизни аккаунта | Разбит на месячные корзины, для контроля квоты |
| Анонимная аналитика веб-сайта | Только после того, как вы примете cookie | Хранится в Google Analytics, а не в нашей базе данных | Только веб-сайт — расширение сообщает анонимные счётчики ошибок, не содержащие идентификатора пользователя |
А вот точный перечень данных, которых наш бэкенд не видит:
- Сырое аудио встречи (в любом формате, в любой момент)
- Сжатые аудиопотоки
- Аудиобуферы и промежуточные представления
- Голосовые биометрические данные
- Идентичность спикера сверх анонимных идентификаторов спикеров, которые присваивает Soniox
- Текст транскрипта — резюме генерируются на устройстве; транскрипты никогда не покидают вашу машину
Если бы суд запросил у Gaavala аудио конкретной встречи, технически правдивым ответом было бы, что у нас его нет и получить его мы не можем. На наших системах оно никогда не существовало.
Проверьте сами
Одно из преимуществ работы в формате расширения Chrome в том, что вся среда выполнения доступна для инспекции. Ваша ИТ-служба может проверить наши заявления о приватности, не поверив ни единому слову этой статьи:
Способ 1 — инспекция сети. Откройте chrome://extensions, найдите Gaavala, нажмите "service worker" либо "inspect views > background page". В DevTools перейдите на вкладку Network и отфильтруйте по WS (WebSocket). Начните встречу. Вы увидите ровно один открытый WebSocket — к хосту soniox.com. К gaavala.com аудио не уходит.
Способ 2 — инспекция манифеста. В chrome://extensions разверните "Details" (Подробнее) у Gaavala и изучите разрешения. Раздел host_permissions объявляет ровно те источники, к которым расширение может обращаться. Вы увидите эндпоинты Soniox для потоковой передачи и эндпоинты Gaavala для аутентификации и подписки. Ни одного host-разрешения с подстановочным символом и ни одного необъявленного сетевого доступа.
Способ 3 — инспекция исходников. Расширение поставляется с service worker, offscreen-документом, боковой панелью и content script'ами. Chrome предоставляет их все для инспекции через инструменты разработчика. Ваша служба безопасности может в любой момент подключиться к фоновой странице или к offscreen-документу и прочитать состояние среды выполнения — в том числе убедиться, что объект аудиопотока никогда не сериализуется в fetch или XHR в сторону нашего домена.
Мы публикуем манифест и host-разрешения в составе карточки в Chrome Web Store и приветствуем независимый аудит безопасности.
Соответствие требованиям
GDPR и минимизация данных
Статья 5(1)(c) GDPR устанавливает принцип минимизации данных: персональные данные должны быть «адекватными, относящимися к делу и ограниченными тем, что необходимо». Голосовые данные — это персональные данные по GDPR, а при использовании для идентификации — ещё и биометрические.
Архитектура Gaavala прямо соответствует этому принципу. Не пропуская аудио через наши системы вовсе, мы сводим объём обрабатываемых персональных данных к абсолютному минимуму, необходимому для работы подписочного бизнеса: email, имя, состояние оплаты. Для клиентов, проводящих DPIA, наш бэкенд по части обработки аудио фактически прозрачен: оценивать нечего, потому что до нас ничего не доходит.
Soniox — отдельный обработчик в вашей цепочке комплаенса. Вы можете независимо изучить их подход к приватности; Soniox публикует условия обработки данных, которые применяются к прямому соединению, устанавливаемому вашим браузером.
HIPAA и аудио, содержащее PHI
По HIPAA любой поставщик, который обрабатывает, хранит или передаёт защищаемую медицинскую информацию (PHI), обязан подписать Business Associate Agreement. Медицинские консультации часто содержат PHI: имена пациентов, диагнозы, планы лечения.
Поскольку бэкенд Gaavala никогда не получает аудио встречи, аудиотракт находится вне области BAA Gaavala. Отношения, которые вы оцениваете применительно к обработке аудио, — это отношения напрямую между вами и Soniox: Gaavala не является business associate для этих данных, потому что данные до нас не доходят. Если вы генерируете AI-резюме, они создаются на устройстве встроенной AI-моделью Chrome — текст транскрипта остаётся на вашей машине, поэтому функция резюме тоже не вводит ни Gaavala, ни какого-либо дополнительного поставщика в цепочку обработки PHI.
Риски поставщиков в SOC 2
Аудиты SOC 2 требуют от организаций документировать и оценивать всех сторонних поставщиков в цепочке обработки данных. Каждый поставщик усложняет ваше System Description и расширяет область оценки рисков.
В архитектуре Gaavala Soniox — обработчик данных, с которым вы взаимодействуете напрямую, а не через Gaavala. Ваш реестр рисков поставщиков должен оценивать Soniox по его собственным условиям, что многие службы безопасности считают более понятным, чем разбор отношений с субобработчиком. Область Gaavala в вашем реестре уже: мы отвечаем за идентификацию и биллинг — не за сырое аудио и не за текст транскрипта или резюме, который никогда не покидает машину пользователя.
Почему формат расширения Chrome имеет значение
Многие из перечисленных гарантий приватности держатся на том, что Gaavala работает как расширение Chrome со схемой прямого подключения к поставщику. Мы рассмотрели — и отвергли — несколько альтернатив:
- Серверный аудиопрокси. Реализуется просто, но заставил бы нас обрабатывать аудио каждого клиента на собственной инфраструктуре. Именно этого мы сознательно хотели избежать.
- Веб-приложение со встроенным STT. Захват аудио вкладки со страницы требует
getDisplayMedia, который каждую сессию показывает пользователю системный выбор источника и привязывает работу к выбранной им вкладке. Хуже того, у веб-страницы нет надёжного способа поддерживать фоновый аудиопоток, пока пользователь работает в других вкладках. - Нативное десктопное приложение. Дало бы больше контроля, но добавило бы трение при установке, расходы на подпись кода и разработку под каждую ОС. И оно всё равно не убрало бы нашу роль обработчика аудио, если бы мы не действовали крайне аккуратно, — то есть мы заново изобрели бы все те же проблемы.
Именно формат расширения Chrome сделал возможной ту архитектуру приватности, которую мы хотели. tabCapture, offscreen-документы и модель service worker из Manifest V3 вместе позволяют расширению обрабатывать аудио целиком на машине пользователя, открывать прямые соединения к внешним сервисам и удерживать фоновое состояние, нужное для долгих встреч, — ничего не пропуская через нас.
Что нам всё ещё нужно делать правильно
Архитектура приватности не заканчивается фразой «мы не касаемся аудио». Есть смежные вопросы, к которым мы тоже относимся серьёзно:
- Выпуск временных ключей. Короткоживущие ключи Soniox, которые мы выпускаем, можно было бы использовать во вред, если бы наш бэкенд выпускал ключи для злоумышленника. Мы аутентифицируем каждый запрос вашим JWT, ограничиваем частоту выдачи ключей и логируем аномалии.
- Обновления расширения. Обновлённая версия расширения теоретически может изменить сетевое поведение. Мы версионируем манифест, публикуем списки изменений, а Chrome Web Store показывает любые новые разрешения до установки обновления.
- Текст резюме. Резюме генерируются целиком на устройстве встроенной AI-моделью Chrome (Gemini Nano), поэтому транскрипт не доходит до нашего бэкенда — в текущей архитектуре этого риска не существует. Если для какой-то встречи даже локальная AI-обработка избыточна, функцией резюме можно просто не пользоваться: от неё ничего больше не зависит.
- Эталонный образец для клона голоса (Pro). Если вы создаёте персональный клон голоса, ваш образец длиной ~20 секунд хранится в зашифрованном виде (AES-256-GCM) на серверах Gaavala, используется только для построения вашего голоса и удаляется по запросу — см. Политику конфиденциальности.
- Юридические запросы. Мы публично обязуемся отвечать на юридические запросы только по тем данным, которыми действительно располагаем. Применительно к аудио ответ всегда будет один: «у нас его нет».
Сравнение с другими инструментами перевода встреч
Как модель приватности Gaavala соотносится с другими распространёнными инструментами перевода встреч?
| Возможность | Gaavala | Otter.ai | Zoom AI Companion | Teams Copilot | Interprefy |
|---|---|---|---|---|---|
| Аудио доходит до бэкенда вендора | Нет (напрямую в Soniox) | Да (серверы Otter) | Да (серверы Zoom) | Да (серверы M365) | Да (серверы платформы) |
| Аудио хранится после встречи | Нет | Да (по умолчанию) | Опционально | Опционально | По-разному |
| Используется для обучения моделей | Нет | Есть отказ | Есть отказ | Корпоративные настройки | Неизвестно |
| Можно проверить сеть самому | Да (DevTools) | Нет | Нет | Нет | Нет |
| Работает как расширение (поддаётся проверке) | Да | Нет | Нет | Нет | Нет |
| Работает в Teams/Zoom/Meet/Webex | Да | Частично | Нет | Нет | По-разному |
Отличие, которое действительно важно: в каждой другой строке этой таблицы вы доверяете заявлениям вендора о том, как аудио обрабатывается на его серверах. В случае Gaavala никаких серверов, которым нужно доверять применительно к аудио, нет — потому что на наших серверах аудио нет. Это утверждение проверяется стандартными инструментами разработчика Chrome.
Приватность — это стандарт, а не платный тариф
Бесплатный уровень Gaavala даёт ту же архитектуру с прямым подключением к Soniox, ту же диаризацию спикеров, то же покрытие в 60 языков. Pro открывает 120 минут в день, Speak Mode и клонирование голоса — но не приватность. Мы не считаем, что пользователи, заботящиеся о приватности, должны платить больше, чтобы их данные оставались в безопасности.
Если ваша организация исторически отклоняла инструменты перевода встреч, потому что комплаенс отказывал в отправке аудио в облако вендора, — Gaavala построена ровно для этого разговора. Тракт спроектирован так, чтобы вашим юристам, безопасности и комплаенсу приходилось проверять меньше, а не больше.
Одноразовый бесплатный пробный период: 5 минут транскрипции, никогда не сбрасывается. Без кредитной карты. Без регистрации на сайте.