Хорошая библиотека для цифровых водяных знаков

может кто-нибудь помочь мне найти библиотеку или подробное описание алгоритма, который мог бы встроить цифровой водяной знак(невидимый водяной знак, просто своего рода стеганография) в файл jpeg/png. Но качество алгоритма должно быть отличным. Должна быть возможность извлечь эту метку после поворота и расширения(если это возможно) изображения.

Марк - это всего лишь ключ 32bytes.

Я нашел хороший сайт, но алгоритм сделан для формата NetPBM, который мертв...

Я знаю, что существует метод LSB, но он не стабилен для расширения. Есть что-то получше?

изменение метаданных, не подходит, потому что это видимые изменения.

3 ответов


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

делать стеганографию сопротивляться к расширению в изображениях JPEG также очень трудно, потому что сжатие JPEG повторно применяется после расширения. На самом деле существует множество алгоритмов стеганографии JPEG. Которое вы должны использовать, зависит от того, что именно вам требуется :

  • конфиденциальность данных ?
  • конфиденциальность присутствия сообщения ?
  • когерентность сообщений после изменений JPEG ?
  • сопротивление атакам "известного прикрытия" (когда злоумышленники пытаются найти сообщение, основанное на стеганографической системе) ?
  • сопротивление атакам "известного сообщения" (когда злоумышленники пытаются найти используемую стеганографическую систему на основе сообщения) ?

из того, что я знаю, обычно алгоритм, который сопротивляется изменениям JPEG (повторное сжатие изображения), часто действительно легче атаковать, тогда как алгоритмы, которые запускают этап "кодирования"во время сжатие JPEG (после преобразования DCT (с потерями) и до преобразования Huffmann (без потерь)) более склонны к сопротивляться.

кроме того, одним из ключевых факторов, о стеганографии масштаб : Если у вас есть только 32bytes данных для кодирования, скажем, в образе 256*256px, не используйте algo, который может кодировать 512bytes данных того же размера. Либо используйте масштабируемость алгоритм, либо используйте алгоритм в его эффективный масштаб.

кроме того,лучший способ сделать хорошую стеганографию-знать ее ограничения и знать, как steganalyzers работа. Попробовать это инструменты, чтобы вы могли понять, что злоумышленники сделают с вашей картиной.^

теперь, я не могу сказать вам, что стеганографическая система будет лучшей для вас, но я могу дать вам некоторые указания :

  • jSteg - довольно старый, я не думаю, что он будет сопротивляться изменениям JPEG
  • OutGuess - довольно старый, но один из лучших алгоритмов
  • F5 (и F3/F4) - более недавний, хороший алгоритм, научный исследования позади.
  • растровых изображений

Я думаю, что все они основаны на LSB : кодировка выполнена во время сжатие JPEG, после DCT и квантования. Единственная не основанная на LSB система стеганографии, о которой я слышал, была упомянута в этой исследовательская работа, однако, я еще не прочитал ее до конца, поэтому я не могу сказать, будет ли это отвечать вашим потребностям.

однако я не уверен, что там a реальные алгоритм стеганографии, чтобы противостоять сжатие JPEG в JPEG изменение размера и вращение, сопротивление для визуального и нападения statisticals. или я не знаю об этом.

извините за отсутствие точного ответа, я попытался дать вам то, что я знаю по этому вопросу, так как всегда лучше быть более информированным. Извините также за отсутствие правильного английского языка, я француз, никто не идеален:)


Pistache прав в том, что он сказал вам относительно алгоритмов реализации водяных знаков. Я постараюсь помочь вам, показав один алгоритм для заданных требований.

прежде чем объяснить вам алгоритмы, я предполагаю, что различие между форматами JPG и PNG должно быть сделано.

  1. JPEG-это lossy, Я.е, изображения подвержены сжатию, которое может удалить водяной знак. Когда вы открываете изображение для целей манипулирования и его сохранения после процедуры записи выполняется сжатие с помощью фильтрации DCT, которая удаляет некоторые важные компоненты изображения.
  2. С другой стороны, формат PNG без потерь, и это означает, что изображения не подвержены такому сжатию при хранении после манипуляции.

на самом деле JPEG используется как атака схемы водяных знаков из-за его сжимающей характеристики, которая может удалить водяной знак, если злоумышленник выполнил сжатие.

теперь, когда вы знаете разницу между двумя форматами, я могу сказать вам подходящий алгоритм устойчив к атакам, которые вы упомянули.

по поводу методов внедрения водяного знака для PNG-файлов вы можете использовать гистограмма встраивания метод. Метод встраивания гистограммы изменяет значения на гистограмме путем изменения значений соседних ячеек. Например, представьте, что вы есть png изображение в оттенках серого. Поэтому у вас будет только один канал для встраивания, а это означает, что у вас есть одна гистограмма с 256 ячейками. Выбрав соседние бункеры x и x+1, вы изменяете значения x и x+1 путем перемещения пикселей с яркой x to x+1 или наоборот, так что (x/(x+1))>T для встраивания " 1 "или ((x+1) / x)>T для встраивания "0".

вы можете повторить та же процедура для всей длины гистограммы и поэтому вы можете встроить в лучшем случае до 128bits. Однако эта нагрузка меньше, чем вы просили. Поэтому я предлагаю вам разделить изображение на части, например блоки, и если вы разделите одно изображение на 4 компонента, вы сможете встроить в лучшем случае до 512 бит, что означает 64 байта. Этот метод, хотя и очень чувствителен к фильтрации и сжатию, если применяется прямо в области пространства. Поэтому я предлагаю вам вычислите перед DWT изображения и используйте его низкочастотный поддиапазон. Это обеспечит вам лучшую прозрачность и надежность, увеличенную для снования, изменения размера и т. д. атак и сжатия или фильтрации.

есть и другие подходы, такие как LPM (Log Polar Maps), но они очень сложны для реализации, и я думаю, что для вашего случая этот подход будет прекрасным.

Я могу предложить вам два документа, первый это:

водяные знаки цифровое изображение и видеоданные. Государство-оф-искусство обзор

эта статья даст вам некоторые основные понятия водяных знаков и более подробно объяснит алгоритм LSB. И второй документ:

в режиме реального времени сжатый домен видео водяные знаки сопротивление геометрическим искажениям

эта статья объяснит алгоритм,который я только что объяснил.

спасибо,


Я не знаю, рассматриваете ли Вы различные подходы к стеганографии. Вместо хранения данных, скрытых в пикселях, вы можете создать новый блок данных в файле JPEG и сохранить зашифрованные данные.

взгляните на структуру файлов JPEG на Википедия

вы можете создать блок данных конкретного приложения, используя маркер 0xFF 0xEn. При этом любое изменение пикселей изображения не изменяет информацию, хранящуюся в изображении. Более того, многие программы для редактирования изображений уважают пользовательские блоки данных и сохраняют их даже после обработки изображений.