Стеганография — это междисциплинарная наука и искусство передавать сокрыты еданные, внутри других, не сокрытых данных. Скрываемые данные обычно называют стегосообщением, а данные, внутри которых находится стегосообщение называют контейнером [1].
Изучение стеганографии проходит в рамках дисциплин связанных с программированием и разбором криптографических принципов шифрования.
Классическая задача стеганографии — передать данные таким образом, чтобы противник не догадался о самом факте появления сообщения и именно это и отличает ее от криптографии, в рамках которых известно что сообщение существует.
Учащиеся узнают, что на сегодняшний день учеными разработаны и опробованы различные алгоритмы и методы стеганографии, среди которых особо выделим следующие:
Компьютерная стеганография на основе использование регистра букв. Если нам необходимо спрятать букву "А" в тексте "stenography". Для этого берем двоичное представление кода символа "А" — "01000001". Пускай для обозначения бита содержащего единицу используется символ нижнего регистра, а для нуля — верхнего. Поэтому после накладывания маски "01000001" на текст "stenography", результат будет "sTenogrAphy". Окончание "phy" нами не использовано поскольку для сокрытия одного символа используется 8 байт (по биту на каждый символ), а длинна строки 11 символов, вот и получилось, что последние 3 символа "лишние". Исспользуя такую технологию можно спрятать в текст длинной N, сообщение из N/8 символов) [2].
LSB-стеганография (сообщение скрывается в младших битах (возможно использование одного или нескольких младших бит) контейнера. Чем меньше бит задействовано, тем меньше артефактов получает оригинальный контейнер после внедрения.
Метод, основанный на сокрытии данных в коэффициентах дискретного косинусного преобразования (далее ДКП) — разновидность предыдущего метода, которая активно используется, например, при внедрении сообщения в контейнер формата JPEG. При прочих равных, такой контейнер имеет несколько меньшую емкость чем в предыдущем методе, в том числе за счет того, что коэффициенты «0» и «1» остаются неизменными— внедрение сообщения в них невозможно.
Метод сокрытия информации при помощи младших бит палитры— этот метод по сути является вариантом общего метода LSB, но информация встраивается не в наименее значащие биты контейнера, а в наименее значащие биты палитры, очевидный недостаток такого метода — низкая емкость контейнера.
Метод сокрытия информации в служебных полях формата — довольно простой метод, основанный на использовании служебных полей заголовка контейнера для хранения сообщения. Очевидные минусы — низкая емкость контейнера и возможность обнаружения внедренных данных при помощи обычных программ для просмотра изображения (которые иногда позволяют видеть содержимое служебных полей).
Метод встраивания сообщения — заключается в том, что сообщение встраивается в контейнер, затем при помощи схемы, известной обеим сторонам, извлекается. Можно встроить несколько сообщений в один контейнер, при условии, что способы их внедрения ортогональны.
Широкополосные методы, которые подразделяются на: метод псевдослучайной последовательности; используется секретный сигнал, который моделируется псевдослучайным сигналом; метод прыгающих частот: частота несущего сигнала меняется по определенному псевдослучайному закону.
Метод оверлея — по сути не является настоящей стеганографией, основан на том, что некоторые форматы содержат в заголовке размер данных, или же обработчик этих форматов будет читать файл до маркера конца данных. Примером такого метода является хорошо известный метод «rar-jpeg», который основан на конкатенации графического файла в формате JREG и RAR-архива. ПО для просмотра JPEG будет считывать информацию до границы, указанной в заголовке файла, а RAR-архиватор откинет все, что находится до сигнатуры «RAR!», которая обозначает начало архива. Таким образом, если такой файл открыть в просмотрщике графических файлов — мы увидим картинку, а если в RAR-архиваторе — содержимое RAR-архива. Очевидные минусы такого подхода заключаются в том, что оверлей, добавленный к контейнеру, легко выделяем при визуальном исследовании такого файла [3].
Цель изучения стеганографии в рамках дисциплин по программированию состоит в формировании знаний о современных принципах и методах сокрытия информации, умении применять полученные знания на практике, то есть обнаруживать скрытую информацию в различного рода системах, в том числе в аудио, видео и текстовой информации. В процессе изучения студент должен осознать современную роль стеганографических методов и важность комплексной защиты информации в работе организации или предприятия, а значит и ответственность, возлагаемую на персонал [4].
Учащимся третьего курса технических специальностей в рамках изучения дисуциплины «Технология программирования» была предложена следующая задача.
Постановка задачи: Разработайте приложение на языке программирвание C# для осуществления хранение информации методом стеганографии. Факт существования сообщения не должен привлекать к себе внимание.
Цель: Отработка практических навыков программирования. Создание криптографических и стеганографических моделей для решения поставленной задачи.
Базовый алгоритм: Разложение текста по последним битам красной кодировки (LSB-стеганография). Внедрение сообщения в графическое изображение.
Студенты выполнили предложенное задание. Приведем пример самой интересной реализации.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace crypto
{
public partial class Form1 : Form
{
Bitmap bmp;
Bitmap bmpCry;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) //OPEN
{
// выбор рисунка в котором будет храниться информация
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Image files (*.BMP, *.JPG, *.GIF, *.TIF, *.PNG, *.ICO, *.EMF, *.WMF)|*.bmp;*.jpg;*.gif; *.tif; *.png; *.ico; *.emf; *.wmf";
if (dialog.ShowDialog() == DialogResult.OK)
{
if (bmp != null)
{
bmp.Dispose();
pictureBox1.Image.Dispose();
}
if (bmpCry != null)
{
bmpCry.Dispose();
pictureBox2.Image.Dispose();
}
Image image = Image.FromFile(dialog.FileName);
int width = image.Width;
int height = image.Height;
bmp = new Bitmap(image, width, height);
pictureBox1.Image = bmp;
}
}
private void button2_Click(object sender, EventArgs e) //save
{
// сохранение рисунка с внедренным текстом
SaveFileDialog savedialog = new SaveFileDialog();
savedialog.Title = "Сохранить...";
savedialog.OverwritePrompt = true;
savedialog.CheckPathExists = true;
savedialog.Filter =
"Bitmap File(*.bmp)|*.bmp|" +
"GIF File(*.gif)|*.gif|" +
"JPEG File(*.jpg)|*.jpg|" +
"TIF File(*.tif)|*.tif|" +
"PNG File(*.png)|*.png";
if (savedialog.ShowDialog() == DialogResult.OK)
{
string fileName = savedialog.FileName;
bmpCry.Save(fileName);
}
}
// кодирование
private void button3_Click(object sender, EventArgs e)
{
// считывание текста для внедрение
string txt = textBox1.Text;
int len = Math.Min(txt.Length, 255);
bmpCry = (Bitmap)bmp.Clone();
if (len != 0 && bmp != null)
{
int n = bmp.Height;
int m = bmp.Width;
for (int i = 0; i 0 ? 1 : 0));
p = Color.FromArgb(a, r, g, b);
bmpCry.SetPixel(i, n — 1, p);
}
int x = 8;
int y = n — 1;
for (int i = 0; i = m)
{
y-;
x = 0;
}
Color p = bmp.GetPixel(x, y);
int a = p.A;
int r = p.R;
int g = p.G;
int b = p.B;
r = ((r & 254) | ((c & (1 0 ? 1 : 0));
p = Color.FromArgb(a, r, g, b);
bmpCry.SetPixel(x, y, p);
x++;
}
}
pictureBox2.Image = bmpCry;
}
}
//декодирование
private void button4_Click(object sender, EventArgs e)
{
string txt = "";
int len = 0;
bmpCry = (Bitmap)bmp.Clone();
if (bmp != null)
{
int n = bmp.Height;
int m = bmp.Width;
// вытаскиваем биты текста
for (int i = 0; i = m)
{
y-;
x = 0;
}
Color p = bmp.GetPixel(x, y);
int r = p.R;
c = c | ((r & 1) Таким образом, стеганография служит одним из ярких примеров «особого» шифрования который может быть использован на уроках по изучению программирования. В результате обучающийся начинает понимать методику сокрытия информации при передаче её по открытому каналу, методы и средства обнаружения скрытой информации, реализует представленные методы и алгоритмы на языке программирования, используя существующий инструментарий для обнаружения скрытой информации.