Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Анализ изображений с точки зрения компьютерной криминалистики (Стегоанализ изображений). Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
31
Рисунок 3 – RS-диаграмма
обычных и необычных групп сведётся к нулю,  
, что и отражено на
графиках на рисунке 3 в точке
󰇛󰇜
 󰇛󰇜.
Таким образом, можно сделать вывод, что при увеличении длины
скрытого сообщения разница между количеством обычных и необычных
групп прямой маски стремится к нулю. При этом разница между  и 
при увеличении относительной длины сообщения будет пропорционально
расти.
Если относительная длина скрытого сообщения равна , то, поскольку
инверсии подвергаются
НЗБ, измерения численных характеристик групп
соответствуют точкам RS-диаграммы 󰇛󰇜, 󰇛󰇜, 󰇛󰇜 и 󰇛 󰇜. Вычисленные численные характеристики групп для того же изображения
32
после инвертирования всех НЗБ, будут соответствовать точкам 󰇛  󰇜, 󰇛  󰇜, 󰇛  󰇜 и 󰇛  󰇜.
Далее RS-метод предлагает аппроксимировать кривые, проходящие через точки 󰇛󰇜, 󰇛  󰇜 и 󰇛󰇜, 󰇛  󰇜 соответственно, прямыми линиями, а кривые, проходящие через точки 󰇛2󰇜, 󰇛1  2󰇜 и 󰇛2󰇜, 󰇛1  2󰇜 соответственно, квадратичными параболами с учётом
наличия точек пересечения прямых и парабол. Соответствующие одной маске
прямая и парабола имеют точку пересечения на оси ординат RS-диаграммы, а
параболы, в соответствии с описанным выше, пересекаются при
 
50%.
Для оценки относительной длины сообщения p надо решить систему 11
уравнений с 11 неизвестными: по два коэффициента для каждой из двух
прямых, по три коэффициента для каждой из двух парабол и значение p.
Система включает в себя 8 уравнений прямых или парабол для 8 найденных
ранее точек, 2 уравнения точек пересечений парабол с соответствующими
прямыми и уравнение для точки пересечения парабол. Решение системы
позволяет найти значение p.
При известных восьми количественных характеристиках групп
вычисление значения точки пересечения можно свести к решению квадратного уравнения [8]:
󰇛 
󰇜
󰇛   
󰇜
    ,
(10)
где  󰇛󰇜  󰇛󰇜;
 󰇛  󰇜  󰇛  󰇜;
 󰇛󰇜  󰇛󰇜;
 󰇛  󰇜  󰇛  󰇜.
Для получения относительной длины скрытого сообщения p из найденного корня x следует произвести следующую операцию:
p

