Как Apple и Google вирус побеждали
Google и Apple совместно анонсировали решения для борьбы с вирусом. Разберем в деталях как это работает, какие есть преимущества и в чем недостатки.
Пока власти оказались парализованы и шокированы внезапно случившейся необходимость хоть чуть-чуть поработать, Apple и Google выкатывают совместный API, который позволит отслеживать контакты и заражения вирусов для 3 миллиардов человек.
Приложение фиксирует все контакты человека в анонимной криптографической форме. Пока человек не заболел, вся история контактов хранится только в его телефоне и становится публичной только если получен положительный результат теста. Таким образом система позволяет сохраняя анонимность оповещать о факте контакта с инфицированными.
Как это работает?
- Раз в день устройство генерирует уникальный daily tracing key (DTK)
- На его основе каждые 15 минут генерируется новый proximity ID (pID), который транслируется через bluetooth передатчик
- Ваше устройство записывает ВСЕ чужие айдишники, которые оно видит
- Если кто-то получил положительный COVID тест, то устройство этого человека публикует все свои DTK
- Ваше устройство скачивает опубликованные DTK и сравнивает их с историей, таким образом выявляются факты контакта с covid+ людьми.
В принципе работы криптографии разобрался Андрей Тукманов:
“Устройство пользователя хранит уникальный 256 битный случайный tracing key. Этот ключ создается один раз и привязывается к устройству, в документации не содержится протокола смены владельца устройства. Каждые 24 часа генерируется новый ключ (daily tracing key), длиной 128 бит. Он вычисляется по алгоритму HDKF и зависит от tracing key и номера дня. Зная tracing key, можно вычислить daily tracing key за любой день. Алгоритм HDKF позволяет использовать случайность для устранения этой связи, однако в протоколе явно указано, что все ключи явно детерминированы. Обратная операция невозможна. Для вычисления ключа используется sha256 — одна из наиболее широко используемых хэш функций. Каждые 10 минут вычисляется новый 128 битный rolling proximity identifier. Он вычисляется по алгоритму HMAC и зависит от ключа и номера интервала с начала дня.”
Обе компании утверждают, что решение полностью приватное, контролируется пользователем, информация никогда не покидает устройство. Но есть ряд ньюансов.
Во-первых, каждый ключ это 16 байт и если мы берем текущую скорость роста зараженных, то каждому устройству необходимо будет скачать сотни мегабайт — гигибайты данных ежедневно. Следовательно, необходимо ограничить выборку. Как? Геолокация. Это немного не соотносится с заявлениями о приватности.
Во-вторых, принцип работы BTLE подразумевает возможность публикации истории mac адресов, если вы были протестированы полжительно. Существующий adtech стэк уже на базе этого может гарантированно сказать о любом случайно выбранном телефоне является ли его владелец Covid-положительным. Не секьюрно.
Третье, это потенциальная угроза дудоса (DoS). Если кто-то в качестве пранка, сознательной атаки или просто ошибки единовременно опубликует несколько тысяч (миллионов, миллиардов) ключей, это автоматически обяжет миллионы Android и iOS устройств скачать и обработать сотни мегабайт информации.
В целом это конечно крутое решение и крайне умный подход к борьбе с эпидемией. При всех потенциальных недостатках это попытка сделать privacy-preserving решение и, в любом случае, в сто раз лучше, чем та ерунда, которую изобретают и, к сожалению, пропихивают чиновники. Проблема, однако, в том, что решение является opt-in (только по согласию пользователя) и зависит от властей региона по вносу данных о результатах тестирования. Не могу представить ситуацию, чтобы условный Роспотребнадзор делился реальными данными, как минимум из-за безалаберности и вредности — отсутствия возможности злоупотреблять полномочиями.