УСТОЙЧИВЫЕ К АТАКАМ НА КОНТЕЙНЕР СТЕГАНОГРАФИЧЕСКИЕ АЛГОРИТМЫ


Цитировать

Полный текст

Аннотация

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

Полный текст

Введение Стеганография - наука о скрытой передаче данных путем сохранения в тайне самого факта передачи данных. Современная стеганография имеет дело с цифровыми объектами, в основном изображениями, аудио и видео данными. Основным критерием стеганографических систем является устойчивость к обнаружению. Изначально рассматривалась устойчивость к визуальному обнаружению, однако по мере развития методов стеганографии появился особый раздел стеганографии: стегоанализ, наука о выявлении факта передачи скрытой информации. В настоящее время рассматривается устойчивость стеганографических алгоритмов к статистическим тестам, методам классификации и т.д. Стеганография позволяет решать ряд прикладных задач, не связанных с «задачей заключенных» [1]. Чаще всего сокрытие дополнительной информации позволяет расширить функционал формата данных. Для решения прикладных задач критерий устойчивости к обнаружению не является приоритетным, так как наличие внедренных в цифровой объект данных не скрывается. Таким образом, одним из главных требований к прикладной стеганосистеме - это обеспечение устойчивости к случайным или умышленным атакам [2]. Постановка задачи Этапы трансформации цифрового объекта могут быть представлены в виде диаграммы (см. рис. 1). Состояния нумеруются, причем нулевым состоянием будет объект до внедрения, первым - после него. Переход между двумя состояниями характеризует искажение, вносимое в исходный объект. Если искажение порождает множество различных объектов, соответствующее состояние на диаграмме помечается знаком бесконечности, символизирующим отношение «один ко многим». Рис. 1. Диаграмма этапов трансформации цифрового объекта Для решения прикладных задач необходима стеганографическая система, способная извлекать скрытую информацию из всех ненулевых состояний цифрового объекта. В процессе редактирования цифровых фотографий, например, могут быть применены различные приемы: цветокоррекция, ретушь, аффинные преобразования, фильтры, сжатие с потерями и т.д. Функцией извлечения будем называть любое отображение множества контейнеров K во множество кодовых символов S: . (1) Для цифровых изображений контейнером может быть цвет отдельного пикселя в формате RGB, то есть тройка неотрицательных целых чисел в диапазоне [0 … 255]. Функция извлечения может иметь следующий вид: , (2) где - функция извлечения младшего бита. Отдельный символ стеганограммы может быть передан с помощью различных контейнеров. Для выбора вводится дополнительный критерий - условие минимизации вносимого в исходный контейнер искажения. Мерой искажения можно считать расстояние между парой контейнеров . Таким образом, стеганографический алгоритм имеет вид: (3) где; - входной и выходной контейнеры; - внедряемый символ кодового алфавита. Для растровых изображений в качестве расстояния между контейнерами (цветами) целесообразно использовать следующую формулу: , (4) где - это i-ый бит. Функции извлечения и внедрения вместе с правилом построения последовательности контейнеров из цифрового объекта образуют стеганографический алгоритм. Атакой на цифровой объект будем называть преобразование вида . (5) Стеганографический алгоритм устойчив к атаке на контейнер, если выполняется условие: . (6) Метод редукции множества контейнеров Пусть дан стеганографический алгоритм, такой, что для некоторого выполняется (6). Тогда выбирая для внедрения контейнер из подмножества, получается устойчивый к атаке стеганографический алгоритм: (7) где Метод оценки искажения Пусть дан стеганографический алгоритм над двоичным алфавитом, такой, что для некоторого выполняется условие: , (8) где - расстояние между парой контейнеров, такое, что образует метрическое пространство. Введем функции извлечения и внедрения в следующем виде: , (9) (10) где - произвольный фиксированный контейнер. Покажем, что функции , вместе с правилом построения последовательности контейнеров из цифрового объекта образуют устойчивый к атаке стеганографический алгоритм. Доказательство. Так как - метрическое пространство, то выполняется обратное неравенство треугольника: (11) Введем обозначение: . (12) Подставляя (10) и (12) в (11), имеем: . (13) Последнее означает, что , (14) то есть выполняется условие (6): =. (15) Осталось показать, что, применяя функцию извлечения (9) к выходному контейнеру, мы получаем требуемый символ стеганограммы : (16) Для предложенной схемы построения стеганографического алгоритма оценка вносимого искажения имеет вид: . (17) Алгоритм может быть улучшен за счет небольшого изменения в функцию внедрения. Пусть такие, что: (18) Тогда выходной контейнер выбирается следующим образом: . (19) Оценка искажения для данной схемы имеет вид: . (20) Практическое применение Рассмотрим представленные методы на практических примерах. Построим устойчивый к преобразованию цветного изображения в градации серого стеганографический алгоритм. Градации серого - цветовой режим изображений, которые отображаются в оттенках серого цвета, размещенные в виде таблицы в качестве эталонов яркости цвета. Широко применяется в цветоведении и колористике, для оценки и измерений качества тонопередачи при фотографической съемке, сканировании, при копировальных и печатных процессах. В компьютерном представлении распространена серая шкала, которая использует на каждый пиксель изображения один байт информации. Таким образом, шкала передает 256 градаций серого цвета, или яркости. Для преобразования цветного изображения в режим градаций серого вычисляется яркость каждого пикселя. Яркость рассчитывается в виде взвешенной суммы красной, зеленой и голубой компонент исходного цвета. Согласно спецификации Rec. 709 (стандарт телевидения высокой четкости) формула имеет вид: (21) Диаграмма состояний изображения для данной задачи представлена на рис. 2. Рис. 2. Трансформации цифрового изображения для задачи построения устойчивого к преобразованию в оттенки серого стеганографического алгоритма Таким образом, задача сводится к построению стеганографического алгоритма, способный извлекать сообщение из цветного изображения и после его преобразования в градации серого. Пусть в качестве функции извлечения используется метод наименьших бит (2). Оценим воздействие преобразования на младший бит изображения. Сравним последовательности кодовых символов, полученные из оригинального изображения и преобразованного, и вычислим количество инвертированных битов. На серии из цифровых фотографии высокого разрешения (4912×3264 пикселей) было получено, что в результате приведения по формуле (21) исходного изображения в режим градаций серого изменяется ~48,9% битов. Последнее означает, что использование известных стеганографических алгоритмов, основанных на LSB методе, невозможно. В то же время, значительное число контейнеров сохраняет младший бит после преобразования. Это означает, что устойчивую стеганографическую систему можно построить с помощью метода редукции множества контейнеров (7). Стеганографический алгоритм реализован на языке программирования Python 2.7, с использованием библиотеки PIL (версия 1.1.7): def extract(img): code = [] if img.mode == "L": B = img else: R, G, B = img.split() rnd.seed(seed) data = B.getdata() keys = range(len(data)) rnd.shuffle(keys) for k in keys: code.append(data[k] & 0b0000001) message = [] for i in range(len(code) / 7): m = "" for b in range(7): m += str(code[b+7*i]) message.append(m) message = map((lambda s: int(s, 2)), \ message) message = message[:message.index(0)] message = "".join(map(chr, message)) return message def embed(img, text): message = map(ord, list(text)) message.append(0) code = [] for m in message: for c in map(int, \ list("{0:07b}".format(m))): code.append(c) data = list(img.getdata()) rnd.seed(seed) keys = range(len(data)) rnd.shuffle(keys) for key, c in enumerate(code): r, g, b = data[keys[key]] b = (b & 0b11111110) + c r0, g0, b0 = r, g, b count = 0 while (int(round(0.2126*r+\ 0.7152*g+0.0722*b+ \ 1e-5)) & 1) != c: k = (-1) ** (count % 2) * \ (count / 2) r = max(0, min( r0+ \ int(0.2126*k+1e-5), 255)) g = max(0, min(g0+ \ int(0.7152*k+1e-5), 255)) b = max(0, min(b0+ \ 2*int(0.0361*k+1e-5), 255)) count += 1 data[keys[key]] = (r, g, b) out = Image.new(img.mode, img.size) out.putdata(data) return out Последовательность контейнеров в реализации стеганографического алгоритма перемешивается псевдослучайным образом на основании ключа, что позволяет распределить кодовую последовательность по всему изображению. Алгоритм внедряет текстовое сообщение в кодировке ASCII, урезанной до 7 бит. Самым распространенным графическим на сегодняшний день форматом является JPEG. Сохранение в формат JPEG вносит искажение в исходное изображение ввиду дискретного преобразования Фурье и последующего сжатия. При этом сложность и нетривиальность алгоритма не позволяет математически построить модель вносимого искажения. Более того, одинаковые контейнеры могут быть искажены по-разному в зависимости от смежных с ними пикселей. Рассмотрим этапы трансформаций цифрового изображения, которое, помимо преобразования в режим градаций серого, может быть сохранено в формат JPEG (см. рис. 3). Рис.3. Трансформации цифрового изображения для задачи построения устойчивого к преобразованию в оттенки серого стеганографического алгоритма и JPEG-компрессии Для данной диаграммы существует шесть возможных модификаций изображения со скрытой информацией. Кроме того, формат JPEG позволяет устанавливать качество сжатия. Будем полагать, что данный параметр не ниже 95%. При сохранении в JPEG исходное растровое изображение из формата RGB преобразуется в формат YcbCr. Яркость пикселя (Y) сохраняется с наименьшими потерями. Последнее означает, что если ввести соответствующую метрику над множеством контейнером, то вносимое искажение будет удовлетворять неравенству (2) для некоторого значения l. В качестве метрики предложена следующая формула: . Так как по изложенным выше причинам оценить вносимое искажение теоретически затруднительно, была проведена серия расчетов, при которых попиксельно сравнивалось расхождение яркости растрового изображения в формате BMP и сжатого в формат JPEG с качеством 95%. Средняя величина разброса, равно как и максимальное значение, варьируется для разных исходных изображений, но в основном не превосходит четырех единиц, то есть. Это означает, что устойчивую стеганографическую систему можно построить с помощью метода оценки искажения (9)-(10). Стеганографический алгоритм реализован на языке программирования Python 2.7, библиотеке PIL (версии 1.1.7). Код представлен в листинге 2. Последовательность контейнеров, как и в первом алгоритме, перемешивается псевдослучайным образом. ALPHA = 2 * l def extract(img): code = [] if img.mode == "L": B = img else: B = img.convert("L", (0.2126, \ 0.7152,0.0722,0)) rnd.seed(seed) data = B.getdata() keys = range(len(data)) rnd.shuffle(keys) for k in keys: code.append((data[k] / \ ALPHA) % 2) message = [] for i in range(len(code) / 7): m = "" for b in range(7): m += str(code[b+7*i]) message.append(m) message = map((lambda s: int(s, 2)),\ message) message = message[:message.index(0)] message = "".join(map(chr, message)) return message def gray(r,g,b): return int(round(0.2126 * r + \ 0.7152 * g + 0.0722 * b + 1e-5)) def embed(img, text): message = map(ord, list(text)) message.append(0) code = [] for m in message: for c in map(int, \ list("{0:07b}".format(m))): code.append(c) data = list(img.getdata()) rnd.seed(seed) keys = range(len(data)) rnd.shuffle(keys) for key, c in enumerate(code): r, g, b = data[keys[key]] gr = gray(r,g,b) div = gr / ALPHA if (div % 2 != c): div += 1 if div >= (255/ALPHA): div -= 2 new_g = div * ALPHA + ALPHA / 2 r0, g0, b0 = r, g, b count = 0 while gray(r,g,b) != new_g: k = (-1) ** (count % 2) *\ (count / 2) r = max(0, min(r0+\ int(0.2126*k+1e-5), 255)) g = max(0, min(g0+\ int(0.7152*k+1e-5), 255)) b = max(0, min(b0+\ 2*int(0.0361*k+1e-5), 255)) count += 1 data[keys[key]] = (r, g, b) out = Image.new(img.mode, img.size) out.putdata(data) return out Заключение В данной статье представлен способ отображения этапов трансформации цифрового объекта с помощью диаграмм. Сформулированы определения для стеганографической системы, меры искажения, функций извлечения и внедрения. Рассмотрены два метода построения устойчивых стеганографических алгоритмов - метод редукции множества контейнеров и метод оценки искажения. Предложенные в статье методы построения стеганографических систем опробованы на практике. Разработаны две стеганографические системы, устойчивые к преобразованию цветного изображения в режим градаций серого. Для второй системы добавлена устойчивость к JPEG-компрессии.
×

Об авторах

Алексей Аркадьевич Смагин

Ульяновский государственный университет

Email: smaginaa1@mail.ru

Марат Фаритович Валишин

ОАО «ГНЦ НИИАР»

Email: valmar.ktn@gmail.com

Список литературы

  1. Gustavus J. Simmons. The Prisoner’s Problem and the Subliminal Channel, Advances in Cryptology: Proceedings of Workshop on Communications Security (Crypto'83, David Chaum, ed.). Plenum Press. 1984. - P. 51-67.
  2. Конахович Г.Ф., Пузыренко А.Ю. Компьютерная стеганография. Теория и практика. К.: МК-Пресс, 2006. - 288 с.

Дополнительные файлы

Доп. файлы
Действие
1. JATS XML

© Смагин А.А., Валишин М.Ф., 2015

Creative Commons License
Эта статья доступна по лицензии Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Данный сайт использует cookie-файлы

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

О куки-файлах