Какую информацию о нас собирают голосовые ассистенты. Часть 2.
Эксплойт
Harman Kardon Invoke и Cortana
К сожалению, Кортана не набрала той популярности, которая досталась на долю альтернативных цифровых ассистентов. Кортана предустановлена на все компьютеры с Windows 10, но ограниченный набор поддерживаемых языков и регионов позволяет насладиться всем богатством ее возможностей лишь пользователям из США и Канады. В то же время собственной мобильной ОС у Microsoft больше нет, как нет и собственных моделей смартфонов.
Компания пытается повлиять на положение дел, встроив поддержку Cortana в приложение Outlook для iOS и Android, а также в Microsoft Launcher для Android. Есть и отдельное приложение Cortana. В качестве умных колонок Кортана представлена единственной моделью — Harman Kardon Invoke.
Что представляет собой HK Invoke? Это довольно симпатичная колонка с приятным дизайном и (забегая вперед) хорошим качеством звука. К сожалению, доступна только в США, но Amazon соглашается прислать ее и в другие страны. Блок питания с американской вилкой, но поддерживает диапазон 100–230 В.

Начальная настройка Invoke с Cortana — небольшой ад. Во-первых, для настройки необходимо установить где-нибудь приложение Cortana. Не подумай, что это можно проделать на компьютере с Windows 10: Cortana там есть, но попытка настроить Invoke заканчивается сообщением в типичном для Microsoft стиле: «Something’s not right. Try again in a little bit». Нам пришлось использовать смартфон Lumia 950 с Windows 10 Mobile, без которого настройка не шла.
Активируется ассистент (после всех обновлений) простым словом Cortana. Качество распознавания хорошее, но поддерживается исключительно американский вариант английского языка.
Для проигрывания музыки есть вариант подключения через Bluetooth (циники могут подключить на вход Invoke колонку Amazon Echo Dot и наслаждаться доступом к Amazon Music). Для голосового же управления требуется платная учетная запись Spotify. Поддерживаются сервисы iHeartRadio и TuneIn, но за пределами США/Канады доступ к радиостанциям будет очень ограниченным. Обрати внимание, что для музыки через Spotify нужна платная подписка (в Google Home достаточно бесплатной), iHeartRadio не будет работать за пределами США и Канады из-за ограничений по географии. В результате музыку ты услышишь только через TuneIn; этого достаточно, чтобы оценить качество звука.
Качество звучания колонки сбалансированное. Уровень низких частот где-то посередине между первым поколением Amazon Echo и Echo Plus, а средние и высокие частоты воспроизводятся чище, чем на любой колонке от Amazon.
Микрофоны: отлично. Распознавание, в том числе во время проигрывания, — просто отлично.
Из дополнительных бонусов Microsoft предлагает пожизненную подписку на звонки через Skype на американские телефонные номера. Звонить можно прямо с колонки, номера диктовать голосом. А вот возможности расширения у колонки отсутствуют напрочь.
Что же касается собственно Cortana, то вердикт однозначен: это — только для США. Прогноз погоды выдает в градусах Фаренгейта; слышать, что за окном сейчас 31 градус, — откровенно странно. Переключить на градусы Цельсия нельзя; настройки в приложении игнорируются. Количество поддерживаемых устройств умного дома минимальное.
Стоит ли покупать колонку, если ты не живешь в США или Канаде? Как ни странно, ответ не будет однозначным. Да, за те 199 долларов, которые просили за колонку на старте продаж, покупка лишена всякого смысла (разве что с целью добавить еще одного зверька в зоопарк, как это сделали мы в нашей лаборатории). Ощущения от устройства такие же, как от многих других поделок Microsoft: идея прекрасная, железка отличная, но реализация софта — сыро, недоделано, ограниченно, с массой ошибок и невнятными сообщениями.
Однако сегодня эту колонку можно купить всего за 50 долларов (в США), что существенно дешевле, чем простые колонки с Bluetooth, обладающие заметно худшим звучанием. За 50 баксов покупка имеет смысл. А если ты время от времени звонишь на телефонные номера в США, то пожизненная подписка на неограниченные звонки через Skype на американские телефонные номера окупит невысокую стоимость колонки.
Cortana + Alexa = ?
Самый распространенный цифровой ассистент на выделенных устройствах (колонки, экраны, приставки к телевизору) — Amazon Alexa. В домах пользователей работает более 8 миллионов умных колонок Amazon Echo с Alexa — и это не считая планшетов Kindle Fire, приставок Fire TV и самых разнообразных устройств сторонних производителей (к примеру, Sonos или Lenovo).
В то же время число пользователей, на устройствах которых установлен Google Assistant, исчисляется сотнями миллионов. Но многие ли действительно пользуются голосовым ассистентом на смартфонах с Android? Количество же колонок Google Home и Google Home Mini относительно невелико.
Обратимся к статистике. В статье TechCrunch приводятся следующие цифры. Из тех пользователей, у кого есть хотя бы одна умная колонка, в 71,9% случаев это будет что-то с поддержкой Amazon Alexa, 18,4% приходится на долю Google Home.

