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

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

45.351

10

-1

45.397

10

-]

45.442

10

■1

45.4S&

10

-]

45.533

10

-]

45.57S

10

-]

45.624

10

■1

45.669

10

-]

45.714

10

-]

45.760

10

-]

45.В05

10

■1

Рис.5.57. Фрагмент відліків дискретизації імпортованого аудіофайлу

Рис.5.58. Часові діаграми каналів ІКМ сигналу "C.wav"

4) Для приховання одного символу повідомлення достатньо 8 бітів звуку. Для того, щоб при видобуванні прихованих даних з отриманого ряду символів можна було чітко визначити початок і кінець останніх, введемо відповідні мітки, які б тим або іншим чином вказували на границі саме корисного змісту. Приймемо, що стартова мітка |is визначає порядковий номер елементу контейнера, починаючи з якого в останній заноситимуться дані (див. нижче). Нехай | s := 74. Мітка | e сигналізуватиме про завершення корисної частини серед розпакованих символів, |ie := "KiHeu,6".

Обмежуючу мітку це, перетворивши її на вектор ASCII-кодів, введемо до тексту закодованого повідомлення: Me := stack(M_cod, str2vec(p,e)).

Таким чином, загальна кількість символів у повідомленні, що підлягає прихованню: rows(Me) = 32 симв. Кількість потрібних для цього біт (8 біт на символ): 8-rows(Me) = 256 біт.

ix: := V    X.-21" (М.98)

знак for і V.

знак V

sign(x) 1.. Q

- mod( |x| floor

(М.99)

Cv :=

cv <

for

cv

reverse' С

= 2..N

к

if

Cv <- stack1.Сv. reverse

(c*»

NK>2

(М.100)

Загальна кількість НЗБ аудіоконтейнеру: rows(C)-cols(C) = 40382 >> 256 біт. Отже, аудіофайл має достатній об' єм і є придатним для використання в якості контейнера для даного повідомлення.

5) Для подальших розрахунків також буде потрібним перетворення форматів чисел з десяткового на двійковий і назад. Для цього використаємо програмні модулі (М.98) і (М.99), які є подібними до (М.3) і (М.4) з тією лише різницею, що верхня межа індексування в останніх (вісімка) замінюється на rows(x) і Q відповідно. Крім того, при перетворенні формату аргументу враховується його знак.

Зазначимо,  що  в  модулі  (М.99) функція sign(x) повертає 0 (якщо х = 0); 1 (якщо х > 0); -1 rows(x) (якщо х < 0). Це дозволяє зберегти знак числа х при B2D переведенні його формату на двійковий.

Внесення бітів повідомлення до кон­тейнеру проводитимемо із змінним кроком, величина якого обумовлюватиметься кількі- D2B(x) стю одиниць у двійковому значенні номеру елементу контейнера, який модифікувався попередньо. Для визначення величини кроку використаємо програмний модуль (М.16).

6) Для зручності подальших дій, про­ведемо векторизацію масиву С (у разі, якщо кількість каналів у звуці більше одного) -(М.100), попередньо вико­навши перестановку елеме­нтів кожного із стовпців у зворотному порядку (за до­помогою функції reverse()), що   підвищить прихова-ність інформації.

На основі масиву Cv фор­муємо новий масив, який вже міститиме приховане закодоване повідомлення. Для цього застосо­вуємо програмний модуль (М.101). При цьому кожен символ кодова­ного повідомлення (операція циклу

fori є L.rows(Me))   переводиться І   І   І Знак ^ 1   if CvT > 0 (М.101)

у двійковий формат (змінна Ь), кожен розряд якого записується замість НЗБ числа, яке відповідає значенню амплітуди того чи ін­шого відліку. При цьому елементи масиву Cv проходяться не послі­довно, а із змінним кроком, вели­чина якого у даному випадку

обумовлюється кількістю одиниць у двійковому значенні номеру елементу, який модифікувався попередньо - функція step(...) модуля (М.16) при к = 20 (останнє повинне враховувати загальну кількість біт, що необхідна для вбудовування повідомлення, і наявну кількість елементів ма­сиву контейнера). Стартовий елемент задається міткою u,s.

Значення елемента масиву Cv, до якого вестиметься запис, попередньо переводиться у двійковий формат (змінна P)). Також враховується знак амплітуди відліку. Після проведеної зміни модифіковане двійкове число P переводиться у формат десяткового і записується у відповідну позицію вектора Sv, який на початку модуля був прийнятий рівним вектору Cv.

rows<

7) Проводимо зворотне згортання вектора Sv до масиву S, який має розмірність первинного масиву C. Одночасно виконуємо зворотну перестановку, повертаючи елементи відліків на свої місця:

S := for і е 1 cols(C)

5   «- reverse [ submatrix[Sv = (і - 1} rows (С) + 1 J rows (С} = 1 = 1]]

(М.102)

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

 

0

s<2>

0.1

0.2

0.3

0.4 0.5 2-й канал

0.6

0.7

0.8

0.9

Рис.5.59. Часові діаграми каналів ІКМ сигналу з модифікованими НЗБ

Порівнюючи рис.5.59 з рис.5.58 можна зробити висновок про їх цілковиту візуальну ідентичність, а це дає певні підстави стверджувати про ідентичність заповненого і первинного контейнерів на слух. Для того, щоб переконатися в цьому необхідно записати масив S у файл, що можна зробити вбудованою функцією WRITEWAV(''cpai/m'', частота дискретизації, кількість рівнів квантування):

WRITEWAV(''S_LSB.wav'', Тд, Q) := S.

