• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья О стеганографии кратко, ДКП, Встраивание ЦВЗ

Стеганография - от греч. στεγανός [‘стеганос’] «скрытый» + γράφω [‘графо’] «пишу»; букв. «тайнопись» — способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввёл в 1499 году аббат бенедиктинского монастыря Св. Мартина в Шпонгейме Иоганн Тритемий в своём трактате «Стеганография» (лат. Steganographia), зашифрованном под магическую книгу.
Данное определение, приведенное на соответствующей странице Википедии, а также практически в каждом учебнике по стеганографии, подчеркивает, как давно были заложены базовые принципы. Существуют и более ранние отсылки к процессу скрытой или неявной передачи данных (V в. до н. э.).
За периодом времени данный вид технического искусства разросся и нашел свою индивидуальную нишу применения в окружающем нас мире.

170727_steganography-0.jpg


Так как рассказать о всех тонкостях данной научной области в рамках одного поста не представляется возможным, хочу обратить ваше внимание на наиболее приглядные, с моей точки зрения, реализации стеганографии, а именно цифровых водяных знаков (далее - ЦВЗ) в современных технологиях:
  • Контроль и подтверждение факта публикации или распространения в средствах массовой информации;
  • Защита от модификации медиа-контента;
  • Подтверждение авторства;
  • Идентификация владельца;
  • Контроль незаконного копирования;
  • Контроль каналов распространения для информации, ограниченного распространения;
  • Встраивание уникального идентификатора в медиа-данные, для последующей адресации стороннего устройства, считывающего медиа-контент (например, фотографирование смартфоном рекламного банера с автоматическим перенаправлением на сайт производителя или дистрибьютора).
Существует множество иных реализаций стеганографии в современных технологиях, но в рамках данной статьи я расскажу о ЦВЗ для защиты статических изображений (картинок) и методах достижения хрупких и стойких ЦВЗ. Все указанное часто справедливо не только для изображений, но и для аудио, видео потоков.
Вне зависимостей от целей, которые стоят перед техническим специалистом, процесс скрытия информации в некотором контейнере состоит из нескольких последовательных действий:
  • выбор контейнера b, в который будет помещено скрытое сообщение, и который будет передаваться по открытому каналу связи. При этом выделяют два вида контейнеров: пустой и заполненный
  • составление секретного сообщения m, которое предполагается поместить в контейнер,
  • выбор стеганографического ключа k. Тут необходимо отметить, что для стеганографии под ключом понимаются сразу два понятия, что часто вносит сумбур в тексты: в широком смысле стеганографический ключ – это сам неизвестный противнику способ сокрытия информации. В узком смысле, по аналогии с криптографией, под стеганографическим ключом понимается секретный параметр применяемого стеганографического алгоритма, без знания которого извлечение скрытой информации должно быть невозможным (например, точные позиции изменяемых битов или координат изображения). Отсюда разделение реализаций - при отсутствии в стегоалгоритме ключа в его узкой интерпретации, стегосистема становится “безключевой”.
  • собственно само прямое преобразование F или проще говоря встраивание.
Естественно, чтобы на другом конце канала смогли прочитать скрытое в некоторый контейнер сообщение, необходимо пройти весь процесс скрытия в обратном порядке, а значит должен быть известен ключ (тут речь и об алгоритме и о ключе встраивания) и каким то образом отмечен или заранее оговорен контейнер.

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

В настоящее время создано большое количество методов скрытия данных в цифровых изображениях. Для систематизации этих методов их группируют по схожим критериям. Для примера вот такие обобщенные группы:
  • методы замены в пространственной области (LBS - встраивание в младшие биты);
  • методы скрытия в частотной области изображения (вейвлет или ДКП преобразование);
  • широкополосные методы (Полезная информация распределяется по всему диапазону контейнера, поэтому при потере сигнала в некоторых полосах частот в других полосах присутствует достаточно информации для ее восстановления);
  • статистические (стохастические) методы (скрывают информацию путем изменения некоторых статистических свойств изображения и последующего их поиска сравнением);
  • методы искажения (заключается в последовательном проведении ряда модификаций контейнера, которые выбираются в соответствии с секретным сообщением, имеет ряд отрицательных свойств, что делают его не очень популярным);
  • структурные методы (является развитием известной стеганографической технологии "семаграмм". Метод заключается в проведении последовательных преобразований фрагментов графического изображения, которые в конечном итоге приводят к формированию скрываемого текста).
