Skip to content

Схема разделения секретной визуальной информации

Nastya Birillo edited this page Oct 29, 2015 · 5 revisions

Для черно-белых изображений:

Идея: разбиение исходного изображения на несколько шифрованных («теневых» изображений, shadow images), каждое из которых не дает никакой информации об исходном изображении кроме, может быть, его размера (изображение – а-ля «белый шум»). При наложении шифрованных изображений друг на друга, можно получить исходное изображение. Данная технология обладает криптоустойчивостью за счет того, что при разделении исходного изображения на множество шифроизображений происходит случайным образом.

Алгоритм визуальной криптографии:

Наор и Шамир продемонстрировали (k, n)-визуальную схему секретного обмена, где изображение было разбито на n частей, таким образом, что кто-либо, обладавший любыми k частями мог расшифровать его, в то время как любые k-1 частей не давали никакой информации о содержании исходного изображения. Когда все k частей будут наложены друг на друга, мы увидим исходное изображение. Для того чтобы разбить исходное черно-белое изображение на n частей, каждый пиксель изображения представляется в виде некоторого количества меньших частей (subpixels). Количество белых и черных частей всегда одинаковое. Если пиксель делится на две части, то получается один белый и один черный блок. Если пиксель делится на четыре равные части, то получаем два белых и два черных блока. Рассмотрим (2, 2)-визуальную схему секретного обмена, т.е. исходное изображение разбивается на два теневых изображения, каждое из которых представляет собой изображение белого шума, но при наложении дают исходное изображении. Каждый пиксель исходного изображения будем разбивать на четыре части, таким образом, если размер исходного изображения был M×N, то размеры теневых изображений будут 2M×2N. На рисунке показано, что пиксель, разделенный на четыре части, может иметь шесть разных состояний:

Возможные состояния пикселя при (2, 2)-визуальной схеме

Если пиксель на первом слое имеет одно положение, пиксель на втором слое в свою очередь может иметь два положения: идентичное либо инвертированное пикселю первого слоя. Если пиксель части 2 идентичен пикселю части 1, то пиксель, полученный в результате наложения обоих теневых изображений, будет наполовину белый и наполовину черный. Такой пиксель называют серым или пустым. Если пиксели части 1 и части 2 противоположны, то пиксель, полученный в результате наложения, будет полностью черным. Он будет являться информационным. Опишем процесс получения теневых изображений для исходного изображения для схемы (2, 2): для каждого пикселя исходного изображения, для первого теневого изображения случайным образом выбирается одно из шести возможных состояний пикселя, приведенных на рисунке 1. Состояние пикселя второго теневого изображения выбирается идентичным или симметричным состоянию пикселя первой «тени» в зависимости от того, белый или черный это был пиксель в исходном изображении соответственно. Схожим образом можно построить любую (k, n) визуальную схему секретного обмена. Результаты: Исходное изображение:

Исходное изображение

Теневое изображение 1:

Теневое изображение 1

Теневое изображение 2:

Теневое изображение 2

Результат при правильном наложении:

Результат при правильном наложении

В статье Y.C. Hou. Visual cryptography for color images. In Pattern Recognition, 2003 описывается данный подход в применении к цветным изображениям. Но здесь недостатком является потеря качества изображения:

Результат визуальной криптографии на цветном изображении:

Результат визуальной криптографии на цветном изображении

Литература:

Разработка

  1. Стили кодирования
  • [Java](Код стайл для языка Java)
  • [C/C++](Стиль написания кода на С )
  • [C#](Стиль написания кода на С# )
  • [Swift](Руководство по оформлению кода на языке Swift )
  • Написание комментариев к коммитам
  1. Android
  • Android DevGuide
  • [QR codes](Работа c QR на Android)
  • [Полезные вещи](Полезные вещи для Android разработки)
  • [Архитектура приложения](Архитектура приложения)
  • [Используемые компоненты](Используемые компоненты)
  • [Инструкция по сборке проекта](Инструкция по сборке проекта)
  1. iOS
  1. C и C++
  • [Использование CMake для проектов на C++ и C ](Использование CMake для проектов на C и CPP)

Описание

  1. Форматы файлов
  • [.bmp](Cтруктура хранения bmp файлов)
  • [.jpg](Cтруктура хранения jpg файлов)
  • [.png](Cтруктура хранения png файлов)
  1. Алгоритмы шифрования
  1. Примеры использования
  • [Библиотека матричной алгебры](Пример использования библиотеки матричной алгебры)
  1. Описание процесса кодирования файла
  2. Способ обезопасить использование приложения
  3. Java фасад библиотеки алгоритмов
  4. Алгоритм шифрования bmp на java заглушке

Тест-кейсы

  1. Матричная арифметика
  • [A+B](Сложение матриц)
  • [A*p](Умножение матрицы на скаляр)
  • [A*B](Умножение матриц)
  • [Обратные матрицы](Нахождение обратной матрицы)
  1. Взятие по модулю
  • [A mod p](Взятие матрицы по модулю простого числа)
  • [A mod P](Взятие матрицы по модулю - матрицы из простых чисел)
  1. Суперпозиция (модуль - простое число)
  • [A+B mod p](Сложение матриц по модулю простого числа)
  • [A*c mod p](Умножение матрицы на скаляр по модулю простого числа)
  • [A*B mod p](Умножение матриц по модулю простого числа)
  1. Суперпозиция (модуль - матрицы из простых чисел)
  • [A+B mod P](Сложение матриц по модулю - матрице простых чисел)
  • [A*c mod P](Умножение матрицы на скаляр по модулю - матрице простых чисел)
  • [A*B mod P](Умножение матриц по модулю - матрице простых чисел)

##Прочее

  1. [Утечки памяти](Memory Leaks)
  2. [Базовые цвета](Базовые цвета)
  3. [Clean Architecture](Clean Architecture)
Clone this wiki locally