Шифрование изображения с сохранением исходного размера
Шифрование изображения с сохранением исходного размера (Шаблон:Lang-en) - Шифрование битового потока (Шаблон:Lang-en) JPEG изображений. Данный алгоритм принимает на вход битовый поток исходного изображения и выборочно шифрует дополнительные биты. Подобный способ шифрования позволяет сохранить размер изображения без изменения.
Введение
На современном этапе развития телекоммуникационных технологий изображения широко используются при работе различных веб-приложений. При этом для большинства приложений остро стоит вопрос защиты передаваемой информации. С учетом того, что размер изображений достаточно большой, а некоторым приложениям необходимо работать в режиме реального времени, процесс шифрования должен осуществляться достаточно быстро. Традиционные алгоритмы шифрования, например, такие как AES и DES, разрабатывались без учета этих требований и не являются подходящими для данных целей. Поэтому возникает необходимость в создании новых алгоритмов шифрования. Большинство существующих схем шифрования JPEG изображений либо плохо совместимы со стандартом JPEG, либо существенно меняют размер изображения. Алгоритм, предложенный в данной статье, в свою очередь, гарантирует, что размер файла будет константным и не изменится после шифрования. Гарантируется это предотвращением иcчезновения маркеров.
Битовый поток и байтовые сдвиги

Рисунок 1(а) отображает структуру битового потока JPEG изображения. SOI и EOI - маркеры, обозначающие начало и конец изображения соответственно. Битовые потоки содержат сегменты, использующиеся для декодирования данных таких как, например : Таблицы Хаффмана. Каждый из сегментов начинается с маркера. Маркер состоит из двух байтов - первый из которых всегда равен 0xFF, а следующий за ним байт определяет тип маркера и принимает значение в диапазоне от 01 до FE.
Рисунок 1(b) отображает структуру энтропийно закодированного сегмента данных (Шаблон:Lang-en), показанного на рисунке 1(а). Данные состоят из MCU(Minimum Coded Unit)[1] блоков. Каждый MCU блок содержит в себе один DC[2] коэффициент и некоторое количество AC коэффициентов . Как видно из картинки, каждый DC коэффициент состоит из битов, закодированных кодами Хаффмана и дополнительных битов (Шаблон:Lang-en).
Особенности сохранения размера изображения.

На рисунке 2 изображен пример энтропийно закодированного сегмента данных. DCk - энтропийно закодированный коэффициент DC, а ACk,1 - энтропийно закодированные данные первого АС коэффициента в блоке k. Все данные содержат биты, отвечающие коду Хаффмана, а также дополнительные биты . Чтобы сгенерировать битовый поток, к энтропийно-закодированным данным применяется метод деления на байты (Шаблон:Lang-en) как показано на рисунке 2(b). После применения данной операции, необходимо учесть, что не исключено получить байт FF который , впоследствии, будет принят за маркер. Чтобы решить данную проблему применяется байтовый сдвиг (Шаблон:Lang-en). После каждого байта FF в коде Хаффмана или в дополнительных битах размещается нулевой байт , как показано на рисунке 2(с). Очевидно, что после применения данной операции размер битового потока изменится. В следующем разделе будет рассмотрен алгоритм байтового сдвига , не изменяющий размер битового потока.
Шифрование DC коэффициентов
Коэффициенты DC часто содержат в себе важную визуальную информацию изображения. Если коэффициенты DC не зашифрованы, это может привести к тому , что контур изображения будет виден после шифрования. Существует несколько наиболее популярных способов шифрования данных коэффициентов:
- Случайная подстановка. Корреляция между соседними DC коэффициентами , вносящими существенный вклад в степень сжатия будет ослаблена. Очевидно, это приведёт к увеличению размера файла.
- Шифрование путём расширения разницы между квантованым коэффициентом текущего блока DC коэффициента и предыдущего. Это также приводит к увеличению размера изображения.
- Коэффициент разностного шифрования. Используется корреляция между смежными коэффициентами DC. Возникают проблемы при декодировании изображения.
Шифрование АC коэффициентов
Как правило, АС коэффициенты содержат информацию о деталях изображения. Незашифрованные АС коэффициенты позволят получить некоторую информацию об изображении. Такую как, например, силуэт каких-либо предметов. Выделяются следующие типовые методы шифрования данных коэффициентов:
- Внутриблочная перестановка. Минус метода заключается в значительном увеличении размера файла.
- Перестановка внутри секции.
- Внутриблочная символьная перестановка.
- Перестановка на основе частоты. Влияет на коэффициент сжатия изображения
Алгоритм предлагаемого метода.

