Г Ф Конахович - Комп'ютерна стеганографія теорія і практика - страница 14

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51 

При цьому, до 1-го стовпця формова­ного масиву N заносяться номери елементів значення яких дорівнюють 32.5 (колишні нулі), до 2-го стовпця - номери елементів із зна­ченням 33.5 (колишні одиниці) і т. д.

13) Знаючи, що текст корисної інфор­мації є обмеженим мітками ц% := "п0ч@т0к"; ц*є := "KiHeu,6", виокремлюємо його з видобу­того квазі повідомлення, використовуючи мо­дуль (М.12).

Вектор ASCII-кодів Mf*, попередньо перетворений за допомогою функції vec2str(...) на відповідний йому рядок символів, послідовно проходиться у пошуку стартової та кінцевої міток. Така операція виконується шляхом порівняння виокремленої частини рядку даних з відповідними мітками, які повинні бути відомими одержувачеві.

Виокремлення проводиться за допомогою функції substr(Mf*, ц, в), яка повертає під-рядок довжиною у в символів з рядка Mf* починаючи з символу ц (треба зауважити, що в даному випадку 1-й символ рядку має номер, який відповідає значенню вбудованої змінної ORIGIN) 7). У нашому випадку, оскільки кожна з міток складається з 7 символів, в = 7. Послідовним збільшенням ц, відбувається просування вздовж рядка даних Mf*. При виконанні зазначених у модулі умов (оператор if), коефіцієнтам s і e присвоюються відповідні значення номерів початкової і кінцевої позицій корисної інформації в рядку даних Mf*. Такі додаткові умови, як s = 0; e = 0; s Ф 0; e Ф 0 введені для пришвидшення пошуку.

Зворотне перетворення рядку символів Mf* на вектор їх ASCII-кодів дозволяє в цьому ж модулі провести безпосереднє виокремлення прихованої інформації та відновити елементи, значення яких були примусово змінені на дробові.

rows<

(М.11)

7) У меню Tools /Worksheet Options на вкладці Calculation слід помітити Use ORIGIN for string indexing (дана можливість є відсутньою у попередніх версіях MathCAD, в яких 1-й символ рядку завжди мав індекс 0. Для коректної роботи модуля (М.12) у цих версіях необхідно виконати зазначені зміни ц на ц — 1 та s на s — 1).

S «- О

6<- о

p s <- strlen(MT s) p e <- strlenj^ e) МГ <- vec2str(Mr) for це 1.. strlen(Mr)

^ja+Ps  if substr|Mf* =ji = P    =   s A s = 0

e^-|i- 1   if substr|Mf;ii break if s^Oab^O Mf* <- substr|Mf*,s,e- p s) M_cod* <- str2vec(Mf*} for n є 1cols(N) for і є 1.. rows(N)

л e = 0

,1-1

(М.12)

s- 1

break M cod' if N. =0

I, П

Ni.n-P

1  if 0 < N.   < rows(M_cod*} + ps

M cod*

14) Розпаковане повідомлення необхідно декодувати. Неодмінні початкові умови при цьому - авторизованій стороні є відомими:

- алфавіт джерела повідомлення (i := 1..256; A*i := i — 1) об'ємом Na* := rows(A*), Na* = 256 символів;

- секретний ключ K* := "@J|eKc-l980" з Nk* := strlen(K*), Nk* = 11 символів;

- об'єм повідомлення, що підлягає декодуванню: Nm* := rows(M_cod*), Nm* = 5390 симв. За допомогою модуля (М.13) секретний ключ K* розширюється на довжину Nm*

повідомлення M_cod* (аналогічно тому, як це робилося при кодуванні повідомлення - М.1). Декодування секретного повідомлення проводиться за допомогою модуля (М.14).

(М.13)

(М.14)

Декодоване повідомлення записує­мо у файл:

WRITEBIN("M_dec.txt","byte",0) := М*.

15) Проведемо обчислення показників візуального спотворення, наведених у розділі 3 (формули (3.1)-(3.17)). Отримані результати зведемо до табл.5.1.

5.3.2.2. Метод псевдовипадкового інтервалу

