МІНІСТЕРСТВО ОСВІТИ І НАУКИ МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
З В І Т
до лабораторних робіт №3
з курсу «Методи і засоби стеганографії»
на тему: «Приховування даних в аудіо файлах»
мета роботи – ознайомитися із методами приховування інформації в аудіо файлах.
Теоретичні відомості
Кодування найменш значущих біт(тимчасова область)
Кодування молодших розрядів є найпростішим способом введення конфіденційних даних в інші структури даних. Використовуючи звуковий сигнал, шляхом заміни НЗБ (найменших значущих бітів) кожної точки виконуються вибірки, представленою двійковою послідовністю, можна зашифрувати великий об’єм інформації.
Теоретично, пропускна здатність стеганоканалу складає 1 кб\сек на 1 кГц в каналі без перешкод, бітова швидкість передачі даних складає 8 кб\сек в послідовності, яка оцифрована з частотою 8 кГц, і 44 кб\сек в послідовності з частотою дискретизації 44 кГц. Але платою за високу пропускну здатність каналу є відчутний на слух низькочастотний шум. Чутливість даного шуму безпосередньо залежить від складу сигнала-контейнера. Наприклад, шум глядачів під час ефіру спортивного змагання в достатній мірі маскував би шум найменших біт, модифікованих кодуванням. Однак вказаний шум буде відчутний на слух при використанні в якості контейнера аудіо записи гри струнного квартету. Для компенсації внесених спотворень доцільно буде використання адаптивної атенюації даних.
Головним недоліком методу кодування НЗБ є його слабка стійкість до стороннього впливу. Вбудована інформація може бути знищена із-за шумів в каналі, в результаті пере дискретизації вибірки і т п..., за виключенням випадків, коли інформація вбудовувалась з внесенням надлишковості. Однак останнє, забезпечуючи достатню стійкість до перешкод, призводить до зменшення швидкості передачі даних, в основному на 1-2 порядки. На практиці метод корисний тільки в замкнутих, повністю цифрових середовищах, не потребуючих додаткового перетворення.
Визначення довжини можливого повідомлення
Довжина = Число фреймів* бітність фреймів * число семплів / 8
Код програми
import wave
import struct
def simvol_v_int(text):
s=[ord(x) for x in text]
return s
def int_simvol(int_list):
word=""
s=[chr(x) for x in int_list]
for x in s:
word+=x
return word
def codef(way,text):
values=[]
wav = wave.open(way, 'r')
dani=wav.getparams()
#print dani
ks=str(dani[3])+"B"
#print ks
s=struct.unpack(ks,wav.readframes(dani[3]))
#print s[:100]
s=list(s)
#print s[:100]
wav.close()
wav1=wave.open(way, 'w')
wav1.setparams(dani)
k=simvol_v_int(text)+[96,96,96]
#print k
for x in range(7,len(s)-1,8):
if k==[]: break
s[x]=k[0]
k=k[1:]
#print s[:100]
for x in range(0,len(s)):
packed_value = struct.pack('h', s[x])
values.append(packed_value)
for x in range(0,len(values)):
values[x]=values[x][0]
value_str = ''.join(values)
wav1.writeframes(value_str)
wav1.close()
def decoder(way):
wavq = wave.open(way, 'r')
dani=wavq.getparams()
ks=str(dani[3])+"B"
s=struct.unpack(ks,wavq.readframes(dani[3]))
#l=wavq.readframes(dani[3])
s=list(s)
k=[]
for x in range(7,len(s),8):
k.append(s[x])
print k[0:100]
m=k[0:k.index(96)]
print m
text =int_simvol(m)
wavq.close()
return text
def main():
print "Hi user"
vubir=raw_input("1- coder 2 - decoder: ")
if vubir=='1':
way=raw_input("Get a way")
text=raw_input("Get a text")
codef(way,text)
elif vubir=="2":
way=raw_input("Get a way")
print decoder(way)
else:
print "Vvedit pravilniy nomer"
main()
Аналіз файлу до вшивання даних
Аналіз даних після вшивання даних
Результат роботи програми
Закодування
Декодування
Висновок: Під час виконання лабораторної роботи я навчився приховувати інформацію в wav файлах, дослідивши аналізатором файл до і після приховування була виявлено, що дуже важко помітити зміни в файлах коли дані приховуються в кожен 8 фрейм