УДК 621.391
Б. Я. Рябко 1, А. Н. Фионов 2
Сибирский государственный университет телекоммуникаций и информатики
ул. Кирова, 86, Новосибирск, 630102, Россия E-mail: 1 [email protected]; 2 [email protected]
АЛГОРИТМЫ КОДИРОВАНИЯ ДЛЯ ИДЕАЛЬНЫХ СТЕГАНОГРАФИЧЕСКИХ СИСТЕМ *
Предлагаются алгоритмы побуквенного кодирования зашифрованного сообщения, обеспечивающие заданное распределение вероятностей появления кодовых символов. Предлагается применение этих алгоритмов для построения идеальных систем стеганографии, т.е. таких систем, в которых невозможно выявить наличие скрытого сообщения.
Ключевые слова: стеганография, идеальные стегосистемы, кодирование источников.
Введение
Одна из основных задач, решаемых в стеганографии, формулируется следующим образом: отправитель А должен передать сообщение получателю В так, чтобы сам факт передачи сообщения остался скрытым. Для выполнения этой задачи отправитель встраивает сообщение в некоторый «безобидный» файл, который в этом случае называется стеганографическим контейнером, путем замены (некоторых) элементов файла символами сообщения. В качестве файлов-контейнеров могут использоваться цифровые фотографии, цифровые аудиофайлы и т. п. Но практически всегда природа (или распределение вероятностей) символов встраиваемого сообщения отличается от природы заменяемых ими элементов контейнера. В результате, если сообщение встраивается непосредственно, то вся вероятностная структура контейнера искажается. Искажение вероятностной структуры может быть выявлено с помощью статистических тестов, и таким образом факт наличия в контейнере скрытого сообщения обнаруживается. В этом случае стеганографическая система считается взломанной.
Предметом научных исследований в стеганографии является поиск методов, затрудняющих выявление скрытых сообщений или делающих их выявление вообще невозможным. Если преобразовать сообщение (до его встраивания) таким образом, чтобы вероятностная структура преобразованного сообщения полностью совпадала с вероятностной структурой контейнера, то никакие статистические тесты не смогут отличить заполненный контейнер от пустого. Стеганографическая система становится невскрываемой (идеальной).
Понятие идеальной стеганографической системы было впервые сформулировано в [1]. Для преобразования сообщения там было предложено использовать методы, относящиеся к классу так называемых кодов со стоимостью. Коды со стоимостью хорошо изучены в теории кодирования источников. Похожий подход предлагается в [2]. Авторы рассматривают задачу построения стегосистемы в случае известной статистики и предлагают схему, основанную на применении к предварительно зашифрованному сообщению арифметического декодирования, управляемого алфавитом и статистикой контейнера. Недостаток всех этих подходов заключается в том, что они обеспечивают только приближение к требуемому распределению, причем последнее достигается лишь асимптотически по причине наличия кодовой избыточности.
* Работа выполнена в рамках федеральной целевой программы «Исследования и разработки по приоритетным направлениям развития научно-технологического комплекса России на 2007-2012 годы» (код проекта 2007-4-1.400-04-103) и при поддержке РФФИ (грант № 06-07-89025).
ISSN 1818-7900. Вестник НГУ. Серия: Информационные технологии. 2008. Том 6, выпуск 2 © Б. Я. Рябко, А. Н. Фионов, 2008
В [3] были предложены методы построения идеальных стеганографических систем в случае, когда элементы контейнера независимы и одинаково распределены, но их вероятности неизвестны. Однако представляющий большой теоретический и практический интерес случай, когда статистика известна, но описывается сложными условными распределениями, оставался не реализованным.
В настоящей работе предлагается несколько простых конструкций, позволяющих преобразовывать сообщения в код, полностью отвечающий статистической структуре контейнера при условии, что эта структура известна. Разработанные методы позволяют легко строить идеальные стеганографические системы для контейнеров с известной статистикой.
Мы предполагаем, что сообщение, которое необходимо спрятать в контейнере, вначале шифруется и потому может рассматриваться как последовательность равновероятных и независимых нулей и единиц. Это предположение довольно естественно, поскольку сообщения, как правило, шифруются перед помещением в контейнер, а выход хорошего шифра неотличим (по крайней мере, вычислительно) от полностью случайной последовательности бит.
Такая модель была предложена Кашеном [1] и сегодня наиболее популярна.
*
Обозначим элементы контейнера через х = х1 х2х3 • • •. Каждый элемент выбирается из алфавита контейнера А = {а1, а2,..., ам} и подчиняется некоторому распределению вероятностей р . Это распределение может быть обусловлено контекстом контейнера вокруг элемента и предшествующими элементами, т. е. может быть разным для каждого элемента. Предлагаемые методы легко справляются с ситуацией, когда распределения вероятностей меняются от элемента к элементу, хотя для иллюстрации методов и получения оценок мы будем использовать стационарное распределение Р.
Обозначим исходное сообщение через и * = ихи2 • • •, все п{ е {0,1} и распределены произвольно. Обозначим зашифрованное сообщение через у = у1у2 • • •, все у{ е {0,1} , независимы, и р(0) = р(1) = 1/ 2 . Наша цель состоит в том, чтобы встроить у в х так, чтобы результирующая последовательность ху подчинялась тому же самому распределению ^ * *
вероятностей, что и х . Разумеется, ху должна позволять извлечь из нее у , а затем, путем дешифрования, и и* .
Алгоритмы А1-А3, описываемые ниже, решают поставленную задачу путем кодирования
*
каждого бита у таким кодом, в котором вероятности кодовых букв полностью совпадают с
*
вероятностями символов в х . Таким образом, ххх2х3 • • • могут рассматриваться как буквы
*
кодовых слов для у . Для получения точного распределения на выходе используется рандомизация.
Алгоритм А4 решает поставленную задачу путем объединения процессов кодирования и шифрования с помощью потокового шифра, применяя также и рандомизацию. Метод работает при константной (невозрастающей) точности вычислений.
Заметим, что все предложенные алгоритмы требуют генерирования случайных переменных с заданными распределениями за счет использования некоторого внешнего источника случайности. Эффективное решение задачи генерации случайных величин, основанное на омофонном декодировании, было предложено в [4]. Эффективные методы омофонного кодирования разработаны в [5; 6] (см. также [7] по вопросу омофонного кодирования со стоимостью).
Побуквенное кодирование с арифметикой растущей точности
Рассмотрим вначале случай двоичного алфавита контейнера, т. е. А = {а1, а2} . Предположим, что р(а^ > р(а 2) (в противном случае мы можем поменять местами буквы), и введем обозначение р = р(а^) .
Идея алгоритма представлена на рис. 1, будем называть этот алгоритм А1. Буквам источника (0, 1) и кодовым буквам (ах, а2) выделяются интервалы, равные их вероятностям, которые мы обозначим через I(0), I(1), /(аД 1(а2) соответственно. Опишем код, который достигает с равенством верхней границы средней длины кодового слова, которую мы выведем далее. В этом коде мы всегда меняем порядок букв на интервале, чтобы дать возможность интервалу I (ах) содержать в себе точку 1/2. На первом шаге, если входной бит у = 0, мы выдаем на выход ах (поскольку I(0) ^ I(ах)), но если у = 1, то выдаем на выход ах или а2 с вероятностями, пропорциональными их долям в I(1) . Выдача а2 завершает алгоритм (так как I(а2) е I(1)).
Рис. 1. Распределение букв в алгоритме А1
В противном случае (шаг 2) вычисляем новое распределение внутри предыдущего I (ах) и получаем новые I(аД I(а2) . Далее принимаем решение, какой кодовый символ выдать на выход, точно так же, как и на первом шаге.
Число шагов в алгоритме не ограничено, но их среднее число невелико, поскольку мы всегда останавливаемся после выдачи а2 .
Для примера, представленного на рис. 1, ноль может быть закодирован любым из слов аха2, ахаха2, ..., а единица - любым из слов а2, а1а1а1а2, ... .
Обозначим через Ь среднюю длину кодового слова, т. е. среднее число выходных букв, приходящихся на один входной бит. Свойства алгоритма даются следующим утверждением.
Утверждение 1. Для кода, построенного по алгоритму А1,
1) кодовые буквы в точности подчиняются заданному распределению вероятностей;
2) средняя длина кодового слова
Ь = ■
1
1 - Р
Доказательство. 1) Из построения кода видно, что все кодовые слова вида а1"а2, где п > 0, появляются с вероятностью рп (1 - р). Это означает, что р(ах) = р, р(а2) = 1 - р, как и было задано.
2) Заметим, что вероятность того, что будет произведено ровно п кодовых букв, равна рп-1(1 - р). Отсюда
Ь = 1 • (1 - р) + 2 р(1 - р) + 3 р 2(1 - р) + - = = (1 - р)(1 + 2 р + 3 р2 + •••) =
= (1 - р)(р + р2 + р3 + ••■)'= (1 - р) 1 1
V1 - р J
=(1 - р) •
(1 - р)2 1 - р
_ 2
Следствие 1. Если разность между вероятностями р(а1) - р(а2) = 5, то Ь =■
1 -5
Доказательство очевидно.
Теперь рассмотрим небольшую практическую модификацию алгоритма А1, которую назовем А2. Будем делать все точно так же, как в А1, но на каждом шаге будем пытаться упорядочить буквы а1, а2 так, чтобы I(а2) содержал точку 1/2 (это не всегда возможно). Утверждение 2. Для кода, построенного по алгоритму А2,
1) кодовые буквы в точности подчиняются заданному распределению вероятностей;
2) средняя длина кодового слова
Т 1 Т 2
Ь <-, Ь <■
1- р 1-5
Доказательство. 1) Может быть доказано так же, как и для алгоритма А1, поскольку вероятность каждой буквы на выходе кодера не зависит от порядка букв на интервале.
2) Доказывается наблюдением, что если на некотором шаге I (а2) содержит точку 1/2, то вероятность продолжения алгоритма становится меньше, и поэтому построение кода завершается быстрее.
Теперь рассмотрим случай, когда кодовый алфавит А = {ах, а2,..., ам} , N > 2. Мы предлагаем следующее решение (алгоритм А3): сгруппируем все кодовые буквы в два непересекающихся подмножества А1 и А2 , такие, что р(А1) > р(А2) и р(А1) - р(А2) = Д минимальна, где р(А1) = ^ л р(а.) и р(А2) = 1 - р(А1) . Применим алгоритм А1 или А2 к
А = {А1, А2} . Затем для каждой прописной буквы А. сгенерируем а ■ е А. с вероятностью р(а})/ р( А1.).
Утверждение 3. Для кода, построенного по алгоритму А3,
1) кодовые буквы в точности подчиняются заданному распределению вероятностей;
2) средняя длина кодового слова
ь
1 -Д
Доказательство тривиально и аналогично доказательствам предыдущих утверждений.
Таким образом, алгоритмы А1-А3 решают задачу кодирования бит сообщения таким образом, что кодовые буквы в точности подчиняются заданному распределению. Также ясно, что на каждом шаге, т. е. при выдаче каждой кодовой буквы, распределение может меняться. Предложенные алгоритмы близки к омофонному кодированию со стоимостью [7], но не требуют бесконечной памяти и имеют более плотные верхние оценки (в [7] Ь < 2/И(р) +1/(1-р)).
Побуквенное кодирование с арифметикой постоянной точности
Мы предлагаем метод решения основной задачи, который использует арифметику постоянной точности, что отличает его от методов предыдущего раздела. Отличительной особенностью предлагаемого метода является то, что он требует объединения процессов кодирования и шифрования.
Обозначим описываемый алгоритм как А4. Для этого алгоритма предположим, что размер кодового алфавита N > 3 . (Если N = 2 , то можно сгруппировать буквы в блоки - скажем, по две, тогда актуальный размер алфавита будет 4.)
Как и в предыдущих алгоритмах, распределим все кодовые буквы на единичном интервале в соответствии с их вероятностями. Обозначим через рт вероятность буквы ат е А , интервал I (ат ) которой содержит точку 1/2. По соображениям эффективности рекомендуется
упорядочить буквы так, чтобы pm была как можно меньше. Итак, мы имеем распределение кодовых букв, как показано на рис. 2.
Рис.2. Распределение букв для алгоритма А4
Обозначим через k = kxk2k3 • • •, kt e {0,1} , поток бит ключа, используемый в потоковом
*
шифре. Напомним, что u = u1u2 — обозначает незашифрованное сообщение. Алгоритм А4 работает следующим образом. Шаг 1. Установим i = 1, j = 1.
Шаг 2. Зашифруем текущий бит сообщения ui при помощи бита бегущего ключа kj: yj = u 0 kj.
Шаг 3. Если yj = 0, то выдаем на выход одну из букв a1,..., am-1 с вероятностями 2p(a1),...,2p(am-1) соответственно, или букву am (с вероятностью 1 -2^ <mp(as)). В противном случае (yj = 1) выдаем на выход одну из букв am+1,..., aN с вероятностями 2p(am+i), .,2p(aN) соответственно, или букву am (с вероятностью 1 -2^>mp(as)). (Заметим, что am представляет как 0, так и 1.)
Шаг 4. Если на выход была выдана буква am, то устанавливаем j ^ j +1 (т. е. берем следующий бит потока ключа) и идем на шаг 2 (т. е. шифруем и кодируем ui снова). В противном случае устанавливаем i ^ i +1, j ^ j +1 (переходим к следующему символу сообщения и следующему биту ключа).
В данном алгоритме am - фиктивный символ. Он должен быть отброшен при декодировании. Когда декодер встречает am, он также должен отбросить один бит из потока ключа.
Свойства алгоритма формулирует следующее утверждение. Утверждение 4. Для кода, построенного по алгоритму А4,
1) кодовые буквы в точности подчиняются заданному распределению вероятностей;
2) средняя длина кодового слова
I=_u
1 - Pm
Доказательство. 1) Почти очевидно.
2) Заметим, что pm есть вероятность продолжения, точно так же, как p в алгоритме А1.
Отметим, что распределение кодовых букв не пересчитывается в ходе работы алгоритма (интервалы остаются теми же самыми), поэтому требуется только арифметика фиксированной постоянной точности.
Список литературы
1. Cachin C. An Information-Theoretic Model of Steganography // Lecture Notes in Computer Science. Springer Verlag, 1998. Vol. 1525. P. 306-318.
2. Tri Van Le, Kurosawa K. Efficient Public Key Steganography Secure Against Adaptive Chosen Stegotext Attacks // Cryptology ePrint Archive, Report 2003/244. http://eprint.iacr.org/2003/244.
3. Ryabko B., Ryabko D. Information-Theoretic Approach to Steganographic Systems // Proc. IEEE International Symposium on Information Theory, Nice, France, 2007. P. 2461-2464.
4. Fionov A. Random Number Generation via Homophonoc Coding // Proc. IEEE International Symposium on Information Theory. Sorrento, Italy, 2000. P. 354.
5. Ryabko B., Fionov A. Efficient homophonic coding // IEEE Transactions on Information Theory. 1999. Vol. 45. P. 2083-2091.
6. Fionov A. Arithmetic Homophonic Coding with Dummy Symbols // Proc. IEEE International Symposium on Information Theory. Chikago, Illinois, USA, 2004. P. 129.
7. Hoshi M., Han T. S. Interval Algorithm for Homophonic Coding // IEEE Transactions on Information Theory. 2001. Vol. 47. P. 1021-1031.
Материал поступил в редколлегию 13.06.2008
B. Ya. Ryabko, A. N. Fionov
Coding Algorithms for Ideal Steganographic Systems
Algorithms of letterwise coding of ciphered messages are suggested, providing a specified probability distribution of code symbols. The application of the algorithms to constructing ideal steganographic systems, i.e., such systems in which it is impossible to detect a hidden message, is proposed.
Keywords: steganography, ideal stegosystems, source coding.