Сделай сам: цифровые водяные знаки
Интернет дает практически неограниченный доступ к огромному количеству информации всех видов по всем миру. Почти любую информацию легко скопировать, видоизменить и распространить. Поэтому вопросы защиты информации от несанкционированного копирования, изменения и распространения стали очень актуальны. Одно из средств защиты — цифровые водяные знаки (ЦВЗ). ЦВЗ — эффективный метод встраивания специальной метки в цифровой контент. Они могут быть использованы в различных приложениях, включая защиту авторских прав, аутентификацию, защиту от изменения и т. д.
Рассмотрим ЦВЗ в изображениях. Будем использовать систему встраивания информации (СВИ) в наименее значимые биты изображения (НБЗ).
Метод НБЗ основан на недостатках человеческого зрения: глаз человека плохо улавливает незначительные изменения цветов. А именно изменение младших битов даёт такое незначительное изменение цвета. Поэтому мы можем встраивать в них информацию, не боясь ее раскрытия. Метод НБЗ также очень эффективен в стеганографии.
Напишем мини-приложение НБЗ-встраивания черно-белого водяного знака в цветное изображение в среде C++ Builder с использованием языка C++. Оба изображения для простоты берём одинакового размера. Чтобы мы могли увидеть ЦВЗ, встроим его в первые два бита. Чтобы ЦВЗ сделать более невидимой, нужно производить встраивание в 0 бит.
Так как глаз человека наиболее чувствителен к яркости изображения и несколько менее к цветности, для наглядности будем выполнять встраивание в компоненту яркости. Для этого нам необходимо перейти от цветового пространства RGB (Red, Green, Blue) к YUV(Y — яркость, U и V — цветоразностные компоненты). Переход будем выполнять по общеизвестным формулам (смотри в коде под комментарием «преобразование RGB в YUV»). Чтобы ЦВЗ была более незаметна человеку, нужно производить встраивание в одну из цветоразностных компонент.
На главной форме создаём 7 объектов: Image1 — исходное изображение, Image2 — черно-белое изображение водяного знака, Button1 – «Открыть 1», кнопка открытия исходного изображения из файла, Button2 — «Открыть 2», кнопка открытия изображения водяного знака, OpenPictureDialog1 — отвечает за открытие диалогового окна при нажатии на Button1, OpenPictureDialog2 — то же самое, что и OpenPictureDialog1, только для Button2, Button3 — «Встроить», кнопка осуществления встраивания.
Код, который выполнится при нажатии на Button1. Для Button2 меняются индексы у OpenPictureDialog и Image.
Код, который выполняется при нажатии на кнопку Button3.
Результат встраивания ЦВЗ представлен на рисунке ниже.