МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ І СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
/
Лабораторна робота №4
на тему:
“Організація стегоканалу в BMP-файлі”
з дисципліни:
“Захист інформації в комп'ютерних мережах”
Мета роботи: ознайомитися з поняттям стеганографії та проаналізувати можливості організації стегоканалу в ВМР-файлі
Теоретичні відомості
Стеганографія - метод передачі інформації, що приховує саме факт самої передачі інформації. Головна відмінність стеганографії від криптографії, де криптограф точно може визначити чи є передане повідомлення зашифрованим текстом, полягає в можливості вбудовувати секретні повідомлення у відкриті повідомлення так, щоб неможливо було запідозрити існування вбудованого таємного послання. Слово "стеганография" у перекладі із грецького буквально означає "тайнопис" (steganos - секрет, таємниця; graphy - запис). Стеганографія містить у собі безліч секретних засобів зв'язку, таких як невидиме чорнило, мікрофотознімки, умовне розташування знаків, таємні канали й засоби зв'язку на плаваючих частотах і т.д.
Бурхливий розвиток обчислювальної техніки й нових каналів передачі інформації сприяє появі нових стеганографічних методів, в основі яких лежать особливості подання інформації в комп'ютерних файлах, обчислювальних мережах і т.п. Тому останнім часом з'явився новий напрямок стеганографії - комп'ютерна стеганографія.
Комп'ютерна стеганографія - це приховання повідомлення або файлу в іншому повідомленні або файлі. Наприклад, стеганографи можуть сховати аудіо-або відеофайл в іншому інформаційному або навіть у великому графічному файлі. Процес стеганографії можна розділити на кілька етапів.
1. Вибір інформаційного файлу. Першим етапом у процесі стеганографії є вибір файлу, якому необхідно сховати. Його ще називають інформаційним файлом.
2. Вибір файлу-контейнера. Другим етапом у процесі стеганографії є вибір файлу для приховання інформації. Його ще називають файлом-контейнером. У більшості відомих програм по стеганографії говориться, що для приховання інформації, обсяг пам'яті файлу-контейнера повинен десь у вісім разів перевищувати обсяг пам'яті інформаційного файлу. Отже, щоб сховати файл розміром 710КБ, знадобиться графіка обсягом 5600КБ.
3. Кодування файлу. Після того, як обраний файл-контейнер програмне забезпечення по стеганографії вбудовує у нього інформаційний файл.
4. Відправлення прихованого повідомлення по електронній пошті і його декодування. Останнім етапом у процесі стеганографії є відправлення файлу-контейнера з вбудованим інформаційним файлом (по електронній пошті, наприклад) та наступне його декодуваня.
Основні принципи побудови стегосистем:
- криптоаналітик має повний інформацію про стеганографічну систему та деталі її реалізації.
- єдиною інформацією, що залишається невідомою криптоаналітику, є ключ, за допомогою якого тільки його власник може встановити факт присутності й зміст схованого повідомлення; якщо криптоаналітик якимось чином довідається про факт існування схованого повідомлення, це не повинне дозволити йому розшифрувати подібні повідомлення в інших даних доти, поки ключ зберігається в таємниці;
- криптоаналітик повинен бути позбавлений яких-небудь технічних й інших переваг у розпізнаванні або розкритті змісту таємних повідомлень.
- у якості даних може використовуватися будь-яка інформація: текстове повідомлення, зображення, відео- або аудіо-файл, і т.п. Далі будемо використати слово "повідомлення", тому що повідомленням може бути як текст або зображення, так й, наприклад, аудіодані. Для позначення прихованої інформації, будемо використовувати саме термін повідомлення.
Хід роботи
Для розробки програми було використано середовище Eclipce.
/
Рис. 1. Зображення до шифрування
/
Рис. 2. Зображення після шифрування
Висновок: В даній лабораторній роботі я ознайомився з поняттям стенографії та проаналізував можливості організації стегоканалу в BMP-файлі.
Лістинг програми
import java.io.*;
public class Stenography {
final static long HEADSIZE = 120;
static int textSize = 0;
public static void main(String[] args) throws IOException {
encode();
decode();
System.out.println("Finish");
}
private static void encode() throws IOException {
System.out.println("Encrypt");
FileInputStream in = null;
FileInputStream msg = null;
FileOutputStream out = null;
try {
in = new FileInputStream("src/1.bmp");
msg = new FileInputStream("src/lab4.txt");
out = new FileOutputStream("src/new.bmp");
int c, mb;
byte clearBit1 = (byte) 0xFE; // 254; // 11111110
for (int i = 1; i <= HEADSIZE; i++) out.write(in.read());
while ((mb = msg.read()) != -1) {
for (int bit = 7; bit >= 0; bit--) {
c = in.read() & clearBit1;
c = (c | ((mb >> bit) & 1));
out.write(c);
}
textSize++;
}
for (int bit = 7; bit >= 0; bit--) {
out.write(in.read());
}
while ((c = in.read()) != -1) out.write(c);
} finally {
if (in != null)
in.close();
if (msg != null)
msg.close();
if (out != null)
out.close();
}
}
private static void decode() throws IOException {
System.out.println("Decrypt");
FileInputStream in = null;
FileOutputStream out = null;
try {
System.out.println(textSize);
in = new FileInputStream("src/new.bmp");
out = new FileOutputStream("src/lab4res.txt");
for (int i = 1; i <= HEADSIZE; i++)
in.read();
byte[] result = new byte[textSize];
for (int i = 0; i < textSize; i++) {
for (int bit = 0; bit <= 7; bit++) {
result[i] = (byte) ((result[i] << 1) | (in.read() & 1));
}
out.write(result[i]);
}
} finally {
if (in != null)
in.close();
if (out != null)
out.close();
}
}
}