У каждого из приведенных методов есть как плюсы, так и минусы. Одни более стойкие к изменениям контейнеров, другие наоборот разрушаются при малейшей модификации. В связи с тем, что наиболее стойкими к разнообразным искажениям, в том числе и компрессии, являются методы, использующие для скрытия данных частотную область, далее расскажу о магии происходящей именно при использовании данного метода.

1438713180_1678205914.jpg


Существует несколько способов представления изображения в частотной области. При этом используется та или иная декомпозиция изображения, используемого в качестве контейнера. Например, существуют методы на основе использования дискретно косинусного преобразования (ДКП), дискретного преобразования Фурье (ДПФ), вейвлет-преобразования, преобразование Карунена-Лоева и некоторые другие. Подобные преобразования могут применяться либо к отдельным частям изображения, либо к изображению в целом. Например, известно, что алгоритм ДКП является базовым в стандарте JPEG, а вейвлет-преобразование – в стандарте JPEG2000.
Стеганоалгоритм может быть достаточно стойким к последующей компрессии изображения, только если он будет учитывать особенности алгоритма перспективного сжатия.

Реальные изображения не представляют собой случайные процессы с равномерно распределенными значениями величин. Известно, и данный факт используется в алгоритмах компрессии, что большая часть энергии изображений сосредоточена в низкочастотной (НЧ) области спектра. Отсюда и возникает необходимость в осуществлении декомпозиции изображения на субполосы, к которым прибавляется стеганосообщение. НЧ субполосы содержат основную часть энергии изображения и, таким образом, носят шумовой характер. Высокочастотные (ВЧ) субполосы спектра изображения наибольшим образом поддаются влиянию со стороны разнообразных алгоритмов обработки, таких как, например, компрессия или НЧ-фильтрация. Таким образом, можно сделать вывод, что для встраивания сообщения самыми оптимальными являются среднечастотные (СЧ) субполосы спектра изображения.

Эффективность применения вейвлет-преобразования и ДКП для компрессии объясняется тем, что они хорошо моделируют процесс обработки изображения в зрительной системе человека (ЗСЧ), отделяя существенные детали от второстепенных.

Во время цифровой обработки изображения часто применяется двумерная версия дискретно косинусного преобразования:
image109.png
(а)
image106.png
(б)
Сколь страшными бы не казались формулы, применять на практике их не сложно, существуют готовые модули и функции, выполняющие прямое и обратное преобразование.

Один из наиболее распространенных на сегодня методов скрытия конфиденциальной информации в частотной области изображения заключается в относительной замене величин коэффициентов ДКП, который в свое время описал Кох (E. Koch) и Жао (J. Zhao).

На начальном этапе первичное изображение разбивается на блоки размерностью 8х8 пикселей. ДКП применяется к каждому блоку – формула (а), в результате чего получаются матрицы 8х8 коэффициентов ДКП. Каждый блок при этом предназначен для скрытия одного бита данных.
Во время организации секретного канала абоненты должны предварительно договориться о двух конкретных коэффициентах ДКП из каждого блока, которые будут использоваться для скрытия данных.
Встраивание информации осуществляется таким образом: для передачи бита «0» стремятся, чтобы разница абсолютных значений коэффициентов ДКП превышала некоторую положительную величину, а для передачи бита «1» эта разница делается меньше по сравнению с некоторой отрицательной величиной.
Первичное изображение искажается за счет внесения изменений в коэффициентах ДКП, если их относительная величина не отвечает скрываемому биту. Чем больше значение , тем стеганосистема, созданная на основе данного метода, является более стойкой к компрессии, однако качество изображения при этом сильно ухудшается.
После соответствующего внесения коррекции в значения коэффициентов проводим обратное ДКП.

Пример литсинга программы в MathLab по встраиванию сообщения в изображение:
Код:
%-----------обнуление и объявление переменных----------
A = 0;
blueStr = 0;
TextOut = '';
dct = 0;
Mmout = '';
Md1 = 0;
X = 640; %кол-во строк
Y = 640; %кол-во столбцов
error = 0; %флаг работы программы
N = 8; %размер одной стороны сегмента
RGB = imread('640-3.jpg'); %картинка цветная
for I = 1:X%читаем синюю составляющую
    for J = 1:Y
        red(I,J) = RGB(I,J,1);
        green(I,J) = RGB(I,J,2);
        blueStr(I,J) = RGB(I,J,3);
    end
