Как Apple и Google вирус побеждали

Google и Apple совместно анонсировали решение для борьбы с вирусом. Разберем в деталях как это работает, какие есть преимущества и в чем недостатки.

Пока власти оказались парализованы и шокированы внезапно случившейся необходимость хоть чуть-чуть поработать, Apple и Google выкатывают совместный API, который позволит отслеживать история заражения для 3 миллиардов человек.

Приложение фиксирует все контакты человека в анонимной криптографической форме. Пока человек не заболел, вся история контактов хранится только в его телефоне и становится публичной только если получен положительный результат теста. Таким образом система позволяет сохраняя анонимность оповещать о факте контакта с инфицированными.

Как это работает?

  1. Раз в день устройство генерирует уникальный daily tracing key (DTK)
  2. На его основе каждые 15 минут генерируется новый proximity ID (pID), который транслируется через bluetooth передатчик
  3. Ваше устройство записывает ВСЕ чужие айдишники, которые оно видит
  4. Если кто-то получил положительный COVID тест, то устройство этого человека публикует все свои DTK
  5. Ваше устройство скачивает опубликованные 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 (только по согласию пользователя) и зависит от властей региона по вносу данных о результатах тестирования. Не могу представить ситуацию, чтобы условный Роспотребнадзор делился реальными данными, как минимум из-за безалаберности и вредности — отсутствия возможности злоупотреблять полномочиями.


API от Эпла: https://covid19-static.cdn-apple.com/applications/covid19/current/static/contact-tracing/pdf/ContactTracing-FrameworkDocumentation.pdf

Преза от Гугла: https://www.blog.google/documents/57/Overview_of_COVID-19_Contact_Tracing_Using_BLE.pdf