Цифровая стеганография

Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 03:55, лабораторная работа

Описание работы

Стеганография (от греч. «скрытый» и «пишу», буквально «тайнопись») — это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает само его существование.
Цель работы: изучить метод Стеганографии.
Программа работы: Ознакомиться с технологиями Стеганографии. Разработать и реализовать диалоговую программу, которая реализует метод стеганографии.

Файлы: 1 файл

зи_лр4.doc

— 890.00 Кб (Скачать файл)

Лабораторная работа №4

Стеганография

Цель работы: изучить метод Стеганографии.

Программа работы

  1. Ознакомиться с технологиями Стеганографии.
  2. Разработать и реализовать диалоговую программу, которая реализует метод стеганографии.

Краткая теория

Стеганография (от греч. «скрытый» и «пишу», буквально «тайнопись») — это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает само его существование.

В конце 90-х годов выделилось несколько  направлений стеганографии:

  • Классическая стеганография
  • Компьютерная стеганография
  • Цифровая стеганография

Цифровая стеганография — направление классической стеганографии, основанное на сокрытии или внедрении дополнительной информации в цифровые объекты, вызывая при этом некоторые искажения этих объектов. Но, как правило, данные объекты являются мультимедиа-объектами (изображения, видео, аудио, текстуры 3D-объектов) и внесение искажений, которые находятся ниже порога чувствительности среднестатистического человека, не приводит к заметным изменениям этих объектов. Кроме того в оцифрованных объектах, изначально имеющих аналоговую природу, всегда присутствует шум квантования; далее, при воспроизведении этих объектов появляется дополнительный аналоговый шум и нелинейные искажения аппаратуры, все это способствует большей незаметности сокрытой информации.

Применение цифровой стеганографии

Из рамок цифровой стеганографии  вышло наиболее востребованное легальное  направление — встраивание цифровых водяных знаков (ЦВЗ) (watermarking), являющееся основой для систем защиты авторских прав и DRM систем. Методы этого направления настроены на встраивание скрытых маркеров, устойчивых к различным преобразованиям контейнера (атакам).

Полухрупкие и хрупкие ЦВЗ используются в  качестве аналоговой ЭЦП, обеспечивая хранение информации о передаваемой подписи и попытках нарушения целостности контейнера (канала передачи данных).

Например, разработки  Digimark в виде плагинов к редактору Adobe Photoshop позволяют встроить в само изображение информацию об авторе. К сожалению, такая метка неустойчива, впрочем как и абсолютное их большинство. Программа Stirmark, разработчиком которой является ученый Fabien Petitcolas, с успехом атакует подобные системы, разрушая стеговложения.

Алгоритмы

Все алгоритмы встраивания скрытой  информации можно разделить на несколько  подгрупп:

  • Работающие с самим цифровым сигналом. Например, метод LSB.
  • «Впаивание» скрытой информации. В данном случае происходит наложение скрываемого изображения (звука, иногда текста) поверх оригинала. Часто используется для встраивания ЦВЗ.
  • Использование особенностей форматов файлов. Сюда можно отнести запись информации в мет симпатическими чернилами данные или в различные другие не используемые зарезервированные поля файла.

По способу встраивания информации стегоалгоритмы можно разделить  на линейные (аддитивные), нелинейные и  другие. Алгоритмы аддитивного внедрения  информации заключаются в линейной модификации исходного изображения, а ее извлечение в декодере производится корреляционными методами. При этом ЦВЗ обычно складывается с изображением-контейнером, либо «вплавляется» (fusion) в него. В нелинейных методах встраивания информации используется скалярное либо векторное квантование. Среди других методов определенный интерес представляют методы, использующие идеи фрактального кодирования изображений.

Метод LSB

LSB (Least Significant Bit, наименьший значащий  бит) — суть этого метода  заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Разница между пустым и заполненным контейнерами должна быть не ощутима для органов восприятия человека.

Суть метода заключается  в следующем: Допустим, имеется 8-битное изображение в градациях серого. 00h (00000000b) обозначает черный цвет, FFh (11111111b) — белый. Всего имеется 256 градаций (28). Также предположим, что сообщение состоит из 1 байта — например, 01101011b. При использовании 2 младших бит в описаниях пикселей, нам потребуется 4 пикселя. Допустим, они черного цвета. Тогда пиксели, содержащие скрытое сообщение, будут выглядеть следующим образом: 00000001 00000010 00000010 00000011. Тогда цвет пикселей изменится: первого — на 1/255, второго и третьего — на 2/255 и четвертого — на 3/255. Такие градации, мало того что незаметны для человека, могут вообще не отобразиться при использовании низкокачественных устройств вывода.

Методы LSB являются неустойчивыми  ко всем видам атак и могут быть использованы только при отсутствии шума в канале передачи данных.

 

Растровый файл GIF (Graphics Interchange Format ).

Формат файла GIF (Graphics Interchange Format - формат обмена графическими данными) разработан компанией CompuServe.

Структура файла GIF зависит от версии GIF-спецификации, которой соответствует файл. В настоящее время используются две версии, GIF87a и GIF89a. Первая из них проще. Независимо от номера версии, файл GIF начинается с 13-байт заголовка, содержащего сигнатуру, которая идентифицирует этот файл в качестве GIF-файла, номер версии GIF и другую информацию. Если файл хранит всего одно изображение, вслед за заголовком обычно располагается общая таблица цветов, определяющая цвета изображения. Если в файле хранится несколько изображений, то вместо общей таблицы цветов каждое изображение сопровождается локальной таблицей цветов (Рис. 1).

Рис. 1. Структура *.gif файла.

