Смекни!
smekni.com

Скрытие конфиденциальной информации при помощи стеганографии (стр. 6 из 7)

6.2 Описание руководства пользователя

Данный программный продукт создан для сокрытия конфиденциальной информации в графических файлах.

Перед началом работы программа должна быть установлена на компьютере пользователей, участвующих в файловом обмене. После того как программа установлена, можно начинать работу. Для того чтобы запустить программу вам необходимо два раза кликнуть левой клавишей по значку программы(PStenografia.exe). Откроется форма, на которой располагаются кнопки управления программой. При нажатии пункта контекстного меню «Текст->Загрузить текст» открывается диалоговое окно с возможностью открытия текстового файла. При нажатии пункта контекстного меню «Текст->Сохранить текст» открывается диалоговое окно с возможностью сохранения текстового файла.

Также на форме расположены пункта контекстного меню « Изображение->Загрузить изображение» происходит открытие диалогового окна с возможностью выбора графического файла в формате BMP. После того как выбрана информация для сокрытия и соответствующее количеству данных изображение, а также заполнено поле «Ключ» необходимо нажать в пункте контекстного меню «Изображение->Вшить информацию» происходит сокрытие текстовой информации в графическое изображение. Далее сохраняем его при помощи нажатия кнопки «Изображение->Сохранить изображение» происходит открытие диалогового окна с возможностью сохранения изображения в одном из доступных форматов.

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

Также в контекстном меню можно получить информацию «Об авторе» и «О программе», нажав команду «Справка» Для выхода из программы вы можете нажать на крестик, в верхнем правом углу, либо выбрать команду «Выход» в контекстном меню «Файл».

ЗАКЛЮЧЕНИЕ

Все большее значение в нашем быстро изменяющемся мире приобретает защита информации. Это относится и к государственным секретам, которые надо теперь скрывать не только от разведок известно каких стран мира, но и от внутренних врагов – агентов мирового терроризма и экстремизма. Это относится и к секретам фирм, и личным делам граждан. Последние изменения в законодательстве ряда стран, в том числе и США, показывают популярность на правительственном уровне идеи всеобщей слежки и непротивление ей граждан.

Отстоять свободу личности, самостоятельность фирмы, сохранить государственную тайну помогут, наряду с другими средствами, и стеганографические методы защиты информации. В развитии этих средств сделан пока лишь первый шаг, как в теоретическом, так и в практическом плане. Перечислим некоторые интересные задачи, решение которых поможет увеличить эффективность подобных средств.

Прежде всего, необходима разработка математических моделей мультимедийных контейнеров: речи, изображений, видео. Большой поток исследований в этой области, связанный с разработкой алгоритмов сжатия информации, не привел пока к появлению конструктивных универсальных моделей.

Важным представляется дальнейшее развитие методов теории распознавания образов. Особенно в свете появления таких новых математических инструментов, как нейронные сети, генетические алгоритмы, нечеткая логика.

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

В стегоанализе необходимо введение в рассмотрение иных, чем всеми любимый хи-квадрат, критериев проверки статистических гипотез. Для тестирования качества последовательностей, генерируемых псевдослучайным генератором случайных чисел, в настоящее время известны десятки различных критериев. Возможно, многие из них найдут применение в стеганографии.

История показывает, что время прохождения технологии от ее зарождения до промышленного применения составляет обычно 20-25 лет. Если считать, что цифровая стеганография зародилась в середине 90-х годов прошлого века, то у нее все еще впереди.

Список литературы

1)В. Г. Грибунин, И. Н. Оков, И. В. Туринцев "Цифровая стеганография". Издательство СОЛОН-пресс 2002 год.

2) Жельников В. Криптография от папируса до компьютера.- М., 1996.

2) Карасев Андрей. Компьютерная тайнопись – графика и звук приобретают подтекст. – Мир ПК. - № 1/97. – С.132-134.

3) Шеннон К. Работы по теории информации и кибернетики / Пер. с англ. –М.: Иностранная литература, 1963. – 829с.

4) Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы криптографии.–М.: Гелиус АРВ, 2001.– 480 с.

5) http://www.cl.cam.ac.uk/~fapp2/steganography/

6) http://www.demcom.com/english/steganos/

7) http://eprint.iacr.org/2005/305

8) http://www.topreferats.ru/comp/6636.html

9) http://www.signumtech.com

ПРИЛОЖЕНИЕ А

unit UStenograf;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, ExtCtrls, ExtDlgs, Menus, ComCtrls, XPMan;

type

TfrmStenograf = class(TForm)

Memo1: TMemo;

Image1: TImage;

OpenPictureDialog1: TOpenPictureDialog;

Edit1: TEdit;

Label2: TLabel;

SavePictureDialog1: TSavePictureDialog;

MainMenu1: TMainMenu;

PopupMenu1: TPopupMenu;

PopupMenu2: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

N19: TMenuItem;

N20: TMenuItem;

N21: TMenuItem;

N22: TMenuItem;

N23: TMenuItem;

N24: TMenuItem;

N25: TMenuItem;

N26: TMenuItem;

N27: TMenuItem;

N28: TMenuItem;

N29: TMenuItem;

N30: TMenuItem;

N31: TMenuItem;

N32: TMenuItem;

N33: TMenuItem;

N34: TMenuItem;

N35: TMenuItem;

