В понедельник на конференции WWDC компания Apple представила классную новую функцию под названием “Find My". В отличие от стандартной «Найти мой iPhone», которая полагается на инфраструктуру сотовой связи и GPS потерянного устройства, функция «Найди меня» способна найти даже устройства без сим-карты и GPS. Например, ноутбуки, или даже «тупые» метки локации, прикреплённые к любому предмету (Apple намекнула на это только в широком смысле).
Идея заключается в том, чтобы превратить всю существующую сеть айфонов в масштабную краудсорсинговую систему по отслеживанию окружающих объектов. Каждый активный iPhone будет постоянно отслеживать сообщения маячков BLE, которые поступают с других устройств. Когда он находит один из этих сигналов, то помечает пакет своими координатами GPS — и отправляет на серверы Apple. Это очень здорово для растеряш вроде меня, которые постоянно теряют вещи: если я оставлю свой рюкзакв туристическом автобусе в Китае в офисе, то рано или поздно кто-то наткнётся на его сигнал — и я мгновенно узнаю, где его найти.
(Стоит отметить, что идею придумала не Apple. На самом деле компании вроде Tile работают довольно давно. И да, им стоит беспокоиться за свой бизнес).
Если вас не впечатлило описание выше, позвольте озвучить вопрос, который вы должны задать: как эта система защитит от массовых нарушений конфиденциальности?
Перечислим потенциальные проблемы:
Хорошая новость в том, что Apple утверждает, что система действительно обеспечивает надёжную конфиденциальность благодаря грамотному применению криптографии. Но, как обычно, они отказались сообщать детали реализации. Энди Гринберг в Wired рассказал частичную техническую реализацию со слов Apple, которая позволяет многое понять. К сожалению, этот рассказ по-прежнему оставляет огромные пробелы. Именно их я собираюсь заполнить, предложив наиболее вероятное описание, что же Apple делает на самом деле.
Большая оговорка: многое может оказаться совершенно неправильным. Я обязательно обновлю статью, когда Apple поведает больше.
Чтобы изложить сценарий, нужно ввести в картину несколько устройств. Для вдохновения возьмём телесериал 1950-х годов «Лесси».
Первое устройство, которое мы назовём Тимми, «потеряно». У Тимми есть радиопередатчик BLE, но нет GPS или подключения к интернету. К счастью, он уже спаривался со вторым устройством под названием Рут, которая хочет его найти. Наш главный герой — Лесси: это айфон случайного (и не знающего об этом) незнакомца, у которого (предположим) есть по крайней мере периодическое подключение к интернету и надёжный GPS. А ещё Лесси очень хорошая девочка. Сетевые устройства взаимодействуют через серверы iCloud Apple, как показано ниже:
(Поскольку Тимми и Рут должны быть спарены заранее, вероятно, они оба принадлежат одному и тому же человеку. Я упоминал, что вам нужно будет купить два устройства Apple, чтобы система работала? Это вполне устраивает Apple).
Мы рассматриваем систему безопасности, поэтому первый вопрос: кто плохой парень? В этой ситуации ответ неприятный: потенциальным злоумышленником может быть кто угодно. Вот почему проблема настолько интересная.
Самый важный аспект системы — нельзя позволять посторонним лицам отслеживать Тимми, особенно когда он не потерян. Это исключает некоторые довольно очевидные решения, например, когда устройство Тимми просто кричит: «Привет, меня зовут Тимми, пожалуйста, позвоните моей маме Рут и сообщите, что я потерялся». Это также исключает практически любой неизменный статический идентификатор, даже непрозрачный и похожий на случайный.
Последнее требование составлено из печального опыта сервисов, которые злоупотребляют статическими идентификаторами (например, ваш MAC-адрес WiFi) для отслеживания перемещения устройств. Apple со смешанным успехом борется с этой слежкой путём рандомизации идентификаторов, таких как MAC-адреса. Если Apple добавит статический идентификатор отслеживания для “Find My”, все проблемы лишь усугубятся.
Это требование означает, что любые сообщения, передаваемые Тимми, должны быть непрозрачными. Более того, содержание этих сообщений должно относительно часто изменяться на новые значения, которые нельзя связать со старыми. Один из очевидных способов спаренному устройству распознать такие сообщения — заставить Тимми и Рут согласовать длинный список случайных «псевдонимов» для Тимми, и пусть Тимми каждый раз выбирает другой.
Это реально помогает. Каждый раз, когда Лесси видит какое-то (неизвестное) устройство, передающее идентификатор, она не будет знать, принадлежит ли оно Тимми: но она может отправить его на серверы Apple вместе со своим собственным местоположением GPS. В случае, если Тимми потеряется, Рут может попросить Apple найти все возможные псевдонимы Тимми. В этой ситуации никто за пределами Apple не узнает этот список, и даже сама Apple узнает его только после того, как кто-то потеряется, поэтому такой подход предотвращает большинство вариантов отслеживания.
Немного более эффективный способ реализовать эту идею — использовать криптографическую функцию (например, MAC или хеш-функцию), чтобы сгенерировать список псевдонимов из одного короткого «сида», копии которого хранят Тимми и Рут. Это хорошо, потому что уменьшает объём хранимых данных. Но чтобы найти Тимми, Рут всё равно должна отправить все псевдонимы — или сид — в компанию Apple, которой придётся искать каждый псевдоним в своей базе данных.
Описанный подход с псевдонимами должен хорошо скрывать личность Тимми от Лесси и даже от Apple (вплоть до того момента, когда Рут начинает его искать). Однако есть большой недостаток: он не скрывает GPS-координаты Лесси.
Это плохо, по крайней мере, по нескольким причинам. Каждый раз, когда Лесси обнаруживает какое-либо устройство с сигналом BLE, она должна передать на серверы Apple своё текущее местоположение (вместе с псевдонимом, который она видит). Это означает, что Лесси постоянно говорит Apple, где она находится. И более того, даже если Apple обещает не хранить личность Лесси, результатом всех этих сообщений является огромная централизованная база данных, которая показывает все местоположения GPS, где обнаружено любое устройство Apple.
Обратите внимание, что массив таких данных сам по себе выдаёт очень много информации. Да, идентификаторы устройств могут быть псевдонимами — но это не делает информацию бесполезной. Например, если какое-то устройство Apple транслирует одни и те же координаты по вечерам, то это выдаёт вероятный адрес проживания человека.
Очевидный способ предотвратить раскрытие этих данных Apple — зашифровать их, чтобы информацию видели только те, кому действительно нужно знать местоположение устройства. Если Лесси принимает сообщение от Тимми, то единственный человек, которому действительно нужно знать местоположение Лесси, это Рут. Чтобы сохранить эту информацию в тайне, Лесси должна зашифровать свои координаты открытым ключом Рут.
Конечно, возникает вопрос: как Лесси получит ключ Рут? Очевидное решение для Тимми — выкрикивать открытый ключ Рут в каждой своей трансляции. Но это создаст статический идентификатор, который опять позволит отследить Тимми.
Для решения этой проблемы нужно, чтобы у Рут было много непривязанных публичных ключей, чтобы Тимми мог выдавать разные ключи с каждой трансляцией. Один из вариантов — заставить Рут и Тимми генерировать много разных общих пар ключей (или генерировать много таких пар из общего сида). Но это раздражает, а Рут придётся хранить многих секретных ключей. И идентификаторы, упомянутые в предыдущем разделе, могут быть получены путём хеширования каждого открытого ключа.
Немного лучший подход (который Apple может использовать или нет) предполагает рандомизацию ключей. Это особенность некоторых криптосистемам, таких как Elgamal: она позволяет любой стороне рандомизировать открытый ключ, так что он никак не будет связан с оригиналом. Лучшая часть этой функции заключается в том, что Рут может использовать один секретный ключ независимо от того, какая рандомизированная версия её открытого ключа использовалась для шифрования.
Всё это приводит к окончательной идее протокола. В каждой трансляции Тимми передаёт новый псевдоним и рандомизированную копию открытого ключа Рут. Когда Лесси получает трансляцию, она шифрует свои GPS-координаты открытым ключом и отправляет зашифрованное сообщение в Apple. Рут может отправить псевдонимы Тимми на серверы Apple, и если Apple найдёт совпадение, то сможет получить и расшифровать координаты GPS.
Неприятная вещь в том, что нет идеального решения для многих странных пограничных ситуаций. Например, что, если у Тимми злые намерения и он хочет заставить Лесси раскрыть своё местоположение Apple? Что, если Старик Смитерс попытается похитить Лесси?
В какой-то момент ответ на этот вопрос сводится к тому, что мы сделали всё возможное: любые остающиеся проблемы следует вынести за рамки модели угрозы. Иногда даже Лесси знает, когда остановиться.
Идея заключается в том, чтобы превратить всю существующую сеть айфонов в масштабную краудсорсинговую систему по отслеживанию окружающих объектов. Каждый активный iPhone будет постоянно отслеживать сообщения маячков BLE, которые поступают с других устройств. Когда он находит один из этих сигналов, то помечает пакет своими координатами GPS — и отправляет на серверы Apple. Это очень здорово для растеряш вроде меня, которые постоянно теряют вещи: если я оставлю свой рюкзак
(Стоит отметить, что идею придумала не Apple. На самом деле компании вроде Tile работают довольно давно. И да, им стоит беспокоиться за свой бизнес).
Если вас не впечатлило описание выше, позвольте озвучить вопрос, который вы должны задать: как эта система защитит от массовых нарушений конфиденциальности?
Перечислим потенциальные проблемы:
- Если устройство постоянно излучает сигнал BLE, который однозначно его идентифицирует, у всех появился (ещё один) способ вас отслеживать. Маркетологи уже используют для этого MAC-адреса WiFi и Bluetooth, а функция Find My создаёт ещё один канал отслеживания.
- Она также рассекречивает тех, кто участвует в процессе. Теперь эти люди будут отправлять в Apple своё текущее местоположение (возможно, они и так это делают). Но теперь им придётся делиться данной информацией также с незнакомцами, которые «теряют» свои устройства. Это может плохо кончиться.
- Мошенники также могут запускать активные атаки, в которых подделывают местоположение вашего устройства. Хотя это кажется маловероятным, но люди всегда удивляют.
Хорошая новость в том, что Apple утверждает, что система действительно обеспечивает надёжную конфиденциальность благодаря грамотному применению криптографии. Но, как обычно, они отказались сообщать детали реализации. Энди Гринберг в Wired рассказал частичную техническую реализацию со слов Apple, которая позволяет многое понять. К сожалению, этот рассказ по-прежнему оставляет огромные пробелы. Именно их я собираюсь заполнить, предложив наиболее вероятное описание, что же Apple делает на самом деле.
Большая оговорка: многое может оказаться совершенно неправильным. Я обязательно обновлю статью, когда Apple поведает больше.
Некоторые основные проблемы
Чтобы изложить сценарий, нужно ввести в картину несколько устройств. Для вдохновения возьмём телесериал 1950-х годов «Лесси».
Первое устройство, которое мы назовём Тимми, «потеряно». У Тимми есть радиопередатчик BLE, но нет GPS или подключения к интернету. К счастью, он уже спаривался со вторым устройством под названием Рут, которая хочет его найти. Наш главный герой — Лесси: это айфон случайного (и не знающего об этом) незнакомца, у которого (предположим) есть по крайней мере периодическое подключение к интернету и надёжный GPS. А ещё Лесси очень хорошая девочка. Сетевые устройства взаимодействуют через серверы iCloud Apple, как показано ниже:
(Поскольку Тимми и Рут должны быть спарены заранее, вероятно, они оба принадлежат одному и тому же человеку. Я упоминал, что вам нужно будет купить два устройства Apple, чтобы система работала? Это вполне устраивает Apple).
Мы рассматриваем систему безопасности, поэтому первый вопрос: кто плохой парень? В этой ситуации ответ неприятный: потенциальным злоумышленником может быть кто угодно. Вот почему проблема настолько интересная.
Сохранение анонимности Тимми
Самый важный аспект системы — нельзя позволять посторонним лицам отслеживать Тимми, особенно когда он не потерян. Это исключает некоторые довольно очевидные решения, например, когда устройство Тимми просто кричит: «Привет, меня зовут Тимми, пожалуйста, позвоните моей маме Рут и сообщите, что я потерялся». Это также исключает практически любой неизменный статический идентификатор, даже непрозрачный и похожий на случайный.
Последнее требование составлено из печального опыта сервисов, которые злоупотребляют статическими идентификаторами (например, ваш MAC-адрес WiFi) для отслеживания перемещения устройств. Apple со смешанным успехом борется с этой слежкой путём рандомизации идентификаторов, таких как MAC-адреса. Если Apple добавит статический идентификатор отслеживания для “Find My”, все проблемы лишь усугубятся.
Это требование означает, что любые сообщения, передаваемые Тимми, должны быть непрозрачными. Более того, содержание этих сообщений должно относительно часто изменяться на новые значения, которые нельзя связать со старыми. Один из очевидных способов спаренному устройству распознать такие сообщения — заставить Тимми и Рут согласовать длинный список случайных «псевдонимов» для Тимми, и пусть Тимми каждый раз выбирает другой.
Это реально помогает. Каждый раз, когда Лесси видит какое-то (неизвестное) устройство, передающее идентификатор, она не будет знать, принадлежит ли оно Тимми: но она может отправить его на серверы Apple вместе со своим собственным местоположением GPS. В случае, если Тимми потеряется, Рут может попросить Apple найти все возможные псевдонимы Тимми. В этой ситуации никто за пределами Apple не узнает этот список, и даже сама Apple узнает его только после того, как кто-то потеряется, поэтому такой подход предотвращает большинство вариантов отслеживания.
Немного более эффективный способ реализовать эту идею — использовать криптографическую функцию (например, MAC или хеш-функцию), чтобы сгенерировать список псевдонимов из одного короткого «сида», копии которого хранят Тимми и Рут. Это хорошо, потому что уменьшает объём хранимых данных. Но чтобы найти Тимми, Рут всё равно должна отправить все псевдонимы — или сид — в компанию Apple, которой придётся искать каждый псевдоним в своей базе данных.
Скрытие местонахождения Лесси
Описанный подход с псевдонимами должен хорошо скрывать личность Тимми от Лесси и даже от Apple (вплоть до того момента, когда Рут начинает его искать). Однако есть большой недостаток: он не скрывает GPS-координаты Лесси.
Это плохо, по крайней мере, по нескольким причинам. Каждый раз, когда Лесси обнаруживает какое-либо устройство с сигналом BLE, она должна передать на серверы Apple своё текущее местоположение (вместе с псевдонимом, который она видит). Это означает, что Лесси постоянно говорит Apple, где она находится. И более того, даже если Apple обещает не хранить личность Лесси, результатом всех этих сообщений является огромная централизованная база данных, которая показывает все местоположения GPS, где обнаружено любое устройство Apple.
Обратите внимание, что массив таких данных сам по себе выдаёт очень много информации. Да, идентификаторы устройств могут быть псевдонимами — но это не делает информацию бесполезной. Например, если какое-то устройство Apple транслирует одни и те же координаты по вечерам, то это выдаёт вероятный адрес проживания человека.
Очевидный способ предотвратить раскрытие этих данных Apple — зашифровать их, чтобы информацию видели только те, кому действительно нужно знать местоположение устройства. Если Лесси принимает сообщение от Тимми, то единственный человек, которому действительно нужно знать местоположение Лесси, это Рут. Чтобы сохранить эту информацию в тайне, Лесси должна зашифровать свои координаты открытым ключом Рут.
Конечно, возникает вопрос: как Лесси получит ключ Рут? Очевидное решение для Тимми — выкрикивать открытый ключ Рут в каждой своей трансляции. Но это создаст статический идентификатор, который опять позволит отследить Тимми.
Для решения этой проблемы нужно, чтобы у Рут было много непривязанных публичных ключей, чтобы Тимми мог выдавать разные ключи с каждой трансляцией. Один из вариантов — заставить Рут и Тимми генерировать много разных общих пар ключей (или генерировать много таких пар из общего сида). Но это раздражает, а Рут придётся хранить многих секретных ключей. И идентификаторы, упомянутые в предыдущем разделе, могут быть получены путём хеширования каждого открытого ключа.
Немного лучший подход (который Apple может использовать или нет) предполагает рандомизацию ключей. Это особенность некоторых криптосистемам, таких как Elgamal: она позволяет любой стороне рандомизировать открытый ключ, так что он никак не будет связан с оригиналом. Лучшая часть этой функции заключается в том, что Рут может использовать один секретный ключ независимо от того, какая рандомизированная версия её открытого ключа использовалась для шифрования.
Всё это приводит к окончательной идее протокола. В каждой трансляции Тимми передаёт новый псевдоним и рандомизированную копию открытого ключа Рут. Когда Лесси получает трансляцию, она шифрует свои GPS-координаты открытым ключом и отправляет зашифрованное сообщение в Apple. Рут может отправить псевдонимы Тимми на серверы Apple, и если Apple найдёт совпадение, то сможет получить и расшифровать координаты GPS.
Это решает все проблемы?
Неприятная вещь в том, что нет идеального решения для многих странных пограничных ситуаций. Например, что, если у Тимми злые намерения и он хочет заставить Лесси раскрыть своё местоположение Apple? Что, если Старик Смитерс попытается похитить Лесси?
В какой-то момент ответ на этот вопрос сводится к тому, что мы сделали всё возможное: любые остающиеся проблемы следует вынести за рамки модели угрозы. Иногда даже Лесси знает, когда остановиться.