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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
51
самого порога, а также индексах блоков, соответствующих обнаруженной
области встраивания. Этих параметров достаточно, чтобы в дальнейшем, при
необходимости, извлечь скрытые данные. Отсутствие передачи данных об
индексах блоков в таком случае означает, что область встраивания не была
обнаружена – следовательно, скрытие информации не было детектировано.
Функция разбиения изображения на блоки необходимого размера может
быть реализована следующим образом:
def get_blocks(img_array): height, width = img_array.shape blocks = []
for i in range(height // BLOCK_SIZE): for j in range(width // BLOCK_SIZE): block = np.zeros((BLOCK_SIZE, BLOCK_SIZE)) for bi in range(BLOCK_SIZE): for bj in range(BLOCK_SIZE): block[bi][bj] = img_array[i * BLOCK_SIZE + bi][j
* BLOCK_SIZE + bj]
blocks.append(block)
return blocks
После разбиения на блоки для каждого из них необходимо вычислить
матрицу коэффициентов ДКП и модуль разницы абсолютных значений
коэффициентов ДКП.
На основе полученной последовательности модулей разниц становится
возможным найти предполагаемую область встраивания. Реализация функции
нахождения этой области имеет следующий вид:
def get_interval(seq): smax = max(seq) trsh = smax * CUT_COEFF
aseq = seq.copy() for i in range(len(aseq)): if aseq[i] < trsh: aseq[i] = 0.0
sq_inds = [] il, ir = 0, 0 for i in range(len(aseq)): if aseq[i] == 0.0: ir = i if ir - il > 0: sq_inds.append((il, ir - 1)) il = i + 1
52
sizes = [j - i + 1 for (i, j) in sq_inds] max_size = max(sizes) il, ir = sq_inds[sizes.index(max_size)]
return il, ir
Ниже представлена реализация основной функции, выполняющей
описанный алгоритм анализа:
def analyze_kza(img_array, log=None): img_array = IW.get_blue(img_array)
seq = {"C1": [], "C2": [], "C3": []} seq_difs = {"C1": 0, "C2": 0, "C3": 0} d = {} blocks = get_blocks(img_array)
for block in blocks: dct_block = dct(block, DCT_METHOD)
seq["C1"].append(get_module_dif(dct_block, ((2, 3),(3, 2)))) seq["C2"].append(get_module_dif(dct_block, ((2, 4),(4, 2)))) seq["C3"].append(get_module_dif(dct_block, ((3, 4),(4, 3))))
for key in seq: il, ir = get_interval(seq[key]) il = il - 1 if il > 0 else il ir = ir + 2 if ir < len(seq[key]) - 2 else ir
seq[key] = seq[key][il:ir] seq_difs[key] = il
d[key] = [seq[key][0]] for i in range(1, len(seq[key])): d[key].append(fabs(seq[key][i] - seq[key][i-1])) d[key].append(seq[key][len(seq[key]) - 1])
M0s, inds = [], [] for key in seq: r = find_two_maxs(d[key]) r[1] -= 1
if len(r) < 2 or len(seq[key][r[0]:r[1] + 1]) < 8: M0 = 0.0 writelog(log, "[{0}] {1} has not needed
seq\n".format(key, key))
ind = None else: M0 = min(seq[key][r[0]:r[1]]) writelog(log, "[{0}] SEQ = {1}\n".format(key,
seq[key][r[0]:r[1] + 1]))
ind = (seq_difs[key] + r[0], seq_difs[key] + r[1])
M0s.append(M0)
53
inds.append(ind)
writelog(log, "[{0}] SEQ = {1}, bounds: from {2} to {3}. M0
= {4}\n".format(key, str(key), r[0], r[1] - 1, M0))
max_ind = M0s.index(max(M0s)) p, ind = M0s[max_ind], inds[max_ind] p = p - 0.5 if p > 0.5 else p
r = {"threshold": p, "indexes": ind}
return r
В качестве пар анализируемых в данном алгоритме коэффициентов
используются следующие: (3;4), (3;5), (4;5). В программном коде они
представлены в виде индексов матриц ДКП, в связи с чем их значения на
единицу меньше: (2;3), (2;4), (3;4). Все они соответствуют трём главным
среднечастотным компонентам ДКП анализируемых блоков.
Полный программный код реализации алгоритма анализа скрытия по
методу Коха-Жао представлен в Приложении В.
54
3 Анализ результатов работы методов стегоанализа
3.1 Тестирование работы представленных методов
Для тестирования была использована программа Stegano Analyzer, специально разработанная в рамках исследования описанных методов.
Интерфейс данной программы описан в Приложении Г, а инструкция по её
использованию представлена в Приложении Д.
Тестирование представленных методов стегоанализа проводилось в два
этапа. На первом этапе была составлена тестовая выборка, состоящая из 10-ти файлов изображений.
В состав выборки вошли 7 изображений формата PNG и 3 изображения менее популярного формата BMP. Все изображения представляют собой случайные графические файлы, скачанные в интернете.
Для каждого файла изображения были созданы три его копии, в которые
была встроена различная информация. В качестве источника скрываемой
информации использовались три текстовых файла: «secret1.txt», «secret2.txt» и «secret3.txt». В первых двух был расположен случайный текст, в третьем –
надпись «Скрытая секретная информация, не предназначенная для
посторонних.».
Битовые размеры файлов источников скрываемой информации
представлены в таблице 1. Таблица 1 – Размеры встраиваемой информации
Имя файла источника информации
Размер в битах
secret1.txt
2 464 592
secret2.txt
603 952
secret3.txt
976
Для каждого изображения выборки производилось встраивание одного и
того же набора информации (secret1.txt или secret2.txt) дважды: методом
последовательного НЗБ и методом псевдослучайного НЗБ. Копии
55
изображения со встроенной информации получили в своих названиях
суффиксы «_s» и «_sr» соответственно.
При этом для всех изображений выборки производилось встраивание
методом Коха-Жао информации из файла secret3.txt.
Таким образом, изначальная выборка из 10 изображений была
преобразована в набор графических данных, составляющих 40 файлов.
Для всех файлов составленной расширенной выборки был произведён
анализ при помощи всех трёх основных методов: метод Хи-квадрат, RS-метод и анализ на предмет встраивания методом Коха-Жао.
На втором этапе тестирования был проведён анализ выборки из 1600
файлов изображений, в которых одним из трёх способов (последовательная
вариация метода НЗБ, псевдослучайная вариация метода НЗБ, метод Коха-
Жао) был скрыт один из девяти подготовленных текстовых файлов либо
информация не скрывалась в принципе.
Для каждого файла выборки анализ производился также при помощи всех
трёх реализованных методов: методом Хи-квадрат, RS-методом и методом стегоанализа скрытия, произведённого по методу Коха-Жао. Результаты
работы методов, представляющие собой относительную (для первых двух) или
абсолютную (для последнего) предполагаемую длину скрытого в изображении
сообщения, были сравнены с реальными объёмами скрытого в каждом
контейнере сообщения.
56
3.2 Результаты тестов
Все результаты первого этапа тестирования представлены в таблице 2. В
графе «Метод χ2» представлен результат анализа по методу Хи-квадрат – то есть заполненность анализируемого контейнера. В графе «RS-метод» представлен результат анализа методом Regular-Singular, который также
представляет из себя данные об относительной длине сообщения (в процентах
от общего объёма контейнера). В графе «Метод обнаружения скрытия Коха-
Жао» представлены данные о реальном битовом размере встроенного по
методу Коха-Жао сообщения, если оно было обнаружено. Последняя графа,
«Соответствие извлечённых данных» отвечает на вопрос о том, правильно ли
была извлечена информация, скрытая по методу Коха-Жао, если такое встраивание производилось и было обнаружено (если встраивания методом Коха-Жао в данном файле не было и отсутствует ложное срабатывание о якобы обнаружении встраивания – в графе стоит прочерк). Таблица 2 – Результаты работы программы на тестовой выборке
Файл
Метод χ2
RS-метод
Метод
обнаружения
скрытия Коха-
Жао
Соответствие
извлечённых
данных
img1.png
0.00%
0.00%
0 бит
img1_s.png
84.06%
17.85%
0 бит
img1_sr.png
0.23%
74.31%
0 бит
img1_kz.png
0.00%
0.09%
976 бит
Да
img2.png
2.20%
9.33%
0 бит
img2_s.png
34.75%
24.17%
0 бит
img2_sr.png
4.25%
35.30%
0 бит
img2_kz.png
2.20%
10.17%
976 бит
Да
img3.png
0.00%
1.72%
0 бит
img3_s.png
40.74%
36.54%
0 бит
img3_sr.png
0.00%
40.21%
0 бит
57
img3_kz.png
0.00%
1.77%
976 бит
Да
img4.png
0.00%
7.56%
0 бит
img4_s.png
93.88%
21.06%
0 бит
img4_sr.png
49.74%
84.20%
0 бит
img4_kz.png
0.00%
7.61%
976 бит
Да
img5.png
0.00%
1.19%
0 бит
img5_s.png
77.18%
51.30%
0 бит
img5_sr.png
0.00%
76.75%
0 бит
img5_kz.png
0.00%
1.22%
976 бит
Да
img6.png
0.06%
3.79%
0 бит
img6_s.png
23.00%
19.20%
0 бит
img6_sr.png
0.06%
22.69%
0 бит
img6_kz.png
0.06%
3.79%
976 бит
Да
img7.png
0.00%
1.63%
0 бит
img7_s.png
86.07%
21.50%
0 бит
img7_sr.png
0.00%
76.67%
0 бит
img7_kz.png
0.00%
1.79%
976 бит
Да
img8.bmp
0.00%
0.56%
0 бит
img8_s.bmp
84.63%
24.27%
0 бит
img8_sr.bmp
100.00%
87.70%
0 бит
img8_kz.bmp
0.00%
0.67%
976 бит
Да
img9.bmp
0.00%
2.50%
0 бит
img9_s.bmp
40.19%
18.37%
0 бит
img9_sr.bmp
0.00%
40.60%
0 бит
img9_kz.bmp
0.00%
2.55%
976 бит
Да
img10.bmp
0.00%
1.44%
0 бит
img10_s.bmp
33.62%
38.69%
0 бит
img10_sr.bmp
0.00%
27.19%
0 бит
img10_kz.bmp
0.00%
1.56%
976 бит
Да
Результаты тестов второго этапа тестирования сведены в ряд таблиц,
демонстрирующих средние отклонения, под которыми подразумевается
58
среднее арифметическое значение модулей разниц между детектированным
относительным объёмом скрытого изображения и реальным относительным
объёмом.
Средние отклонения методов Хи-квадрат и RS представлены в таблице 3. Таблица 3 – Средние отклонения методов Хи-квадрат и RS
Название
метода
Для пустых
контейнеров, %
Последовательный
НЗБ, %
Псевдослучайный
НЗБ, %
Хи-квадрат
0,105
1,411
22,225
RS
4,055
22,996
4,403
Для уточнения данных об эффективности оценки размера скрытого
сообщения методами Хи-квадрат и RS были посчитаны значения средних
отклонений для различных степеней относительной заполненности
контейнера. Эти значения приведены в таблицах 4 и 5. Таблица 4 – Средние отклонения при различных степенях заполненности для метода Хи-квадрат.
Степень заполненности
Среднее отклонение
при последовательном
НЗБ, %
Среднее отклонение
при псевдослучайном
НЗБ, %
100%
0,609
0,000
90% – 100%
2,107
26,665
80% – 90%
3,678
61,536
70% – 80%
2,851
69,184
60% – 70%
5,013
54,700
50% – 60%
3,248
52,638
40% – 50%
1,783
44,272
30% – 40%
1,761
35,669
20% – 30%
1,635
24,164
10% – 20%
1,019
13,543
0% – 10%
0,366
5,384
Таблица 5 – Средние отклонения при различных степенях заполненности для метода RS.
Степень заполненности
Среднее отклонение
при последовательном
НЗБ, %
Среднее отклонение
при псевдослучайном
НЗБ, %
59
100%
70,501
11,593
90% – 100%
67,184
8,060
80% – 90%
57,385
4,112
70% – 80%
50,704
1,806
60% – 70%
40,795
1,638
50% – 60%
29,291
1,264
40% – 50%
21,286
2,977
30% – 40%
11,476
2,985
20% – 30%
6,277
2,166
10% – 20%
5,254
3,832
0% – 10%
3,894
3,722
Исходя из представленных результатов двухэтапного тестирования
становится возможным установить некоторые общие закономерности, описанные ниже.
Точность определения размера сообщения, скрытого последовательным
способом, довольно высока для метода Хи-квадрат при любых объёмах скрытого сообщения.
В то же время метод Хи-квадрат способен с крайне высокой точностью
определять размер скрытого псевдослучайно сообщения, если он составляет
100% объёма контейнера. При заполненности менее 100%, но более 90%
данный метод позволяет однозначно идентифицировать встраивание, но
ошибка в оценке размера сообщения значительна. При степени заполненности
менее 90% метод Хи-квадрат не всегда способен в принципе детектировать скрытие – его среднее отклонение в некоторых случаях примерно
эквивалентно относительной длине сообщения. При заполненности ниже 60%
метод Хи-квадрат показывает наихудшие результаты при псевдослучайном
скрытии, а при заполненности от 60% до 90% способен определить
встраивание, но с огромными ошибками в оценке размера сообщения.
Метод RS показывает неплохую точность при обнаружении
псевдослучайного встраивания. Однако если степень заполненности менее
10%, он не всегда способен обнаруживать скрытие. При заполненности от 20%
60
до 80% метод показывает хорошую точность. Если размер псевдослучайно
скрытого сообщения более 80%, RS-метод ошибается уже заметно сильнее:
тем больше, чем больше объём встроенной информации. Более высокую
величину ошибки метод показывает при заполненности в 10-20%.
При оценке размера последовательно скрытого сообщения метод RS
показывает куда худшие результаты и имеет среднее отклонение тем выше,
чем выше степень заполненности. При этом отклонение при объёме
сообщения менее 10% не позволяет в большинстве случаев однозначно
идентифицировать факт скрытия.
При степени заполненности более 10% метод RS будет оценивать размер скрытого сообщения в среднем примерно в 15-30% объёма контейнера,
позволяя сделать однозначный вывод о факте встраивания, но крайне неточно
определяя его объём.
Для оценки результатов работы алгоритма стегоанализа скрытия,
произведённого по методу Коха-Жао, было определено количество корректно
распознанных изображений, для которых алгоритм правильно оценил размер
скрытого сообщения, некорректно распознанных, для которых алгоритм
вернул неправильное, но отличное от нуля значение размера сообщения, и
нераспознанных, для которых алгоритм вернул 0 в то время, как в
изображении действительно скрыта информация.
Вышеописанные характеристики представлены в таблице 6.
Таблица 6. Характеристики различных видов результата анализа скрытия
методом Коха-Жао
Вид результата
Количество
Относительное
количество
Корректно распознаны
277
92,3%
Некорректно
распознаны
19
6,3%
Не распознаны
4
1,3%
Все пустые контейнеры были корректно идентифицированы методом
Коха-Жао как изображения, не содержащие скрытой информации.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]