Что такое отпечаток браузера
Фингерпринт (отпечаток браузера): что это такое и как его скрыть?
Фингерпринт (отпечаток браузера, Browser Fingerprint) – это уникальный идентификатор конфигураций веб-браузера и операционной системы, который формируется на основе собранных данных различными технологиями отслеживания. При этом не используются традиционные методы отслеживания, такие как IP адреса и уникальные файлы cookie.
Цифровой отпечаток браузера имеет вид 32-битного числа шестнадцатеричной системы типа b2cf59b36581399ebf54d4ab425ac4a7, которое получается в результате обработки всех принятых от браузера данных. Полученный отпечаток браузера позволяет отслеживать пользователей в сети Интернет с точностью до 94%.
Отпечатки браузера применяются для предотвращения мошенничества и «кражи личности». Пользователь сети Интернет сам того не подозревая предоставляет данные о себе, без какого-либо на то согласия. С повышением количества собранных данных формируется профиль человека, который способен содержать в себе пол, возраст, семейное положение, финансовое состояние, интересы, привычки и т.д.
Казалось бы, это информация носит лишь поверхностный характер, без привязки к конкретному человеку. Но это лишь до поры до времени, стоит лишь раз человеку где-нибудь указать реальные персональные данные, например ФИО, телефон, адрес, фингерпринт, зафиксированный цифровым устройством позволит компаниям полностью Вас идентифицировать и тем самым дополнить сформированный профиль.
Также, Browser Fingerprinting, находит свое применения для внутренней аналитики, таким образом, действия пользователя (просмотренные страницы, клики, движения мышкой и т. п.) позволяют разработчикам получать негласную обратную связь, видеть, на, что пользователь обращает внимание в первую очередь и корректировать свои онлайн-платформы для достижения максимального отклика
Самые обычные браузерные фингерпринты мы заслужили:
Многие веб-сайты имеют встроенные инструменты для анализа браузеров и операционной системы своих посетителей. На основе собранных данных и создается уникальный цифровой отпечаток браузера. После проведения анализа все собранные данные, которые удалось получить вышеперечисленными методами, суммируются, и производится вычисление хеш-суммы, которая и является отпечатком браузера.
В интернете существует довольно много исследований и онлайн-проектов, где акцентируют особое внимание на уникальности цифровых отпечатков устройств. При этом, для масштаба своих исследований, некоторые из компаний предоставляют возможность пройти тест в режиме онлайн, такие как Panopticlick, Canvas Fingerprinting, Whoer и Am I Unique?
Сделать свой цифровой след менее уникальным помогут ручные изменения. Изменение часового пояса устройства; Установка другого языка операционной системы устройства; Установка другого языка браузера; Изменение разрешения экрана устройства; Изменение масштаба веб-страницы; Установка либо удаление плагинов браузера Отключение исполнения Flash, Javascript и WebGL Радикальные методы, но крайне неудобные для серфинга.
Использование дедиков (от слова dedicated server) до сих пор считается одним из самым эффективных способов сохранить свою анонимность. Представляет собой отдельную физическую машину, с которой не передаются никакие данные на вашу основную и рабочую.
Плюсы: Настройка HTTP/SOCKS-прокси или SSH/VPN-соединения на выбор; Контроль истории запросов; Спасает при атаке через Flash, Java, JavaScript, если использовать удаленный браузер;
Главная причина популярности и эффективности такого метода заключается в том, что такой виртуальный компьютер является совершенно новыми и чистым для интернета, работает круглосуточно и не передает никакой информации о конечном пользователе и характеристиках его компьютера (говорят Facebook отслеживает даже MAC адрес).
Конфиденциальность могут предложить антидетект-браузеры. Такие браузеры, как AdsPower, Multilogin и Linken Sphere, гарантируют анонимность путем подмены данных и уникализации цифрового отпечатка пользователя, оставляя при этом минимум следов в сети. Например, в AdsPower можно удобно изменить вышеупомянутые отпечатки:
Начать работу с AdsPower просто. Зарегитрируйте с email и скачайте программу для вашего компьютера. После того выбирайте один из пакетов и настройте прокси для начала работы. Больше обучающие материалы можно посмотрить на сайте AdsPower.
Современный интернет собирает огромную базу информации о каждом ее пользователе. Интернет общество активно создает и продвигает разнообразные инструменты для сохранения конфиденциальности онлайн, которые с одной стороны защищают от мошенников а с другой стороны помогают обходить правила для рекламодателей.
ВПН позволяет экономить на сервисах, которые разным ГЕО предлагают разные цены на свои продукты, мультипрофильные платформы позволяют организовывать и эффективно управлять большим количеством аккаунтов одновременно. Для этого, антидетект браузеры также являеются надежным инструментом, и эффективное его применение полностью оправдывают вложенные средства, помогая зарабатывать в разы больше.
Отпечаток браузера: что это, как работает, нарушает ли закон и как защититься. Часть 1
От Selectel: эта статья первая в цикле переводов очень детальной статьи об отпечатках браузера и том, как работает технология. Здесь собрано все, что вы хотели знать, но боялись спросить по этой теме.
Что такое отпечатки браузера?
Это метод, используемый сайтами и сервисами для отслеживания посетителей. Пользователям присваивается уникальный идентификатор (отпечаток). Он содержит много информации о настройках и возможностях браузера пользователей, что используется для их идентификации. Кроме того, отпечаток браузера позволяет сайтам отслеживать поведенческие паттерны, чтобы впоследствии еще точнее идентифицировать пользователей.
Уникальность примерно такая же, как у реальных отпечатков пальцев. Только последние собирает полиция для поиска подозреваемых в совершении преступлений. А вот технология отпечатка браузеров применяется вовсе не для отслеживания преступников. Ведь мы же здесь не преступники, верно?
Какие данные собирает отпечаток браузера?
О том, что человека можно отследить по IP, мы знали еще на заре существования интернета. Но в данном случае все гораздо сложнее. Отпечаток браузера включает IP-адрес, но это далеко не самая важная информация. На самом деле, для того, чтобы идентифицировать вас, IP не нужен.
Согласно исследованию EFF (Electronic Frontier Foundation), отпечаток браузера включает в себя:
Согласно еще одному исследованию, точность идентификации пользователя при помощи отпечатка браузера составляет 99,24%. Изменение одного из параметров браузера снижает точность идентификации пользователя лишь на 0,3%. Существуют тесты на отпечаток браузера, которые показывают, насколько большой объем информации собирается.
Как работает отпечаток браузера
Почему вообще возможен сбор информации о браузере? Все просто — ваш браузер обменивается данными с веб-сервером, когда вы запрашиваете адрес сайта. В обычной ситуации сайты и сервисы присваивают пользователю уникальный идентификатор.
Эта строчка из случайных букв и цифр помогает серверу узнать ваc, ассоциировать ваш браузер и ваши предпочтения с вами. Действиям, которые вы совершаете онлайн, будет присвоен примерно тот же код.
Так, если вы зашли в Twitter, где есть какая-то информация о вас, все эти данные будут автоматически связаны с тем же идентификатором.
Конечно, этот код не будет с вами до конца ваших дней. Если вы начнете серфить с другого устройства или браузера, то идентификатор, скорее всего, тоже поменяется.
Как сайты собирают пользовательские данные?
Это двухуровневый процесс, который работает как на стороне сервера, так и на стороне клиента.
На стороне сервера
Логи доступа к сайту
В этом случае речь идет о сборе данных, отправляемых браузером. Как минимум это:
Веб-серверы получают их от вашего браузера. Заголовки важны, поскольку они позволяют быть уверенным, что запрошенный сайт работает с вашим браузером.
Например, информация в заголовке позволяет сайту узнать, используете ли вы ПК или мобильное устройство. Во втором случае произойдет редирект на оптимизированную для мобильных устройств версию. К сожалению, эти же данные попадут в ваш отпечаток.
Здесь все понятно. Веб-серверы всегда обмениваются куки с браузерами. Если вы в настройках указываете возможность работы с куки, они сохраняются на вашем устройстве и отправляются на сервер, когда бы вы ни зашли на сайт, который уже посещали прежде.
Куки помогают серфить более комфортно, но они же открывают и больше информации о вас.
В этом методе используется элемент холста (canvas) HTML5, который WebGL также использует для визуализации 2D- и 3D-графики в браузере.
Этот метод обычно «заставляет» браузер обрабатывать графический контент, включая изображения, текст или то и другое разом. Для вас этот процесс незаметен, поскольку все происходит в фоне.
Как только процесс завершен, canvas fingerprinting превращает графику в хэш, который становится тем самым уникальным идентификатором, о котором мы говорили выше.
Этот метод позволяет получать следующую информацию о вашем устройстве:
Здесь подразумевается, что ваш браузер обменивается большим количеством информации благодаря:
Adobe Flash и JavaScript
Согласно FAQ AmIUnique, если у вас активирован JavaScript, то вовне передаются данные о ваших плагинах или спецификациях железа.
Если установлен и активирован Flash, то это предоставляет стороннему «наблюдателю» еще больше информации, включая:
Они играют очень важную роль в логировании. Так, вам обычно нужно решить, позволить ли браузеру обрабатывать куки или полностью удалить их.
В первом случае веб-сервер получает просто огромное количество информации о вашем устройстве и предпочтениях. Если вы не одобрите работу с куки, сайты все равно получат кое-какие данные о вашем браузере.
Зачем нужна технология отпечатка браузера?
В основном для того, чтобы пользователь устройства получил оптимизированный для его устройства сайт, вне зависимости, зашел он в интернет с планшета или смартфона.
Кроме того, технология используется для рекламы. Это просто идеальный инструмент дата-майнинга.
Так, получив собранную сервером информацию, поставщики товаров или услуг могут создавать очень тонко нацеленные рекламные кампании с персонализацией. Точность таргетирования гораздо выше, чем если использовать просто IP-адреса.
Например, рекламщики могут использовать отпечатки браузеров для того, чтобы получить список пользователей сайта, разрешение экрана которых можно назвать низким (например, 1300*768), кто ищет более качественные мониторы в интернет-магазине продавца. Или же пользователей, которые просто серфят по сайту без намерения что-либо купить.
Затем полученную информацию можно использовать для таргетирования рекламы качественных мониторов с высоким разрешением на пользователей с небольшим и устаревшим морально дисплеем.
Кроме того, технология отпечатка браузера используется еще и для:
В конечном счете, даже если отпечатки браузера используются в законных целях, это все равно очень плохо сказывается на конфиденциальности пользователей. Особенно если последние пытаются защититься при помощи VPN.
Кроме того, отпечатки браузера могут быть лучшим другом хакера. Если им известны точные данные о вашем устройстве, они могут использовать специальные эксплойты для взлома устройства. В этом нет ничего сложного — любой киберпреступник может создать поддельный сайт со скриптом снятия отпечатков пальцев.
Напомним, эта статья — только первая часть, впереди еще две. В них рассматриваются вопросы законности сбора персональных данных пользователей, возможности использования этих данных и методы защиты против слишком уж активных «собирателей».
Отпечаток браузера: что это, как работает, нарушает ли закон и как защититься. Часть 2
Так что насчет законности сбора отпечатков браузеров?
Мы детально изучили эту тему, но не смогли найти конкретных законов (речь о законодательстве США — прим. ред). Если вы можете указать статьи законов, которые регулируют сбор отпечатков браузеров в вашей стране, дайте нам знать, пожалуйста.
Зато в Европейском Союзе действуют законы и директивы (в частности, GDPR и ePrivacy Directive), которые регулируют использование отпечатков браузеров. Это вполне законно, но только в том случае, если организация может доказать необходимость выполнения такой работы.
Кроме того, для использования информации требуется согласие пользователя. Правда, есть два исключения из этого правила:
Но есть проблема — не всегда вопрос явный. Чаще всего пользователю показывают лишь баннер «Я согласен с условиями использования». Да, на баннере всегда есть ссылка на сами условия. Но кто их читает?
Так что обычно пользователь сам дает разрешение на сбор отпечатков браузера и анализ этой информации, когда кликает по кнопке «согласен».
Тест отпечатка своего браузера
Окей, выше мы обсудили, какие данные могут собираться. Но что насчет конкретной ситуации — собственного браузера?
Для того чтобы понять, какую информацию можно с его помощью собрать, проще всего воспользоваться ресурсом Device Info. Он покажет, что может получить сторонний наблюдатель с вашего браузера.
Видите этот список слева? Это далеко не все, остальная часть списка появится по мере прокрутки страницы. Город и регион на скрине не отображаются из-за использования VPN авторами.
Есть и еще несколько сайтов, которые помогают провести тест отпечатка браузера. Это Panopticlick от EFF и AmIUnique, open-source сайт.
Что такое энтропия отпечатка браузера?
Это оценка уникальности отпечатка вашего браузера. Чем выше значение энтропии, тем выше уникальность браузера.
Измеряется энтропия отпечатка браузера в битах. Проверить этот показатель можно на сайте Panopticlick.
Насколько точны эти тесты?
В целом, им можно доверять, поскольку собирают они ровно те же данные, что и сторонние ресурсы. Это если оценивать сбор информации по пунктам.
Если же говорить об оценке уникальности, то здесь не все так же хорошо, и вот почему:
Как защититься от сбора отпечатков браузера (простые методы)
Сразу же стоит сказать, что полностью блокировать формирование и сбор отпечатка браузера не получится — это базовая технология. Если хотите оградить себя на 100%, нужно просто не пользоваться интернетом.
Но количество информации, которая собирается сторонними сервисами и ресурсами, можно снизить. Здесь помогут такие инструменты.
Браузер Firefox с модифицированными настройками
Этот браузер неплох в вопросе защиты пользовательских данных. Недавно разработчики защитили пользователей Firefox от сбора отпечатков третьей стороной.
Но уровень защиты можно повысить. Для этого требуется зайти в настройки браузера, путем ввода в адресной строке «about:config». Затем выбираем и меняем следующие опции:
Еще один браузер, дружественный к пользователю и дающий серьезную защиту персональных данных. Браузер блокирует разного рода трекеры, использует HTTPS везде, где можно, и блокирует скрипты.
Кроме того, Brave дает возможность блокировать большую часть инструментов для сбора отпечатков браузера.
Мы использовали Panopticlick для оценки уровня энтропии. По сравнению с Opera получилось 16.31 бит вместо 17.89. Разница не огромная, но она все же есть.
Пользователи Brave предложили массу способов защиты от сбора отпечатков браузера. Подробностей настолько много, что в рамках одной статьи их не перечислить. Все детали доступны на Github проекта.
Специализированные расширения для браузера
Расширения — щепетильная тема, поскольку они порой повышают уникальность отпечатка браузера. Использовать их или нет — выбор пользователя.
Вот что можно рекомендовать:
Tor браузер без Tor Network
На Хабре не нужно объяснять, что такое Tor браузер. По умолчанию он предлагает ряд инструментов для защиты персональных данных:
Лучше всего это делать в Notepad++. Открываем его и добавляем в первую вкладку такие строки:
pref(‘general.config.filename’, ‘firefox.cfg’);
pref(‘general.config.obscure_value’, 0);
Затем идем в Edit — EOL Conversion, выбираем Unix (LF) и сохраняем файл как autoconfig.js в директорию Tor Browser/defaults/pref.
Потом открываем новую вкладку и копируем эти строки:
//
lockPref(‘network.proxy.type’, 0);
lockPref(‘network.proxy.socks_remote_dns’, false);
lockPref(‘extensions.torlauncher.start_tor’, false);
Название файла — firefox.cfg, его нужно сохранить в Tor Browser/Browser.
Теперь все готово. После запуска браузер покажет ошибку, но на это можно не обращать внимания.
И да, отключение сети никак не повлияет на отпечаток браузера. Panopticlick показывает уровень энтропии в 10.3 бита, это гораздо меньше, чем с браузером Brave (было 16,31 бит).
Файлы, о которых говорится выше, можно загрузить отсюда.
В третьей, заключительной части поговорим о более хардкорных методах отключения слежки. Обсудим также вопрос защиты персональных данных и прочей информации при помощи VPN.
Browser Fingerprint – анонимная идентификация браузеров
Валентин Васильев (Machinio.com)
Что же такое Browser Fingerprint? Или идентификация браузеров. Очень простая формулировка — это присвоение идентификатора браузеру. Формулировка простая, но идея очень сложная и интересная. Для чего она используется? Для чего мы хотим присвоить браузеру идентификатор?
Почему бы для этой цели не использовать просто http cookie? Ведь это очень просто, и все это умеют делать. Работает это, вы все знаете как.
Пользователь приходит на ваш сайт, мы читаем его cookie, если там есть какой-то идентификатор, значит, он у нас уже был, и мы знаем, кто он такой. Мы выполняем всю нашу аналитику, трекинг и т.д. в привязке к этому пользователю.
Если там идентификатора нет, значит, пользователь пришел к нам впервые. Мы генерируем идентификатор уникальный, GUI, бинарную строку какую-то, записываем это в cookie, и потом, когда пользователь придет в следующий раз, мы этот cookie прочитаем и поймем, что этот пользователь к нам пришел во второй, третий и последующий разы.
У сookie есть один большой недостаток — его можно очистить. Любой, даже технически неподкованный пользователь знает, как очищать cookie. Он нажимает «Настройки», заходит и очищает. Все, пользователь становится опять для вас анонимным, вы не знаете, кто он такой.
Все современные браузеры, даже Internet Explorer, кажется, предлагают режим инкогнито. Это такой режим, когда ничего не сохраняется, и когда пользователь посетил ваш сайт в этом режиме, он не оставляет никаких следов. Следующий раз, когда он зайдет в режиме инкогнито, вы опять же не узнаете, кто он такой и был ли он у вас до этого. Т.е. в режиме инкогнито http cookie работать не будут.
В настоящее время в связи с популярностью таких персонажей как Сноуден и т.д. многие предпочитают разные режимы приватности, анонимности в Интернете, режимы, плагины и что угодно. Все это препятствует трекингу и идентификации в Интернете. Многие пользователи этим пользуются, даже не понимая, зачем. Просто устанавливают, просто потому, что это модно. И они становятся для вас опять же анонимными. Http cookie в этом случае работать не будут.
Как программисты пытались и пытаются решить эту проблему?
Наиболее успешным проектом в сфере сохранения информации в cookie так, чтобы невозможно было ее удалить, на мой взгляд, является проект evercookie, или persistent cookie — неудаляемый cookie, трудно удаляемый cookie. Суть его заключается в том, что evercookie не просто хранит информацию в одном хранилище, таком как http cookie, он использует все доступные хранилища современных браузеров. И хранит вашу информацию, например, идентификатор. Начинает он использовать http cookies, записывает идентификатор туда, затем, если в браузере доступен Flash, он использует local shared objects для записи информации в т.н. Flash cookies.
Flash cookies до недавнего времени не очищались, когда вы очищали cookie. Лишь последние версии Google Chrome умеют очищать Flash cookie, когда вы очищаете обычные cookie. Т.е. до недавнего времени Flash cookies были практически неудаляемыми. Существовала специальная страница на сайте macromedia, куда нужно было зайти, нажать кнопку: «Да, я хочу очистить Flash cookies», и тогда они очищаются, т.е. без этой страницы было очистить невозможно.
Далее, evercookie использует Silverlight Cookies. По-другому они называются Isolated Storage. Это специальное выделенное место на жестком диске компьютера пользователя, куда пишется cookie информация. Найти это место невозможно, если вы не знаете точный путь. Оно прячется где-то в документах, Setting’ах, если на Windows, глубоко в недрах компьютера. И эти данные удалить, при помощи очистки cookie невозможно.
Далее. Evercookie использует такую инновационную технику как PNG Cookies. Суть заключается в том, что браузер отдает картинку, в которой в байты этой картинки закодирована информация, которую вы сохранили, например, идентификатор. Эта картинка отдается с директивой кэширования навсегда, допустим, на следующие 50 лет. Браузер кэширует эту картинку, а затем при последующем посещении пользователем при помощи Canvas API считываются байты из этой картинки, и восстанавливается та информация, которую вы хотели сохранить в cookie. Т.о. даже если пользователь очистил cookie, эта картинка с закодированным cookie в PNG по-прежнему будет находиться в кэше браузера, и Canvas API сможет ее считать при последующем посещении.
Evercookie использует все доступные хранилища браузера — современный HTML 5 стандарт, Session Storage, Local Storage, Indexed DB и другие.
Также используется ETag header — это http заголовок, очень короткий, но в нем можно закодировать какую-то информацию, и если установлен Java, то используется java presistence API.
Evercookie — очень умный плагин, который может сохранять ваши данные практически везде. Для обычного пользователя, который не знает всего этого, удалить эти cookies просто невозможно. Нужно посетить 6-8 мест на жестком диске, проделать ряд манипуляций для того, чтобы только их очистить. Поэтому обычный пользователь, когда посещает сайт, который использует evercookie, наверняка не будет анонимным.
Несмотря на все это, evercookie не работает в инкогнито режиме. Как только вы зашли в инкогнито режим, никакие данные не сохраняются на диске, потому что это основополагающая суть инкогнито режима — вы должны быть анонимными. А еvercookie использует хранение на жестком диске, которое в этом режиме не работает.
FingerprintJS — это маленькая библиотечка, которую я написал, и которая пытается решить эти проблемы. Я расскажу, как она это делает, и что из этого получилось.
Написал я ее в 2012 году. Я тогда работал в «КупиКупон» Ruby разработчиком. И у меня была задача сделать такую систему аналитики, чтобы учитывать не просто залогиненных пользователей, т.е. тех пользователей, которые есть у нас в системе, а также анонимных пользователей. Конкретно на сайте «КупиКупон» было много анонимных пользователей, потому что люди часто приходили извне посмотреть на какие-то купоны, скидки, предложения, у них ни у кого не было учетной записи, и поэтому система трекинга, система отслеживания посещаемых страниц, нажатия на кнопки — все это не работало, потому что пользователи были анонимными.
FingerprintJS, вообще, не использует cookie. Никакая информация не сохраняется на жестком диске компьютера, где установлен браузер. Работает в инкогнито режиме, потому что в принципе не использует хранение на жестком диске. Не имеет зависимостей, работает даже без jQuery, и размер — 1,2 Кб gzipped.
На данный момент используется в таких компаниях как Baidu, это Google в Китае, MasterCard, сайт президента США, AddThis — сайт размещениz виджетов и т.д.
Эта библиотека быстро стала очень популярной. Она используется примерно на 6-7% всех самых посещаемых сайтов в Интернете на данный момент.
Как она работает, расскажу детально. Суть ее в том, что код этой библиотеки опрашивает браузер пользователя на предмет всех специфичных и уникальных настроек и данных для этого браузера и для этой системы, для компьютера. Эти данные объединяются в огромную строку, затем они подаются на вход функции хэширования. Функция хэширования берет эти данные и превращает их в компактные красивые идентификаторы. Как детально это работает, я расскажу.
Сначала считывается userAgent navigator. Допустим, тут он обрезан, это присоединяется к итоговой строке отпечатка.
Считывается язык браузера — какой у вас язык — английский, русский, португальский и т.д. Тоже присоединяется к строке отпечатка.
Считывается часовой пояс, это количество минут от UTC:
Это –3, получается Москва.
Далее получается размер экрана, массив, глубина цвета экрана.
Затем происходит получение всех поддерживаемых HTML5 технологий, т.е. у каждого браузера поддержка отличается. FingerprintJS пытается определить, какие поддерживаются, какие — нет, и для каждой технологии результат опроса наличия этой технологии и степень ее поддержки прибавляется к итоговой функции отпечатка.
SessionStorage, LocalStorage, IndexedDB, OpenDatabase и другие всевозможные.
Опрашиваются данные, специфичные для пользователя и для платформы, такие как настройка doNotTrack (очень иронично, что настройка doNotTrack используется как раз для трекинга), cpuClass процессора, platform и другие данные.
Здесь у вас может возникнуть закономерный вопрос — ведь у очень многих пользователей эти данные они одинаковые? Допустим, пользователь живет в Москве, у него будет одинаковый язык, последний Chrome, у него будет все практически одинаково, и все эти строки, которые были получены на данном этапе, будут одинаковые. Как это поможет идентифицировать пользователя?
Есть еще 2 способа, которые добавляют уникальности.
Тут показано, как это работает. Мы получаем все эти данные. Потом мы передаем их в функцию хэширования, в FingerprintJS используется nomo hash2, и на выходе мы получаем 32-х битное число. Это и есть ваш идентификатор. Т.о., когда пользователь заходит на наш сайт, ему присваивается номер. Этот номер вы считываете и используете, как хотите, — вы базируете на нем свою аналитику и т.д.
Тут вопрос: насколько уникально и точно определение? Исследование, за основу которого было взято, было сделано компанией Electronic Frontier Foundation, у них был проект Panopticlick. Оно говорит, что уникальность составляет порядка 94%, но на реальных данных, которые были у меня, уникальность составляла около 90%-91%.
Библиотеку стало использовать много людей и компаний, и с течением времени выявился ряд недостатков. Т.е. она неидеальна, у нее есть недостатки. Самый главный недостаток — то, что точность идентификации только 90%, но есть и другие недостатки.
Я ее начал делать совсем недавно, разработка ведется на github.
Как она решает существующие проблемы? Самое главное — используется фазихэширование или localsensitivehash, или нечеткое хэширование. Такое хэширование, которое не меняется, даже если в обычном хэшировании, если вы измените хотя бы один байт входящей информации, выходящая строка тоже изменится, причем кардинальным образом. В фазихэшировании этого не происходит, тут есть порог чувствительности, когда определенный процент входящих данных может измениться, что не повлияет на исходящий отпечаток. Допустим, если поменялась в UserAgent только версия браузера, это случается очень часто, допустим, в Chrome, то результирующий отпечаток будет одинаковым, потому что версия составляет 3 или 5 % от общей длины от UserAgent.
Второе — в FingerprintJS 2 используется определение установленных шрифтов, всех шрифтов, которые установлены в системе. Чем это полезно? Если вы поставили программу, допустим, adobe pdf, то вы добавляете в систему шрифты.
Если вы поставили Microsoft Office, вы добавляете в систему шрифты; если вы поставили какой-нибудь Quick office, который имеет собственные шрифты, вы опять же добавляете в систему шрифты. И поэтому у вас может быть два абсолютно одинаковых компьютера, но на одном установлен Office, а на другом — нет. Это значит, что на первом, где нет Office, будет 320 доступных шрифтов, а, где есть Office — 1700 шрифтов. И значит, что вы сможете получить все шрифты, которые есть на этом компьютере, опять же, для итогового отпечатка. Это будет два разных отпечатка, потому что шрифты разные.
По умолчанию используется Flash, маленький swf файл размером 916 байт. Он получает список всех установленных шрифтов, причем в платформозависимом порядке, т.к. они доступны в системе, так они и будут возвращены. Если Flash не установлен, используется такая техника, она называется site chanel technic. Она впервые была опубликована на сайте lalit.org. Это определение наличия шрифта с помощью javascript only. Как это делается? Для каждого референтного шрифта, который задан по умолчанию в браузере или в системе, измеряется его ширина и высота, и этот массив ширины и высоты сохраняется. Затем к скрытому тексту (текст, кстати, огромный, допустим, 72 пикселя) применяется другой шрифт. Если этот шрифт есть в системе, текст изменит свои габариты правильно, и код, который изменяет высоту и ширину, получит новый массив, с высотой и шириной. Если он отличается от референтного, от того, который был получен при запросе дефолтного шрифта, значит, этот шрифт установлен. Если не отличается, значит, этого шрифта нет.
Очень простая идея, но она работает. На данный момент этот код может достоверно определить около 500 шрифтов без использования Flash. И, соответственно, тот компьютер, где есть Microsoft Office, и тот, где его нет, будут по-разному определены в FingerprintJS 2 за счет этой техники.
Третье отличие — WebGL Fingerprint. Это развитие идеи Сanvas Fingerprint. Суть его заключается в том, что рисуются 3D треугольники (на слайде не очень хорошо видно, но это 3D). На него накладываются эффекты, градиент, разная анизотропная фильтрация и т.д. И затем он преобразуется в байтовый массив. Результирующий байтовый массив, как и в случае с Canvas Fingerprint, будет разный на многих компьютерах. Потом к этому байтовому массиву еще добавляется информация о платформозависимых константах, которые определены в WebGL. Т.е. в WebGL есть набор констант, которые должны быть обязательно в реализации. Это глубина цвета, максимальный размер текстур… Этих констант очень много, их десятки. Код опрашивает все эти константы и, понятное дело, что на android-девайсах эти константы будут отличаться, там глубина цвета может быть другой, чем на Windows или чем на linux’е. Он опрашивает все эти константы, все это опять же складывается в огромный массив, и все это добавляется к сериализованному изображению 3D треугольника, который нарисован при помощи аппаратных эффектов.
Тут тоже такой вопрос: как это помогает идентифцировать? 3D графика очень платформозависима, версия драйверов, версия видеокарты, стандарт OpenGL в системе, версия шейдерного языка, — все это будет влиять на то, как внутри будет нарисовано это изображение. И когда оно будет преобразовано в байтовый массив, оно будет разное на многих компьютерах.
Почему WebGl Fingerprint важен? Потому что IOS 8.1 поддерживает WebGL, а это помогает идентифицировать IOS девайсы, о проблеме идентификации которых я упоминал. Поэтому WebGL повышает точность Fingerprint.
Что еще предстоит реализовать?
Как я говорил, библиотека находится в разработке и не все вещи, которые я бы хотел в ней сделать, сделаны. Вокруг нее уже есть небольшое сообщество разработчиков. Я, кстати, приглашаю всех желающих участвовать в разработке — она очень интересная, мы очень неформальны, каждый предлагает идеи, там достаточно интересно.
Что предстоит еще реализовать? WebRTC Fingerprinting.
WebRTC — это стандарт peer-to-peer коммуникаций через аудиопотоки, или это стандарт аудиокоммуникаций в современных браузерах. Он позволяет делать аудиозвонки и т.д., он поддерживается в FireFox и будет скоро поддерживаться в других браузерах.
Реализация WebRTC стандарта тоже платформозависима, она будет зависеть от той видеокарты, которая установлена в системе, от драйверов на звук и т.д. Поэтому, измеряя разные уровни латентности, разные уровни поддержки WebRTC и констант, которые зашиты в этом формате, можно получить разные итоговые отпечатки для разных компьютеров.
Будет использоваться больше плагинов для IE. Будут использованы те плагины, которые популярны в разных странах — Китае, Индии и т.д., т.е. растущие информационные рынки. В первой версии недостаточно внимания было уделено этой проблеме, а во второй версии это будет решено.
Больше информации будет собираться об ОС. Как мы это будем делать? Будет использоваться интеграция с Flash и Silverlight. Flash позволяет получать информацию о системе, такую как версия ядра, патч левел ядра. Silverlight, если на Windows, позволяет получить версию Windows, bild, номер Windows, все это доступно через Silverlight.
Пару слов о Silverlight, почему интеграция с sliverlight тоже достаточно важна? Может быть, в России Silverlight плагин не очень популярен, но в США, например, есть сервис стримингового видео Netflix, который транслирует видео, и я знаю точно, что они используют Silverlight. Ввиду того, что он поддерживает DRM (это система ограничения цифровых прав на контент), т.к. Netflix часто показывают разные свежие голливудские фильмы, они используют Silverlight для того, чтобы это видео не расходилось по Интернету. Поэтому в США у многих десктопных пользователей Интернета установлен Silverlight плагин, который, кстати, доступен и на Mac’е тоже, помимо Windows.
Будет реализовано определение наличия нескольких мониторов. Если мы запросим размеры через javascript, то получим просто два числа — это ширина и высота экрана. Если мы сделаем то же самое через Flash API, Actionscript API, мы получим массив массивов. Это значит, что если установлено несколько мониторов, где каждый подмассив — это будет размер экрана каждого монитора. Если разработчик сидит за пятью мониторами, он получит массив массивов из пяти элементов, т. о., мы узнаем, что человек сидит за пятью мониторами, а не за основным монитором, который вернул бы javascript.
Все эти данные в совокупности позволяют на данный момент получить точность определения порядка 94-95%. Но, как вы понимаете, это недостаточная точность идентификации. Тут встает вопрос: каким образом это можно улучшить, и можно ли это улучшить? Я считаю, что можно. Цель этого проекта — достичь 100% идентификации так, чтобы можно было опираться на Fingerprint в 100% случаях и гарантированно сказать: «Да, этот пользователь к нам приходил; да, я все о нем знаю, несмотря на то, что он использует инкогнито mode, tor сеть…». Не важно, все это будет определено.
Контакты
Этот доклад — расшифровка одного из лучших выступлений на конференции фронтенд-разработчиков FrontendConf.
Ну и главная новость — мы начали подготовку весеннего фестиваля «Российские интернет-технологии», в который входит восемь конференций, включая FrontendConf.