8) Щоб дослідити вплив на ступінь прихованості того, до якого з розрядів числа, яке характеризує рівень сигналу певного відліку, заноситиметься конфіденційна інформація, в модулі (М.101) у поміченому символом "*" рядку замість індексу "1" слід внести індекс, який відповідає розряду, що модифікуватиметься. Пересічна людина не відчуватиме на слух різниці між звучанням оригіналу і контейнера з повідомленням, якщо в якості "носіїв" використовувати не лише наймолодший, але й наступні 1-2 біти (особливо, якщо використовується 16-бітове квантування і в аудіосигналі відсутні великі ділянки пауз або ділянки з тривалим низьким рівнем звучання). Отже, ще одним із можливих варіантів захисту є використання змінюваного за певним законом запису до цих кількох молодших бітів. Або ж, знижуючи рівень прихованості, можна в кілька разів збільшити пропускну здатність створюваного аудіо-стеганоканалу.

На рис.5.60 зображено наслідок внесення даних до 13-го біта числа квантованого

відліку.

S* := READWAV(''S_LSB.wav'');

GETWAVINFOl

каналг

88200

Рис.5.60. Часові діаграми каналів ІКМ сигналу при внесенні приховуваних даних до 13-го біту

числа, яке характеризує рівень сигналу

9) Розглянемо процес розпакування прихованого повідомлення.

Формуємо масив значень амплітуд дискретних відліків, а також зчитуємо службову інформацію з аудіоконтейнеру.

Отриманий масив S* розгортаємо у вектор Sv*, змі­нюючи порядок елементів у стовпцях (використовується масив (М.100) з відповідними замінами Cv Sv*, C S*).

Використовуючи про­грамний модуль (М.103), про­водимо розпакування прихова­ного повідомлення.

Оскільки у переважній більшості випадків одержувачеві заздалегідь невідомо, повідом­лення якої довжини було прихо­вано у контейнері, беруться до уваги всі елементи вектора Sv*. Значення кожного елементу фор­мованого при цьому вектора Mf* представляють собою коди сим­волів гіпотетичного повідомлен­ня, які обчислюються у зворот­ному до (М.101) порядку: модуль кожного молодшого розряду вісі­мки перетворених у двійковий формат елементів вектора Sv* (обраних з урахуванням змінного кроку і відомого значення мітки

u*s := |J,s = 74 формує двійкове число коду символу, формат якого потім перетворюється на десятковий. Отримане число присвоюється т-му елементу вектора Mf*.

rows<

rows

break

(М.103)

break

Через зазначену вже неможливість оброблення MathCAD 12-ї версії символів, ASCII-код яких має значення від 0 до 31 включно, додатково вноситься заміна значень 0, 1, 2, 31 додаванням до кожного з них коефіцієнту 32.5 (причина обрання саме такого коефіцієнту пояснена у коментарях до програмних модулів (М.10) і (М.11)).

Змінна err необхідна для переривання циклу в разі виходу аргументу Z за межі масиву Sv*. Номери рядків вектора Mf*, елементи яких мають дробові значення, формують масив N (див. модуль (М.11)).

Володіючи інформацією про те, якою є кінцева мітка корисного повідомлення (у нашому випадку н*е = це = иКіНеи,6и), виокремлюємо його з видобутого повідомлення, викорис­товуючи модуль (М.104). Пояснення до цього модуля аналогічні поясненням, що були дані до програмного модуля (М.12).

(М.104)

10) Розпаковане повідомлення декодуємо, застосовуючи модулі (М.13) і (М,14). Деко­доване повідомлення записуємо до файлу: WRITEBIN(''M_dec.txt'',''byte'',0) := M*.

11) Проведемо обчислення показників звукового спотворення, наведених у розділі 3. Отримані результати зведено до табл.5.6.

5.4.2. Метод фазового кодування (частотна область)

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

Фазове кодування, коли воно може бути використане, є одним з найефективніших методів кодування за критерієм відношення сигнал/сприйманий шум. Суттєва зміна співвід­ношення фаз між кожною частотною складовою призводить до значного розсіювання фази. Тим не менш, до тих пір, поки модифікація фази є в достатній мірі малою (звичайно, достатньо малою в залежності від спостерігача; фахівці зі спектрального аналізу здатні виявити видо­зміни, що здаються незначними пересічному спостерігачеві), може бути досягнуте приховання, невідчутне на слух.

Процедура фазового кодування полягає в наступному:

1) Звукова послідовність S[i], (1 < i < І) розбивається на серію N коротких сегментів (блоків) Sn[i], (1 < n < N) - рис.5.61, а, б.

2) До n-го сегмента сигналу Sn[i] застосовується K-точкове ДПФ, де K = І/N, та створюються масиви фаз >n(cok) і амплітуд An(cok) для 1 < k < K (рис.5.61, в).

3) Запам'ятовується різниця фаз між кожними сусідніми сегментами для 1 < n < N (рис.5.61, г):

A>>nOk) =фпOk)->>n-1(®k);    Аф1(Юк) = 0 . (5.59)

4) Двійкова послідовність даних представляється як >data = я/2 або фдма = /2, відображуючи відповідно «1» або «0» (рис.5.61, д): ф1к) = фдша.

5) З урахуванням різниці фаз від­творюється новий масив фаз для п > 1 (рис.5.61, е):

ф1(Юк ) = ф data ф2 Ок ) = ф (©к )ф2 Ок )

. (5.60)

>n (©к) = ФП-1 («к)+A>n Ок)

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


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

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

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