Защита фотографий от скриншотов с помощью временного дизеринга

в 20:50, , рубрики: canvas, обработка изображений

Защита фотографий от скриншотов с помощью временного дизеринга

Пару дней назад Facebook запустил свою альтернативу SnapChat — сервис для передачи картинок, которые самоуничтожаются через 1, 3, 5 или 10 секунд. Это довольно глупая программа, которую молодёжь использует для непотребных целей. Многие догадались, что можно успеть заснять скриншот, прежде чем фотография исчезнет с экрана. Отправитель получает уведомление, что получатель сделал скриншот, но уже беспомощен в такой ситуации.

Можно ли защитить фотографию от снятия скриншотов? Разработчик по имени Михай Парпарита (Mihai Parparita) предлагает использовать временный дизеринг (temporal dithering). Суть в том, что оригинал фотографии передаётся двумя кадрами: положительный и отрицательный. В «положительном» кадре к каждому пикселу добавляются случайные значения RGB. В «отрицательном» кадре они же отнимаются. За счёт быстрой смены кадров положительные и отрицательные значения должны сократиться, воссоздавая в глазу зрителя оригинальную фотографию.

Технически, метод реализуется за счёт загрузки фотографии в <canvas>, где уже генерируются положительный и отрицательный кадр. Смена кадров осуществляется с помощью метода requestAnimationFrame при каждом обновлении картинки на экране (например, 60 Гц).

Демо-страница (proof-of concept)
Исходный код программы

Автор рассуждает, что такой метод, конечно, не даёт надёжной защиты. Это просто маленький трюк, который легко обойти, если модифицировать программу для снятия скриншотов. С другой стороны, компания Apple вряд ли будет модифицировать программу для снятия скриншотов на iOS из-за такой мелочи.

Метод имеет и очевидную «аналоговую дыру», ведь скриншот можно снять с помощью другого устройства.

Автор: alizar

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js