N36: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

N37: TMenuItem;

N38: TMenuItem;

N39: TMenuItem;

StatusBar1: TStatusBar;

Timer1: TTimer;

XPManifest1: TXPManifest;

procedure N18Click(Sender: TObject);

procedure N20Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N25Click(Sender: TObject);

procedure N26Click(Sender: TObject);

procedure N27Click(Sender: TObject);

procedure N30Click(Sender: TObject);

procedure N32Click(Sender: TObject);

procedure N33Click(Sender: TObject);

procedure N38Click(Sender: TObject);

procedure N39Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N15Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmStenograf: TfrmStenograf;

X, Y: Word;

implementation

{$R *.dfm}

function GetStart(Str: String): Word; //задать начальное значение генератора

Var i: byte;

Res: Word;

begin

Res:= 0;

for i:= 1 to length(Str) do begin

Res:= Res xor (Ord(Str[i]) shl 1); //Вычисляет значение простой хеш-функции (xor + циклический сдвиг) для блока данных.

end;

Result:= (Res mod frmStenograf.Image1.Width)+1;

end;

procedure TfrmStenograf.N18Click(Sender: TObject);

begin

frmStenograf.Close;

end;

procedure TfrmStenograf.N20Click(Sender: TObject);

begin

If OpenDialog1.Execute then

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

end;

procedure TfrmStenograf.N21Click(Sender: TObject);

begin

If SaveDialog1.Execute then

Memo1.Lines.SaveToFile(SaveDialog1.FileName+'.txt');

end;

procedure TfrmStenograf.N25Click(Sender: TObject);

begin

Memo1.CutToClipboard;

end;

procedure TfrmStenograf.N26Click(Sender: TObject);

begin

Memo1.CopyToClipboard;

end;

procedure TfrmStenograf.N27Click(Sender: TObject);

begin

Memo1.PasteFromClipboard;

end;

procedure TfrmStenograf.N30Click(Sender: TObject);

begin

Memo1.SelectAll;

end;

procedure TfrmStenograf.N32Click(Sender: TObject); //загрузка картинки

Var i, j: Word;

a: TColor;

r, g, b: byte;

begin

if OpenPictureDialog1.Execute then

with Image1 do begin

Visible:= False;

Picture.LoadFromFile(OpenPictureDialog1.FileName);

if Picture.Bitmap.PixelFormat < pf16bit then

ShowMessage('Требуется большая глубина цвета')

else

for i:= 0 to Width-1 do

for j:= 0 to Height-1 do begin

a:= Canvas.Pixels[i, j];

r:= GetRValue(a);

if r = 255 then r:= 254;

g:= GetGValue(a);

if g = 255 then g:= 254;

b:= GetBValue(a);

if b = 255 then b:= 254;

Canvas.Pixels[i, j]:= RGB(r, g, b);

end;

Visible:= True;

Memo1.MaxLength:= Image1.Height-5;

end;

end;

procedure TfrmStenograf.N33Click(Sender: TObject);

begin

if SavePictureDialog1.Execute then

Image1.Picture.SaveToFile(SavePictureDialog1.FileName);

end;

procedure TfrmStenograf.N38Click(Sender: TObject); //вшить информацию в рисунок

Type TColoreArr= array[1..9] of byte;

Var i: Word;

r, g, b: Integer;

j: byte;

Str: String;

RedArr, GreenArr, BlueArr: TColoreArr;

a: TColor;

begin

X:= GetStart(Edit1.Text);

Y:= 2;

Str:= Memo1.Text;

if length(Str) > Image1.Height-5 then ShowMessage('Маленькая картинка') else begin

i:= 1;

with Image1.Canvas do begin

while length(Str) mod 3 <> 0 do Str:= Str + ' ';

Pixels[x, y]:= RGB(length(Str) div 65536, (length(Str) mod 65536) div 255, (length(Str) mod 65536) mod 255); //записали кол-во символов

repeat

X:= 2 + (106*X+1230) mod (Image1.Width-3); //генератор псевдослучайной последовательности

Y:= Y + 3; //через три пикселя, для обеспечения размытия

//размоем точки методотом луча

a:= Pixels[X-1, Y];

RedArr[1]:= GetRValue(a);

GreenArr[1]:= GetGValue(a);

BlueArr[1]:= GetBValue(a);

a:= Pixels[X-1, Y+1];

RedArr[2]:= GetRValue(a);

GreenArr[2]:= GetGValue(a);

BlueArr[2]:= GetBValue(a);

a:= Pixels[X, Y+1];

RedArr[3]:= GetRValue(a);

GreenArr[3]:= GetGValue(a);

BlueArr[3]:= GetBValue(a);

a:= Pixels[X+1, Y+1];

RedArr[4]:= GetRValue(a);

GreenArr[4]:= GetGValue(a);

BlueArr[4]:= GetBValue(a);

a:= Pixels[X+1, Y];

RedArr[5]:= GetRValue(a);

GreenArr[5]:= GetGValue(a);

BlueArr[5]:= GetBValue(a);

a:= Pixels[X+1, Y-1];

RedArr[6]:= GetRValue(a);

GreenArr[6]:= GetGValue(a);

BlueArr[6]:= GetBValue(a);

a:= Pixels[X, Y-1];

RedArr[7]:= GetRValue(a);

GreenArr[7]:= GetGValue(a);