Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Анализ изображений с точки зрения компьютерной криминалистики (Стегоанализ изображений). Учебное пособие
.pdf
21
Вместо прямого сравнения вероятности заполненности контейнера с
неким выбранным критерием значимости данное значение вероятности само
по себе может считаться выводом алгоритма анализа или анализироваться
особым образом отдельно.
Данный метод анализа является более эффективным, если применять его
алгоритм не целиком к изображению, а к его частям. Чаще всего изображение
разбивается либо на блоки, составляющие примерно 1% от площади всего
изображения (данное число было получено эмпирическим путём, но также не
во всех случаях приводит к наиболее эффективному результату), либо на
строки. Последний способ также более предпочтителен, поскольку при
последовательном НЗБ подобный построчный анализ позволит сразу увидеть
приблизительные начало и конец встроенного сообщения (строки, где
встраивание началось и где закончилось).
Особо стоит вопрос анализа многоканальных изображений. Наиболее
распространённый вариант реализации – это подсчёт среднего по всем
(трём в случае с RGB) цветовым каналам одного блока с учётом этой
специфики при выборе уровня значимости (с которым P сравнивается) или
дальнейшем анализе полученного результата.
Второй распространённый метод – последовательный анализ каналов
изображения и формирование выводов по каждому каналу. Это может
происходить поблочно (производится анализ всех трёх каналов одного блока,
и формируются три вывода о заполненности для одного блока), либо
поканально (каждый цветовой канал изображения целиком анализируется,
фактически, как отдельное изображение).
Второй метод может быть более нагляден в случае, если информация
скрыта методом НЗБ лишь в одном цветовом канале. Однако использование
метода НЗБ для скрытия достаточно объёмных данных и малость визуальных
искажений при внесении изменений даже во все каналы RGB-изображения
одновременно позволяют первому варианту реализации алгоритма анализа
повысить скорость работы и упростить представление результирующих

22
данных для дальнейшего анализа. Кроме того, внесение изменений даже лишь
в один из цветовых каналов уже будет детектировано при помощи критерия
Хи-квадрат.
На рисунке 2 представлена схема описанного алгоритма стегоанализа.
Представленный алгоритм основан на выборе постоянного значения
числа категорий, а именно 256-ти. Это связано с количеством вариантов
значений интенсивности цвета пикселя в одном цветовом канале в наиболее
распространённой цветовой модели RGB, используемой практически в любых
изображениях.
Поскольку данный метод анализа может применяться не обязательно в
целом к изображению, а поблочный анализ позволяет примерно оценить
размеры скрытого сообщения и его местоположение, алгоритм реализации
первым делом разбивает изображение на блоки, представляющие собой
строки матрицы пикселей.
Для унификации алгоритма анализа и возможности быстро менять
размеры блоков, на которые разбивается изображение, предлагается не
напрямую разбивать изображение, а выделить массив координат матрицы
пикселей, соответствующих началу и концу подматрицы каждого блока:
def get_blocks_coords(img_array):
blocks_coords = []
height, width, deep = img_array.shape
size_width, size_height = get_block_size(width, height)
w_ind = h_ind = 0
h_last = min(size_height - 1, height - 1)
# Calc blocks coordinates array
while True:
w_last = w_ind + size_width - 1
if w_last >= width:
w_last = width - 1
blocks_coords.append([(w_ind, w_last), (h_ind, h_last)])
if w_last == width - 1:
w_ind = 0
if h_last == height - 1:
break
h_ind = h_last + 1

23
Рисунок 2 – Схема алгоритма метода Хи-квадрат (начало)

24
Рисунок 2 – Схема алгоритма метода Хи-квадрат (окончание)
h_last = h_ind + size_height - 1
if h_last >= height:
h_last = height - 1
else:
w_ind = w_last + 1
return blocks_coords
Размеры самих блоков в таком случае определяются отдельной функцией:
size_width, size_height = get_block_size(width, height)
Тогда простое определение трёх констант: BLOCK_WIDTH,
BLOCK_HEIGHT и USE_ONE_PERCENT_BLOCK_SIZE позволит алгоритму
начать работать уже с совершенно другой структурой разбиения изображения.
Далее шаги общего алгоритма выполняются поблочно. В результате
получается последовательность, состоящая из значений критерия Хи-квадрат
и значений степеней сходства для каждой анализируемой строки.
Окончательный вывод строится на основе значения вероятности