В файле GIF87a вслед за заголовком и общей таблицей цветов размещается изображение, которое может быть первым из нескольких располагаемых подряд изображений. Каждое изображение состоит из 10-байт описателя изображения, расположенной вслед за ним локальной таблицы цветов и битов растрового массива. Для повышения эффективности использования памяти данные растрового массива сжимаются с помощью алгоритма LZW.

Файлы GIF89a имеют аналогичную структуру, но они могут содержать факультативные блоки расширения с дополнительной информацией о каждом изображении. В спецификации GIF89a определены четыре типа блоков расширения. Это блоки расширения для управления графикой, которые описывают, как изображение должно выводиться на экран (например, накладывается ли оно на предыдущее изображение подобно диапозитиву или просто заменяет его); блоки расширения с обычным текстом, содержащие текст, отображаемый вместе с графикой; блоки расширения для комментария, содержащие комментарии в коде ASCII; и блоки расширения прикладных программ, в которых хранится информация, принадлежащая только создавшей этот файл программе. Блоки расширения могут находиться практически в любом месте файла после общей таблицы цветов.

Основные достоинства GIF заключаются  в широком распространении этого  формата и его компактности. Но ему присущи два достаточно серьезных недостатка. Один из них состоит в том, что в изображениях, хранящихся в виде GIF-файла, не может быть использовано более 256 цветов. Второй, возможно, еще более серьезный, заключается в том, что разработчики программ, использующие в них форматы GIF, должны иметь лицензионное соглашение с CompuServe и вносить плату за каждый экземпляр программы; такая ценовая политика была принята CompuServe после того, как Unisys объявила, что начнет добиваться соблюдения своих прав собственности и потребовала от тех, кто пользуется алгоритмом сжатия LZW, вносить лицензионные платежи.

Структура заголовка файла GIF89a с  размером изображения 385x100 пикселов представлена в таблице 1.

Таблица 1.

Информация

Идентификатор GIF

Ширина изображения 

Высота изображения

Прочая информация

Номер байта (десятичное)

01

02

03

04

05

06

07

08

09

10

11

12

13

Пример значения (шестнадцат.)

47

49

46

38

39

61

81

01

64

00

D5

00

00


 

Таким образом, ширина нашего изображения  будет равна &H0181=385, а высота &H0064=100. Все очень просто. Тем не менее подробно рассмотрим это на примере.

 

Пример работы программы

Пример работы программы продемонстрирован на рисунке 2.

 

Рис. 2. Окно программы, реализующей стеганографию *.gif файла 
Описание переменных, используемых в программе

Описание переменных, используемых в программе представлено в таблице 2.

Таблица 2

byte[] FGif;

*.gif файл

byte[] FTxt;

*.txt файл

FileStream CodeFGif;

Зашифрованный *.gif файл

int a;

Длинна используемого файла

byte[] z

Байтовый массив расшифрованного сообщения


Вывод:

В ходе проделанной лабораторной работы были получены теоретические знания в области методов цифровой. Сообщение было спрятано в конце файла *.gif, что не повлияло на само изображение. Сообщение осталось незаметным. Таким образом, мы убедились в работоспособности изученного метода и научились его применять на практике

 

 Листинг

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

 

namespace gif_Steganography

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        byte[] FTxt;

        byte[] FGif;

        FileStream fread;

        FileStream tfread;

        FileStream CodeFGif;

        int a;

 

        private void button4_Click(object sender, EventArgs e)

        {

            Close();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFileDialog1.FileName.Length > 0)

            {

                pictureBox1.Load(openFileDialog1.FileName);

                tfread = new FileStream(openFileDialog1.FileName, FileMode.Open);

            }

            if (openFileDialog2.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFileDialog2.FileName.Length > 0)

            {

                fread = new FileStream(openFileDialog2.FileName, FileMode.Open);

            }

 

            FTxt = new byte[(int)fread.Length];

            FGif = new byte[(int)tfread.Length];

            tfread.Read(FGif, 0, (int)tfread.Length);

            fread.Read(FTxt, 0, (int)fread.Length);

            a = (int)tfread.Length;

            fread.Close();

            tfread.Close();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            CodeFGif = new FileStream(@"CodeFile.gif", FileMode.Create);

            CodeFGif.Write(FGif, 0, FGif.Length);

            byte[] ch = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

            CodeFGif.Write(ch, 0, 9);

            for (int j = 0; j < FTxt.Length; j++)

            {

                CodeFGif.WriteByte(FTxt[j]);

            }                   

            CodeFGif.Close();

            pictureBox2.ImageLocation = @"code.gif";

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

            FileStream fdecode = new FileStream(@"decode.txt", FileMode.Create);

            CodeFGif = new FileStream(@"code.gif", FileMode.Open);

            byte[] dec = new byte[(int)CodeFGif.Length];

            CodeFGif.Read(dec, 0, (int)CodeFGif.Length);

            int x = 0;

            bool b = false;

            for (int i = 0; i < (int)CodeFGif.Length; i++)

            {

               

                if (dec[i] == 1)

                  if (dec[i+1] == 1)

                    if (dec[i+2] == 1)

                      if (dec[i+3] == 1)

                        if (dec[i+4] == 1)

                          if (dec[i+5] == 1)

                            if (dec[i+6] == 1)

                              if (dec[i+7] == 1){ b = true; x = i + 8;}               

            }

            byte[] z = new byte[dec.Length - x/*a*/];

            for (int i = 0; i < z.Length;i++ )

            {

                z[i] = dec[i + x/*a*/];

            }

            fdecode.Write(z,0, z.Length);

            CodeFGif.Close();           

            fdecode.Close();

            richTextBox1.LoadFile(@"decode.txt", RichTextBoxStreamType.PlainText);

        }

 

       

    }

}


Информация о работе Цифровая стеганография