У вищерозглянутому найпростішому випадку проводиться заміна НЗБ усіх послідовно розташованих пікселів зображення. Інший підхід - метод випадкового інтервалу [78], полягає у випадковому розподілі бітів секретного повідомлення по контейнеру, у результаті чого відстань між двома вбудованими бітами визначається псевдовипадково. Ця методика особливо ефекти­вна у випадку, коли бітова довжина секретного повідомлення є істотно меншою за кількість пікселів зображення. Розглянемо найпростіший випадок даного методу, коли інтервал між двома послідовними вбудовуваннями бітів повідомлення є функцією координат попередньо модифікованого пікселя.

Cv

Cv <- в

for і t 2 .. cols: в;

1) Нехай повідомлення, яке необхідно приховати: М := "© Пузиренко О.Ю., 2005 р.". У якості контейнера С використаємо підмасив B синьої колірної компоненти зображення рис.5.3.

2) Внесемо мітки, які визначатимуть границі корисного повідомлення у контейнері. На відміну від попереднього метода, стартова мітка визначатиме порядковий номер елементу контейнера, починаючи з якого в останній заноситимуться дані. Нехай fis := 154. Мітка цє сигналізуватиме про завершення корисної частини серед видобутих символів, цє := "KiHeu,6".

3) Приймемо, що для внесення бітів повідомлення до контейнеру із змінним кроком, величина останнього обумовлюється кількістю одиниць у двійковому значенні номеру елеме­нту контейнера, який модифікувався попередньо. Для підрахунку величини кроку (інтервалу) скористаємося модулем (М.16), який підсумовує кіль­кість символів матриці-стовпця х, значення яких дорів- rows(x) нює "1". Коефіцієнт К у даному випадку виступає у ролі 5*еР(Ю := К ^ х. (М.16) найпростішого ключа, який може приймати будь-які цілі і = 1 значення (у тому числі й від' ємні, але у цьому випадку

стартова мітка повинна мати значення, близьке до найбільшого значення індексу елементів контейнера). Також при обранні K слід брати до уваги загальну кількість біт, що необхідна для утаєння повідомлення, а також наявну кількість елементів масиву контейнера. Нехай K := 9.

Обмежуючу мітку цє за допомогою рядкової функції concat(...), яка об'єднує рядки, що є її аргументами, додамо до тексту повідомлення, яке підлягає приховуванню. Результат об'єднання перетворимо на вектор ASCII-кодів: Me := str2vec(concat(M, цє)).

Загальна кількість символів в одержаному повідомленні: rows(Me) = 32 симв. Кількість НЗБ контейнера, яка для цього потрібна (8 біт/символ): 8rows(Me) = 256 біт.

4) Розгорнемо масив В у вектор (М.17), на основі якого формуємо новий вектор, який міститиме приховане повідомлення (М.18). Ко­жен символ повідомлення Me (операція циклу for ц є 1..rows(Me)) переводиться у двійковий формат (змінна b), кожен розряд якого записується   замість   наймолодшого біту числа P, яке відповідає значенню інтенсив­ності синього кольору певного пікселя. При цьому елементи масиву Cv проходяться не послідовно, а із змінним кроком, величина якого обумовлюється функцією step(... ) 8). Стартовий елемент задається міткою y,s. Після проведеної зміни модифіковане двій­кове число P переводиться у формат десят­кового і записується у відповідну позицію вектора Sv, який на початку модуля був прийнятий рівним вектору Cv.

5) Зворотне згортання вектора Sv до масиву, який має розмірність контейнера, здійснюється з використанням модуля (М.7) з тією лише відмінністю, що аргументом функцій роз­мірності масиву (rows і cols) є масив B. Щоб оцінити ступінь "розсіяння" бітів приховуваного повідомлення по масиву кон­тейнера в якості прикладу наведемо результат присвоєння пікселю, до якого планувалося ввести біт повідомлення, ну­льового значення інтенсивності (чорний колір) при поперед­ньому загальному висвітленні зображення (рис.5.10).

6) Результуюче кольорове зображення визначатиметься масивом об' єднання колірних масивів: S := augment(R, G, S').