На долю Cortana с единственной моделью Harman Kardon Invoke приходится всего 0,6% рынка — и это корректная цифра, отражающая состояние американского рынка.

Очевидно, Microsoft такое положение дел не устраивало. В августе прошлого года Microsoft и Amazon объявили об интеграции двух ассистентов, а спустя год компаниям даже удалось выпустить рабочую бета-версию.
Две огромные компании больше года не покладая рук работали над тем, чтобы Кортана могла вызвать Алексу командой «Cortana, open Alexa», после чего последующие команды обрабатывались бы уже Алексой. В обратную сторону все работает похожим образом: американский владелец колонки Echo может скомандовать «Alexa, open Cortana», после чего получит доступ ко всем способностям цифрового помощника от Microsoft. К сожалению, интеграция, даже когда она появится официально, пока заявлена только для рынка США.
Зачем это нужно обеим компаниям? Для Microsoft — очевидно, это доступ ее пользователей к музыкальному сервису Amazon Music и обширной библиотеке из более 40 тысяч поддерживаемых Алексой «умений» (skills). С точки зрения Amazon выгода менее очевидна; тем не менее Cortana гораздо лучше справляется с типично офисной работой — календарями и почтой Outlook, интеграцией с рабочим Exchange. Получше обстоят дела у Cortana и с собственно «интеллектом»: Алекса умеет больше, но Кортана больше знает.
Apple HomePod и Siri
HomePod — полная противоположность Invoke. Никаких, просто ни малейших проблем с установкой! Если ты его купил, то можешь быть уверен — оно будет работать, и скорее хорошо, чем плохо. Настройка — тапнуть по колонке разблокированным iPhone или iPad, «да», «да», «хм-м? Ну давай» (на вопрос о четырехмесячной бесплатной подписке на Apple Music). Все. Скучно? Зато работает. А вот без iPhone или iPad колонку активировать не удастся.

Микрофоны в HomePod очень хорошие — на уровне Amazon Echo Plus. Звук — отличный; впрочем, про него уже много писали и без меня. Чувствуется работа DSP: даже на низкой громкости (для меня комфортный уровень — порядка 15%) колонка заметно «басит».
Качество звука похоже на Sonos One, но работа DSP ощущается сильнее. Кроме того, у HomePod более глубокие басы. Если добавить второй HomePod, то получим стереопару, а качество звука станет еще немного лучше. Звук в целом сбалансированный (с преобладанием низких частот), слушать приятно.
Если сравнивать с Amazon Echo Plus, то звук HomePod гораздо более сбалансирован, глубже бас. Колонки играют в разных лигах. Если сравнить с Invoke (Cortana) — у HomePod глубже басы, но середина у HK мне нравится больше. В сравнении с Google Home — просто мощнее, глубже бас, лучше звучит.
А что насчет Siri? Если ты пользуешься iPhone и привык к Сири, которая говорит на русском языке, то HomePod сделает тебе отвыкнуть: Siri из HomePod готова общаться на английском, немецком, французском или испанском. С учетом того, что внутри колонки — процессор из iPhone 6 и самая свежая iOS 12, такое ограничение выглядит совершенно искусственным. Впрочем, Сири из Apple TV также не говорит по-русски, а это тем более странно, что Apple TV официально продается в России.
Полезность Siri из HomePod довольно сомнительна. Да, тут есть будильники и музыка (за дополнительные деньги). Управление устройствами умного дома? Только HomeKit, а таких на рынке сравнительно мало, и стоят они сравнительно дорого. База знаний у Siri уступает базе знаний Alexa, а тем более Google Home. Зато, по утверждениям Apple, компания не сохраняет записи твоих голосовых команд на своих серверах.
Как это работает?
Все цифровые ассистенты разные, но принцип работы у них похож. Большую часть времени колонка «спит»; активны лишь микрофоны, информация от которых обрабатывается локально самым экономным DSP. В спящем режиме все, к чему прислушивается DSP, — это кодовое слово активации цифрового помощника. Обрати внимание: на данном этапе вся обработка проходит локально.
Как только DSP распознает кодовое слово, колонка включает запись, которая будет передана на сервер для распознавания и обработки в потоковом режиме. Дальнейшие действия выполняются на сервере: распознается голосовой запрос и определяется, к какому сервису или разным сервисам его нужно отправить.
Например, простейшая команда «turn on the lights» сначала определит, на какое устройство (в какой комнате) поступил запрос, к какой именно группе элементов умного дома относится слово lights, проанализирует саму группу lights и выберет, к каким именно skills нужно адресовать команду (в моем случае это смесь из ламп Xiaomi и выключателей TP-Link, работающих по совершенно разным протоколам). Соответствующие команды будут адресованы к соответствующим сервисам (для устройств, работающих по протоколу Zigbee, колонки линейки Echo Plus могут послужить хабом), при помощи сервера полученный от них результат будет передан на колонку в виде голосового отклика и озвучен пользователю.
Примерно так выглядит обработка запроса к Alexa.

