Как спрятать любые данные в JPEG
Прошлая статья нашла своих читателей, а поэтому продолжаем!
В этот раз поговорим о JPEG…
Что нам нужно знать про JPEG и почему этот парень заслуживает отдельной статьи?
А знать нам для начала нужно то, как JPEG устроен. Начнем с того, что в JPEG не используется RGB, вместо него мы имеем дело с YCbCr.
Из чего состоит YCbCr?
Продолжим. Второй факт о JPEG — он не хранит цвет каждого пикселя. Вместо этого JPEG использует DCT-сжатие:
Изображение разбивается на компоненты YCbCr и делится на блоки 8×8 пикселей.
Каждый блок преобразуется в частотное пространство с помощью DCT (дискретное косинусное преобразование).
Высокие частоты, как правило, уменьшаются (зависит от степени сжатия)
Что такое DCT?
Это способ представить изображение (а в нашем случае каждый блок) в виде матрицы коэффициентов (или же по-другому частот), описывающих его
Низкие частоты: описывают плавные изменения (фон, крупные объекты). Изменение низких частот напрямую влияет на яркость изображения.
Средние частоты: описывают контуры объектов, крупные текстуры. Их изменения влияют на восприятие объектов и текстур на изображении, делая их более заметными или, наоборот, сглаженными.
Высокие частоты: описывают очень мелкие детали. Высокие частоты отвечают за резкость, чёткость и ощущение «детализации» в изображении.
DCT для всех трех каналов, для примера
Оно же в виде матрицы
Что мы будем делать?
Ясен ч… красен, мы будем менять последний бит в каждом элементе матрицы частот (на бит, нужны нам)!
Как это может выглядеть
А точнее, только в средних частотах. Почему?
Высокие частоты могут быть потеряны при сжатии.
Изменение низких частот влияет на яркость.
Изменение средних частот менее всего заметно человеческому глазу.
Более того, оно более незаметно и при дальнейшем анализе изображения (при сильном уровне сжатия средние частоты сами по себе могут давать энтропию, так как алгоритм сжатия уменьшает их).
Но сперва посмотрим, как изменения этой матрицы скажутся на изображении.
Затрагиваем только высокие частоты
Затрагиваем только средние частоты
Затрагиваем только низкие частоты
Затрагиваем все частоты
Примеры приведены с изменением частоты на 70% для пущей наглядность. Но для нашей задачи требуется изменение частот всего на 1 bit
Результат. Каждый пиксель другого цвета.