end
Nc = (X*Y)/(N^2); %кол-во сегментов 8х8
Text = randint(1,Nc/N,[33,126]); %рендрим текст. случайное заполнение
Mm = dec2bin(Text,N); %переводим текст в булевую строку длинной N
U1 = 4;%координаты изменения для кодирования
V1 = 5;%
U2 = 5;%
V2 = 4;%
P = 50;    %<-----порог(глубина, сила) встраивания
%-------------Косинусно дискретное преобразование каждой матрицы 8х8-------
blueDbl = im2double(blueStr);
for I = 1:sqrt(Nc)
    for J = 1:sqrt(Nc)
        for u = 1:N %двойной цикл выбора подматрицы 8х8
            for v = 1:N
                dct8x8(u,v) = blueDbl((I-1)*N+u,(J-1)*N+v);
            end
        end
        A = dct2(dct8x8);%A = D*dct8x8*D';
        if error ~= 2
            w1 = abs(A(U1,V1));%---------инкапсулируем сообщение
            w2 = abs(A(U2,V2));
            if A(U1,V1) >= 0
                z1 = 1
            else
                z1 = -1
            end
            if A(U2,V2) >= 0
                z2 = 1
            else
                z2 = -1
            end
            T = mod((I-1)*sqrt(Nc)+J,N);%-------T&S-----------------
            if T == 0            %блок программы, отвечающий за соотношение
                T = N            %номера сегмента исходного контейнера и
            end                %номером бита встраиваемого символа
            S = fix(((I-1)*sqrt(Nc)+J)/N)+1;
            if mod(((I-1)*sqrt(Nc)+J),N)==0
                S = S-1;
            end
            if S >= Nc
                error = 2;
            end
            if Mm(S,T) == '0' %--------------------------------------------
                if w1-w2 <= P
                    w1 = w2+P+1;
                end
            end
            if Mm(S,T) == '1'
                if w1-w2 >= -P
                    w2 = w1+P+1;
                end
            end
            A(U1,V1) = z1*w1;
            A(U2,V2) = z2*w2;
        end
        for u = 1:N
            for v = 1:N
                dct((I-1)*N+u,(J-1)*N+v) = A(u,v);
            end
        end
    end
end
%---------------------------восстановление картинки из ДКП матрицы----
for I = 1:sqrt(Nc)
    for J = 1:sqrt(Nc)
        for u = 1:N
            for v = 1:N
                dct8x8(u,v) = dct((I-1)*N+u,(J-1)*N+v);
            end
        end
        A = idct2(dct8x8);%A = D'*dct8x8*D;
        for u = 1:N
            for v = 1:N
                blueFnl((I-1)*N+u,(J-1)*N+v) = A(u,v);
            end
        end
    end
end
intBlue = uint8(blueFnl);
for I = 1:X     %---------------------пишем синий обратно в RGB
    for J = 1:Y
        endRGB(I,J,1) = red(I,J);
        endRGB(I,J,2) = green(I,J);
        endRGB(I,J,3) = intBlue(I,J);
    end
end
imwrite(endRGB,'encripted.jpg'); %----пишем картинку в файл

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

За счет изменения параметра P (в листинге равного 50) достигается стойкость или хрупкость алгоритма:
Хрупкие ЦВЗ - разрушаются при незначительной модификации контейнера. При реализации часто допускается некоторая модификация, например, сжатие.
Стойкие (робастные) ЦВЗ - устойчивые к различного рода воздействию на стего. Под воздействием часто понимаются такие вещи, как аффинные преобразования контейнера (вращение, масштабирование, отражение).
Полухрупкие ЦВЗ - это нечто средние между первыми двумя состояниями. Например, допускается сжатие, но запрещается вырезка или вставка фрагмента. На мой взгляд немного спорная характеристика.

Сила встраивания имеет некоторый визуальный предел, который начинает проявляться, если значение начинает значительно превосходить средние значения частотной области, куда происходит встраивание.
При достаточно стойком ЦВЗ фильтрация или сжимание изображения не сможет повредить ЦВЗ без уничтожения самого изображения (состояния, когда изображение перестает быть полезным).

Вот пара визуальных примеров:
image105.png
image100.png

Тут заполненный контейнер при P = 60. Даже неопытный взгляд сможет разлечить шахматную сетку на обоих изображениях.

image108.png
image104.png


Тут заполненный контейнер при P = 500. Как видите визуальные эффекты значительнее сильнее, но и удалить такое ЦВЗ не уничтожив сообщение практически невозможно.

Надеюсь тема была интересна.
Всем добра. May the fourth be with you
 
Последнее редактирование:
G

gleaming_assignment_qui

Спасибо, мне было полезно!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!