Google Home работает похожим образом, а вот Apple HomePod имеет дело с закрытой экосистемой Apple, что заметно упрощает обработку команд. В частности, устройства, работающие по протоколу Apple HomeKit, используют колонку HomePod в качестве локального хаба; при этом никакие другие устройства умного дома попросту не поддерживаются. Проще и с музыкой: если Alexa или Google Home могут играть музыку как из собственных библиотек, так и из сторонних сервисов (например, Spotify), то HomePod будет адресовать голосовые запросы исключительно к собственному сервису Apple Music.
Извлекаем данные голосовых команд
Итак, мы разобрались с тем, что знает о нас разработчик искусственного интеллекта и зачем ему это нужно. А можно ли как-то добраться до этих данных? Да, можно, причем для нескольких ассистентов мы уже разработали соответствующий софт.
Запросы к Google Assistant
Пожалуй, проще всего извлечь запросы к Google Assistant. В Google серьезно подошли к обеспечению прозрачности приватной информации. В твоей учетной записи Google доступна подробная история всех твоих голосовых запросов. По крайней мере — в теории. Если открыть страницу My activity и выбрать категорию Assistant, можно посмотреть историю голосовых запросов. В отличие от Amazon Google предоставит доступ только к распознанным фразам в текстовом виде. Включение категории Voice & Audio должно, казалось бы, предоставить доступ к оригинальным записям голосовых команд, но этого не происходит. Тем не менее просмотреть содержимое даже распознанных голосовых команд — уже интересно. Прямая ссылка.
Запросы к Amazon Alexa
У Amazon нет такого удобного и подробного портала, как у Google, однако просмотреть историю голосовых запросов все-таки можно. До недавнего времени история запросов к Alexa была доступна исключительно через приложение Alexa для смартфонов и планшетов. Не так давно появился и специальный онлайновый портал. Для того чтобы просмотреть историю своих запросов к Alexa, нужно перейти по этой ссылке.
Откроется страница управления контентом и устройствами.

Если хотя бы на одном из твоих устройств установлено приложение Alexa (и ты настроил вход в учетную запись Amazon), то ты увидишь ссылку на Alexa Privacy. Если такой ссылки нет, то в твоей учетной записи, скорее всего, нет данных Alexa.
Перейди по ссылке Alexa Privacy.

На следующей странице выбери Review Voice History.

