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

Страницы:
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 та І2, що обмежують r текстовий рядок у спільному векторі C. До рядку, що має максимальну кількість символів у своєму складі (назвемо його довгим, Lr = max(L)), дані не вбудовуються. До всіх інших рядків (назвемо їх короткими, max(L) - Lr > 0) вбудовування бітів виконується таким чином, щоб додавання пробілів розширило поточний рядок до розмірів довгого рядка.

Для виокремленого зі спільного вектору C підмасиву c, який містить ASCII-коди символів короткого r-го рядка формується масив space, розмірність якого відповідає загальнійкількості пробілів у даному рядку, а кожні окремі елементи містять інформацію про порядкові номери відповідних їм пробілів серед усіх символів рядку. Наприклад, при r = 1, для кон­тейнера, зображеного на рис.5.88, space = (7  14  18  25  39  42  48  56).

З опису методу відомо, що один біт даних вбудовується до текстового контейнера шляхом модифікації пари пробілів, які охоплюють одне слово речення, - додаванням одного пробілу на початку або в кінці слова, в залежності від значення біту. Отже, кількість біт Nb, яку можна вбудувати до r-го рядка, визначається співвідношенням між кількістю можливих пар пробілів і кількістю символів, на яку короткий рядок "відстає" від довгого. Якщо t/2 < max(L) - Lr, для вбудовування біт можна використати лише floor(t/2) - 1 пар пробілів; інші використовуватимуться для подовження рядка до розмірів довгого - шляхом створення порожніх пар (для спрощення алгоритму, приймається, що видобування на певній ділянці рядка порожньої пари пробілів вказує на те, що у подальшій частині рядка вбудованих даних не міститься). Якщо t/2 > max(L) - Lr, для вбудовування біт використовується кількість пар пробілів, яка дорівнює max(L) - Lr, адже саме цієї кількості символів не вистачає короткому рядку, щоб зрівнятися з довгим. Так, для обраного контейнера довгим є 6-й рядок, який містить 70 символів. 1 -й рядок є коротким: L1 = 65. Для нього кількість можливих пар пробілів t/2 = 8/2 = 4, що є меншим за 70 — 65 = 5. Таким чином, Nb = 3.

Після визначення кількості пар пробілів, до яких можуть бути вбудовані біти пові­домлення, з рядка виокремлюються сегменти segT, що, відповідно, містять т-пару пробілів. У нашому випадку для першого рядка одержуються наступні сегменти (для наочності, зображено відповідні ASCII-кодам символи):

Segi |н)н[ы|й| |е|л|о|в|ы|йП;      Seg2 —► НФІ |с|т|о|я|л|,| і;     Эвдз ► |н|а|х|н|у|р|и|в|ш|и|с|ь|,| |п|о| |.

Для кожного сегменту формується вектор ssp з двох елементів, кожен з яких містить індекс відповідного йому пробілу. Наприклад, для зазначених вище сегментів:

ssP = (j4) для seg1;    ssp =       для seg2;    ssp =     j для seg3.

За допомогою додатково визначеної функції ins_vec2vec формуються нові сегменти, в яких додано один пробіл до або до першого, або до другого пробілу (в залежності від значення поточного вбудовуваного біта). У загальному випадку функція ins_vec2vec(A, B, р) (див. про­грамний модуль (М.130)) дозволяє проводити вбудовування вектора B до вектора A, починаючи з позиції р. У нашому застосуванні в якості вектора, до якого відбувається вбудовування, виступає сегмент segT. Вбудовується ж ASCII-код пробілу (B = 32) після першого = ssp1 + 1), якщо Mvec_bin = 1, або після другого = ssp2+1), якщо Mvec_bin = 0, пробілу сегмента.

Зокрема, для наведених вище сегментів одержуються наступні, модифіковані сегменти (нагадаємо, що першим вбудовується символ "А" повідомлення, ASCII-код якого у двійковому еквіваленті: D2B(str2vec("A"))T = (0Lsb 0 0 0 0 0 1 1MSB). Вбудовування проводиться починаючи з наймолодших біт):