Битовые потоки, зашифрованные по данному методу, сохраняют размер файла и совместимость с декодерами JPEG изображений. Данный результат достигается благодаря тому, что шифруются только некоторые из дополнительных битов. Рисунок 3 отображает данный алгоритм.
Шаги алгоритма:
- 1. Анализируются энтропийно-закодированные сегменты данных и выбираются дополнительные биты, удовлетворяющие следующему условию: байт, из которого был выбран бит, должен содержать как код Хаффмана, так и дополнительные биты. Причем код Хаффмана, должен содержать как минимум один «0» бит.
- 2. Генерируется случайная бинарная последовательность с секретным ключом.
- 3. Выполняется EX-OR операция между дополнительными битами и случайно-сгенерированной последовательностью из пункта 2. Все дополнительные биты заменяются на полученный результат.
- 4. Зашифрованный битовый поток получается комбинированием зашифрованных дополнительных битов из пункта 3 с остальными данными.
Генерация случайной последовательности.
Случайная последовательность играет важную роль в данном алгоритме шифрования. В предлагаемом методе применяются хаотические карты в силу простоты и достаточной надежности. Любые другие генераторы случайных последовательностей также могут быть применены в данной схеме. Математическое определение хаотических карт:
, где и .
и - задаются изначально.
Возможность шифрования байтов

На рисунке 4 заменены все дополнительные биты символом 'x'. Рассмотрим подробно какие байты можно шифровать, а какие нет:
- 1. Первый байт состоит из 5 бит кода Хаффмана равных "10011" и 3 дополнительных бит. Даже если все дополнительные биты будут равны 1, байт не будет равен "FF". Следовательно, данные можно шифровать.
- 2. Второй байт состоит из 3-х дополнительных бит и 5 бит кода Хаффмана, равных "11111". Поскольку дополнительные биты до шифрования были равны "111"(рис 2(b)) после второго байта идет нулевой байт. Таким образом, если применить алгоритм шифрование к данным трем дополнительным битам, то результат может не быть равен "111" , что приведёт к отсутствию нулевого байта , который стоит перед ним в незашифрованной версии. Этот приведёт к изменению битового потока и размера файла. Таким образом, второй байт шифровать нельзя.
- 3. Третий байт не содержит дополнительных битов, поэтому не шифруется.
- 4. Последний байт содержит один бит кода Хаффмана, равный нулю и 7 дополнительных битов. Очевидно, что шифровать дополнительные биты можно, так как результрующий байт не будет равен "FF".
Безопасность данного алгоритма
Существует два основных вида атак на алгоритмы подобного рода: атака грубой силой и криптоанализ.
Методы атак грубой силой
1. Перестановка последовательностей DC коэффициентов внутри группы.
Поскольку все коэффициенты DC случайно переставляются внутри своей группы, существует возможность подсчитать конечное число перестановок, используя данную формулу:
, где S - обозначает каждую группу, M - количество групп.
2. Перестановка последовательностей AC коэффициентов внутри категории.
Аналогичным образом существует возможность посчитать полное количество перестановок AC коэффициентов внутри каждой категории. Так как суммарное число AC коэффициентов в каждом MCU блоке составляет 63, получаем следующую формулу подсчета полного числа перестановок:
, где H - обозначает каждую категорию.
Методы криптоанализа
Исходя из того, что число ненулевых AC коэффициентов в блоке DCT коррелирует с определенными характеристиками соответствующего блока такими как, например, текстура изображения, был предложен метод называемый "ненулевой счетной атакой" (Шаблон:Lang-en). При помощи данного метода существует возможность получить текстуру исходного изображения из соответствующего зашифрованного.[3] . Позднее , для улучшения данного алгоритма, было предложено еще три новых метода, использующих подсчёт количества ненулевых коэффициентов AC, а так же нахождение позиции последнего ненулевого коэффициента.[4] . При помощи этих алгоритмов улучшается точность получения контура исходного изображения из зашифрованного. Один из возможных способов избежать взлома подобными атаками - это использовать алгоритм изменения распределения AC коэффициентов внутри каждого блока [5].