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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Введение[править | править код]

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

Битовый поток и байтовые сдвиги[править | править код]

Рисунок 1. Структура битовго потока.

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

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

Особенности сохранения размера изображения.[править | править код]

Рисунок 2.Байтовый сдвиг в энтропийно закодированных данных.

На рисунке 2 изображен пример энтропийно закодированного сегмента данных. DCk - энтропийно закодированный коэффициент DC, а ACk,1 - энтропийно закодированные данные первого АС коэффициента в блоке k. Все данные содержат биты, отвечающие коду Хаффмана, а также дополнительные биты . Чтобы сгенерировать битовый поток, к энтропийно-закодированным данным применяется метод деления на байты (англ. byte-based packing) как показано на рисунке 2(b). После применения данной операции, необходимо учесть, что не исключено получить байт FF который , впоследствии, будет принят за маркер. Чтобы решить данную проблему применяется байтовый сдвиг (англ. byte stuffing). После каждого байта FF в коде Хаффмана или в дополнительных битах размещается нулевой байт , как показано на рисунке 2(с). Очевидно, что после применения данной операции размер битового потока изменится. В следующем разделе будет рассмотрен алгоритм байтового сдвига , не изменяющий размер битового потока.

Шифрование DC коэффициентов[править | править код]

Коэффициенты DC часто содержат в себе важную визуальную информацию изображения. Если коэффициенты DC не зашифрованы, это может привести к тому , что контур изображения будет виден после шифрования. Существует несколько наиболее популярных способов шифрования данных коэффициентов:

  • Случайная подстановка. Корреляция между соседними DC коэффициентами , вносящими существенный вклад в степень сжатия будет ослаблена. Очевидно, это приведёт к увеличению размера файла.
  • Шифрование путём расширения разницы между квантованым коэффициентом текущего блока DC коэффициента и предыдущего. Это также приводит к увеличению размера изображения.
  • Коэффициент разностного шифрования. Используется корреляция между смежными коэффициентами DC. Возникают проблемы при декодировании изображения.

Шифрование АC коэффициентов[править | править код]

Как правило, АС коэффициенты содержат информацию о деталях изображения. Незашифрованные АС коэффициенты позволят получить некоторую информацию об изображении. Такую как, например, силуэт каких-либо предметов. Выделяются следующие типовые методы шифрования данных коэффициентов:

  • Внутриблочная перестановка. Минус метода заключается в значительном увеличении размера файла.
  • Перестановка внутри секции.
  • Внутриблочная символьная перестановка.
  • Перестановка на основе частоты. Влияет на коэффициент сжатия изображения

Алгоритм предлагаемого метода.[править | править код]

Рисунок 3. Результат предложенного метода.

Битовые потоки, зашифрованные по данному методу, сохраняют размер файла и совместимость с декодерами JPEG изображений. Данный результат достигается благодаря тому, что шифруются только некоторые из дополнительных битов. Рисунок 3 отображает данный алгоритм.

Шаги алгоритма:

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

Генерация случайной последовательности.[править | править код]

Случайная последовательность играет важную роль в данном алгоритме шифрования. В предлагаемом методе применяются хаотические карты в силу простоты и достаточной надежности. Любые другие генераторы случайных последовательностей также могут быть применены в данной схеме. Математическое определение хаотических карт:

, где и .

и - задаются изначально.

Возможность шифрования байтов[править | править код]

Рисунок 4. Возможность шифрования

На рисунке 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 коррелирует с определенными характеристиками соответствующего блока такими как, например, текстура изображения, был предложен метод называемый "ненулевой счетной атакой" (англ.  NZCA). При помощи данного метода существует возможность получить текстуру исходного изображения из соответствующего зашифрованного. [3] . Позднее , для улучшения данного алгоритма, было предложено еще три новых метода, использующих подсчёт количества ненулевых коэффициентов AC, а так же нахождение позиции последнего ненулевого коэффициента. [4] . При помощи этих алгоритмов улучшается точность получения контура исходного изображения из зашифрованного. Один из возможных способов избежать взлома подобными атаками - это использовать алгоритм изменения распределения AC коэффициентов внутри каждого блока [5].

См. также[править | править код]

Научные статьи[править | править код]

Примечания[править | править код]

  1. JPEG Minimum Coded Unit (MCU) and Partial MCU. Дата обращения: 2 декабря 2018. Архивировано 17 июля 2019 года.
  2. Кодирование первого коэффициента вектора (DC). Дата обращения: 2 декабря 2018. Архивировано 18 ноября 2017 года.
  3. Scrambling–embedding for JPEG compressed image (недоступная ссылка)
  4. “JPEG image scrambling without expansion in bitstream size. Дата обращения: 7 декабря 2018. Архивировано 9 декабря 2018 года.
  5. Reversible data hiding in encrypted JPEG bitstream. Дата обращения: 7 декабря 2018. Архивировано 9 декабря 2018 года.