segnpw^r^iiwai |еИо|вМй| і і; segnPw2^йе|с| |с|т|о|я|п|,ГП: segnpw0^Ra|x|n|y|pMBM4|c|b|,| |njc.| | |. Одержані нові сегменти формують r рядок стеганограми (sr).

Після вбудовування останнього (Nb-го) біта, дозволеного у даному рядку, і формування початку рядка sr, залишається сегмент оригінального рядка с, який не зазнав модифікації -segend. Для першого рядка:

segend ► |о|б|о|и|н| |б|а|н| |с|к|о|в|а|н|н|о|й|.

Якщо t/ 2 < max(L) -- Lr, до перших двох пробілів даного завершального сегменту додаються ще по пробілу, що дозволить після приєднання цього сегменту вже наявної частини рядка sr одержати рядок, кількість символів у якому дорівнюватиме max(L). Якщо ж викону­ється умова t/ 2 > max(L) - Lr, завершальний сегмент не змінюється. Для розгляданого вище прикладу, останній сегмент зазнає модифікації, після якої набуває наступного вигляду:

Segend_new -> |о|б|о|иМ І |б|е|р|е|г|а|н| | |с|к|о|в|а|н|н|о|й|.

(М.129)

ins

vec2veclAB a\ =

A' <- submatrix[A = 1 = p1 = 1 = 1) if p < rows (A)

A" +- submatrixiAp = rows (A) = 1 = 1,1 A" <- stack(A'= B=A"}

A" «- stack(A', B) if p = rows (A) + 1 A'" (М.130)

Як вже зазначалося, модифікований або ні завершальний сегмент дописується в кінець r-го рядка стеганограми.

Одержані рядки стеганограми об'єднуються до спільного масиву S.

Паралельно, у програмному модулі (М.129) проводився підрахунок кількості символів оброблених рядків X. Це дозволяє визначити індекс символу оригінального тексту, після якого останній не зазнав змін (через завершення повідомлення раніше, ніж було досягнуто кінець тексту) і дописати немодифікований текст в кінець стеганограми.

Фрагмент результату вбудовування повідомлення M до текстового контейнера C наведено на рис.5.91. Неважко помітити, що у даному фрагменті приховано 24 біти повідом­лення, що відповідає його першим трьом символам ("Алг"). Так, у 1-му рядку приховано біти 000, у 2-му - 00, у 3-му - 0, у 4-му - 11 (маємо символ "А"), у 5-му - 11, у 6-му - жодного біта, у 7-му - 010, у 8-му - 111 (маємо символ "л"), у 9-му - 110, у 10-му - 0011, і, нарешті, у 11-му - 1 (маємо символ "г").

т

 

н

и

ш

и

 

е

л

о

в

ш

и

 

 

л

е

с

 

с

т

0

я

л

I

 

 

н

а

x

и

У

Р

и

в

ш

и

с

ь

I

 

п

о

 

 

0

б

0

и

II

 

 

б

е

р

е

г

а

Н

 

 

с

к

0

в

а

н

н

о

и

л

ь

д

 

н

 

Р

є

к

и

 

 

н

є

д

а

в

н

о

 

п

р

о

н

є

с

ш

и

й

с

я

 

 

в

є

т

є

р

 

с

о

р

в

а

л

 

с

 

д

є

р

є

в

ь

є

в

 

б

є

л

ы

й

 

п

о

к

Р

о

в

инє я с|у|и|е п|р|и

 

И

 

 

о

н

и

г

 

ч

ё

Р

н

ш

є

г

 

3

л

о

в

є

ж

и

є

г

 

к

л

о

н

и

л

и

с

ь

 

д

р

У

г

 

к

 

д

р

У

г

У

 

в

 

н

а

д

в

и

г

а

ю

Ж

и

x

с

я

 

 

р

к

а

x

 

 

 

Г

л

У

6

0

к

о

є

 

б

є

3

и

о

л

в

и

є

 

 

Ц

а

Р

и

л

о

 

в

0

к

р

У

г

 

 

Б

є

с

ь

 

э

т

0

т

 

к

Р

а

й

г

 

л

и

шенныи

 

н а

к

0

в

н

а

ж д

и

3

н

и

 

с

 

 

е

ё

 

д

в

Страницы:
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 


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

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

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