Ф:

(М.17)

Cv ^- stack' Cv. в

Cv

fl € 1    TOWS (Me)

<- D2B| Me ;

)г  і ё 1 . 8 I <- Z+ Step(D2B(Z}}

P <- D2BI CV \ SV <-B2D(P)

(М.18)

Рис.5.10. Розсіяння бітів повідомлення по масиву контейнера

При обчисленні функції D2B(z) необхідно у (М.4) граничне значення змінної циклу i змінити з 8 на таке, що дозволить переводити у двійковий формат найстарший індекс елементів вектору Cv.

7) При видобуванні прихованого повідомлення повинні бути відомими па­раметри y*s, ц*є, K* і, зрештою, масив B*, який повинен містити приховані дані.

Розгортання масиву B* у вектор Sv* відбувається за аналогічним до (М.17) модулем. Видобування повідом­лення з вектору Sv* проводиться за до­помогою модуля (М.19) у порядку, зво­ротному операції вбудовування.

З одержаного вектора Mf* шля­хом порівняння з міткою ц*є виділеного фрагменту видобувається корисне пові­домлення M* (М.20).

(М.19)

(М.20)

I vec2str(M*}

М* = Пузиренко О.Ю., 2005 р.".

Результати обчислення візуального спотворення зведені до табл.5.1. 5.3.2.3. Метод псевдовипадкової перестановки

Недоліком методу псевдовипадкового інтервалу є те, що біти повідомлення у кон­тейнері розміщені у тій самій послідовності, що й в самому повідомлені, і лише інтервал між ними змінюється псевдовипадково. Тому для контейнерів фіксованого розміру більш опти­мальним є використання методу псевдовипадкової перестановки (обрання) [79]. Його сутність полягає у тому, що генератор ПВЧ створює послідовність індексів j1, j2,    jlM і зберігає k біт

повідомлення в пікселі з індексом jk. Нехай N - загальна кількість біт (наймолодших) у

наявному контейнері; PN- перестановка чисел {1, 2, N}. Тоді, якщо ми маємо для при­ховання конфіденційне повідомлення довжиною n біт, можна просто вбудувати ці біти замість

бітів контейнера PN(1), PN(2),    PN(n) . Функція перестановки повинна бути псевдовипад-

ковою, тобто вона повинна забезпечувати обрання бітів контейнера приблизно випадковим чином. Отже, секретні біти будуть рівномірно поширені на всьому бітовому просторі кон­тейнера. Але, у цьому випадку індекс певного біту контейнера може з'явитися в послідовності більше одного разу, іншими словами, може відбутися "перетинання" - спотворення вже вбу­дованого біта. Якщо кількість бітів повідомлення набагато менша за розмір зображення, то імовірність перетинання є незначною, і спотворені біти можуть бути відновлені за допомогою коригувальних кодів. Імовірність, принаймні, одного перетинання оцінюється як:

При збільшенні їм і lc = const дана імовірність прямує до одиниці.

Для запобігання перетинань можна запам'ятовувати всі індекси використаних еле­ментів ji і перед модифікацією нового пікселя проводити перевірку його на повторюваність. Також можна застосовувати генератори ПВЧ без повторюваності чисел. Останній випадок розглянемо більш докладно.

p «1-exp

2lc

c

(5.1)

Для наших цілей функція перестановки також залежить від секретного ключа K. При цьому генератор псевдовипадкової перестановки PN є функцією, яка для кожного значення K виробляє різні псевдовипадкові перестановки чисел {1, 2, N}. Позначимо через ге­нератор перестановок з відповідним ключем K. Якщо перестановка PKN є захищеною по обчисленню (тобто розкриття вимагає невиправдано великих витрат обчислювальних ресурсів порушника), то можливість розкриття змісту або припущення самого лише виду перестановок без володіння інформацією про секретний ключ K практично дорівнює нулеві.

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51 


Похожие статьи

Г Ф Конахович - Оцінка ефективності систем захисту інформації в телекомунікаційних системах

Г Ф Конахович - Комп'ютерна стеганографія теорія і практика