Здесь тебе будут доступны все записанные команды и распознанные диалоги с цифровым помощником.
А что, если ты хочешь извлечь все записи, а не прокликивать многочисленные ссылки по одной? Для внутреннего использования мы написали соответствующую утилиту, но никто не мешает тебе самостоятельно оформить скрипт. Рассмотрим, как работает доступ к информации в учетных записях Amazon.
Авторизация на сервере Alexa
Первый шаг скрипта — авторизация на сервере Amazon. Авторизоваться можно одним из трех способов:
- через Web, используя логин и пароль (так работают приложения для iOS и Android);
- при помощи FIRS login;
- при помощи маркера аутентификации (token-based login), который можно извлечь из cookie браузера пользователя.
У каждого способа есть свои достоинства и недостатки.
Авторизация через веб-страницу:
- используется приложениями для iOS/Android;
- протокол OpenId2.0, архитектура REST;
- часть информации передается через cookie;
- для извлечения данных нужно парсить страницы в HTML.
Авторизация Alexa через FIRS Host:
- запросы отправляются на сервер firs-ta-g7g.amazon.com/FirsProxy;
- используется некоторыми опенсорсными утилитами (lolsborn/readsyn).
Через токен:
- токен (маркер аутентификации) можно извлечь из cookie браузера, если пользователь заходил в свою учетную запись Amazon;
- cookie, которые содержат нужные токены, короткоживущие.
Проще всего использовать логин через веб. Первым этапом происходит предварительное получение сессии, извлекаются скрытые поля ввода и все необходимые куки по адресу
https://www.amazon.com/clouddrive/ref=nav_youraccount_clddrv
При переходе выполняется несколько редиректов; итоговая страница перехода будет каждый раз отличаться. В ней содержится несколько скрытых полей ввода (кроме очевидных полей логина и пароля). Эти поля вместе с паролем и логином будут использоваться для авторизации.
Второй этап — генерация скрытого поля metadata1. Это поле содержит информацию об активности пользователя на странице авторизации (что нажал, сколько раз нажал) и прочей информации отслеживания активности пользователя (ОС, браузер, hash логина). Генерируется это поле в JavaScript перед отправкой запроса на авторизацию.
Третий этап — непосредственно авторизация. Скрытые поля, логин, пароль и metadata1 формируют тело запроса, который отправляется по адресу
https://www.amazon.com/ap/signin
Ответ содержит куки, необходимые для получения доступа к данным Alexa.
Доступная информация
Для доступа к данным мы используем официальный Alexa API от Amazon. Через API доступна масса информации, включая:
- историю запросов: распознанные запросы и запись голосовых команд;
- список устройств;
- платежные инструменты (карты, банковские счета и прочее);
- сети и пароли Wi-Fi;
- устройства умного дома;
- именованные списки;
- данные о прилинкованных учетных записях;
- комнаты и группы;
- данные подписки Amazon Music;
- слово-активатор.
Нас интересует самый первый пункт: история запросов, доступная по запросу к серверу
https://alexa.amazon.com/api/activities
Извлечение голосовых сниппетов Alexa
Для начала получим ID активности, для которой хотим получить голосовой сниппет (Recording ID):
https://alexa.amazon.com/api/activities?startTime=&size=50&offset=1
Получаем по 50 записей за запрос. Сниппеты доступны в формате WAV, закодированном Base64. Сопутствующая информация возвращается в формате JSON.
Манипулируя параметром startTime, можно получить всю историю запросов.
"activities": [ { "activityStatus": "SUCCESS", "creationTimestamp": 1519211054361 "domainAttributes": "{\"answerText\":\"I'm excellent. I've got dinosaurs on my mind. If I was around back when they roamed the Earth, I wonder what they would have asked me. Maybe, \\\"Alexa, what's that massive fireball streaking across the sky?\\\"\", …,\"questionText\":\"How are you?\" … }", "sourceDeviceIds": [ { "deviceType": "A3S5BH2HU6VAYF", "serialNumber": "G000LF0124270MVH" } ] "utteranceId": "A3S5BH2HU6VAYF:1.0/2018/02/21/11/G090LF0964270MVH/04:10::TNIH_2V.3e25613a-c544-4750-ac0d-4fa56fb53d00ZXV" ... } ]
На каждый запрос получим ответ следующего вида.

Кратко расшифруем доступные поля.
Description — распознанный текст голосового запроса и идентификатор сниппета.
activityStatus может принимать ряд значений:
- SUCCESS
- DISCARDED_NON_DEVICE_DIRECTED_INTENT (устройством запрос не распознан)
- SYSTEM_ABANDONED (запрос прерван)
utteranceId — идентификатор для доступа к сниппету.
Для получения непосредственно голосовой команды активности используем значение параметра utteranceId:
https://alexa.amazon.com/api/utterance/audio/data?id=
где id — это utteranceId активности.
В ответ сервер вернет голосовую запись в формате WAV.
Примеры запросов:
https://alexa.amazon.com/api/utterance/audio/data?id=A3S5BH2HU6VAYF:1.0/2018/03/15/10/G090LF0964270MVH/11:26::TNIH_2V.b079cf80-0bca-4f14-bdbe-5fb3d4bac993ZXV https://alexa.amazon.com/api/utterance/audio/data?id=A3S5BH2HU6VAYF:1.0/2018/03/15/10/G090LF0964270MVH/10:43::TNIH_2V.aa06d885-22e3-4adc-b684-383c2f8613abZXV https://alexa.amazon.com/api/utterance/audio/data?id=A3S5BH2HU6VAYF:1.0/2018/03/15/10/G090LF0964270MVH/10:27::TNIH_2V.55d51197-970a-4d1c-bcb1-afada4c62421ZXV
Данные приложения Alexa можно извлечь и непосредственно из смартфона.

Особого смысла в этом нет: история команд будет минимальной, основная часть запросов хранится только в облаке.
Для внутреннего использования мы написали скрипт, который позволяет авторизоваться в учетной записи Amazon, определить страну пользователя и извлечь всю доступную информацию.

Отдельной головной болью стали учетные записи с активной двухфакторной аутентификацией. Мы обнаружили, что проходить двухфакторную аутентификацию приходится отдельно для разных категорий запросов (логин и пароль остаются прежними и кешируются между сессиями).

Анализ моей собственной учетной записи вернул 1,6 Гбайт данных, из которых порядка 450 Мбайт составляли WAV-файлы голосовых запросов к Alexa за последние два года.
Заключение
Итак, мы подробно рассмотрели современных цифровых ассистентов и их физические реализации; узнали, какие данные собирают Google и Amazon и как получить к ним доступ. В нашей стране цифровые помощники больше ассоциируются со смартфонами, и производители не спешат нарушать статус-кво: поддержка русского языка ни в одной из описанных колонок не предусмотрена.