1 2
.
(11)
33
Ключевая особенность RS-метода состоит в том, что он анализирует
количественные характеристики небольших групп пикселей. В связи с чем он
хотя и не способен детектировать область потенциального встраивания, может
обнаружить скрытие, произведённое в случайные биты, а не последовательно.
Таким образом, общий алгоритм обнаружения скрытого в изображении
сообщения методом Regular-Singular имеет следующий вид:
1) Разбиение изображения на непересекающихся групп из смежных
пикселей.
2) Для каждой группы:
вычисление значения функции регулярности; применение функций переворота согласно выбранной маске; вычисление значения функции регулярности для новых
значений группы; сравнение значений функций регулярности до и после
флиппинга с последующей классификацией группы.
3) Расчёт значений и – количества групп в классе обычных и
необычных соответственно.
4) Вычисление инверсной маски .
5) Выполнение пунктов 2 и 3 для инверсной маски .
6) Инверсия НЗБ всех пикселей изображения.
7) Выполнение пунктов со 2-го по 5-й для изображения с
инвертированными НЗБ.
8) Решение квадратного уравнения, представленного в формуле 10.
9) Нахождение относительной длины скрытого сообщения согласно
формуле 11.
Если изображение многоканальное, то следует выбрать единую
стратегию разбиения изображения на группы: последовательное разбиение на
группы каждого канала или формирование трёх (или более, по числу каналов)
групп для каждых n выбранных для разбиения пикселей. Аналогичный
34
результат даст и подсчёт результатов анализа для каждого канала отдельно с
последующим сведением их к одному среднему арифметическому для всего
изображения.
Ключевая особенность RS-метода состоит в том, что он анализирует количественные характеристики небольших групп пикселей – в связи с чем он,
хотя и не способен детектировать область потенциального встраивания, может
обнаружить скрытие, произведённое в случайные биты, а не последовательно.
На рисунке 4 представлена схема алгоритма RS-метода.
Поскольку общий алгоритм анализа RS-методом не регламентирует
обработку многоканальных изображений, все описанные в нём действия
выполняются последовательно для каждого из цветовых каналов. Для
формирования окончательного вывода находится среднее арифметическое
между величинами скрытых сообщений, определёнными для каждого из
цветовых каналов модели RGB.
Такая адаптация алгоритма, демонстрируемая на схеме программной
реализации, опирается на распространённость использования скрытия
методом НЗБ для передачи больших объёмных данных и, следовательно,
задействовании всех доступных каналов изображения. Тем не менее,
использование лишь одного канала для скрытия позволяет адаптированному
алгоритму по-прежнему решать главную задачу стегоанализа – обнаруживать
факт скрытия (так как среднее арифметическое обнаруженных сообщений всё
равно будет существенно отличаться от нуля).
Кроме того, предварительное вычисление размеров скрытых сообщений
для каждого канала позволяет записывать их в программный лог, который
позже можно использовать в ручном режиме для извлечения информации о
поканальной заполненности при подозрениях на наличие скрытого сообщения
лишь в одном канале.
После формирования копии изображения с инвертированными НЗБ для
каждого цветового канала, в первую очередь, осуществляется разбиение
матрицы пикселей выбранного канала изображения на группы из 4-х пикселей.
35
Рисунок 4 – Схема алгоритма RS-метода (начало)
36
Рисунок 4 – Схема алгоритма RS-метода (продолжение)
37
Рисунок 4 – Схема алгоритма RS-метода (окончание)
Для каждого цветового канала производятся операции разбиения на
группы и вычисления масок:
groups = get_groups(channel_array)
Для возможности быстрой модификации алгоритма под различные длины
групп пикселей и маски переворота эти значения вынесены в константы:
PIXELS_IN_GROUP = 4 FLIPPING_MASK = (1, 0, 0, 1) Функция разбиения изображения на группы имеет следующую реализацию: def get_groups(channel_array): groups = []
38
excess = []
ln = channel_array.shape[1] for str in channel_array: for i in [i*PIXELS_IN_GROUP for i in range(ln //
PIXELS_IN_GROUP)]:
group = [] for j in range(PIXELS_IN_GROUP): group.append(str[i + j]) groups.append(group)
for i in range((ln // PIXELS_IN_GROUP) * PIXELS_IN_GROUP,
ln):
excess.append(str[i]) if len(excess) >= PIXELS_IN_GROUP: groups.append(excess[:PIXELS_IN_GROUP]) excess = excess[PIXELS_IN_GROUP:]
return groups
Теперь необходимо сформировать массив функций переворота согласно
маске и её инвертированной версии.
Сами функции переворота – прямого, обратного и нулевого – имеют следующий программный вид:
def flip_direct(val): val = int(val) if val & 1: return val - 1 return val + 1
def flip_back(val): val = int(val) if val & 1: return val + 1 return val - 1
def flip_null(val): val = int(val) return val
Далее для каждой группы, во-первых, вычисляется значение функции регулярности. Её программное описание имеет следующий вид:
def smooth_func(nums): sum = 0 for i in range(len(nums) - 1): sum += abs(nums[i+1] - nums[i]) return sum
39
Теперь необходимо классифицировать группу пикселей. Операции
сравнения значений функции регулярности и классификации представляются
соответствующим образом:
def get_group_type(func, flipped_func): if flipped_func > func: return GroupType.REGULAR if flipped_func < func: return GroupType.SINGULAR if flipped_func == func: return GroupType.UNUSABLE
Функция классификации имеет следующую реализацию:
v = get_func_values(group, mask_funcs) group_type = get_group_type(v[0], v[1]) if group_type == GroupType.REGULAR: regulars += 1 elif group_type == GroupType.SINGULAR: singulars += 1
Вышеописанные функции применяются последовательно для группы
сначала с прямой, а затем – с инвертированной маской.
Теперь необходимо произвести все описанные операции над копией
изображения с инвертированными НЗБ, после чего следует рассчитать
относительную длину скрытого сообщения. Программная реализация
вычисления относительной длины встроенного сообщения p имеет следующий вид:
def get_p(direct_values, invert_values, log=None): d0 = direct_values[0] - direct_values[1] d0i = direct_values[2] - direct_values[3] d1 = invert_values[0] - invert_values[1] d1i = invert_values[2] - invert_values[3]
a = (d1 + d0) * 2 b = d0i - d1i - d1 - 3 * d0 c = d0 - d0i D = Decimal(b ** 2 - 4 * a * c)
if D < 0: x1 = x2 = min_x = 0 elif D == 0: x1 = x2 = min_x = - (b / 2 * a) else: x1 = Decimal((-b + Decimal.sqrt(D)) / (2 * a)) x2 = Decimal((-b - Decimal.sqrt(D)) / (2 * a))
if abs(x1) < abs(x2): min_x = x1
40
else: min_x = x2
p = Decimal(min_x / (min_x - Decimal(0.5))) return max(p, 0)
Поскольку всё описанные действия выполняются последовательно для
всех трёх цветовых каналов, основная функция проведения анализа в таком
случае имеет короткую и простую реализацию:
def analyze_rs(img_array, log=None): avg = k = 0 inverted_img_array = IW.invert_lsb(img_array) for channel in Channel: direct_values = do_one_rs(img_array, channel, log) invert_values = do_one_rs(inverted_img_array, channel, log)
writelog(log, "\tChannel: {0}\n".format(channel.name))
p = get_p(direct_values, invert_values, log) avg += p k += 1
avg /= k r = {"volume": avg}
return r
Полный программный код реализации алгоритма анализа методом RS представлен в Приложении Б.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]