Cloudflare CAPTCHA tokens

May 29, 2021 16:38 · 409 words · 2 minute read

Иногда очень хорошо видно, как люди ищут проблему имея на руках решение.

Вот, например, недавно компания Cloudflare объявила о новом экспериментальном виде CAPTCHA (кстати, как оказалось, не все знают, что это не просто странное английское слово, а аббревиатура обозначающая «полностью автоматизированный публичный Тест Тьюринга для различения компьютеров и людей»): они предлагают заменить надоевшие всем картинки светофоров и пешеходных переходов на хитрое использование аппаратных ключей безопасности (Yubikey и т.п.).

Они предполагают, что это должно работать вот так:

  1. Cloudflare сомневается, что запрос к сайту сделан человеком пользующимся браузером
  2. Cloudflare отправляет браузеру WebAuthn-запрос на подтверждение человечности. Запрос включает в себя уникальный идентификатор
  3. Браузер знает что у его пользователя есть USB-брелок (аппаратный ключ безопасности) и просит его прикоснуться к нему для активации
  4. Пользователь активирует ключ и браузер подписывает идентификатор полученный от CloudFlare с помощью публичного ключа производителя USB-брелока. Этот ключ общий для большой партии (100,000+) брелоков и не может использоваться для идентификации конкретного пользователя. При этом, скопировать такой ключ с брелока невозможно, т.к. он сохранён в безопасной памяти устройства.
  5. Cloudflare получает подпись, сравнивает цепочку сертификатов чтобы найти там сертификат производителя устройств которому они доверяют (например Yubikey)

Всё это хорошо, но вообще-то не очень. В анонсе Cloudflare признают, что систему можно обойти соорудив автоматический нажиматель кнопок для аппаратных ключей безопасности. Они при этом замечают, что это всё равно будет медленнее чем существующие сервисы по решению «капч» (живые люди получают зарплату за то, что целый день ищут светофорв на картинках).

Напрашивается возражение о том, что ферма со 100,000 нажимателями всё равно будет обходиться дешевле чем даже очень низкая зарплата для людей.

Меня же беспокоит другое: практически все существующие CAPTCHA таковыми не являются. Они не имеют действенных механизмов отделения людей от роботов. Они проверяют способность пользователя решать те или иные классы задач. Задача распознавания букв на картинке, с которой всё начиналось, сложности для роботов (компьютеров) уже не представляет. Распознавание образов на фотографиях по большому счёту тоже и поэтому крупные системы проверяют не только решение задачи, но и то как во время решения ведёт себя пользователь (движения курсора, нажатия клавиш, задержки…) что несколько ближе к поставленной задаче. Ну и новая задача от Cloudflare тоже проверяет не человечность, а наличие доступа к криптографическому устройству (что врядли можно считать отличительным признаком человечности).

В общем мне кажется, что затея на этот раз у Cloudflare вышла неудачной и выиграют тут только производители аппаратных ключей безопасности, т.к. спрос на них, при таком подходе, может вырасти очень заметно. А вот решению задачи отсеивания автоматического трафика к сайтам этот подход не поможет никак. Увы.