Шифрование изображения с сохранением исходного размера

Шифрование изображения с сохранением исходного размера () - Шифрование битового потока () JPEG изображений. Данный алгоритм принимает на вход битовый поток исходного изображения и выборочно шифрует дополнительные биты. Подобный способ шифрования позволяет сохранить размер изображения без изменения.

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

Битовый поток и байтовые сдвиги 

Рисунок 1(а) отображает структуру битового потока JPEG изображения. SOI и EOI - маркеры, обозначающие начало и конец изображения соответственно. Битовые потоки содержат сегменты, использующиеся для декодирования данных таких как, например : Таблицы Хаффмана. Каждый из сегментов начинается с маркера.  Маркер состоит из двух байтов - первый из которых всегда равен 0xFF, а следующий за ним байт определяет тип маркера и принимает значение в диапазоне от 01 до FE.

Рисунок 1(b) отображает структуру энтропийно закодированного сегмента данных (), показанного на рисунке 1(а).
Данные состоят из MCU(Minimum Coded Unit) блоков. Каждый MCU блок содержит в себе один DC коэффициент и некоторое количество AC коэффициентов . Как видно из картинки, каждый DC коэффициент состоит из битов, закодированных кодами Хаффмана и дополнительных битов ().

Особенности сохранения размера изображения. 

На рисунке 2 изображен пример энтропийно закодированного сегмента данных. DCk - энтропийно закодированный коэффициент DC, а ACk,1 - энтропийно закодированные данные первого АС коэффициента в блоке k. Все данные содержат биты, отвечающие коду Хаффмана, а также дополнительные биты . Чтобы сгенерировать битовый поток, к энтропийно-закодированным данным применяется метод деления на байты () как показано на рисунке 2(b). После применения данной операции, необходимо учесть, что не исключено получить байт FF который , впоследствии, будет принят за маркер. Чтобы решить данную проблему применяется байтовый сдвиг (). После каждого байта 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 коррелирует с определенными характеристиками соответствующего блока такими как, например, текстура изображения, был предложен метод называемый "ненулевой счетной атакой" (). При помощи данного метода существует возможность получить текстуру исходного изображения из соответствующего зашифрованного.  . Позднее , для улучшения данного алгоритма, было предложено еще три новых метода, использующих подсчёт количества ненулевых коэффициентов AC, а так же нахождение позиции последнего ненулевого коэффициента.  . При помощи этих алгоритмов улучшается точность получения контура исходного изображения из зашифрованного. Один из возможных способов избежать взлома подобными атаками - это использовать алгоритм изменения распределения AC коэффициентов внутри каждого блока .

См. также 
 JPEG
 Декодирование JPEG
 Графический формат JPEG

Научные статьи

Примечания 

Компьютерная графика
JPEG