25
заполненности стегоконтейнера, отражающего значение степени сходства для
данного блока, с заданным критерием значимости.
Итак, во-первых, требуется вычислить количество появлений каждого из
значений интенсивности цвета по всем цветовым каналам блока. И далее,
исходя из этого, составить массивы наблюдаемых (реальных) и ожидаемых
(теоретических) значений в соответствии с формулами 4 и 5.
Сделать это можно следующим образом:
def get_chi2_arrays(array):
real = []
teor = []
ln = len(array) // 2
for i in range(ln):
nreal = array[2 * i]
nteor = (array[2 * i] + array[2 * i + 1]) / 2
if nteor > 0:
real.append(nreal)
teor.append(nteor)
return teor, real
Теперь необходимо последовательно:
провести операции объединения для категорий, значения в которых
меньше либо равны 4;
вычислить значение критерия Хи-квадрат для сформированных
массивов;
определить степень сходства и на основе полученных данных
вычислить значение вероятности заполненности анализируемого
контейнера;
сравнить полученную вероятность с выбранным критерием значимости
(пороговым значением вероятности), чтобы сделать вывод о
заполненности анализируемого блока.
Поскольку описанные операции осуществляются поблочно, то основная
функция, производящая анализ критерием Хи-квадрат, циклически перебирая
выделенные блоки, имеет следующую реализацию:
def analyze_chi(img_array, visualize, log=None):

26
blocks_coords = get_blocks_coords(img_array)
cnum = np.ones(RGB_COLOURS, dtype=np.int32)
fullness = 0
vis = np.zeros(shape=img_array.shape) if visualize else None
k = 1
for coord in blocks_coords:
block_cnum = calc_colours_by_coord(img_array, coord)
cnum = [x + y for x, y in zip(cnum, block_cnum)]
real, teor = get_chi2_arrays(cnum)
real, teor = unify_categories(real, teor)
chi2, p = chi_sqr(real, teor)
fullness += int(p > THRESHOLD)
if visualize:
colorize_block(img_array, vis, coord, Channel.RED if p >
THRESHOLD else Channel.GREEN)
writelog(log, "\t[{0}] chi2 = {1:.5}; p = {2:.5}\n".format(k,
chi2, p))
k += 1
fullness /= len(blocks_coords)
r = {"fullness": fullness, "visualized": vis}
return r
Полный код модуля (скрипта), реализующего метод Хи-квадрат,
представлен в Приложении А.
Поскольку предложенный адаптированный алгоритм предполагает также
визуализацию полученного результата, на основе вывода о заполненности
каждого блока в соответствующей строке матрицы пикселей изображения
увеличивается интенсивность красной (если заполнен) или зелёной (если не
заполнен) составляющей. В ходе поблочного анализа выводов о
заполненности ведётся подсчёт количества заполненных блоков.
Отношение числа заполненных блоков к их общему количеству и служит
в реализуемом алгоритме результатом, полученным в ходе анализа. Значение,
равное 0-ю, сигнализирует об отсутствии встраивания. Данная реализация,
таким образом, позволяет оценить местоположение и объём скрытого
сообщения, а не только установить факт скрытия.

27
2.3 Стегоанализ методом Regular-Singular
Метод обнаружения стеганографически скрытых сообщений RegularSingular, имеющий сокращённое обозначение RS-метод, был предложен
Андреасом Пфитцманом, Джессикой Фридрих и Мирославом Гольяном в
2001-м году. Он, как и предыдущий, позволяет детектировать
стеганографическое скрытие информации, произведённое в НЗБ изображения.
Метод основывается на анализе непересекающихся групп из смежных
пикселей (или значений интенсивности цвета одного канала, если
изображение многоканальное), где n – чётное число. После выделения таких
групп вводится так называется функция регулярности – функция, которая
сопоставляет одной группе одно действительное число и показывает
регулярность пикселей группы [8]. Значение функции регулярности должно
быть тем больше, чем более шумной является группа пикселей.
В качестве функции регулярности выбирается сумма абсолютных
разностей (сумма перепадов значений) соседних пикселей группы:
,
(6)
где – группа пикселей;
– i-й элемент группы пикселей ;
– количество пикселей в группе.
После подсчёта значений функции регулярности для всех групп
анализируемого изображения определяется группа функций переворота
(«функций флиппинга»). Эти функции соответствуют следующему набору
свойств:
1)
;
2) ;
3)
обр
1 01 2 255 256.
Группа функций переворота состоит из трёх функций: прямой (Fпр),
обратной (
обр
) и нулевой (
). Согласно гарантируемым свойствам группы,
прямая функция переворота осуществляет инверсию младшего бита, обратная

