Поддержание LSB посредством компиляции JPG - возможно ли это? - PullRequest
0 голосов
/ 23 января 2020

Это один из тех «почти уверен, что мы нашли ответ, но надеемся, что мы ошибаемся». Мы смотрим на проблему стеганографии, и это не красиво.

Ситуация: У нас есть серия изображений. Мы хотим пометить их (водяные знаки), чтобы водяные знаки выдерживали ряд условий. Главное, мы используем формат с потерями JPG, а не без потерь, такие как PNG. Наши водяные знаки должны выдерживать скриншоты и, кроме того, должны быть невидимыми для невооруженного глаза. Наконец, они должны содержать как минимум 32 байта данных (мы ожидаем, что они будут повторять шаблоны по изображению, конечно). В связи с вышесказанным нам необходимо скрыть информацию в самих пикселях. Я пытаюсь изменить наименее значимые биты, включая использование больших блоков на «бит» (я пробовал оба приращения по 16, так как это фрагменты размера алгоритмов сжатия jpg из того, что мы понимаем, а также различные простые числа) и читаю среднее значение результирующий блок. Этот вид приводит к требованиям:

  • Должен быть .jpg
  • Должен выдерживать алгоритм сжатия jpg
  • Должен выдерживать скриншот (предположим, скриншоты сохраняются без потерь)

Проблема: Сжатие JPG, даже 100% «минимальные потери» изменяют значения пикселей. Например, если мы рисуем огромную полосу на изображении, устанавливая красный канал на 255 в блоке высотой 64 пикселя, более половины не имеют 255 в скомпилированном изображении. Это означает, что даже при использовании среднего значения блоков LSB будет случайным, а не тем, что мы «закодировали». Наш текущий прототип может взять случайное изображение, сжать сообщение в битовую строку и преобразовать его в массив XbyX, который затем накладывается на изображение с использованием LSB одного из трех цветовых каналов. Это работает и может быть обнаружено, пока оно остается BufferedImage, но как только мы конвертируем в JPG, сжатие уничтожает сообщение.

Вопрос: Есть ли способ лучше контролировать значения пикселей сжатия jpg ? Или мы просто SOOL здесь и нам нужно отказаться от этой возможности, либо перейдя к выводу PNG (маловероятно), либо нам нужно подробно разобраться в алгоритме сжатия JPG и использовать его для того, чтобы каким-то образом определить результаты шаблона LSB? Предпочтительно java, но мы открыты для поиска альтернативных языков, если есть какие-либо, которые могут решить нашу проблему (наш текущий Po C находится в java)

...