28
– инверсию с переносом в старший бит (фактически, операцию увеличения и
уменьшения на единицу для нечётных и чётных значений соответственно).
Третье свойство, описывающее обратную функцию флиппинга, можно
записать так:
.
(7)
Нулевая функция переворота не изменяет подающееся ей на вход число.
Применение функций переворота, таким образом, эмулирует добавление
обратимого шума, усиливая всплески значений в группе и уменьшая её
регулярность [8].
Для применения данных функций («флиппинга») к значениям пикселей
группы вводится понятие маски. Маска – это группа из n значений, каждое из
которых выбирается из числа трёх: -1, 0 или 1. Каждое из этих значений
кодирует одну из трёх функций переворота: значение «-1» соответствует
,
«0» – , «1» – . Для маски множество
соответствующих функций переворота формируется таким образом:
F
M
G
F
M
1
1
F
M
2
2
F
M
n
n
,
(8)
где – выбранная маска;
– группа пикселей;
– функция переворота, соответствующая i-му значению маски M;
– i-й элемент группы пикселей ;
– количество пикселей в группе.
Маска, таким образом, определяет, какую именно из функций переворота
необходимо применять к каждому из пикселей группы. Наиболее
распространённой для групп по 4 пикселя является маска [1, 0, 0, 1], а также
любые симметричные маски без «-1». Если при выбранной маске RS-метод
показывает неудовлетворительные результаты при тестировании,
подходящую маску следует выбирать эмпирически.
После применения функций переворота (согласно выбранной маске) к
группе пикселей производится сравнение значений функции регулярности для

29
данной группы со значениями до флиппинга. На основе данного сравнения
делается вывод об отнесении анализируемой группы пикселей к одному из
трёх классов: обычные (regular), необычные (singular) или непригодные
(unusable).
По англоязычным названиям первых двух классов («regular groups» и
«singular groups») и был назван данный метод. Класс непригодных групп не
участвует в дальнейших операциях анализа [8].
Отнесение группы к тому или иному классу (R, S или U соответственно)
определяется следующим образом:
если
, то (группа обычная);
если
, то (группа необычная);
если
, то (группа непригодная).
Для каждой группы флиппинг производится два раза: первый раз с
прямой выбранной маской, второй раз – с инвертированной маской. Инверсия
маски означает, что значения «1» и «-1» заменяют друг друга при инверсии. К
примеру, инверсной маской для [1, 0, 0, 1] является маска [-1, 0, 0, -1].
После проведения операций классификации для всех групп выполняется
подсчёт ряда количественных характеристик:
количество обычных групп для маски M:;
количество необычных групп для маски M:SM;
количество обычных групп для инверсной маски -M:;
количество необычных групп для инверсной маски -M:.
Все описанные характеристики задаются как относительные величины –
то есть в процентах от общего числа групп k. Таким образом, и
.
Основной гипотезой данного метода является предположение о том, что
в незаполненном контейнере количества групп одного класса для обычной и
инверсной маски равны:
R
M
R
M
и S
M
S
M
.
(9)

30
Это предположение основано на том, что обратная функция переворота,
исходя из уравнения 11, аналогична применению прямой функции переворота
к изображению, все значения интенсивности цвета которого были сдвинуты
на единицу. Заданная функция регулярности, зависящая лишь от абсолютных
значений разницы, при равномерном изменении значений на единицу не
меняется. Следовательно, в изображении без встроенного сообщения
соотношение количества обычных и необычных групп не должно заметно
измениться.
Случайные изменения НЗБ (соответствующие встраиванию скрываемого
сообщения) ведут к серьёзным искажениям при флиппинге по сравнению с
характеристиками оригинального искажения – и, в результате, ведут к
перераспределению числа обычных и необычных групп в изображении (в
связи с переходом искажённых за счёт изменения НЗБ групп из одного класса
в другой).
На рисунке 3 представлен типичный вид так называемой RS-диаграммы –
графиков значенийRM, SM, RM и SM в зависимости от количества пикселей
с инвертированными НЗБ в изображении [8]. На оси абсцисс отложен процент
пикселей с инвертированными НЗБ, на оси ординат – процент групп обычных
и необычных классов прямой и инвертированной масок (от общего числа
групп).
Под на рисунке 3 и далее подразумевается процент заполнения
стегоконтейнера скрытым сообщением (относительная длина сообщения).
На основе информации о данном типичном поведении графиков
количественных характеристик групп производятся дальнейшие вычисления,
позволяющие оценить относительную длину скрытого сообщения. Если
относительная длина скрытого сообщения равна , и p является случайным
битовым потоком, то в среднем в изображении инвертируется
2
НЗБ.
В таком случае 100%-я заполненность стегоконтейнера ведёт к тому, что
50%. Инверсия половины НЗБ означает, что разница между количеством
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
