Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

140
UNIVERSITA’ DEGLI STUDI DEL MOLISE Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica Tesi di Laurea: SU ALCUNI METODI PER IL WATERMARKING AUDIO Relatore: Ch.mo Prof. Giovanni Capobianco Candidato: Elio Tornincasa Matr. 120935 Anno Accademico 2007/2008

description

Percorrendo la storia dell’umanità sono moltissimi gli episodi in cui le sorti di una vita, o addirittura di un intero popolo sono dipese da sicurezza e segretezza impiegate nelle comunicazioni. Evitare che informazioni sensibili cadessero in mani sbagliate era, ed è tuttora, una continua lotta tra chi inventa metodi sempre più sofisticati per nascondere informazioni e chi, con le sole armi dell’intelligenza, fa di tutto per violarne la segretezza. In un mondo in cui l’informazione è diventata la materia prima più preziosa (nel così detto “mondo digitale”), l’importanza di nascondere la circolazione e soprattutto di garantire, all’autore di un documento digitale, la paternità, è divenuta un’attività critica. Mentre documenti in “formato analogico”, come lo possono essere un dipinto oppure un libro, vengono contrassegnati dalle relative firme o etichette di copyright sulle copertine, l’attività di etichettatura di documenti digitali è legata essenzialmente alla problematica di andare ad inserire nel contenuto del documento originale altra informazione. Informazione riguardante il produttore e l’autore del contenuto, con lo scopo ultimo di preservare l’integrità del documento originale.

Transcript of Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Page 1: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

UNIVERSITA’ DEGLI STUDI DEL MOLISE

Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica

Tesi di Laurea:

SU ALCUNI METODI PER IL WATERMARKING AUDIO

Relatore: Ch.mo Prof.

Giovanni Capobianco

Candidato: Elio Tornincasa Matr. 120935

Anno Accademico 2007/2008

Page 2: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

RINGRAZIAMENTI

“…Alla Mia Anima, Fonte Autentica,

Lode Dolente Assente.”

I

Page 3: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

INDICE

Introduzione........................................................................................................... 1

Capitolo 1: Steganografia, watermarking e stegoanalisi

1.1 Steganografia.......................................................................................... 5

1.1.1 Storia della steganografia …………..................................................... 6

1.1.2 Bin Laden e la steganografia………….................................................. 10

1.2 Steganografia moderna.......................................................................... 11

1.3 Altri scenari applicativi della steganografia............................................ 15

1.4 Watermarking......................................................................................... 18 1.4.1 Scenari applicativi e requisiti watermarking............................................... 19

1.4.2 Procedure watermarking............................................................................ 22

1.5 Stegoanalisi............................................................................................. 24

Capitolo 2: Watermarking Audio (compressioni)

2.1 “Perché utilizziamo i file audio come contenitore?”………...................... 29

2.2 Segnali audio e file audio........................................................................ 30

2.2.1 Campionamento ………………........................................................... 35

2.3 Il formato dei file audio WAVE PCM....................................................... 38

2.4 Effetto mascheramento: modello psico-acustico................................... 41

2.5 MPEG-1 AUDIO LAYER III........................................................................ 51

2.5.1 Struttura file MP3……………….......................................................... 56

2.6 Brevetto “Stealthy Audio watermarking” e DRM................................... 58

Capitolo 3: Tecniche di Watermarking

3.1 Inclusione ed individuazione del watermark nei file audio………............ 61 3.2 Fattori da considerare per il data hiding ...........................………............ 64

3.3Tecniche utilizzate...........................………................................................ 65

II

Page 4: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 4: S-Tools 4 e MP3Stego

4.1 S-Tools…………………………......................................................................... 71

4.1.1 LSB e Limiti SW…………………........................................................... 79

4.2 MP3Stego………………………………………………………………………...……............. 81

4.2.1 Echo Data Hiding e Limiti SW…………………......................................... 89

4.3 Conclusioni…………………………………………………………...……......................... 92

Appendice A ………….............................................................................................. 97

Bibliografia-Sitografia …………................................................................................ 132

III

Page 5: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

INTRODUZIONE

Percorrendo la storia dell’umanità sono moltissimi gli episodi in cui le sorti di una vita, o addirittura di un intero popolo sono dipese da sicurezza e segretezza impiegate nelle comunicazioni.

Evitare che informazioni sensibili cadessero in mani sbagliate era, ed è tuttora,

una continua lotta tra chi inventa metodi sempre più sofisticati per nascondere informazioni e chi, con le sole armi dell’intelligenza, fa di tutto per violarne la segretezza.

In un mondo in cui l’informazione è diventata la materia prima più preziosa

(nel così detto “mondo digitale”), l’importanza di nascondere la circolazione e soprattutto di garantire, all’autore di un documento digitale, la paternità, è divenuta un’attività critica.

Mentre documenti in “formato analogico”, come lo possono essere un dipinto

oppure un libro, vengono contrassegnati dalle relative firme o etichette di copyright sulle copertine, l’attività di etichettatura di documenti digitali è legata essenzialmente alla problematica di andare ad inserire nel contenuto del documento originale altra informazione. Informazione riguardante il produttore e l’autore del contenuto, con lo scopo ultimo di preservare l’integrità del documento originale.

Un approccio alla sicurezza dei dati può essere l’uso di tecniche crittografiche.

Con questo un messaggio viene codificato affinché appaia incomprensibile a chi non possiede la chiave per decodificarlo. Quindi, l’informazione viene manipolata e trasformata prima che venga inviata, e alla ricezione, viene applicata la trasformazione inversa. Questo schema viene utilizzato per lo scambio sicuro di e-mail, la sicurezza della tecnica si basa sul fatto che, ad oggi, nessuno abbia trovato un algoritmo che possa fattorizzare un numero multiplo di 2 numeri primi molto grandi (ordine delle 200 cifre) in tempo ragionevole.

I problemi di fondo della Crittografia sono:

- non è uno strumento per etichettare i documenti, - rende visibile (anche se incomprensibile) una comunicazione.

-1-

Page 6: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Presa visione delle limitazioni crittografiche, ci viene in aiuto la Steganografia. La Steganografia si riferisce ad una tecnica elusiva della comunicazione, che si

prefigge di nascondere non solo il contenuto di un messaggio ma anche la sua esistenza. Essa ha origini antichissime ed è stata ripresa negli ultimi anni da alcune società informatiche per la creazione pacchetti applicativi per la protezione dei documenti e delle password sul PC .

Strettamente collegato alla Steganografia è il concetto di Watermarking.

Il Watermarking, non è altro che una filigrana, ossia è un messaggio inserito in un gruppo di dati, associato ad una chiave segreta che non dovrebbe permettere la violazione del messaggio stesso. Un esempio classico di filigranatura, per questioni di sicurezza, è quello delle banconote. In questo caso la filigrana garantisce: autenticità alla banconota (con la riproduzione scompare la filigrana) e la sua resistenza al deterioramento.

Grazie all’evoluzione delle possibilità di distribuzione dei documenti digitali, è

nata la necessità di controllare i vari contenuti (che siano essi Immagini, suoni o video) che viaggiano sul web. Soprattutto in virtù del fatto che, Steganografia e l’utilizzo correlato di Watermarking, sembrano essere le tecniche utilizzata da Bin Laden per comunicare ed ordinare attentati senza essere scoperto.

La Stegoanalisi ha proprio questo scopo, ossia rompere la sicurezza di un

sistema steganografico. Andando ad intercettare eventuali messaggi all’interno di documenti digitali, che possono essere ricondotti a comunicazioni terroristiche o illecite (pedofilia via web).

E’ d’importanza fondamentale il file contenitore che dovrà contenere il

messaggio segreto o la firma dell’autore. Il tipo di mezzo utilizzato dovrà essere abbastanza resistente ad eventuali compressioni. Si è dimostrato che i file audio sono il mezzo migliore per trasportare informazione aggiuntiva. Spiegeremo il perché di questa asserzione nel capitolo 2.

Lo scopo di questa tesi sarà quello di fornire informazioni dettagliate

riguardanti alcune tecniche per watermarking audio, più nello specifico sui metodi utilizzati per la compressione di file contenitori (.WAV), in grado di ospitare messaggi nascosti. In modo che il file watermarkato abbia stessa risoluzione e peso del WAV originale. Congiuntamente alla tesi verranno mostrate delle funzioni in ambiente MatLab relative agli argomenti esposti.

-2-

Page 7: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Nel primo capitolo, ci occuperemo della storia della steganografia, della steganografia moderna, degli altri scenari applicativi della steganografia, delle procedure di Watermarking digitale, ed infine della Stegoanalisi.

Nel secondo capitolo tratteremo nello specifico i segnali audio, con particolare

attenzione alla struttura interna dei file .WAV, analizzeremo i modelli psico-acustici, come mascherare info all’interno del suono, della compressione MPEG-1 Audio Layer III, del nuovo brevetto Microsoft “Stealthy Audio Watermarking”.

Nel terzo capitolo parleremo delle varie tecniche utilizzate per il watermarking

audio, con riferimenti ad aspetti computazionali e pratici. Nel quarto capitolo daremo spazio a 2 Tool steganografici S-Tools e MP3Stego,

analizzandone differenze, limiti e pregi con opportuni riferimenti ai capitoli precedenti.

Nell’appendice A verranno proposti i codici MatLab, per alcune tematiche

discusse nella tesi: Modello psicoacustico, algoritmi di cifratura e test.

-3-

Page 8: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 1:

“Steganografia, Watermarking e Stegoanalisi”

Page 9: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 1

1. STEGANOGRAFIA, WATERMARKING E STEGOANALISI

Il primo passo per comprendere al meglio le tecniche pratiche (analizzate nei capitoli successivi) relativi all’inserimento di messaggi o firme nel file contenitore, è quello di riuscire a spiegare come e quando i nostri avi hanno utilizzato queste tecniche. Successivamente nel capitolo, saranno esposte nuove metodologie per ovviare alle problematiche del metodo steganografico. Un esempio : passaggio da documenti analogici a digitali. Saranno fruibili delle informazioni sui principi della steganografia moderna, con un accenno particolare alle tecniche utilizzate da Bin Laden e le prove degli stegoanalisti per trovare eventuali sistemi connessi. Verrà preso in considerazione il Watermarking digitale (un discorso generale su vari tipi di file), con le sue procedure, le sue tecniche, i suoi requisiti e i relativi limiti.

1.1 STEGANOGRAFIA

Il termine Steganografia deriva dal greco, e più precisamente dalle parole stèganos,

che significa nascosto, e gràfein, che significa scrivere. Furono infatti i Greci tra i primi ad usare dei rudimentali sistemi di steganografia, incidendo del testo nascosto su delle tavolette di legno ricoperte di cera. Per mandare un messaggio segreto una persona avrebbe dovuto quindi grattare via la cera da una tavoletta, incidervi sotto il messaggio, e successivamente ricoprire la tavoletta con della cera per farla apparire nuova. La Steganografia non va confusa con la Crittografia, in quanto quest’ultima tecnica punta la sua sicurezza sul fatto che tutti possono leggere un messaggio criptato, ma in teoria solo il destinatario può decriptarlo e quindi riuscire a leggerlo. La debolezza della crittografia è proprio il sistema usato per criptare il messaggio: una volta abbattuto quello, si ha libero accesso a tutti i segreti trasmessi. La steganografia invece parte dal presupposto che nessuno dovrebbe sapere che esiste un messaggio segreto nascosto, e quindi risulta impossibile trovarlo. L’importante è quindi escogitare un metodo sicuro per poter nascondere il proprio segreto.

Essa può essere applicata a qualsiasi tipo di file (Immagini, suoni, video etc..) poiché si

fonda sulla possibilità di cambiare i bit meno significativi del file. La bontà del file contenitore verrà esposta nel capitolo successivo.

-5-

Page 10: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

1.2 STORIA DELLA STEGANOGRAFIA

I Greci solevano usare anche un'altra tecnica, come narra lo storico Erodoto: rasavano a zero la testa del messaggero, vi tatuavano sopra il testo segreto, aspettavano che gli ricrescessero i capelli e successivamente lo inviavano al destinatario dandogli anche un messaggio fittizio per non destare sospetti.Una volta giunto, il messaggero si rasava il capo e lo mostrava al destinatario.

Nell'antica Cina invece si dipingeva il messaggio su striscioline di seta finissima, che

venivano appallottolate e coperte di cera. Le palline erano quindi inghiottite dal messaggero. Risulta evidente che tutti i metodi descritti finora potevano essere facilmente scoperti ad un esame molto accurato. La longevità della steganografia dimostra comunque ch'essa garantisce una certa sicurezza, ma il suo punto debole è palese: se il latore del messaggio è attentamente perquisito, è probabile che il testo sia scoperto; in tal caso, il nemico può farne l'uso che crede. In altre parole, la segretezza è perduta nel momento stesso dell'intercettazione. In tal caso, è inevitabile che molti messaggi siano trovati.

Il primo vero passo in avanti fu compiuto dall'abate Giovanni Tritemio (1462-1516)

con i suoi trattati Steganographia e Clavis Steganographiae, nei quali venivano gettate le basi per un modello di Steganografia usata ancora oggi.

Ma in cosa consisteva di preciso l'idea di Tritemio?

Supponiamo per un istante di voler mandare un messaggio ad un nostro amico Tizio, avvertendolo di non fidarsi di un certo Caio. Abbiamo però paura che Caio legga tutta la nostra corrispondenza e quindi, usando la Steganografia, scriviamo il seguente testo: "Nelle ore notturne feroci illusioni di antichi riti tramandati in dimenticate isole ci assalgono, ivi ora..." ecc. ecc... Tizio, per leggere il messaggio originale che noi gli volevamo mandare, non dovrà far altro che leggere tutte le iniziali delle parole e comporre il testo nascosto: "Non fidarti di Caio...".

Questo è l'esempio più semplice di tutti gli schemi proposti da Tritemio, che elaborò

40 sistemi principali e 10 sotto-sistemi secondari, sfruttando non solo varie combinazioni di acronimi, ma anche usando dei dischi rotanti basati sulla sostituzione mono-alfabetica di Cesare.

-6-

Page 11: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

In questa cifratura il posto di ogni lettera del messaggio è preso dalla lettera che si

trova ad una distanza di x posti nell'alfabeto ordinario, dove x, nel caso dell'alfabeto completo di 26 lettere, è un numero compreso tra 1 e 25.

Il messaggio "Mio zio è andato a Zurigo non per incontrare Silvia e nemmeno le Kromanev, quindi domani si farà il solito giretto nel centro storico. Dovrebbe mandarmi un kimono per sabato, e allora...", prendendo una parola si e una no, nasconde la stringa, a prima vista illeggibile, "zazpsnkdfsnsmksa".

Usando però la trasposizione del disco riportato qui sopra, che quindi tramuta le 'a' in

'o', le 'b' in 'p', le 'c' in 'q' ecc..., ecco che riusciamo ad ottenere il solito "nonfidartidicaio". L'idea fondamentale di Tritemio era quindi quella di nascondere un testo segreto dentro un messaggio che funzionasse come copertura, senza quindi ricorrere a brutali sistemi fisici come ad esempio la rasatura di capelli ma sfruttando invece abili artifizi matematici e letterari. A meno di non sapere il sistema usato per nascondere il testo, era dunque praticamente impossibile riuscire a estrarre il significato reale del messaggio.

Unico inconveniente: il mittente ed il destinatario dovevano avere entrambi il libro di

Tritemio per poter conoscere il sistema steganografico usato...

Fig 1. Ruota di Tritemio

Si ricordino comunque, altre tecniche interessanti quanto semplici per attuare l’elusione della comunicazione. Ad esempio L’inchiostro invisibile, Le griglie di Cardano, La tecnica dei micropunti e Il metodo acrostico.

L’inchiostro invisibile si basa tecnicamente sulla particolare reazione al calore di

alcuni elementi chimici presenti in prodotti di uso quotidiano e facilmente reperibili quali limone, aceto etc..

-7-

Page 12: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Il suo uso risale ad epoche remote: gli antichi Romani per celare la loro

comunicazione, scrivevano il messaggio segreto su un pezzo di carta attraverso i prodotti detti sopra, attendevano che si asciugasse e poi provvedevano all’invio del pezzo di carta. Il mezzo poteva essere anche scritto con inchiostro. Per riuscire a capire il contenuto bastava passare molto lentamente una fiamma sulla carta e così il messaggio “magicamente” compariva.

Questa tecnica è stata esposta anche nel libro “Il nome della Rosa” di Umberto Eco e

nel libro “Il codice da Vinci” di Dan Brown. Nel primo libro, quando i monaci Benedettini cercavano di scambiarsi informazioni relative alla collocazione di un libro proibito nella biblioteca. Nel secondo libro, quando “Robert Langdon” cercava di capire la morte del curatore del Louvre “Jacques Sauniérè”, che lasciò un messaggio scritto da crittografare svelato con una penna ad infrarossi.

Per l’implementazione delle griglie di Cardano è sufficiente un foglio di cartone nel

quale si devono praticare alcuni buchi rettangolari in ordine sparso. Questo foglio viene poi usato come griglia, sovrapposto al foglio sul quale deve comparire il messaggio cifrato.

Il mittente inserisce le lettere o le sillabe del messaggio nei buchi preparati in

precedenza e riempie poi il foglio sottostante con altre lettere e parole in modo da dare un senso compiuto, ma fuorviante alla pagina. Chi riceve il messaggio, per poterlo leggere, dovrà collocare sul foglio una griglia uguale a quella usata dal mittente.

Una curiosità: la stessa griglia, nella forma più semplice, con buchi che evidenziano

una lettera o una parola sì e una no, battezzata “codice Bibbia”, è stata usata per rivelare ipotetici “messaggi nascosti” nella Bibbia.

Il metodo dei micropunti (microdot) fu molto utilizzato dagli agenti tedeschi in

America Latina nella seconda guerra mondiale. Essa consisteva in fotografie della dimensione di un punto dattiloscritto che, una volta sviluppate e ingrandite, poteva diventare pagine stampate di buona qualità e contenere una grossa mole di dati.

Tramite un procedimento fotografico dunque, era possibile stampare su un

frammento di pellicola di diametro inferiore un’intera pagina di messaggio, per poi nascondere il risultato in un qualsiasi testo dal contenuto banale, ad esempio un puntino di una “i”.

Pur trattandosi di una tecnica potenzialmente infallibile, il microdot rappresenta storicamente uno dei casi in cui non è stato il livello di segretezza a compromettere il contenuto, bensì l’affidabilità delle persone in cui era stato riposto il segreto.

-8-

Page 13: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Un acrostico (dal greco tardo ἀκρόστιχον, composto di ἄκρον, «estremo» e στίχος, «verso») è un componimento poetico in cui le lettere o le sillabe o le parole iniziali di ciascun verso formano un nome o una frase, a loro volta denominate acronimo.

In origine l'acrostico aveva probabilmente una funzione magica. Si possiedono esempi

di acrostici già in composizioni sacre babilonesi, per esempio quella che presentava così il nome del suo autore: «Saggil-kinam-ubbib, sacerdote degli incantesimi di Babilonia». Altri esempi di acrostici dell'antichità sono alcuni Salmi della Bibbia, i cosiddetti "Salmi alfabetici" in cui l'inizio di ogni verso presenta, nell'ordine, tutte le lettere dell'alfabeto (Salmi 25, 34, 119).

I più antichi esempi di acrostici in greco risalgono ad Arato di Soli e a Nicandro; vi

sono numerosi acrostici tra gli epigrammi dell'Antologia Palatina e nell'opera di Dionigi il Periegeta. Nella letteratura latina Cicerone testimonia che Ennio fu autore di acrostici; gli argomenti in versi delle commedie di Plauto, presentano in acrostici il titolo delle commedie stesse.

Fra i poeti cristiani, acrostici furono composti da Commodiano nelle sue Instructiones.

La tradizione dell'acrostico continuò nel Medioevo e poi nella letteratura italiana: molto famoso è l'acrostico costituito dai capoversi delle terzine dell'Amorosa visione con cui il Boccaccio dedicò l'opera a Maria d'Aquino.

Famoso è anche l'acrostico posto all'inizio del Commento morale a Giobbe di Gregorio

Magno, miniato da Florentius. Sono definiti acrostici anche i termini che risultano dalle lettere iniziali di singole

parole anziché di versi: l'esempio più noto è l'acrostico cristologico IΧΘΥΣ, "pesce",

costituito dalle iniziali della formula Ἰησοὺς Χριστὸς Θεοῦ Υἱὸς Σωτήρ, (Gesù Cristo Figlio di Dio Salvatore). Celebre è anche la scritta Viva V.E.R.D.I. che i patrioti italiani utilizzavano, durante il Risorgimento, per significare (Viva) Vittorio Emanuele Re D'Italia. Un esempio di acrostico di epoca più recente, ispirato alle vicende della prima e della Seconda Guerra del golfo, è quello ironicamente ricalcato sulle lettere della parola B.U.S.H: Bisogna Uccidere Saddam Hussein.

Nell'ottobre del 2007 Vincenzo Mazzitelli ha composto e pubblicato un intero poema

acrostico, dal titolo Storia di un satiro religioso. L'acrostico più lungo del mondo, nel quale l'acrostico costituisce la chiave di lettura dell'intero testo.

Anche nella Divina Commedia si trovano degli acrostici, ad esempio nel canto 1

dell’Inferno, al verso 67 viene proposto un riferimento a Re Enea.

-9-

Page 14: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Le prime forme di acrostico comparirono in Grecia nel V secolo a.C. per mano di

Epicarmo di Cos. Esso infatti usava firmare i suoi drammi proprio con questa tecnica è rappresento il punto di partenza sul quale si è sviluppata una tecnica di garanzia dell’autenticità dei documenti nota come watermarking [Fonte: Wikipedia.it].

Alcune di queste tecniche, più specificamente Le griglie di Cardano e gli acrostici,

sono messi in atto in un gioco online molto in diffusione. Ossia Livello Zero (www.livellozero.it).

1.2.1 BIN LADEN E LA STEGANOGRAFIA

Dopo aver ripercorso, in maniera più o meno esaustiva, la storia della steganografia,

occorre menzionare alcuni eventi che ci hanno toccato, e tuttora sono applicati. Infatti, l’Intelligence statunitense pensa che la tecnica utilizzata da Bin Laden per comunicare ed ordinare attentati senza essere scoperto, si basi proprio sulla steganografia.

Non pochi sono i riferimenti intrecciati tra crittografia e terrorismo, basti pensare, ad

esempio al codice del primo volo che si schiantò sulle torri gemelle Q33NY. Se questa sequenza di lettere venisse traslata nel tipo di carattere Wingdings otterremo il seguente risultato:

I terroristi si sono accorti che un mezzo di comunicazione molto accessibile e che

permette di professare più o meno liberamente la loro dottrina sia Internet. Attraverso questo strumento, i terroristi hanno creato dei forum con cui addestrare i futuri martiri, fare proseliti in tutto il mondo e caricare file via FTP con messaggi per creare una comunicazione tra i diversi componenti dell’organizzazione. Si pensi al sito ISLAMICMINIBAR.COM/FORUM (trovato dal Sismi).

Non ci dilungheremo più di tanto su aspetti specifici del cyber terrorismo, ma

specializzeremo la nostra discussione sul dove vengono caricati i file nel web e come fanno i membri dell’organizzazione ad intercettarli.

Il caricamento dei file deve essere associato ad un link web. I terroristi, si presume,

possono utilizzare 2 tecniche:

-10-

Page 15: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Caricare i file su spazio aperto gratuito presso uno dei tanti provider. In questo

caso servirà solo una semplice mail per attivare lo spazio. La limitazione sarà fornita dal fatto che, appena il provider verrà informato della presenza sulle proprie macchine di un sito a sfondo terroristico, provvederà ad archiviarlo.

- Caricare i file su hosting zombie. Emblema di questa scelta è il provider Everyone’s Internet Inc., su cui si ha la completa certezza di contenere ancora oggi alcuni siti adibiti allo scambio di messaggi sul web. L’altro problema che nasca dall’utilizzo della rete è che i possibili attentatori posso mascherare il proprio indirizzo IP, tramite appositi SW.

Il mezzo più utilizzato per scambiare file con all’interno comunicazione dovrebbe essere il Forum. Da qui abbiamo diverse possibilità:

- La notizia viene data offline ad uno degli iscritti al forum e questi provvede ad inserire un post con il link all’indirizzo che contiene il file.

- La notizia viene comunicata online tramite l’utilizzo di instant messaging o email ed il ricevente creerà un post.

- La notizia viene caricata direttamente da un membro dell’organizzazione il quale crea un’account fittizio sul forum prescelto e pubblica un messaggio.

La conclusione di questo discorso è che Internet è diventato il Media preferito dalle organizzazioni terroristiche. La digitalizzazione del terrorismo offre però, la possibilità di individuarne più facilmente i responsabili [1].

1.3 STEGANOGRAFIA MODERNA Oggi per Steganografia si intende l'arte e la scienza di nascondere un'informazione in

modo tale che la sua presenza non possa essere determinata. A causa dell'interesse crescente circa la protezione della proprietà su Internet e anche nell'eventualità che le tecnologie crittografiche siano dichiarate fuorilegge, l'interesse nelle tecniche per nascondere informazioni è aumentato notevolmente negli ultimi anni. Essa è espressa quasi nella totalità dei casi, con tecniche digitali rimanendo tuttavia concettualmente uguale a quella che costituiva gli elementi del passato.

Oggi si possono quindi distinguere due principali diramazioni nell'attuale scenario steganografico:

1. la protezione contro una semplice individuazione del messaggio da parte di un

avversario passivo. 2. l'abilità di nascondere un messaggio in modo tale che nemmeno un avversario attivo

possa rimuoverlo.

-11-

Page 16: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

La Steganografia con un avversario passivo può essere illustrata con il "Problema dei Prigionieri" di Simmons: Alice e Bob sono in prigione ed intendono progettare un piano di fuga.

Tutte le loro comunicazioni sono osservate da un avversario (la guardia Eva), che

ostacolerà il loro piano trasferendoli in una prigione ad alta sicurezza non appena individuerà anche il minimo messaggio nascosto. Alice e Bob riusciranno nel loro intento se Alice riuscirà a mandare messaggi a Bob senza che Eva si accorga di nulla e possa insospettirsi.

Fig 2. Problema dei prigionieri

Lo schema qui sopra mostra come funziona lo scambio di messaggi con un avversario passivo. E è il testo segreto che Alice e Bob si vogliono scambiare, C è il testo di copertura, R è un'eventuale variabile random di Alice, K è la chiave segreta condivisa in modo sicuro da Alice e Bob, S è il messaggio steganografato che Bob riceve. Quando Alice vuole mandare un messaggio a Bob, sa che deve passare sotto il controllo della guardia, e quindi nasconde il messaggio E dentro di C, eventualmente utilizzando R, ottenendo così il risultato S [2].

Eva vede che Alice sta comunicando con Bob, ma non sa se quello che sta

trasmettendo sia C o S, anche perchè non ha modo dato S di tornare ad E. Bob invece, quando riceve un messaggio di Alice, prova a decifrarlo con la chiave K, e scopre se vi era nascosto un testo segreto. In questo modo Alice e Bob riescono ad aggirare la sicurezza di Eva, comunicando tranquillamente grazie alla chiave K. Va sottolineato il fatto che il messaggio S dovrebbe essere insospettabile, e avere un suo senso più o meno compiuto. Nascondere un messaggio in modo tale che nemmeno un avversario attivo possa rimuoverlo è un problema leggermente differente, e più complesso.

-12-

Page 17: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Se nello schema sopra Eva non si limita a guardare i messaggi che si scambiano Alice e

Bob, ma ne altera anche alcune parti senza modificarne il significato, ecco che Bob non sarà più in grado di risalire al testo segreto originale di Alice.

Eva però non può sapere dove sia nascosto il segreto, quindi può solo cambiare una

parte del messaggio dove pensa che vi sia nascosto qualcosa. È proprio su questa insicurezza di Eva che deve basarsi Alice, quando nasconde il testo segreto.

Lo schema logico che sta alla base di una qualsiasi tecnica steganografica presenta 3

elemti fondamentali: - il messaggio segreto che si desidera trasmettere (stringa di bit) - il messaggio contenitore, per nascondere quello segreto - L’algoritmo steganografico utilizzato I principi che stanno alla base dei SW steganografico sono sempre gli stessi. Tuttavia

però possono esistere diversi approcci che fanno individuare varie famiglie SW .

La tecnica steganografica sicuramente più diffusa è quella sostitutiva. Alla base di questa tecnica c’è un’osservazione: la maggior parte dei canali di comunicazione (linee telefoniche, trasmissioni radio, etc..) trasmettono segnali che sono sempre accompagnati da qualche tipo di rumore di fondo o disturbo.

Questo rumore può essere sostituito da un segnale, il messaggio segreto, che è stato

trasformato in modo tale che , a meno di conoscenze della chiave segreta, è indistinguibile dal rumore vero e proprio, e quindi può essere trasmesso senza destare sospetti.

Quasi tutti i programmi si basano su questa idea, sfruttando la grande diffusione di

file contenenti una codifica digitale. Esempio un file sonoro che è stato acquisito da una scheda sonora avrà un certo errore (rumore). Più specificamente si parla di steganografia iniettiva, dove si cerca di iniettare un file in un file contenitore già esistente. Su quanto detto ci basiamo sul progetto in MatLab.

Altre tecniche steganografiche sono quella selettiva e quella costruttiva: - Selettiva, che non viene utilizzata in pratica, ma si basa su funzioni hash che vale 1

se il file contenitore contiene un numero dispari di bit e 0 se avviene il contrario. La funzione hash funge da impronta digitale per il messaggio contenitore.

- Costruttiva, opera come la sostitutiva ma nella modifica del file contenitore si tiene traccia di un modello del rumore. La difficoltà è rappresentata dalla creazione del modello stesso.

-13-

Page 18: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Sulla base delle tecniche appena analizzate, viene da chiedersi quali sia il sistema

steganografico ideale. Bisogna a questo punto accennare il principio di Kerckhoof (adottato dalla crittografia). La steganografia pur essendo molto legata all’algoritmo utilizzato necessita ad un certo livello l’auto-imposizione di tale principio. Esso afferma che la sicurezza di una determinata tecnica non deve risiedere nell’algoritmo usato bensì nella chiave di decifrazione. Per questo c’è la necessità di crittografare la chiave per l’inserimento e la restituzione del messaggio nascosto. La soluzione è dunque, nel camuffare il messaggio cifrato prima di iniettarlo, un esempio ne è il PGP [10].

Il Pretty Good Privacy è un programma informatico di crittografia che si è diffuso in tutto il mondo negli anni ‘90, predispone portabilità ed è stato sviluppato da Philipp Zimmerman. Mediante questo programma è possibile mantenere la riservatezza nello scambio di posta elettronica e garantire l’autenticazione del mittente. Il PGP utilizza due algoritmi di crittografia : il sistema a chiavi pubbliche RSA e l'IDEA. Verranno esposte ampiamente nel capitolo su S-Tools.

Fig.3 Schema di cifratura PGP

In definitiva, il metodo migliore per proteggere i dati è segnato dall’utilizzo di SW

“Stealth Encryption”, che dosano crittografia e steganografia.

Fig.4 Sistemi moderni Crittografia + Steganografia

-14-

Page 19: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

1.4 ALTRI SCENARI APPLICATIVI DELLA STEGANOGRAFIA

Si può pensare di usare la steganografia anche per creare qualcosa di completamente

diverso e più particolare. Si può pensare di mettere in piedi un file system basato sulla steganografia. Lo si può vedere come un meccanismo di immagazzinamento dei dati che ha lo scopo di dare all'utente un livello molto alto di protezione contro la rivelazione stessa dei suoi contenuti.

Verrà permesso l'accesso ad un file a tutti quegli utenti che conoscono il suo nome e la relativa password; ma un attaccante che non sia in possesso dell'informazione corretta non potrà nemmeno immaginare la sua esistenza, anche avendo un completo accesso a tutto l’HW ed il SW.

Una prima idea potrebbe basarsi sul volere che l'attaccante non abbia nessuna conoscenza del nome del file e della sua password, e in questo modo non possa ottenere nessuna informazione sul sapere se il file sia presente nel sistema a meno che non conosca una parte del suo contenuto o possa tentare tutte le password possibili.

Per semplicità nell'esposizione, si può assumere che la password P sia formata da k

bit. L'idea principale è di avere un certo numero di file di copertura (cover files) nel sistema, che vengono inizializzati con valori random, e successivamente si nascondono i file dell'utente con delle operazioni di or esclusivo con un sottoinsieme dei file di copertura. Il sottoinsieme viene scelto in base alla password. Per dare un esempio concreto, si supponga che tutti i file abbiano la stessa lunghezza e che ci siano k file di copertura nel sistema con cui iniziare, chiamati C0,...,Ck-1. Supponiamo anche che il primo file dell'utente sia F e che la sua password sia P.

Allora vengono selezionati quei Cj tali che il j-esimo bit di P abbia valore 1 e si applica

loro l'operazione di XOR bit per bit; il risultato viene ancora "xorato" con il file fornito dall'utente. Il risultato è che il file dell'utente F è ora l'or esclusivo di un sottoinsieme dei Cj selezionati dai bit non nulli di P. In altre parole, abbiamo:

Un utente potrà quindi nascondere un numero di file pari alle combinazioni possibili

dei file di copertura. Aggiungendo successivamente altri file richiede di risolvere insiemi di equazioni lineari per decidere quale combinazione dei Cj vada alterata.

-15-

Page 20: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Una proprietà importante di questo sistema è che si avrà una gerarchia di accessi lineari (cioè un utente che memorizza un file con un dato livello di sicurezza conosce le password di tutti i file memorizzati ai livelli inferiori) e quindi i file possono essere aggiunti in modo naturale senza disturbare i dati già nascosti in precedenza. L'algebra lineare mostra un possibile attacco al sistema: se la dimensione della password è k ed il nemico fosse a conoscenza di più di k bit del testo in chiaro, allora dopo aver ottenuto tutti i file casuali dal computer potrebbe scrivere k equazioni lineari nel k numero di bit sconosciuti della chiave.

Questo è la ragione per cui si è supposto in partenza che il nemico non conosca niente del testo in chiaro. Se questa assunzione vale, allora l'intera struttura appare vulnerabile solo ad un nemico che conosca la password.

In un sistema pratico però si potrebbe voler gestire dei files di lunghezze diverse, ed anche avere la protezione sulle directory oltre che sui singoli files. Tutto questo può essere accomodato nel sistema descritto qui sopra immagazzinando ogni directory in uno dei file Fj la cui lunghezza potrebbe essere fissata a (per esempio) 10 MB; 100 di queste directory potranno essere facilmente immesse in un tipico PC con 3.5 GB di hard-disk, lasciando comunque abbastanza spazio libero per il sistema operativo e per software e dati non protetti. In ogni caso questa costruzione comporta due problemi, uno maggiore ed uno minore. Quello minore è che potrebbe non essere sempre conveniente avere una gerarchia stretta di accessi lineari, mentre quello maggiore è che ci sarebbe una notevole penalizzazione nelle prestazioni: leggere o scrivere un file comporterebbe accedere ad una grande quantità di dati, soprattutto nel caso in cui si stia modificando l’intera directory.

A questo punto ci si potrebbe chiedere: perchè non viene semplicemente riempito l'intero hard-disk con bit casuali, e poi si scrive ciascun blocco di file ad un indirizzo assoluto del disco scelto in base a qualche processo pseudocasuale, come ad esempio criptando la locazione del blocco nel file usando come chiave una funzione hash del nome del file e della password della directory?

Il blocco potrebbe inoltre essere criptato usando una chiave derivata usando un

processo simile e così, assumendo di avere un blocco cifrato che il nemico non possa distinguere da una permutazione casuale, la presenza o l'assenza di un blocco a qualsiasi locazione non potrebbe essere distinguibile.

Il problema principale di un simile approccio è che, in base al teorema del compleanno di teoria delle probabilità, si comincerebbe ad avere "collisioni" (cioe' riscrittura di aree di dati gia' utilizzate) subito dopo aver scritto poco più di blocchi, dove N è il numero di blocchi presenti sul disco.

-16-

Page 21: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Esiste comunque una soluzione: scrivere il blocco in più di una locazione. Se, per

esempio, ogni blocco venisse scritto in due locazioni scelte pseudocasualmente, allora entrambi questi blocchi verrebbero sovrascritti da un terzo solo quando il numero dei blocchi totali sia approssimativamente nell'ordine O(N^2/3).

Si dovrebbe quindi aggiungere ridondanza ad ogni blocco prima di criptarlo, in modo

che il sistema possa identificare quando un blocco è stato sovrascritto e cercare l'altra locazione in cui esso era stato salvato. Continuando su questo ragionamento, si avrebbe che se venissero scritte 10 locazioni uguali, allora prima che tutte le locazioni contenenti un blocco siano accidentalmente sovrascritte potremmo scrivere O(N^9/10) blocchi, e così via [2]. Sono già presenti sul mercato dei pacchetti di software che realizzano un tentativo di file system steganografico, tra cui va ricordato Steganos, che oltre a fare quanto voluto mette a disposizione anche le normali tecniche steganografiche già descritte per S-Tools. Purtroppo non essendo freeware non è possibile sapere a quale costruzione si siano ispirati i programmatori per implementare il file system.

Esistono poi altre tecniche che sono state pensate allo scopo di nascondere

informazioni e riuscire a trasmetterle a terzi. I codici per la correzione d'errore per esempio, che normalmente sono utili per risolvere i problemi che possono insorgere dai sistemi di trasmissione, possono essere utilizzati per nascondere informazioni, ad esempio trasmettendo degli errori in piccole porzioni di bit.

Quando i bit vengono letti, i codici per la correzione d'errore eliminano

automaticamente l'errore ed un lettore casuale non sarà mai in grado di scoprire che il file originale conteneva degli errori; per ripristinare i dati corretti basta quindi utilizzare il codice per la correzione d'errore e salvare il messaggio che era stato nascosto in precedenza come errore. Una seconda tecnica può essere scrivere un programma che produca testo imitativo che appaia statisticamente simile al testo originale.

Si possono trasformare in modo automatico piccoli, innocui bit di dati abbellendoli

con dettagli profondi e fioriti, fino a che il significato venga ad assomigliare a qualcosa di completamente diverso. In questo modo, è possibile nascondere i dati. L'algoritmo di compressione di Huffman riesce ad approssimare la distribuzione statistica del testo ed a convertirla in steganografia digitale. Facendolo funzionare al contrario si possono prendere i dati normali ed adattarli a schemi elaborati.

Il tutto può essere poi notevolmente complicato generando grammatiche complesse che imitino il linguaggio umano ed in cui sia possibile nascondere dei dati.

-17-

Page 22: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Il risultato così ottenuto può essere spedito quindi a vari newsgroup di Internet;

individuare le differenze tra questo risultato ed i vari commenti che si trovano normalmente sui newsgroup è veramente difficile.

Un esempio pratico può essere il seguente: si desidera iniziare una conversazione con un amico all'altro capo del mondo. Invece di inviare i bit delle parole direttamente all'altra persona, il programma per la conversazione li codifica in un testo innocuo, come ad esempio la discussione di una partita di calcio della sera prima. Il programma può anche essere abbastanza intelligente da accedere ad un database on-line per ottenere una vera tabella dei risultati, in modo che la discussione sembri vera. Quando l'altra persona risponde, il suo programma di conversazione codifica la risposta con la stessa grammatica.

La vera conversazione potrebbe riguardare argomenti molto privati, ma apparirebbe

come una qualsiasi chiacchierata sul calcio per chiunque stia spiando dal circuito.

1.5 WATERMARKING

I Watermark sono un classico esempio dell'utilizzo di informazioni nascoste in un documento digitale.

Ma in che cosa consiste, in pratica, un watermark?

Diciamo che con il diffondersi dell'utilizzo di Internet, gli autori di documenti digitali (come possono essere ad esempio i file audio) hanno il problema di impedire che qualcuno si impossessi delle loro opere spacciandole per proprie. Molti autori però vogliono poter distribuire i propri lavori in modo sicuro, sapendo cioè che nessuno potrà mai contestare la paternità dell'opera. I watermark digitali quindi provvedono ad aggiungere delle informazioni dentro il documento in questione in modo tale che, nel caso ne venisse fatta una copia, il legittimo proprietario possa essere univocamente determinato.

Sempre nel caso delle immagini, un modo semplice per creare un watermark può essere quello di creare un secondo file audio che non conterrà altro che il nome del proprietario ripetuto molte volte. Questa tecnica non viene usata quindi per nascondere un messaggio generico, ma piuttosto per occultare informazioni che vogliamo siano presenti nel documento ma che non siano visibili ad un primo impatto. In definitiva quindi si può definire il watermark come uno o più marchi di copyright nascosti nel contenuto del messaggio.

La tecnica di Watermarking digitale affonda le proprie radici nel studi steganografici,

ma c’è da sottolineare una differenza di fondo tra steganografia e la tecnica di watermarking digitale.

-18-

Page 23: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Per la Steganografia il documento è soltanto una maschera quindi senza valore,

mentre quello che vale è il messaggio nascosto all’interno. Tale corrispondenza è invertita nel watermarking, ossia il messaggio nascosto non ha valore , visto che funge solo da protezione, mentre il documento è il vero portatore di valore.

Negli ultimi anni si è verificato un rapido aumento di interesse verso questa disciplina.

Infatti molte industrie produttrici di film e prodotti multimediali, si sono interessate alla possibilità di inserire info di paternità nei prodotti.

I Fingerprint invece sono dei marchi separati che vengono inseriti in diverse copie

dello stesso file per distribuirla a persone diverse. L'effetto è una specie di numero seriale: fa sì che il proprietario possa identificare le persone a cui ha distribuito il suo prodotto nel caso esse lo distribuiscano "gratuitamente" a terzi.

1.5.1 SCENARI APPLICATIVI E REQUISITI DEL WATERMARKING

Andiamo adesso a considerare alcuni ambiti di applicazione per la tecnologia del

watermark e le rispettive proprietà che deve soddisfare. Tutti gli esempi che prenderemo in esame, valgono, per ogni dato multimediale.

- Autenticazione ed integrità dei dati:

Quando ad esempio scattiamo delle foto con una camera digitale, per accettarsi che le immagini non siano state modificate oppure falsificate, un watermark viene incluso al momento dello scatto cosicché il suo corretto rilevamento al momento dell’uso indica che l’immagine non è stata alterata.

- Copie non autorizzate:

Per evitare la distribuzione illegale del proprio materiale, un proprietario di immagini inserisce un proprio marchio. Su Internet si possono individuare le immagini contenenti tale marchio, in modo da poter rilevare distribuzione di copie non autorizzate. Grazie alle providenziali librerie GD2, PHP ci permette di creare dinamicamente dei watermarks senza dover far ricorso ogni volta a programmi di grafica e fotoritocco. Questo fa intendere come si sta sviluppando questa tecnica. Il link all’articolo viene fornito nella sitografia a fine tesi.

-19-

Page 24: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Identificazione del distributore illegale:

Il venditore può voler conoscere chi distribuisce illegalmente le sue immagini. Allora viene incapsulato un watermark per ogni acquirente al momento della distribuzione, che identifica chi ha comprato l’immagine.

- Affermazione di paternità:

Possiamo inserire nell’immagine informazioni, come la sigla o il logo del proprietario, e rendere poi l’immagine marcata pubblica. Qualora il proprietario sospettasse che una delle sue immagini sia stata modificata e pubblicata senza autorizzazione, può estrarre il watermark dall’immagine e provarne la paternità.

- Protezione dei contenuti: Può nascere la necessità di mettere a disposizione dei dati solo per un determinato periodo di tempo. In queste situazioni il watermark può essere utilizzato per stabilire il periodo e le restrizioni d’uso che possono essere comunicate al device di visualizzazione o riproduzione del documento.

- Aggiunta di informazione:

I bit inseriti possono anche aggiungere varie informazioni. Ad esempio una canzone può annotare al suo interno il nome dell’emittente che l’ha trasmessa, l’orario in cui è stata trasmessa ed anche altre info generiche.

Esistono molte tecniche di watermarking. Ogni tecnica è progettata per uno specifico

campo di applicazione e non può essere utilizzata in altri ambiti. Molte però hanno posto la loro attenzione sulla protezione dei diritti d’autore dei dati digitali.

I parametri fondamentali per classificare le tecniche di watermarking digitale sono: - Percettibilità, un watermark percettibile include dati destinati ad essere visibili o

udibili. I criteri per rilevare un buon watermark percettibile sono che deve essere difficile rimuoverlo per una persona non autorizzata, deve resistere alle falsificazioni e garantire che il watermark sia realmente inserito dall’utente giusto.

- Impercettibilità, il watermark include dati destinati ad essere invisibili o non udibili.

-20-

Page 25: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Robustezza, il watermark resiste alle più comuni procedure di elaborazioni ad esempio per il caso dei segnali cropping e filtering. Un’applicazione usata per identificare la proprietà dei dati, ha bisogno di un watermark molto robusto.

- Fragilità, il watermark viene alterato facilmente da qualsiasi tentativo di

elaborazione. Viene utilizzato quando un’applicazione deve monitorare un eventuale tentativo di modifica dati.

Alcuni di questi parametri sono mutualmente esclusivi; ad esempio un watermark

non può essere percettibile e contemporaneamente, impercettibile. Una delle necessità basilari per il watermarking digitale è quella di mantenere la

qualità dei dati originali che non devono subire distorsioni quando, al loro interno, è inserito un watermark.

Trasparenza percettiva e robustezza sono i requisiti più comuni per le applicazioni di

questo tipo. Il primo requisito specifica che il watermark inserito non è individuabile in modo percettivo. Se gli esseri umani non possono fare la differenza tra i dati originali e i dati watermarkati, il watermark è impercettibile. Vengono condotti dei test per valutare questo requisito e viene richiesto per applicazioni nella protezione del diritto d’autore. Il secondo, invece, assicura che il watermark inserito non sarà distrutto dopo l’operazione di elaborazione del segnale o dell’immagine. Di conseguenza terzi non sono in grado di modificare i dati watermarkati per impedire la scoperta del watermark inserito. La robustezza è fondamentale per applicazioni con memorizzazione e trasmissione dati (operazioni di codifica per diminuire/aumentare il bit rate).

Altri requisiti quali, capacità di ritrovare dati senza i dati originali, il bit rate

dell’algoritmo di inserimento dei dati, la sicurezza e l’inequivocabile prova di proprietà, devono essere richiesti per specifiche applicazioni.

La capacità di ritrovare i dati senza i dati originali è richiesta quando abbiamo

applicazioni per la protezione del diritto d’autore, e nel rintracciare la copia. Il bit rate dell’algoritmo di inserimento dei dati, dipende fortemente dall’abilità

dell’algoritmo di watermarking di adattare la sua strategia di inserimento ai dati originali sottostanti. Viene utilizzata in quelle applicazioni per l’inserimento di più segnali audio in un video. La sicurezza, sotto intende la protezione delle info dall’uso non autorizzato attraverso una chiave segreta. Viene utilizzato questo requisito per applicazioni che richiedono la protezione del watermark.

-21-

Page 26: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

L’inequivocabile prova di proprietà, ossia andare a ricercare la proprietà esatta di un

certo dato. Attualmente le varie tecniche di watermarking non sono in grado di determinare univocamente la proprietà di un dato. Nel caso in cui verranno reclamate più proprietà avremmo il “problema di punto morto”. Esso è un requisito cruciale per la protezione dei diritti d’autore.

1.5.2 PROCEDURE DI WATERMARKING

Le operazioni di base che sono richieste nel watermarking digitale sono: - Inserimento di un Watermark, - Estrazione di un Watermark, - Individuazione di un Watermark. In generale, l’operazione di inserimento richiede: - Dati originali, - Un watermark, - Una chiave privata. L’output sarà formato dai dati watermarkati, che avranno lo stesso peso e risoluzione dell’Original data:

Fig.5 Inserimento Watermark

L’operazione di estrazione di un watermark richiede invece, l’utilizzo di una chiave pubblica da utilizzare insieme ai dati watermarkati, per individuare il watermark inserito.

-22-

Page 27: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig. 6 Estrazione Watermark

Per l’individuazione di un watermark sono necessari una chiave pubblica ed uno specifico ID di un watermark da utilizzare insieme ai dati watermarkati per determinare se il Watermark è corretto.

Fig.7 Detenzione Watermark

Occorre in questo caso avere una funzione di vero somiglianza, che possa far si di

rintracciare il watermark.

W’(watermark rilevato) = IW – I ; Simil(W, W’) < d -- W’ = W Simil = funzione di verosimiglianza

-23-

Page 28: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.8 Metodi per il rilevamento del watermark

Per il rilevamento abbiamo 2 metodi, uno pubblico e privato (che vengono detti anche ciechi e non ciechi):

- Quello pubblico prevede D(IW)=W’, - Quello privato, invece, D(IW ,I)=W’.

1.6 LA STEGOANALISI

Come la crittoanalisi per la crittografia, la stegoanalisi è definita come la scienza, nonché l’arte, di rompere la sicurezza di un sistema steganografico. Dato che lo scopo della steganografia è quello di nascondere l’esistenza di un messaggio segreto, un attacco con successo ad uno stegosistema consiste nello scoprire che un determinato file contiene dati nascosti anche senza conoscerne il proprio significato [1] .

Lo stegosistema, ossia il complesso dei sistemi per intercettare ed analizzare le

informazione steganografiche, prevede situazioni di attacchi simili agli attacchi crittografici. C’è però una distinzione da fare tra attacchi passivi e attacchi attivi: mentre nel primo tipo gli attaccanti riescono solo ad intercettare i dati, nel secondo riescono anche a manipolarli.

Quali sono gli attacchi possibili alla steganografia?

Diciamo che possiamo distinguere i seguenti casi:

1. Solo steganografico 2. Copertura conosciuta

3. Testo conosciuto 4. Steganografia usata

5. Messaggio scelto

-24-

Page 29: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Nell'attacco solo steganografico abbiamo a disposizione solo il messaggio steganografato S per le nostre analisi. Questo è probabilmente il caso peggiore che ci si possa presentare. Se invece siamo a conoscenza sia di C sia di S, possiamo parlare di attacco con copertura conosciuta. La steganalisi può sfruttare anche il testo conosciuto quando il testo nascosto viene rivelato qualche tempo dopo, e quindi l'attaccante può cercare di analizzare il messaggio S per attacchi futuri. Anche conoscendo il testo segreto E può essere comunque molto difficile risalire al metodo steganografico usato, e quindi questo caso può essere paragonato al primo caso solo steganografico. L'attacco a steganografia usata è quando lo steganalista conosce l'algoritmo usato per nascondere il testo.

Infine l'attacco del messaggio scelto si ha quando lo stegoanalista genera il messaggio

steganografato S usando qualche algoritmo e partendo da un testo segreto conosciuto. Lo scopo di questo attacco è determinare parti corrispondenti nel messaggio steganografato S che possano rivelare quale algoritmo o programma è stato usato.

Il testo segreto può essere nascosto in vari tipi di file, e i più usati al giorno d'oggi sono le immagini e i file audio o video.

La stegoanalisi si riferisce, dunque, all’evidenziazione della presenza di informazione nascoste in un immagine o in altro file non sempre disponibile a chi la analizza. Per quanto riguarda le tecniche dobbiamo dire che la stegoanalisi sotto intende 2 principali tecniche:

- Visual analysis, che cerca di rilevare la presenza di comunicazioni segrete

decomponendo l’immagine nei suoi livelli di bit. - Statistical analysis, che è in grado di rilevare se un’immagine è stata modificata

testando se le sue proprietà statistiche deviano dalla norma, Può identificare minuscole alterazioni nel comportamento statistico causate dall’andamento steganografico [1].

A livello generale, la Stegoanalisi comprenderà questi seguenti passi ordinati dal

livello di successo realizzato durante il successo: - Identificazione di siti web e computer che devono essere analizzati. - Valorizzazione degli algoritmi che possono distinguere tra stego file e cover file. - Identificazione dei meccanismi inclusi (es LSB). - Determinare il SW steganografico utilizzato (es. S-Tools). - Cercare la chiave Stego K ed estrarre le info incluse. - Decifrare i dati estratti ed ottenere il messaggio segreto (crittoanalisi).

-25-

Page 30: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

La complessità della ricerca della chiave di Stego sarà commisurata in:

Complexity ~ |K|×|E|

Dove K ed E, sono gli insiemi di tutte le chiavi stego e di criptaggio. Quindi forzare un sistema metà crittografato e metà steganografato, dipenderà principalmente dal numero di queste chiavi.

Dopo l’attacco dell’11 settembre ed a seguito delle ventilate ipotesi di utilizzo della

steganografia da parte dei gruppi terroristici, sono stati in molti a dedicarsi alla ricerca di immagini o altri file steganografati nel web. Un esempio ne è Niels Provos, guru dell’hacking, che ha sviluppato un SW con il nome di StegDetect con il compito di setacciare 2 milioni di immagini su ebay (sito indicato da US Today come più probamente utilizzato dai terroristi). Ad oggi tale Sw non ha prodotto nessun risultato.

E’ necessario a questo punto ritornare al watermarking, individuando alcune

debolezze dei marchi e quindi alcuni modi che potrebbero essere utilizzati per renderli inutilizzabili. Una pratica comune è quella di distribuire il watermark per tutta l’immagine, impedendo in questo modo eventuali attacchi basati sul taglio di una sezione dell’immagine di partenza. Più piccolo è il watermark e più è facile che venga manipolato. Assumiamo quindi che la stego-immagine S sia composta da una parte visibile C e una invisibile E, e quindi S = C + E. Qualsiasi manipolazione a S porterà quindi ad una modifica di C e di E. Gli attacchi ai watermark non saranno per forza dei tentativi che puntano alla rimozione, ma anche più semplicemente a renderli illeggibili. L’attaccante potrà quindi cercare di aggiungere ulteriori marchi all’immagine cercando di coprire quelli esistenti. Ovviamente, se dovessero risultare presenti più di un marchio sulla stessa immagine, avrà la precedenza il più vecchio, essendo stato inserito prima di tutti gli altri.

Per evitare attacchi di questo tipo bisogna ricordarsi ad esempio di inserire watermark dai colori molto contrastanti, in modo da essere sicuri che non possano diventare illeggibili se sottoposti a filtri particolari o a trasformate di vario tipo. Anche la dimensione è importante: non deve essere troppo grande per evitare che se ne possa perdere una parte, e deve essere ripetuta per tutta l’estensione dell’immagine per evitare, come abbiamo già detto sopra, che si possa asportare quella parte di immagine che contiene il marchio. Questo tipo di discorso può essere ampliando anche ai file audio, che tratteremo nello specifico nel prossimo capitolo. Dove verranno presi in considerazione, anche elementi della stegoanalisi riguardanti i DRM e il nuovo brevetto proposto dalla Microsoft “Stealthy Audio Watermarking”.

-26-

Page 31: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 2:

“Watermarking Audio (Compressioni)”

Page 32: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 2

2.WATERMARKING AUDIO

Ogni giorno l’ammontare degli audio registrati e delle possibilità di distribuzione di essi (Internet, CD Registrabili, P2P) si sta innalzando. Questi fattori portano ad un incremento dell’attività illecita di propagazione, copia e registrazione senza tener conto del copyright e delle proprietà intellettuali dei proprietari legali. Un altro fattore concernente riguarda il tracciamento del materiale audio che può essere radiodiffuso senza l’utilizzo di ascoltatori umani o complicati strumenti di riconoscimento audio. Le tecniche di Audio Watermarking promettono di ovviare a tali situazioni. Come si è denotato più volte nello scorso capitolo, l’idea principale è quella di includere uno speciale “code” o informazione all’interno del segnale trasmesso. Questo “code” deve essere trasparente all’user (impercettibilità) e resistente ad eventuali attacchi di vario tipo (visti nel paragrafo sulla Stegoanalisi).

Nei segnali audio, le caratteristiche (viste nel primo capitolo in generale) desiderabili

possono essere espresse in:

- Non percettibile (L’informazione dell’audio deve apparire lo stesso per la media degli ascoltatori prima e dopo che il code è stato inciso).

- Resistente alla degradazione dovuta alla presentazione in un analogo canale di trasmissione (Tv, radio e tape recording).

- Resistente alla degradazione dovuta all’utilizzo di media audio non compressi (WAV, CD).

- Resistente alla rimozione attraverso l’uso di sub-band coders o modelli psico-acustici (MPEG, Atrac).

L’algoritmo proposto genera un watermark digitale (ossia un bit stream) che è

forgiato spettralmente e incluso nel segnale audio. L’espansione di spettro è una tecnica utilizzata nelle telecomunicazioni in cui il segnale viene trasmesso su una banda di frequenze che è considerevolmente più ampia di quella dell'informazione contenuta nel segnale stesso (v. trasmissioni in banda larga). In base a quanto detto, il seguente capitolo fornirà prima di tutto una risposta alla domanda “perché utilizziamo i file audio come contenitore”, poi ripercorrerà matematicamente il percorso per arrivare a fornire concetti molto complessi, quali quelli di spettro di un segnale e modello-psico acustico (necessari per comprendere i programmi steganografici). Quindi affronteremo i vari teoremi sul campionamento, il sistema di registrazione Pulse Code Modulation (passaggio analogico-digitale), analizzeremo gli effetti di mascheramento per l’inserimento dati con relative tecniche.

-28-

Page 33: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

In ultimo verrà trattato a livello semplicemente teorico l’utilizzo di DRM e dello

Stealthy Audio Watermarking. Il capitolo ha l’onere di fornire le basi matematiche e teoriche, per comprendere al meglio il funzionamento del programma di riferimento esposto nel capitolo 3 e per scrivere in maniera appropriata e ordinata function in ambiente Matlab .

2.1 “Perché utilizziamo i file audio come contenitore?”

Si è scelto di utilizzare file audio come contenitore, poiché si è notato che i suoni sono un miglior mezzo steganografico rispetto alle immagini. Questa assunzione è veritiera e può partire da un confronto a basso livello tra 2 tipi di file non compressi file bitmap e file wav.

Un immagine, dal punto di vista digitale, non è altro che una matrice MxN di piccoli

punti colorati detti pixel. Un file grafico di tipo bitmap a 24 bit è codificato in modalità RGB. Questo significa che ogni singolo pixel viene codificato in base a 3 byte in sequenza: una per il blu, uno per il rosso e uno per il verde (colori primari).

Da questo si può assumere che la grandezza di un file bitmap è data da M x N x 3.

Facendo qualche calcolo, per inserire un byte del messaggio segreto, occorrono 8 byte del messaggio contenitore. Da qui possiamo concludere che, la grandezza del messaggio segreto contenuto in un file bitmap 800 X 540, deve essere (800 X 540 X 3)/8.

Un discorso analogo vale per i suoni campionati. Un file audio WAV di tipo stereo, con

frequenza di campionamento 44100 Hz, a 16 bits e di 7 secondi occuperà: 44100 X 2 X 16 X 7.

Nelle codifiche a 16-bit, addirittura é possibile cambiare i primi 8 bit di destra senza

cambiare significativamente la qualità del suono campionato. E' così possibile fare una stima della bontà del mezzo steganografico (cioé delle immagini e dei suoni). Se infatti N é il numero di bit di una unità staganografica (ad esempio, 8 bit nel caso delle immagini e 16 nel caso dei suoni) ed M il numero dei bit steganografati (2 nel caso delle immagini e 8 nel caso dei suoni), la seguente formula ci fornisce una stima della bontà del mezzo steganografico :

b = ( 2^N / 2^M ) * ( M / N)

Tale formula associa il valore b = 16 per le immagini e b = 128 per i suoni. Come

vediamo il suono é un mezzo steganograficamente migliore delle immagini [3].

-29-

Page 34: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

In poche parole si riesce ad intervenire meglio sugli audio poiché tra i sensi dell’uomo

l’udito è sicuramente meno sviluppato della vista (o presenta alcune lacune), ed è stato studiato sicuramente meglio.

2.2 SEGNALI AUDIO ED I FILE AUDIO

Un segnale elettrico viene definito analogico quando varia in modo continuo nel

tempo e nelle ampiezze. Esso si ottiene per trasduzione a partire da un segnale fisico e la sua forma, subito

dopo la trasduzione, è analoga a quella del segnale di partenza. Un segnale analogico può poi essere manipolato per effettuarne la trasmissione in modo efficiente. Ad esempio, la voce che si trasmette come variazioni di pressione, viene trasformata in segnale elettrico da un microfono, che modifica la forma di energia (acustica => elettrica) ma, idealmente, non modifica la forma del segnale.

Nei sistemi analogici quindi si opera direttamente sul segnale analogico in ingresso,

che può venire opportunamente manipolato prima di effettuarne la trasmissione e dopo la sua ricezione (ad esempio può subire una modulazione nel caso di trasmissione via radio, un’amplificazione ecc.).

Affinché i segnali analogici (segnali audio) possano essere elaborati da un calcolatore

digitale, è necessario che essi vengano convertiti in segnali digitali; i dati elaborati verranno poi eventualmente riconvertiti in forma analogica per essere utilizzati. Nel nostro caso il segnale audio verrà convertito in segnale digitale, subirà il watermarking, verrà memorizzato in un file, ed infine, ogni volta che ne ascolteremo il contenuto, implicitamente verrà effettuata una conversione digitale analogica. Lo schema sotto ci propone lo scenario appena descritto:

Fig.9 Schema Passaggio analogico digitale

-30-

Page 35: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Come risultato dei processi di manipolazione di un segnale analogico, in trasmissione

e in ricezione, un sistema analogico dovrebbe fornire in uscita un segnale avente forma il più possibile simile a quella del segnale in ingresso. Purtroppo durante la trasmissione di un segnale intervengono distorsioni e rumore, che tendono a modificare la forma del segnale degradandone il contenuto informativo.

In ambito analogico il parametro fondamentale col quale si valuta la qualità del

segnale ricevuto è il rapporto S / N (Signal-to-Noise ratio):

Psegnale è la potenza del segnale utile e Prumore è la potenza totale del rumore presente nel sistema. Sono espresse in Watt. Se SNR è basso allora sarà difficoltosa la ricezione del segnale.

Da un punto di vista trasmissivo, un segnale digitale è costituito da una sequenza di

impulsi elettrici, opportunamente temporizzati, i quali possono assumere solo un numero limitato di ampiezze (ad esempio due nel caso di codice binario).

La temporizzazione viene fornita da un "clock", il quale è essenzialmente un segnale

ad onda quadra avente periodo pari alla durata di un bit. Viene così utilizzato un clock in trasmissione, il cui fronte di salita, ad esempio, determina l'inizio di ogni bit, ed un clock in ricezione, il quale fornisce gli istanti ottimali per "leggere" il segnale in arrivo e recuperare i bit che ne costituiscono il contenuto informativo.

I clock di trasmissione e ricezione devono essere opportunamente sincronizzati, in

modo tale che la lettura dei bit avvenga sempre negli istanti ottimali (tipicamente a metà del tempo di bit, dove sono minime le distorsioni). Una volta acquisita la sincronizzazione tra trasmettitore e ricevitore, l'interpretazione dei bit ricevuti può essere effettuata confrontando, nell'istante di decisione (o lettura), l'ampiezza del segnale ricevuto con una soglia di riferimento (posta tipicamente a metà ampiezza). Se il segnale supera la soglia si considera ricevuto un 1, se il segnale è sotto la soglia si considera ricevuto uno 0.

Operando in questo modo non è tanto importante conservare la forma esatta del

segnale in ingresso al sistema quanto evitare che rumore e distorsioni modifichino talmente la forma di un impulso da provocare un errato riconoscimento del bit trasmesso.

Perciò in un sistema digitale il parametro con il quale si valuta la qualità del segnale

ricevuto è il Bit Error Rate (BER), il quale viene definito nel seguente modo:

-31-

Page 36: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

N bit errati / N totale bit messi

Per prevedere e correggere l'errore, dove questo non è assolutamente tollerato (come Internet) ai normali pacchetti di dati vengono aggiunti dei bit di controllo d'errore, che consentono al ricevente di riconoscere un'informazione errata ed eventualmente ripetere la richiesta.

Fig.10 Differenza segnale analogico e digitale

Un sistema di comunicazione digitale richiede che i segnali analogici da trasmettere

vengano convertiti in segnali numerici. La prima tecnica di codifica implementata nelle reti telefoniche è stata la tecnica PCM (Pulse Code Modulation), la quale ha così condizionato lo sviluppo dei sistemi di trasmissione numerici. Infatti, in origine, i canali trasmissivi digitali della rete telefonica sono stati realizzati per trasmettere fonia digitalizzata secondo la tecnica PCM. Un singolo sistema di trasmissione digitale, infatti, mette a disposizione un certo numero di canali PCM, multiplati secondo la tecnica TDM (Time Division Multiplexing). In fase di trasmissione abbiamo 4 fasi:

- Filtraggio del segnale, Ha lo scopo di definire con precisione la frequenza massima

di segnale, in modo tale da effettuare un campionamento efficiente.

- Campionamento, Questa operazione consiste nel prelevare ad intervalli di tempo regolari, quindi con una certa frequenza di campionamento (fc) dei valori del segnale (o campioni). Questo risultato viene ottenuto facendo passare il segnale analogico in ingresso attraverso un interruttore elettronico il quale, pilotato da un opportuno clock, si apre e si chiude ad intervalli di tempo regolari, effettuando così il campionamento del segnale. Se la frequenza di campionamento è sufficientemente elevata, cioè se si forniscono in ricezione un numero adeguato di campioni al secondo, è possibile ricostruire da questi ultimi il segnale originario senza introdurre alcuna distorsione. Con il campionamento operiamo una discretizzazione nel tempo.

-32-

Page 37: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Quantizzazione, Ogni singolo campione deve essere codificato con un numero adeguato di bit. I numeri di bit di codifica deve consentire di coprire l’intera dinamica del segnale vocale (la dinamica è in sostanza la differenza tra il livello più alto ed il livello più basso dei segnali che si possono presentare in ingresso al codificatore). In altri termini, il codificatore deve essere in grado di codificare sia i segnali più deboli sia quelli più forti che possono essere generati dagli utenti nel corso delle loro conversazioni. In definitiva, il processo di codifica comporta una approssimazione più o meno grande del campione in ingresso a seconda del numero di bit, n, che vengono utilizzati per la sua codifica. In ricezione, infatti, da una sequenza di codice di n bit è possibile ricostruire solo uno tra 2n valori di ampiezza (campioni) diversi. Questo effetto va sotto il nome di quantizzazione. Il processo di codifica e decodifica introduce normalmente un errore sui campioni ricostruiti che è noto come errore di quantizzazione, il quale causa una distorsione del segnale di uscita. Per rendere l'errore di quantizzazione accettabile anche per i campioni piccoli (livelli bassi della dinamica) è necessario codificare ogni campione con un numero di bit, n, pari almeno a:

n =12 [bit/campione]

Con la quantizzazione operiamo realizziamo una discretizzazione in ampiezza. Il quantizzatore arrotonda il valore di ampiezza di un dato campione, al valore più vicino tra quelli contenuti in un insieme finito Q di valori discreti (livelli di quantizzazione).

Fig. 11 ∆= passo di quantizzazione

-33-

Page 38: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Supponendo che i livelli di quantizzazione (tratti orizzontali del grafico) siano equispaziati tra loro da un delta. Allora possiamo calcolare l’errore di quantizzazione:

εk <= ∆/2 per ogni K

Minore è ∆, minore sarà l’errore ma aumenteranno il numero di livelli.

- Compressione, è la tecnica utilizzata in ambito PCM per ridurre la velocità di emissione, rispetto a quella che si avrebbe con una codifica a 12 bit. Essa consiste essenzialmente nel tenere in conto, quando si produce il codice corrispondente ad un campione, se il campione stesso è piccolo o grande. Infatti si può fare la seguente osservazione:

· campioni grandi possono sopportare errori più grandi; · campioni piccoli devono essere codificati con piccoli errori, pari, al massimo, a quelli che introdurrebbe una codifica a 12 bit. campioni subiscono così una quantizzazione non lineare. Vengono riprodotti con maggiore fedeltà i campioni più piccoli (per i quali si devono introdurre piccoli errori), mentre si ammettono errori maggiori per i campioni più grandi, i quali li possono tollerare senza grossi problemi. Si riesce così a coprire la dinamica del segnale vocale e a non avere apprezzabili diminuzioni della qualità del segnale ricostruito, in ricezione, anche riducendo il numero di bit con cui si codifica ogni campione a:

n = 8 bit/campione.

La fase di trasmissione può essere attinta in Matlab, attraverso un banale ciclo for che riesca a popolare un certo vettore. Il ciclo for dovrà iterare fino a quando non si giungerà alla fine dei dati trasmessi dal trasduttore.

In fase di ricezione abbiamo 3 fasi, invece: - Espansione, questa operazione traduce il codice a 8 bit (con quantizzazione non

uniforme) in un codice a 12 bit (con quantizzazione uniforme). Ovviamente l'errore di quantizzazione che si introduce risulta comunque quello relativo alla codifica non uniforme a 8 bit.

- Decodifica, Questa operazione consiste nel ricostruire i singoli campioni a partire dalle sequenze di codice ricevute. In uscita dal decodificatore si ottiene così un segnale campionato e quantizzato.

-34-

Page 39: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Filtraggio di ricostruzione, A partire dal segnale campionato, ottenuto dalla decodifica, è possibile ricostruire il segnale analogico utilizzando un filtro passa-basso, come indicato dal teorema del campionamento (spiegato nel prossimo paragrafo).

Fig.12 Campionamento e quantizzazione di un segnale a 4 bit

2.2.1 CAMPIONAMENTO

Concetto implicito che ne deriva dalla conversione analogica digitale è quello del campionamento del segnale in vari istanti successivi. Infatti la conversione consiste nel prelevamento di un campione del segnale ad un dato istante e nella determinazione del corrispondente valore digitale, che resterà fisso finché non verrà prelevato un altro campione per una nuova conversione.

Come sappiamo un segnale periodico non è altro che una funzione sinusoidale cos(2πkFt) e sin(2πkFt), combinazione lineare , ed è caratterizzata da:

- Ampiezza (la differenza fra il valore massimo ed il valore minimo misurata in dB). - Periodo (la quantità di tempo t trascorsa la quale funzione si ripete). - Frequenza (l’inverso del periodo F =1/t, misurata in cicli al secondo Hz). La frequenza con cui il segnale viene prelevato è detta frequenza di campionamento;

essa è una variabile d’importanza fondamentale in riferimento al contenuto informativo del segnale campionato ed alle possibilità di ricostruire fedelmente il segnale analogico originario.

-35-

Page 40: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Un importante teorema, la cui conoscenza intuitiva è necessaria per comprendere

l’importanza della frequenza di campionamento è dato dalla serie di Fourier: “Qualsiasi onda può essere considerata come la somma di un insieme di onde, di cui la

prima è detta fondamentale, e le onde successive prendono il nome di armoniche”. Lo scopo per cui sono state introdotte le serie di Fourier è quello di descrivere una

qualunque funzione periodica (reale di variabile reale) mediante funzioni periodiche elementari, ovvero seni e coseni.

A tale vicenda si è dedicata una function in Matlab, serieFourier.m, che a partire da

un segnale periodico creato, plotta la forma d’onda (quadra) della seguente funzione:

Dal Command Window di MatLab potremmo richiamare la funzione che prenderà

come parametro (che sarebbe la funzione da plottare) tra quelli suggeriti nei case degli switch. Il codice è presente nell’appendice A.

>> serieFourier('fondamentale') >> serieFourier('risultante')

-36-

Page 41: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.13 Serie di Fourier

Avremmo, comunque, anche la possibilità di plottare le forme d’onda armoniche minori ( 3 e 7 che avranno minore ampiezza) come da codice e anche, potuto approfondire un maggior numero di armoniche (più di 13). L’onda risultante in questo modo approssimerebbe al meglio un’onda quadra.

Fourier (matematico francese dell’800) dimostrò che una funzione g(t), definita in un intervallo T, può essere espressa come una somma di un numero infinito di funzioni sinusoidali:

Dove f=1/T, ossia la frequenza fondamentale, sono le ampiezze dell’ennesime

armoniche. Per l’esempio visto prima nel codice MatLab le ampiezze sono definite da 1/n, quindi da 1/3 passiamo a 1/5 etc.. Questi valori sono calcolabili come opportuni integrali di g(t) in t .

E’ necessario a questo punto citare il teorema del campionamento di Shannon:

-37-

Page 42: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

“ Un segnale a banda limitata da può essere univocamente ricostruito dai suoi

campioni presi a frequenza , se ”.

(Fonte Wikipedia.it)

In pratica il teorema del campionamento pone un vincolo per la progettazione di apparati di conversione analogico-digitale: se si ha a disposizione un campionatore che lavora a frequenza Fs, è necessario mandargli in ingresso un segnale a banda limitata da Fs/2. In generale un segnale analogico non è limitato in frequenza, ma dovrà essere filtrato per eliminare le componenti di frequenza maggiore di Fs/2, a tale scopo si usa un filtro anti-alias (filtro passa-basso). Dove passeranno le pulsazioni minori di 0.1 rad/s.

In conclusione, il segnale digitale consiste di una sequenza di valori binari ognuno dei

quali rappresenta il valore quantizzato del corrispondente campione audio. Tale sequenza, memorizzata su un dispositivo di memoria di massa, costituirà il segnale audio relativo al segnale convertito.

2.3 IL FORMATO DEI FILE AUDIO WAVE PCM

WAV (o WAVE), contrazione di WAVEform audio format (formato audio per la forma d'onda) è un formato audio sviluppato da Microsoft e IBM per personal computer IBM compatibile. Il formato WAV è un sottoinsieme di Microsoft’s RIFF, specifica per l’immagazzinamento dei file multimediali. Un RIFF file comincia con un file header seguito da una sequenza di dati (relativi al file). Un file WAV è spesso un solo un RIFF file con un singolo WAVE chunk (pezzo) che consiste di 2 sottopezzi: il primo (“fmt”) per la specificazione del formato del file e l’altro (“data”) che contiene i dati veri e propri dei file.

Essendo basato su RIFF il formato WAV supporta varie modalità di

immagazzinamento dei dati ma nella pratica il più diffuso è il metodo PCM. Questo è il formato standard utilizzato da Windows per salvare i dati audio grezzi. Si pensi al formato dei file audio, che vengono utilizzati per attuare notifiche audio (tipo accensione e spegnimento del sistema operativo).

Il PCM provvede a salvare i dati audio senza nessun tipo di compressione, la forma

d'onda viene memorizzata direttamente. Quindi i file risultanti sono di elevate dimensioni, ma non richiedono elevata potenza di calcolo per essere riprodotti, ed essendo la codifica lossless, viene spesso utilizzata dagli utenti professionali per memorizzare l'audio.

-38-

Page 43: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Molti programmi supportano questo formato, dato che è molto diffuso ma non

semplice da manipolare date le sue dimensioni molto elevate di byte (Wikipedia.it). La struttura di un file Wave è molto modulare e permette di incapsulare flussi audio codificati in diversi modi con opportuni Codec.

Come vediamo dalla struttura i primi 12 bytes (RIFF chunks) sono dedicati interamente all’header. Dove verrano proposti solo bytes riguardanti la composizione delle parole RIFF e WAVE, e anche la grandezza dei chunk. Successivamente vedremo che il programma preso in considerazione da noi per il watermarking audio (ma non solo esso), si occuperà di cambiare alcuni bits in questo pezzo preliminare del file sorgente [15].

Il sotto-chunk “fmt”, invece, occupa la bellezza di 22 bytes. Qui verranno inserite

informazioni dettagliate sul file, quali frequenza di campionamento, numero dei canali (file mono o stereo), il numero di bits per campione (8 oppure 16), e se ci sono eventuali forme di compressione nel file (con 1 si indica la quantizzazione lineare di PCM). Nonché la solita etichettatura iniziale, per definire l’inizio del sotto chunk con fmt.

-39-

Page 44: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

MatLab consente in maniera robusta, di ricercare le informazioni sul formato del file

audio WAV, attraverso una serie di comandi dopo la lettura del file:

>> [y,Fs,bits,fmt]=wavread('camp96.wav') >> fmt fmt = fmt: [1x1 struct] >> fmt.fmt ans = wFormatTag: 1 nChannels: 2 nSamplesPerSec: 22050 nAvgBytesPerSec: 88200 nBlockAlign: 4 nBitsPerSample: 16 Come si può osservare, MatLab fornisce la possibilità di ottenere immediatamente le

informazioni contenute nel fmt chunk. Per la cronaca il parametro Fs è la frequenza di campionamento.

L’altro sotto – chunk (data chunk) contiene, invece, la grandezza dei dati del nostro

file audio e i dati relativi al file stesso. Per calcolare, in generale, il peso di un file di questo tipo basta calcolare:

(N campioni * N canali * BitsPerCampione)/8

I BitsPerCampione e il N canali possono essere attinti in MatLab, proprio attraverso le info presenti nell’fmt chunk. Mentre per calcolare N Campioni avremmo bisogno di calcolare la lunghezza del vettore colonna y (dati del file, che può essere una matrice se il file fosse stereo). Nel caso del nostro file audio:

>> Ncampioni=length(y) Il risultato sarà offerto in bits e per questo occorrerà trasformarlo in Kb o Mb se

necessario. Per calcolare, invece, la durata del file basterà dividere al numero dei campioni trovati la frequenza di campionamento.

-40-

Page 45: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Si è potuto notare che il vettore y ospita solo i dati relativi al file audio, non

l’intestazione infatti proponendo in MatLab: >> tempo=NCampioni/Fs tempo = 6.5170 >> Fs*tempo*2*16/8 ans = 574800 La dimensione del vettore (o matrice) y è quindi 574800 byte, ma andando a vedere

le proprietà del file ci accorgiamo che le dimensioni sono 574844. Questa differenza di 44 byte è data dalle intestazioni viste prima.

2.4 EFFETTO MASCHERAMENTO: MODELLI PSICOACUSTICI

Il problema principale di tutte le inclusioni di dati e degli schemi di watermarking è quello di inserire i dati nell’audio digitale senza deteriorare la sua qualità percettiva.

In molte applicazioni non basta solo includere dati, ma è di totale importanza anche

saperli recuperare anche quando un segnale sorgente subisce delle modiche, che possono essere compressioni e trasformazione di formato.

Nel caso dei file audio, le tecniche di inserimento di informazione si servono del

sistema uditivo umano, più specificamente delle sue limitazioni. I segnali audio devono, infatti, avere un livello minimo di intensità prima che l’orecchio umano possa percepirli. Questo livello minimo dipende dalle caratteristiche temporali e di frequenza del sistema uditivo.

Da quanto detto, si può far riferimento al mascheramento, se due suoni vengono

prodotti simultaneamente e uno è mascherato dall'altro, si parla di mascheramento simultaneo. Un suono di frequenza prossima a quella del suono più forte è mascherato più facilmente rispetto a uno di frequenza molto diversa. Per questo motivo, il mascheramento simultaneo è anche chiamato "mascheramento di frequenza".

-41-

Page 46: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Allo stesso modo, un suono leggero emesso appena dopo la fine del suono alto è mascherato da quest'ultimo. Persino un suono leggero appena prima di un suono alto può essere mascherato da un suono alto. Questi due effetti sono chiamati rispettivamente anticipo e ritardo del temporal-masking (mascheramento temporale).

Lo strumento, che viene utilizzato per descrivere in che modo i suoni vengono

percepiti con lo stesso ‘volume’ sonoro al cambiare della loro frequenza (o altezza) e intensità, è la curva isofona. Le curve isofone rappresentano, quindi, l'intensità necessaria alle diverse frequenze per ottenere una sensazione sonora in dB corrispondente a quella che si ottiene dalla frequenza di riferimento. Questa curva nasce da una ricerca statistica effettuata su una serie di individui.

Per tale vicenda si è creato un file matlab, curva_isofonica.m, che restituisce il grafico

della curva isofonica in quiete (ATH) utilizzata nei modelli psico-acustici forniti da MPEG , evidenziando anche la soglia di dolore (all’incirca 140 dB).

Fig.14 Curva Isofonica

La sensibilità dell’orecchio umano è alta per valori di frequenza tra 2,5 e 5KHz

(caratteristiche del parlato), e diminuisce con l’allontanarsi da tale intervallo di frequenze. Tutti i suoni al di sotto della soglia in quiete non saranno percepiti.

-42-

Page 47: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Ritornando ai concetti visti prima possiamo avere questa situazione di

mascheramento temporale(avviene 5-20 msec prima del segnale più forte):

Fig.15 Esempio Mascheramento

La curva soglia mascherante rappresenta la variazione di sensibilità dell’orecchio

umano sottoposto ad un segnale di altissima intensità. Il segnale mascherato, pur essendo percettibile in condizioni normali poiché si trova al di sopra della soglia di udibilità, diventa non percettibile per la presenza dell’altro segnale.

La soglia di mascheramento di un segnale mascherante dipende dalla frequenza, dal

livello di pressione del suono (SPL) e dalle caratteristiche, come il tono ed il rumore, sia del segnale mascherante che del segnale mascherato. Tali effetti di mascheramento citati hanno varie applicazioni, la più importante però e quella che si riferisce all’algoritmo di compressione MPEG. Tale algoritmo, va ad individuare nel segnale audio tutti i segnali di livello alto ed elimina quelli immediatamente adiacenti di frequenza leggermente inferiore.

In termini di watermarking, affinché il segnale watermarkato sia indistinguibile da

quello originario, il segnale watermark viene inserito in prossimità di segnali di livello alto, in modo tale che esso venga mascherato da questi ultimi. Questa tecnica ha però delle limitazioni dovute ad un’ulteriore compressione successiva, per questo altri metodi di watermarking consistono nell’inserire un segnale watermark la cui frequenza sia al di fuori dell’intervallo di frequenze udibili dall’orecchio umano(> 100 Hz o < 20KHz).

-43-

Page 48: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

A questo punto è necessario definire il modello psico-acustico. Esso conferisce qualità alla compressione audio di tipo "lossy" indicando quale parte del segnale audio da comprimere può essere rimossa o pesantemente compressa senza generare problemi, cioè senza perdite significative nella qualità del suono. Questo spiega, ad esempio, perché un secco battito delle palme delle mani fra loro possa risultare tremendamente rumoroso in una tranquilla biblioteca, ma non si riesca quasi a sentire nel traffico automobilistico diurno di una grande città.

Sembra che questo dia poco vantaggio nell'ambito generale del problema della

compressione dati, ma le analisi psico-acustiche portano ad ottenere file compressi che sono anche 10 o 12 volte più piccoli degli originali high quality, il tutto con una minima perdita percepibile di qualità. Un simile tasso di compressione è oggi la caratteristica di quasi tutti i formati di compressione audio, fra i quali ricordiamo l'MP3, Ogg Vorbis.

Fig.16 Modello Psicoacustico [19]

-44-

Page 49: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Prima della FFT occorre analizzare la scala di Bark. Test percettivi ed indagini

psicofisiche hanno definito meglio l’importanza uditiva delle diverse formanti e della distanza tra formanti adiacenti come correlato di specifiche caratteristiche fonetiche. L’introduzione di scale di misura diverse dall’Hz ha comportato notevoli vantaggi in particolare, la scala a bande critiche misurata in bark, che continua ad avere continua accettazione dai fonetisti. La scala uditiva percettiva in bark presenta precisi correlati fisiologici nel sistema uditivo umano, dal momento che la larghezza di banda critica aumenta linearmente fino a 500Hz e poi approssimativamente in scala logaritmica. Per la trasformazione di frequenze da Hz in bark si è utilizzata la formula proposta nel 1980 da Zwicker- Terhardt:

Bark = 13*arcTg(0.76*fn/1kHz)+3.5*arcTg(fn/7.5kHz)2

Dove fn corrisponde al valore in Hz.

Si è realizzata per questa tematica una function in Matlab, hz2bark.m, che servirà

come punto iniziale per concludere i passi del modello psico-austico. Ritornando a quando detto prima sulla soglia assoluta uditiva in quiete (ATH), notiamo che ci sia una piccola deviazione di risultato sulla scala utilizzata prima basata sugli Hz e quella basata sull’unità Bark:

Fig.17 Differenze ATH (Bark e Hz)

Notiamo che sono diverse, ma ci sono delle similitudini ad esempio a 500 Hz. Primo passo, Trasformata di Fourier (normalizzazione del segnale): uno degli strumenti più importante che và a comporre il nostro orecchio è sicuramente la coclea (la conchiglia). Esso può essere visto come un meccanismo in grado di traduttore gli impulsi in suoni, la sua funzione è quella di creare un tempo alla trasformazione di frequenza del segnale audio. Le informazioni dell’audio, nel tempo, vengono tradotte in prima istanza all’interno di uno spazio di frequenza dentro la membrana.

-45-

Page 50: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Questo fenomeno è modellato in senso matematico dalla trasformata di Fourier, che

serve quindi a rappresentare quei segnali per i quali non sussiste una struttura periodica. L’operazione di trasformazione è indicata da questa simbologia: X(f)=F{x(t)}, ma la sua definizione formale dal punto di vista analitico è:

X(f)=

L’antitrasformata di Fourier F-1,- è l’operatore analitico che svolge l’operazione

inversa. Ultimissimo passo del modello psico-acustico. Questa operazione è definita come:

x(t)=

Nel caso del watermarking, l’algoritmo di inserimento considera un segnale di watermark nel dominio della frequenza, lo converte nel dominio del tempo. Usando proprio l’antitrasformata, e lo aggiunge nel segnale sorgente.

Per normalizzazione si intende quel processo che modifica un segnale per renderlo

più conforme a qualche criterio di regolarità. Nel nostro caso se il segnale fosse stato acquisito da una scheda sonora attraverso il PCM, avremmo dovuto prima normalizzarlo prima di effettuare eventuali operazioni.

La normalizzazione è stata descritta nel file matLab, normalize.m, che mette in

evidenza la possibilità di utilizzare una norma sui dati del file, prendendo in input la lunghezza dell’fft, il numero di bit per campione e i dati y.

Secondo passo, calcolo della potenza dello spettro: Un segnale variabile nel tempo è

di fatto equivalente ad una somma di funzioni sinusoidali aventi una propria ampiezza e frequenza. Un segnale g(t), quindi, può essere rappresentato in un modo diverso cioè attraverso il suo spettro di frequenze. Anche per lo spettro di frequenze si è cercato di creare un file MatLab, specgram.m, che ha come scopo la rappresentazione grafica dell'intensità di un suono in funzione del tempo e della frequenza. Uno spettrogramma si ottiene di solito suddividendo l'intervallo di tempo totale (cioè quello relativo all'intera forma d'onda da analizzare) in sottointervalli uguali (detti finestre temporali) di durata da 5 a 10 ms e calcolando la trasformata di Fourier della parte di forma d'onda contenuta in ciascuna finestra (solitamente si usa la trasformata veloce di Fourier, o FFT), che fornisce l'intensità del suono in funzione della frequenza. Le trasformate di Fourier relative alle diverse finestre temporali vengono poi assemblate a formare lo spettrogramma.

-46-

Page 51: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

La finestra temporale utilizzata per il codice specgram.m e definita nel codice

hanning.m :

Un esempio di utilizzo dei codici proposti, può essere quello di trovare differenze di intensità del suono di un canale ed un altro di un file audio WAV stereo. Dal Command Window:

>> [y,fs]=wavread('camp96.wav'); % leggiamo file wav stereo >> left=y(:,1); % prendiamo il primo canale >> right=y(:,2); %prendiamo il secondo canale >> subplot(3,1,1), plot(y), axis('tight'); % plottiamo file wav >> subplot(3,1,2), specgram(left,512,fs), axis('tight'); % spettrogramma can.1 >> subplot(3,1,3), specgram(right,512,fs), axis('tight'); % spettrogramma can.2 “512 è il numero di campioni che abbiamo usato per la DFT, per il raggruppamento

dei campioni per colonna nell’immagine dello spettrogramma.

Fig.18 Subplot specgram e plot file wav

-47-

Page 52: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Intuitivamente, la densità spettrale cattura le frequenze contenute in un processo

con continue variazioni e ci aiuta quindi a trovare segnali periodici, molto più semplici da trattare.

Il calcolo della potenza può essere attinto grazie alla formula (psd.m):

PwNorCost+10*log10( |fft(y,Nfft)|2 )

Il risultato di questa formula sarà l’input della prossima fase.

Fig.19 Spettro delle potenze in Hz e bark

Terzo passo, identificazione delle componenti tonali e non tonali: le componenti tonali (sinusoidali) e non tonali (rumorose) si riconoscono poiché i loro modelli di mascheramento sono diversi.

Una componente tonale è un massimo locale dello spettro (S(k)>S(k+1) e S(k)>=S(K-

1)) che soddisfa:

-48-

Page 53: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

S(k) – S(k+j)>=7 dB j є [-2,2] se 2<k<63

j є*-3,-2,2,3] se 63<=k<127 j є*-6,..,-2,2,….6+ se 127<=k<=250

Altre componenti tonali, nella stessa banda di frequenza non saranno ulteriormente

considerate. Le componenti non tonali sono costituite dalla somma delle intensità delle rimanenti componenti del segnale in ognuna delle 24 bande critiche comprese tra 0 e 15500 Hz. Il nostro sistema uditivo si comporta come una banca di filtri passa-banda, con frequenze centrali che si sovrappongono continuamente.

Abbiamo sviluppato 2 routine matlab in grado di calcolare le componenti tonali e non

(find_tones.m ed noise_maskers.m utilizzando il calcolo per le bande critiche), plottandone i risultati sul nostro sempre caro camp.wav possiamo vedere:

Fig.20 Ricerca componenti tonali e non

Si nota che le componenti tonali risiedano attorno ai 15000 Hz. Alla fine queste componenti sono maschere che devono essere poi eliminate.

-49-

Page 54: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Quarto passo, detrarre una maschera di potenza spettrale e controlla se i valori sono

al di sopra della soglia di udibilità globale (ATH). Se questa assunzione non è vera allora eliminiamo le componenti poiché sono non

udibili. Dopo andiamo a localizzare se ci sono delle maschere che hanno altre maschere nel loro campo di variazione delle frequenze. Se esistono allora il minore tra le 2 maschere viene posto a 0 perché impercettibile dall’orecchio umano. La funzione matlab attinta a tale scopo è check_maskers.m.

Quinto passo, calcolare la soglia di mascheramento globale: Adesso che abbiamo le maschere importanti c’è la necessità di andare a trovare la soglia globale. Bisogna discretizzare l’asse delle frequenze secondo la sensibilità dell’udito ed esprimere le frequenze in Barks (necessario). Una volta trovate le componenti tonali e non tonali ed individuate le relative mascheranti e mascherate, possiamo ricavare la soglia di mascheramento globale. Essa per ogni frequenza f2 tiene conto della soglia di udibilità Sa e delle curve mascheranti P2, delle componenti tonali Nt e delle componenti non tonali Nn:

Sm(f2)=10*log10[10Sa(f2)/10+ P2(f2,f1,P1)/10+ P2(f2,f1,P1)/10 ]

Questo metodo assume che gli effetti di mascheramento sono addittivi, così che le

maschere delle mascheranti e la soglia assoluta di udibilità possono essere aggiunte insieme. Questo passo è descritto dalla funzione global_threshold.m. In se per se la soglia di mascheramento è quindi il minimo tra la soglia di mascheramento locale e la soglia di udibilità in ognuna delle 32 sottobande di uguale larghezza dello spettro. Per sviluppare la soglia globale è necessario quindi che vengano determinate le soglie di mascheramento attorno alle maschere tonali e non tonali e quindi poi vengano aggiunte (attraverso l’espressione) e calcolate in un logaritmo. La funzione proposta che ci permette di fare ciò è mask_threshold.m, che non fa altro che far ritornare un array di soglie mascheranti in dB che risultano attorno ad una maschera locale ad un’insieme di frequenza.

Si dividerà il nostro discorso in base al tipo di componente: il primo passo è quello di

determinare la maschera in barks, creeremo un range di valori in base ad un massimo ed un minimo (-3 e -8 in barks), proporremo un if per controllare se è una componente tonale o non, andremo a calcolare una spreading function (che prende una componente e la collega ad una certa potenza per determinare un funzione di diffusione che circonda la componente). La soglia per le 2 tipologie di componenti sarà leggermente diversa.

% calculate noise threshold

threshold=P-.175*b(j)+SF-2.025; % calculate tone threshold

threshold=P-.275*b(j)+SF-6.025;

-50-

Page 55: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.21 Soglia globale di mascheramento

Si può notare da grafico come in presenza di componenti tonali, la soglia globale si mantenga al di sotto della potenza spettrale del segnale. Questa situazione è dovuta alla creazione del range visto prima -3 bark. I vari grafici sono racchiusi nel codice plots.m, che permette di richiamare in sequenza le funzioni viste precedentemente.

2.5 MPEG-1 AUDIO LAYER III:

MPEG-1 AUDIO LAYER III, più comunemente chiamato mp3, propone l’utilizzo del

modello psicoacustico utilizzato nel precedente paragrafo. Lo standard MPEG-1 racchiude vari tipi di layer es I,II,III, che asseriscono a tipi di compressione con complessità via via crescente. Il fattor comune tra i 3 layer è fornito dalla struttura uguale (numero di passi) per il codificatore ed il decodificatore.

Layer I: è il più semplice dei tre ed è studiato per avere le migliori prestazioni con

bitrate sopra 128 kbit/s per canale. Layer II: superiore per complessità al primo è adatto per bitrate intorno a 128 kbit/s

per canale. I fattori di compressione vanno da 1 a 6 fino a 1 a 8. Layer III: è il più complesso dei tre ed offre ottime prestazioni con bitrate di circa 64

kbit/s per canale. Riesce a ridurre la dimensione fino a 12 volte.

-51-

Page 56: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

I codificatori sono realizzati tramite quattro blocchi funzionali: - Analisi: si trasforma il segnale rappresentandolo nel dominio delle frequenze; - Modello percettivo: indica quali componenti spettrali possono essere scartate; - Quantizzazione e codifica: incrementa o decrementa il valore d’ogni campione fino

a portarlo a livelli standard e poi lo codifica con un certo numero di bit; - Creazione dello stream: ai dati relativi alla finestra si aggiunge un’intestazione con le

informazioni necessarie alla decodifica (numero di layer, frequenza di campionamento, ecc.).

I decodificatori sono realizzati tramite tre blocchi: - Decodifica dello stream (prendiamo il main data dell’mp3, utilizziamo una

compressione senza perdita di dati); - Quantizzazione inversa (riusiamo huffman); - Sintesi: si riporta il segnale nel dominio del tempo (anti-trasformata di Fourier e

sintesi delle sottobande attraverso il banco di filtri ibrido). La codifica presuppone un lavoro maggiore della decodifica. Infatti, notiamo come sia

semplice e veloce la decodifica di un brano mp3 attraverso lettore multimediale (WMPlayer). Evidenziate le differenze tra i 3 layer offerti dallo standard, ci dedichiamo nello specifico al Layer III, che è alla base del programma analizzato da noi per il watermarking audio, MP3Stego. Lo schema di un codificatore Layer III diverge dagli altri 2, non per la struttura a 4 blocchi ma per l’aggiunta di informazioni e di metodi complessi per migliorare la compressione e diminuire conseguentemente il bit rate:

Fig.22 Fasi per la compressione da WAV a MP3

-52-

Page 57: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

L’analisi viene espressa dai rettangoli (Filter Bank e MDCT), il modello psicoacustico da (fft e Psyco acoustic model), la quantizzazione e la codifica (Distortion Control Loop Huffman, external control etc..) e la creazione del bitstream dal Bitstream formatting e CRC.

· Analisi La prima necessità del codificatore è di analizzare il segnale nel campo delle

frequenze. Il segnale viene scomposto in 32 sottobande tramite il banco di filtri. Come può essere un filtro passa-basso, utilizzato per togliere il rumore di fondo au una registrazione vocale attraverso scheda sonora del PC. Da 512 campioni PCM vengono calcolati i 32 valori spettrali, sostituiti 32 campioni con tecnica FIFO e si procede nuovamente al calcolo. Ognuna di queste operazioni produce 32 campioni in uscita. Il layer III esegue un finestramento (con hanning visto prima) ogni 36 passi, quindi 32*36=1152, che sarebbero campioni per finestra. Si noti che questi sono campioni spettrali, nel dominio delle frequenze e non più in quello del tempo. Il processo deve essere ripetuto per 2 se c’è un file stereo, oppure si può fare la media dei 2 canali (per creare un mp3 mono da uno stereo), es. -> for length(y) [y(1,1)+y(1,2)/2].

Il filtro polifase, secondo lo standard MPEG Audio, deriva da una procedura che ricalca un metodo descritto da Rothweiler come visibile in questa figura. L'algoritmo implementato da questo standard è il seguente:

-53-

Page 58: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

dove:

i = indice della sottobanda, [0..31] st[i] = campione in uscita della sottobanda i al tempo t t = k*32*Tc Tc = periodo di campionamento C[n] = è uno dei 512 coefficienti della finestra di analisi, definita dallo standard. x[n]= è un campione audio di ingresso, letto da un buffer di 512 campioni M[i][k] = coefficienti della matrice di analisi (DCT)

L’mp3 dunque utilizza un banco di filtri polifase, che sono ottenuti modulando un

filtro passa-basso detto prototipo. Il problema sta nel fatto che una volta che trasformo un blocco di campioni, applico la finestratura, il blocco successivo risulta parzialmente sovrapposto (producendo aliasing). L’aliasing può portare a fenomeni di distorsione, per evitare ciò, l’uscita del banco di filtri non è più passata direttamente al quantizzatore ma viene elaborata da un blocco MDCT (Modified Discrete Cosine Transform) a 6 o 18 punti.

In realtà MDCT effettua una sovrapposizione del 50% fra finestre successive quindi in

uscita ci sono ancora 1152 campioni per finestra.

Il blocco a 18 punti offre una maggiore risoluzione frequenziale mentre il blocco a 6 è decisamente più rapido e viene utilizzato quando ci si aspetta un pre eco. Il passaggio da 18 a 6 e viceversa è possibile solo introducendo due particolari finestre: long-to-short e short-to-long data window. MatLab non è dotato nativamente di questa routine e per questo c’è stata la necessità di trovarne una già bella che fatta. Mdct.m. In definitiva, questa tipo di trasformata viene utilizzata anche per la compressione di file immagine tipo jpg.

· Modello Percettivo

Per quanto riguarda questo blocco, si è discusso e lavorato a piene mani nel paragrafo precedente. Per il Layer III basta sapere che si utilizza sia pre che post mascheramento.

· Quantizzazione e codifica Per definire il quantizzatore occorre scegliere il valore del guadagno ed il fattore di

scala. Questi due parametri devono consentire di minimizzare il rumore introdotto e di mantenere accettabili le dimensioni del blocco all’uscita del codificatore. Si procede quindi con due cicli innestati:

-54-

Page 59: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Rate loop

Vengono assegnati i bit ad ogni codice secondo la tecnica Huffman. Se le dimensioni del blocco così codificato sono troppo grandi s’interviene diminuendo il guadagno. Così facendo si diminuisce il numero di Byte necessari alla codifica. Si tenga presente che i livelli di quantizzazione piccoli sono i più frequenti e quindi codificati con un numero minore di bit. Noise control loop

Viene applicato un fattore di scala ad ogni sottobanda, valore di partenza è 1 per tutte le sottobande. Si calcola il rumore di quantizzazione e se questo supera il livello della Threshold Mask si procede ad una variazione dei fattori di scala. A questo punto è necessario ripetere il rate loop. Il ciclo procede finché non si è riduce il rumore di quantizzazione ad un livello accettabile o venga interrotto da sistemi di sicurezza per evitare loop infiniti. Questi possono capitare se il modello percettivo richiede passi di quantizzazione talmente piccoli da far si che il rate loop sia costretto ad aumentare il guadagno.

Gli algoritmi di Huffman forniscono un metodo per ridurre la dimensione dei dati, e

sono molto diffusi, si pensi ad esempio ai programmi di compressione più conosciuti (WinZip, WinRar). La tecnica di Huffman si basa sulla sostituzione di simboli (ad 8 bit tipicamente) con una sequenza più corta di bit (minimo 1), in funzione della frequenza del dato che compare nella sequenza da comprimere. L’algoritmo funziona tanto meglio quanto più ricorrenti sono i simboli, quindi non offre prestazioni notevoli nel caso di files PCM, ma si rivela molto più efficace se applicato a dati nel dominio delle frequenze. In poche parole la tecnica di Huffman elimina le informazioni ridondanti tramite una compressione lossless ( non porta a perdita di dati durante la fase di compressione). A questo punto ci siamo muniti del file huffman.m.

· Codifica del bitstream L’ultima fase della codifica consiste nell’ottenere la forma definitiva del file mp3 così

come si presenta nella sua forma finale.

-55-

Page 60: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

2.5.1 STRUTTURA MP3

Il file mp3 ha la seguente forma:

*TAG2+ frame1 frame2 frame3……..framen [TAG1]

[TAG1] si trova sempre alla fine del file ed è lungo 128 byte. Contiene informazioni varie sull’artista e sulla canzone (titolo, album di appartenenza etc), il genere musicale e alcuni commenti vari. *TAG2+ si trova invece all’inizio del brano e risulta di più recente introduzione.

I frame compresi fra i due TAG hanno una struttura standard e comprendono 4 campi

(Header, CRC, Side Information e Main Data). L’Header di un frame ha una lunghezza di 4 byte ed appare nella forma:

AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM

A: sono 11 bit di sincronizzazione (syncr word) e valgono tutti 1. Occupano le posizioni più significative del header e servono per identificare l’inizio del frame.

B: sono 2 bit che indicano la versione MPEG. Negli mp3 sono 11. C: sono 2 bit che determinano il tipo di layer della codifica MPEG. Nel Layer III sono

01. D: è un bit di protezione che indica la presenza del CRC. E: sono quattro bit che identificano il bitrate della codifica indipendentemente dalla

modalità di canale. Esempio 64 kbps -> 0101. F: sono due bit che indicano la frequenza di campionamento. Es.44100->00 G: è un solo bit che serve a indicare la presenza di una particolare operazione detta

pudding che completa il frame per raggiungere la capienza esatta indicata dal bitrate ed è necessario solo con frequenza di campionamento pari a 44100 Hz.

H: è un bit privato che però sta andando in disuso nella codifica. I: sono due bit che indicano le modalità di canale. J: sono due bit che specificano il tipo di modalità joint stereo, nel caso sia presente. K: è un bit che indica la presenza del copyright nel file codificato. L: è un bit che specifica la natura del file. M: sono due bit che indicano il tipo di enfasi1 usato. [16] Da queste info contenute dall’header possiamo calcolare la lunghezza di un frame

(finestra), il tempo per un frame si aggira su 0,026 sec:

-56-

Page 61: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Il campo CRC (controllo a ridondanza ciclica) è utilizzato se ci siano degli errori in fase

di trasmissione del file sulla rete (si richiede minimo ritardo tra codifica e decodifica e robustezza rispetto agli errori). Invece, il campo side information, fornisce importanti notizie al decoder sulla codifica. Infine il main data è il segnale audio vero è proprio.

Il layer III usa un’interessante tecnica (bit reservoir) per risparmiare ogni singolo bit.

Se la dimensione dei dati in una finestra è inferiore al numero di bit a lei assegnata, il codificatore usa questo spazio vuoto per inserire dati relativi alle finestre successive. Così può accadere che in una finestra ci siano l’header di un pacchetto ed i dati sia del pacchetto corrente sia di quello successivo.

In commercio esistono diversi tipi di codificatori, detti anche codec o encoder,

ciascuno con caratteristiche proprie, le cui prestazioni sono dipendenti essenzialmente dai differenti modelli psicoacustici utilizzati. Un esempio è lame (free e open source) che appoggiato alle routine mp3read.m e mp3write.m, permette di leggere e scrivere un file mp3, visto che matlab è sprovvisto di routine per il trattamento diretto di tali file. Lame prevede una qualità molto elevata nella compressione ma velocità ridotte.

Per verificare la codifica mp3 bisogna basarsi su 3 fattori quali, la velocità di

compressione, la dimensione del file compresso e la qualità del file compresso. I tempi necessari per ogni fase della codifica mp3 possono essere evidenziati dalla seguente tabella:

Fig. 23 Tabella relativa alla rilevanza nel tempo delle fasi

-57-

Page 62: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Come si può notare la fase più dispendiosa in termini di risorse è quella relativa

all’analisi psicoacustica, che caratterizza fortemente il codificatore tant’è che ci sono in commercio alcuni codificatori sprovvisti di tale fase.

2.6 Brevetto “Stealthy Audio watermarking” e DRM Ora che abbiamo parlato delle varie tecniche utilizzate per comprimere un file wave

in mp3, cerchiamo di dare un’impronta al nostro discorso sul watermarking, riferendoci alle tecniche utilizzate dalle società informatiche più importanti, per riuscire a mantenere la paternità di un file audio.

In questa ottica, occorre enunciare i tentativi della Microsoft per salvaguardare il

patrimonio lavorativo e quindi intellettuale, di cantanti e band in giro per il mondo. Il primo passo è stato l’instaurazione dei DRM (Digital Right Marks), è una tecnologia che consente di distribuire in rete contenuti multimediali, siano questi testo, immagini, musica e video, controllando allo stesso tempo i diritti del produttore dei contenuti e quelli di chi acquisisce

lo stesso. In un mondo sempre più on line, la necessità di definire e far conoscere all’ utente i diritti acquisiti su un opera digitale diviene una necessità da parte di tutti i produttori di contenuti, siano essi pubblici che privati. In realtà, i DRM di per sé non sono né buoni né cattivi, come tante altre tecnologie, e non solo informatiche, sono di fatto neutrali; un DRM di per sé non impone restrizioni su alcuna risorsa o contenuto: questo

risulta vero solo se si intende esprimere tali restrizioni all’uso per mezzo di un licensing,

ma non è un concetto insito nel DRM in quanto tale. Proponiamo uno schema di riferimento:

Fig. 24 Struttura DRM Microsoft

-58-

Page 63: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Il flusso che sta dietro a questo modello di riferimento si può riassumere in 10

passaggi:

1) L’utente riceve un contenuto (via streaming, via P2P, via mail etc.)

2) L’utente prova ad usare il contenuto su un suo dispositivo, è qui che inizia ad

entrare in gioco il DRM 3) Il DRM client verifica i diritti, se non lo può fare in locale, invia una richiesta ad un

license server. 4) Il license server verifica le credenziali del richiedente 5) Il license server verifica i diritti per il contenuto

6) Può essere lanciata una transazione, se le regole associate ai diritti d’uso lo

richiedono. 7) Vengono raccolte le informazioni che rendono la licenza attualizzata: i diritti

concessi, le chiavi di cifratura, informazioni sulla revoca etc. 8) La licenza così costituita è trasferita al dispositivo utente. 9) Il DRM sul dispositivo utente usa queste informazioni per accedere al contenuto 10) Il contenuto è attualizzato sul dispositivo utente. In poche parole riferendoci a quanto detto nel paragrafo della struttura mp3, si vanno

a controllare quei bit nel tag finale (“che non sono in chiaro”), per poi andarli a confrontare in modo distribuito con un database online. Quindi, possiamo vederne l’implementazione, quando cerchiamo informazioni o sincronizziamo il nostro catalogo multimediale con windows media player.

Le tecnologie di base dietro ad un DRM sono quindi rappresentate da:

- I metadati per l’identificazione e la descrizione del contenuto - Un linguaggio per la rappresentazione dei diritti d’uso (rights expression language) - Tecnologie di protezione del contenuto, quali cifratura (content scrambling),

watermarking (dati identificativi frammisti al contenuto), firma elettronica (per autenticazione del ricevente e del provider).

- Sistemi di pagamento on line e sicuri.

Alla base di alcune di queste funzioni vi è un sistema per la gestione di chiavi di cifratura.

Dato che i DRM vengono continuamente aggirati, ma anche le etichette musicali si

stanno rendendo conto che limitare l'utilizzo di un prodotto acquistato non è economicamente conveniente, ritorna in auge il concetto di marcare un file con il nome e i dati principali del legittimo proprietario per poter risalire sempre alla fonte.

-59-

Page 64: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Come si può notare da quanto detto prima sul cambiamento di alcuni bit, le

limitazioni di questa tecnologia stanno nel fatto che i bit sono sempre gli stessi basta porne a 0 tutti gli ultimi del file .mp3, per evitare tutti i passaggi. Stando a quanto dichiarato da Microsoft il suo nuovo brevetto denominato Stealthy Audio Watermarking (presentato a settembre 2007 dopo passi incrementali) potrebbe mettere la definitiva parola fine alla ricerca nel campo dei sistemi di protezione dei diritti digitali una volta per tutte.

Si tratta infatti non di un nuovo DRM ma, come dice il nome stesso, di un watermark.

La differenza tra i due sistemi è che il primo impone ai file cui è applicato delle limitazioni: non è possibile copiarli, masterizzarli o convertirli, ad esempio, se non nei termini e nei modi specificati dal DRM stesso, mentre il secondo sistema (vecchio tanto quanto il primo) è semplicemente una marcatura del file la cui forza e resistenza ai tentativi di rimozione ne costituisce l'efficacia.

I due ricercatori (Malvar e Kirovsky), che lavorano presso i labs Microsoft a Redmond,

avrebbero individuato tre algoritmi differenti per infilare una sorta di "firma nascosta" all’interno di un file audio, una firma che sarebbe in grado di resistere a qualsiasi tentativo di eliminarla. Il nuovo meccanismo segue un approccio diverso dai comuni sistemi di gestione del diritto d’autore utilizzati fino ad oggi da Microsoft, così come da Apple e dagli altri competitor: il brano musicale potrebbe essere passato di mano in mano con facilità, ma al suo interno resterebbe sempre traccia del proprietario originale. Il watermark sarebbe in grado di resistere a qualsiasi attacco: copia, ricodifica, tagli, cambi di tono e persino registrazione analogica. Il suo meccanismo trae spunto da un sistema militare utilizzato per proteggere le comunicazioni radio. Questa tecnica è stata definita dal quotidiano on line InformationWeek.com, come la più complicata e scrupolosa tecnologia che sarà mai applicata a file musicali da 99 centesimi [20]. Dall’abstract ufficiale, si può capire qual è il ragionamento principale:

“…La tecnica di watermarking incomincia codificando il watermark in una posizione

variabile dopo l’inizio di un clip audio ”

Il tutto può essere inteso come la necessità di non dare punti di riferimento per eventuali attacchi al code. Si basti sapere solo che si utilizza l’espansione di spettro, una tecnica utilizzata nelle telecomunicazioni in cui il segnale viene trasmesso su una banda di frequenza più ampia di quella dell’info contenuta nel segnale stesso e si applica il rumore pseudo casuale, si cerca quindi di mimetizzare il segnale trasmesso abbassandone la potenza specifica. Lo schema del funzionamento sarà esposto nel corso del prossimo capitolo poiché richiede le conoscenze di alcune tecniche per la generazione e l’inclusione del watermark.

-60-

Page 65: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 3:

“Tecniche di Watermarking”

Page 66: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 3

TECNICHE DI WATERMARKING

Differenti sistemi possono essere applicati al watermarking di un segnale audio. Tutti insieme possono essere classificati come “sistemi steganografici” poiché loro si occupano del concetto di mascheramento dei dati all’interno di un segnale. Alcuni sistemi propongono delle sequenze PN, dove viene usato un filtro che si accosta alle caratteristiche del mascheramento prese in considerazione dal sistema uditivo dell’uomo. Altre tecniche sono state importate dai campi video e delle immagini. Ad esempio, quello definito da Cox, un sistema multipiattaforma capace di estrarre una sequenza pseudo casuale senza l’utilizzo di un contenitore non marcato. Per chiarire meglio le cose, il watermark non è altro che una forma d’onda ottenuta dall’uso delle tecniche (espansione dello spettro, codifica nei bit bassi, codifica delle fasi, etc..) con un digital bit stream. L’input, quindi, è un file che verrà trasformato in un segnale audio che sarà poi analizzato dal modello psicoacustico per trovare la soglia di mascheramento globale. Questa informazione è poi usata per forgiare ed includere il watermark all’interno del segnale audio trattenendo la sua qualità percettiva. Tutte le forme d’onda sono considerate nello stesso formato audio (WAV). Nel corso del capitolo faremo riferimenti a tali tecniche, inquadrando il nostro discorso sulle generalità di inclusione ed individuazione dei watermark nei file audio, poi soffermandoci su alcuni fattori che caratterizzano il lavoro su un file audio e quindi su di un segnale audio (modulo, fase e ampiezza).

3.1 Inclusione ed individuazione del watermark nei file audio

Uno dei requisiti di una tecnica di watermarking è quella di essere resistente a multipli tentativi di attacchi. Un attacco può essere considerato come un qualcosa che può degradare o distruggere il watermark inserito. Un altro fattore che và considerato è che la soglia di mascheramento di un segnale audio determina come e dove includere in watermark, poiché il watermark è incluso nelle componenti “libere, o riservate” trovate usando il modello psicoacustico. Da questo punto di vista, il watermark deve essere il più possibile meno intrusivo nel segnale audio e perciò, i dati relativi all’audio possono essere visti come un ostacolo per una buona tecnica di watermarking. Questo perché l’audio userà tutti i necessari campi di variazione di frequenza ed il watermark userà qualcosa che è rimasto dall’analisi del modello uditivo. Il problema può nascere quando ad esempio usiamo una canale di trasmissione: analogico o digitale.

-61-

Page 67: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

L’obiettivo di un sistema di generazione del watermark è quello di generare un

segnale x(t) che contiene il bit stream data. Questo segnale può essere poi processato per il suo recupero. Considerando un segnale audio costituito da N campioni x(i)=1,2,.. si genererà il watermark modificando ogni campione usando una funzione f(x(i),w(i)) dove w(i) è il segnale watermark da inserire. La chiave del watermark è un seme; tale seme sarà dato in input ad un generatore di numeri pseudo casuali che genererà N valori w(i) in un intervallo [-a,a] con a costante. Il campione marcato y(i) è dunque:

y(i)=x(i)+f(x(i),w(i)) Questa funzione f, deve tener conto delle proprietà di base del mascheramento per

prevenire l’udibilità del watermark. Ad esempio se x(j) fosse un campione digitale di livello basso, allora f(x(j),w(j)) sarà uguale a 0, altrimenti introdurremo una modifica percettibile al segnale. E’ importante considerare che il generatore pseudo casuale che fornisce i valori w(i), dovrebbe fornire un numero statisticamente uguale di valori di output discreti in [-a,a] affinché la procedure di individuazione del watermark funzioni accuratamente.

Esso deve soddisfare le seguenti proprietà (sia w=w[i], w[2],.. la sequenza casuale

generata) : - Se w[i]=b in [-a,a] allora esiste j t.c. w[j]=-b in [-a,a] - Per ogni coppia di valori a e b prodotti dal generatore, se |an| e |bn| denotano il

numero di occorrenze di a e b sui primi n valori casuali prodotti, allora deve valere

che: =1.

Per quanto riguarda l’individuazione del watermark, denotiamo con S la sommatoria:

Sostituendo in tale sommatoria l’espressione di y(i), otteniamo:

+

Il valor medio della prima sommatoria è 0 se il generatore casuale fornisce un numero uguale di valori d’output discreti oppure il valore medio di x è uguale a 0. Infatti, considerando le sequenze x(i) e w(i) come variabili casuali, ed essendo esse indipendenti tra loro, si ha che:

-62-

Page 68: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

[ ]= =

Nel caso in cui qualche valore casuale è più frequentemente prodotto, occorre tenere

in considerazione la differenza tra valori più frequentemente prodotti. Supponiamo ad esempio che w, la sequenza casuale generata, consista di valori +a e -a. Se il numero di più a è differente dal numero di –a, e dunque il valor medio di w non è zero, il valore medio della prima somma nell’espressione di S non sarà 0. Il valore Dw rappresenta il numero in eccesso di valori –a o +a. Ad esempio se w consiste di 2000 valori e ci sono 930 valori +a e 1070 valori –a, allora Dw sarà uguale a 140.

Denotiamo allora con B un insieme di NB=Dw indici per i quali i corrispondenti valori

w(i) sono uguali al simbolo che ha la maggiore occorrenza. Denotiamo con A l’insieme di tutti gli indici che non appartengono a B. Ovviamente la cardinalità di A è NA=N-Dw e vale la seguente relazione:

Da ciò S può essere espressa come:

S= + +

Possiamo supporre, per semplificare la notazione, A={1,2,..,N-Dw- e B=,1,2,…,Dw-,

otteniamo così:

S= + +

Se nel segnale non è stato inserito il watermark, ovvero f(x(i),w(i))=0, calcolando il

valor medio di S otteniamo:

E[S]=Dw/N*

Diversamente. Se il file è stato marcato, il valor medio di S è:

E[S]=Dw/N +

-63-

Page 69: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Tuttavia, x(i) è il campione del segnale originale che non può essere usato nel

processo di individuazione, quindi x(i) può essere sostituito da y(i) nell’espressione di S senza un errore significativo. Da quanto visto possiamo trovare poi il valore di individuazione r:

r=

Il valore di individuazione r, teoricamente è compreso tra 0 e 1, ma l’approssimazione di x(i) con y(i) espande tale intervallo a [0-ε, 1+ε+ per un certo ε piccolo. Sperimentalmente è stato provato che r deve essere maggiore di 0.5 per decidere che il watermark è stato inserito nel segnale.

3.2 Fattori da considerare per il Data Hiding Dal capitolo 2, abbiamo visto come il nostro sistema uditivo sia caratterizzato da

alcune debolezze di fondo, come il fatto che suoni più forti tendano a sovrastate toni più dolci, punto debole che i modelli psico-acustici, che imitano l’udito umano, possono sfruttare a proprio vantaggio. Questa forma di masking è un fenomeno nel quale un suono interferisce con la nostra percezione di un altro. Il mascheramento delle frequenze si verifica quando 2 toni con frequenze simili vengono suonati allo stesso momento. Per questo motivo risulta importante la scelta della sorgente audio più appropriata, perciò sarà più semplice nascondere informazioni in un file audio di heavy metal rispetto ad uno di musica leggera. Inoltre l’orecchio umano non è in grado di percepire la fase assoluta di un suono, ma solo quella relativa ed alcuni disturbi del segnale sono così comuni che nella maggior parte dei casi, anche su uditi dall’ascoltatore vengono ignorati [9].

Quando lavoriamo con segnali audio che devono essere trasmessi, bisogna

considerare due fattori principali: il primo è la rappresentazione digitale del segnale audio, ed il secondo è il mezzo di trasmissione attraverso il quale il segnale dovrà essere propagato. La rappresentazione digitale è stata chiarita bene nel primo capitolo, mentre la seconda vale la pena di essere approfondita.

Il mezzo di trasmissione di un segnale audio è l’ambiente attraverso il quale esso

dovrà passare nel suo cammino dal mittente al ricevente. Esistono 4 diversi ambienti di trasmissione:

-64- -

Page 70: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Ambiente digitale: se un file sonoro è copiato direttamente da una macchina ad

un’altra, senza mai essere modificato in alcun modo, esso passerà attraverso questo ambiente: il campione del segnale resta lo stesso fra la sorgente e la destinazione.

- Ambiente di ricampionatura con aumento/decremento: il segnale viene

rimodellato secondo un nuovo tasso di campionatura più alto oppure più basso, ma resta digitale dal principio alla fine. Benchè l’ampiezza assoluta e la fase della maggior parte del segnale restino invariate, le caratteristiche del segnale cambiano.

- Trasmissione analogica e ricampionatura: questo accade quando il segnale viene

convertito in uno stato analogico e rimodellato. L’ampiezza assoluta del segnale, la quantizzazione del campione ed il tasso di campionatura temporale non vengono conservati, mentre in generale la fase resta invariata.

- Ambiente “over the air”: questo avvine quando il segnale viene suonato nell’aria e rimodellato con l’aiuto di un microfono. In tal caso il segnale può essere soggetto a possibili modifiche non lineari, che causeranno variazioni di fase ed ampiezza: accumolo di componenti di frequenza diverse (eco).

In definitiva, si ricordi che la quantità di informazione che si potranno nascondere

dipenderà dal tasso di campionatura e dal tipo di suono che dovrà essere modificato: il valore tipo è di 16 bps (byte per secondo), ma è un valore che può spaziare da 2 a 128 bps.

3.3 TECNICHE UTILIZZATE Il processo di occultamento dei dati in un file audio può avvenire in diversi modi. Uno

è il cosiddetto metodo di codifica nei bit bassi: tale procedura sostituisce i bit di informazione meno significativi di ogni punto campione del segnale con una stringa binaria codificata (vedremo S-Tools). Anche se questa tecnica può essere impiegata in maniera efficiente per codificare una gran mole di dati nascosti in un segnale audio dato, essa però introduce un fastidioso rumore di fondo. Ad esempio il rumore della folla in una registrazione di un evento sportivo live maschererebbe il noise introdotto dalla codifica nei bit bassi, mediante strumenti di attenuazione che compensano tale variazione. Il maggior inconveniente di tale metodo è la scarsa resistenza ad eventuali manipolazioni, quali l’introduzione di segnali di disturbo sul canale trasmissivo o in fase di ricampionatura del segnale, che distruggerebbero le informazioni nascoste, almeno che queste non vengano inserite con tecniche di ridondanza.

-65-

Page 71: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Al fine di aumentare l’efficienza della codifica, queste tecniche riducono la quantità di

dati che è possibile celare, limitando l’utilità di questa procedura solo all’interno di ambienti chiusi digitali. Vedremo meglio questa tecnica nel corso del prossimo capitolo nel paragrafo sul programma steganografico S-Tools.

Un secondo metodo di data hiding in un file audio è la codifica delle fasi: tale

procedura funziona invece sostituendo la fase di un segmento iniziale del file audio con una fase di riferimento che rappresenta i dati. La fase in se per sé indica un particolare istante durante lo svolgersi di un fenomeno periodico (segnale periodico). Essa in fisica viene misurata tramite un angolo, detto angolo di fase. Essa si misura in radianti da 0 a 2π.

La tecnica di codifica delle fasi consiste in questo modo: - La sequenza che costituisce il suono originale sy (vettore y), 0≤y≤I-1, I=Len

(lunghezza di y), vien suddivisa in una serie N piccoli segmenti sn, 0≤n≤N- 1…

Fig.25 Suono Originale Fig26 Creazione N segmentini

- Una trasformata discreta di Fourier a K punti viene applicata ad ogni segmentino

(K=I-N), al fine di creare una matrice della fase фn ( ωk ) ed una dell’ ampiezza, An ( ωk ) , 0≤k≤K- 1.

Fig.27 Trasformazione dei segmentini secondo fase e ampiezza

- Viene calcolata poi la differenza di fase fra ciascun segmentino adiacente

(sfasamento), 0≤n≤N- 1:

∆фn+1 ( ωk )= фn+1 ( ωk )- фn ( ωk )

Fig.28 Calcolo della differenza di fase per ogni segmento

-66-

Page 72: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Per il segmento S0 , viene scelta un’artificiale fase assoluta ф’

0.

Fig.29 Creazione di una fase iniziale artificiale (primo segmento)

- Per tutti gli altri segmentini vengono create nuove fasi, per n>0, usando le

differenze di fase:

ф’1( ωk )= ф’

0( ωk )+ ∆ф1 ( ωk ) … ф’

n( ωk )= ф’n-1( ωk )+ ∆фn ( ωk ) …

ф’N( ωk )= ф’

N-1( ωk )+ ∆фN ( ωk ) .

Fig.30 Creazione di una finestra di fase per gli altri segmenti

- Le fasi e l’ampiezza originale vengono combinate per ottenere un nuovo

segmento, S’n;

Fig.31 Combinare le fasi trovate e l’ampiezza per ottenere i segmenti

- Infine, tutti i nuovi segmenti vengono concatenati per ottenere l’output grazie all’applicazione dell’inversa della trasformata di Fourier.

Fig.32 Concatenazione segmenti per l’output

-67-

Page 73: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Prima del processo di decodifica, deve essere effettuata la sincronizzazione della

sequenza. La lunghezza del segmento, i punti della trasformazione di Fourier e l’intervallo in cui stanno i dati devono essere noti al ricevente. Il valore della fase del primo segmento è 0 oppure 1 e rappresenta la stringa binaria codificata. Poiché ф0( ωk ) viene modificata anche le fasi assolute del segnale dei segmenti successivi saranno rispettivamente variate. Tuttavia, le differenze fra le fasi relative dei segmenti adiacenti (quelli più sensibili all’orecchio umano) sono regolate in modo da rimanere invariate. La capacità di un canale di codifica delle fasi varia di solito fra gli 8 ed i 32 bps, a seconda del suono in cui nascondiamo i dati.

Una tecnica che viene utilizzata nelle telecomunicazione e cerca di ovviare ai

problemi sopra esposti, è l’espansione di spettro (vista approssimativamente nel paragrafo sul brevetto Microsoft) proprio su questa si và a fondare la generazione e la relativa inclusione di un watermark. Abbiamo una definizione esaustiva di questo concetto:

“Spread spectrum is a means of transmission in which the signal occupies a bandwidth in excess of the minimum necessary to send the information; the band spread is accomplished by means of a code which is independent of the data, and a synchronized reception with the code at the receiver is used for despreading and subsequent data recovery.” (abstract Brevetto) In questa analisi il processo di generazione può essere espresso tramite nella

terminologia dell’espansione di spettro. Il segnale originale viene chiamato rumore e il bit stream, relativo alla sequenza watermark, verrà aggiunto in una qualche maniera nell’audio finale. Quindi, la sequenza watermark verrà trasformata nel segnale audio e poi il rumore verrà aggiunto ad essa. Questo processo di inserire rumore nel canale o nel segnale viene definito “jamming”. Gli obiettivi di un jammer in un sistema comunicativo è di degradare le prestazioni di una trasmissione, sfruttando la conoscenza di un sistema di comunicazione. In una tecnica di watermarking il segnale audio è considerato il jammer e avrà molto più potenza rispetto al bit stream trasmesso (watermark). Per far si di migliorare le prestazioni di uno schema di watermarking aumentiamo la forza del segnale watermarkato mentre continua a non essere udibile [8].

In pratica si diffonde i dati codificati attraverso lo spettro delle frequenze, rendendo

molto difficile per un avversario scovare le informazioni segrete a meno di non aver accesso alla chiave pseudo casuale che consente di ricostruire il segnale usato per propagare i dati lungo la gamma delle frequenze.

-68-

Page 74: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Tale chiave dovrà essere nota al ricevente, che dovrà anche conoscere i punti di inizio

e fine del messaggio nascosto nel file audio. A differenza della procedura di codifica delle fasi, l’espansione di spettro introduce un rumore di fondo casuale al suono, che viene però mantenuto al di sotto della soglia di percezione ed inoltre codici di correzione degli errori che garantiscono l’integrità dei dati. La quantità di informazione che si può celare mediante questo metodo è di circa 4bps [9].

In virtù di quanto detto l’espansione di spettro si basa sulla relazione esistente tra

banda di un segnale, il suo modulo ed il suo contenuto energetico. Molte tecnologie che interessano la telefonia mobile e le reti wireless, vengono attinte con questo metodo, in particolare mediante il salto di frequenza.

Le ultime 2 tecniche viste, espansione di spettro e codifica delle fasi, fanno parte di

quella categoria di inserimento del watermarking nel dominio delle frequenze. Invece, la codifica nei bit bassi richiama il dominio del tempo. Le difficoltà principali per l’espansione di spettro possono essere registrate nel fatto che il rumore, eventualmente aggiunto, entrerà in conflitto con la percezione imposta dal codificatore e che occorre una sincronizzazione preliminare (attraverso la conoscenza del data rate delle PNS). Le sequenze PN sono sequenze binarie periodiche, simili al rumore, generate da un registro a scorrimento con feedback di una lunghezza fissa m. Esse sono alla base della tecnica vista poiché garantiscono somiglianza al rumore e buone proprietà di autocorrelazione, inoltre, forniscono occorrenze di 0 e 1 con uguale probabilità.

Sulla base di quanto detto, ogni metodo presuppone propri vantaggi e svantaggi e

quindi si presta bene alla diversa tipologia di utilizzo. Come si sa dallo studio di varie tecniche generali, utilizzate non solo in questo settore, il miglior approccio molte volte è quello di andare a combinare varie tecniche. Da questo abbiamo la creazione di alcune tecnice ibride che confluiscono tutte nell’utilizzo del modello psico acustico. Abbiamo:

- Psychoacoustic modeling e bitstream marking (la vedremo nel capitolo 4 con

MP3Stego), essa garantisce una bassa complessità computazionale, non degrada la qualità audio e presuppone una detenzione affidabile. D’altronde richiede un bit rate fisso (es. MP3stego 128Kbps), una certa sincronizzazione, il watermark può essere perso in caso di conversione D/A .

- Psychoacoustic modeling e spread spectrum, rafforza i vantaggi del precedente, ossia incrementa la robustezza ad eventuali tecniche di processamento dell’audio (es.cropping) e conversione D/A. Tutto questo a discapito di una piccola distorsione nell’audio. Gli svantaggi sono da registrarsi nel bit rate e nella sincronizzazione [22].

-69-

Page 75: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Capitolo 4:

“S-Tools 4 e MP3Stego”

Page 76: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

S-TOOLS 4 E MP3Stego

In questo capitolo tratteremo nello specifico 2 programmi free per inclusione, la generazione e il recupero del watermark. Si andranno a notare eventuali differenze nella creazione e si fornirà un’impronta importante sulle caratteristiche dei vari file restituiti. I vari SW verranno presi in considerazione mediante il suo codice sorgente (scritti in linguaggio C) e si cercheranno l’insieme di passi che hanno portato alla creazione del watermark. Una volta creati i file watermarkati verranno confrontati sulla base delle caratteristiche esposte nei precedenti capitoli. Riferendoci in maniera pratica al capitolo 1, collaborazione crittografia e steganografia, vedremo come questi programmi cerchino di ottenere un sistema steganografico ideale. Alla fine dei paragrafi verranno descritti pregi e diffetti delle tecniche utilizzate. Nell’ultimo paragrafo verrà trattato il rischio concernente l’uso di tale tecniche in modo diverso.

4.1 S-TOOLS 4

S-Tools, scritto da Andy Brown, è tra i programmi steganografici più diffusi,

facilmente reperibile in rete presso i più comuni siti di software freeware. L’uso del programma, infatti, è completamente gratuito ed illimitato nel tempo. La versione 4 è stata rilasciata nel 1996 e da allora non sono state prodotte nuove versioni. Il programma gira su un qualunque PC con sistema operativo Windows in tutte le versioni, lo spazio richiesto su hard disk è trascurabile. Supporta i formati WAV, BMP e GIF come file contenitori [12].

La particolarità di questo programma è un'interfaccia utente basata

esclusivamente sul drag & drop. I menu infatti si presentano molto scarni. Lo schema di utilizzo è il seguente [21]:

- Si trascina il file contenitore da una finestra di un file manager nella

finestra principale di S-Tools. Viene visualizzata l'onda che rappresenta il file WAV e in basso viene mostrata la sua capacità.

-71-

Page 77: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig. 33 Screenshot passagio cover con S-Tools

- Si trascina il file segreto sul file contenitore.

- Si sceglie la passphrase e l'algoritmo di cifratura: si può scegliere tra IDEA, DES, Triple DES o MDC, tutti utilizzati in modalità CFB (Cipher Feedback). Ai files da nascondere viene applicata una compressione che si può impostare nel menù File/Properties…( si è notato che di default la compressione viene fatta su file non compressi es. PDF, file di word, exel etc.., mentre per MP3, ZIP e RAR la dimensione rimane la stessa).

Fig.34 Screenshot encode S-Tools

-72-

Page 78: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Per la codifica quindi abbiamo una serie di passi, che possono essere riassunti in questi (S-TOOLS essenzialmente codifica il file sorgente 2 volte):

- S-TOOLS prende un hash MD5 per la passphare sottomessa (la password

viene quindi criptata e l’output sarà una stringa a 128 bit di 32 valori esadecimali) Esempio: d41d8cd98f00b204e9800998ecf8427e (password vuota).

- Poi riutilizza questo hash di output per creare sempre tramite MD5 un altro hash (si presuppone sia stato dedotto per la sicurezza della passphare).

- Il peso del testo in chiaro è preapposto al plain-text (ossia materiale testuale in un file che non è formattato e senza essere letto da un singolo strumento del computer come ad esempio una linea da codice di comando).

- Il secondo hash creato viene utilizzato per criptare il file usando l’algoritmo scelto dall’utente.

- La metà del primo hash viene buttata via (riducendo il numero o il vettore utilizzato per lo pseudorandom number generator a 8 bytes, passo cruciale per la sicurezza del sistema).

- La prima metà del primo hash è usata per random number generator ( è semplicemente l’algoritmo IDEA che lavora in CFB mode).

- Il processo viene utilizzato per selezionare i bytes del file che saranno utilizzati dal cipher-text.

- I bit meno significativi (LSB) del file cover verranno poi modificati [14]. Il programma come si può vedere fa un uso spasmodico degli algoritmi di

cifratura ed in fase di codifica non effettua nessuna tipo di compressione in MP3, come quella vista nel capitolo 2. Cerca solo di cambiare i bit ridondanti ( si ricorsi Huffman) mantenendo nel file watermarkato finale la stessa risoluzione e lo stesso peso. Il file in output sarà quindi il solito WAV con le stesse info dell’header. Per questo punto è stato realizzato una funzione in matlab md5.m che denota la potenzialità dell’algoritmo MD5.

L’importanza dell’algoritmo DES per la cifratura e quindi per la sicurezza del

sistema è esposto dall’utilizzo anche in java (linguaggio OO che utilizza delle classi per implementare tale algoritmo):

-73-

Page 79: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

public static void main(String[] args) { BufferedReader strTastiera = (new BufferedReader(new InputStreamReader(System.in))); /** * In questo esempio utiliziamo DES */ String alg = "DES"; /** * Otteniamo la key */ KeyGenerator keygen = KeyGenerator.getInstance(alg); SecretKey desKey = keygen.generateKey(); System.out.println( "Chiave : " + new String(desKey.getEncoded()) ); /** * Cifratore */ Cipher desCipher = Cipher.getInstance(alg); System.out.print("Digita il testo da cifrare : "); String clearTextString = strTastiera.readLine(); /** * Cifro inizializzando il Cipher con la modalita e la key * modalità: Encript_mode * key: desKey */ desCipher.init(Cipher.ENCRYPT_MODE, desKey); byte[] cleartext = clearTextString.getBytes(); /** * Cifro con il metodo doFinal. */ byte[] ciphertext = desCipher.doFinal(cleartext); System.out.println("Testo Cifrato : " + new String(ciphertext) );

-74-

Page 80: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

/** * Decifratura */ desCipher.init(Cipher.DECRYPT_MODE, desKey); byte[] cleartext1 = desCipher.doFinal(ciphertext); System.out.println("Testo decifrato: " + new String(cleartext1)); } }

La capacità del cover WAV, nel nostro caso, è un aspetto importante: infatti se

eccediamo nelle dimensioni del watermark il SW rigetta la nostra procedura. Ritornando ad analizzare il nostro sempre amato camp96.wav, file audio

stereo a 16 bit campionato a 22050 Hz e che dura 6,517 secondi, avremo la seguente espressione per calcolare la grandezza del cover: (16*22050*2*6,517)=4598395 bits.

A questo punto, calcoliamoci la sua capacità. Sappiamo che, i bits ridondanti

sono costituiti dal bit meno significativo di ogni byte del file, quindi essendo un file a 16 bit avremmo:

capacità del cover = 4598395 bits / 16 ≈ 35 Kb.

Si può notare che, se fosse stato un file campionato a 8 bits avremmo avuto

una capacità maggiore per la cover 1/8 (12,5% del cover, invece del 6% della cover). Lo schema di codifica, operato con S-Tools, può essere rappresentato tramite la figura sottostante:

Fig.35 Codifica S-Tools

-75-

Page 81: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

A questo punto è essenziale andare a notare le differenze tra il file sorgente camp96.wav ed il file camp96+watermark. Il watermark è un TXT da 20Kb. Le differenze possono essere denotate confrontando i 2 file attraverso delle utility del MS-DOS comp ed edit:

Lanciando da linea di comando, l’utility comp: C:\....>comp camp96.wav camp96+watermark.wav Possiamo vedere che vengono ravvisati alcuni tipi di errori (differenze), che ci

danno un info abbastanza cruciale per il nostro lavoro. Infatti se avessimo 2 copie del file (originale e altro sospetto), che come si sa sotto intendono stesso peso e risoluzione, possiamo denotare dalle differenze che al file sia stato aggiunto un watermark. Esempio:

Fig.36 Differenze File WAV con comp del DOS

Comp del Dos trova le prime 10 differenze tra 2 file, evidenziando la posizione (offset) in hex dove si è verificata la differenza. Questo tipo di comando può anche verificare gruppi di file.

Per approfondire ancora meglio la nostra discussione, occorre andare a

vedere, all’interno del file con un editor esadecimale, dove essi si trovano. Utilizziamo quindi edit nomefile (presentiamo lo screenshot di edit dei 2 file):

-76-

Page 82: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.37 Differenze File WAV con edit del DOS

Grazie a questo screenshot riusciamo a capire la rappresentazione in binario di ogni singolo byte relativo al file (in questo caso ai 2 file) e la struttura dei file WAV (guardiamo i 44 byte di header) . Come si può vedere i 2 simboli sottolineati sono diversi per i 2 file:

- il simbolo 2 in ASCII (cover) ha valore 62 ed il valore 3 nel file watermarkato

ha valore 63… Si può capire che è stato cambiato il bit più a destra 20=1. - Il simbolo & in ASCII vale 38 ed è stato cambiato in ‘ che vale 39…

Proprio su questa verifica, si basano i SW antivirus in circolazione, ossia andare

a vedere le differenze dei bit di un programma che risiede sul nostro pc, con i bit relativi al programma rilasciato. Tutto questo avviene tramite un database che deve essere aggiornato.

Ora è necessario rispondere ad una domanda: “I relativi bit del file sorgente, in fase di codifica, con eventuali algoritmi di cifratura diversi (abbiamo visto che S-Tools ne usa 4) produrrà maggiori errori e differenze diverse?”

-77-

Page 83: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

In definitiva, potremmo rispondere senza la pratica poiché sappiamo grazie ai passi illustrati della codifica, che il file watermark verrà criptato in modo differente in base alla scelta dell’utente. Il numero di differenze non dipenderà dalla lunghezza del watermark, che si assume uguale per tutti i vari algoritmi utilizzati.

Fig.38 Differenze File WAV (diversi algoritmi di crittografia) con comp del DOS

Notiamo che alcune differenze combaciano, ma alla fine non si può dire che

siano uguali o corrispondano allo stesso bit. Per questa problematica si è sviluppato una routine in Matlab, ConfAlg.m.

-78-

Page 84: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Per estrarre il messaggio segreto dal contenitore (decodifica) si segue uno schema simile:

Si trascina il file contenitore da una finestra di un file manager nella finestra

principale di S-Tools; Si seleziona Reveal cliccando col tasto destro del mouse sul file contenitore

trascinato; Si sceglie la passphrase e l'algoritmo di cifratura; Se la passphrase è giusta compare un elenco dei file nascosti ed è possibile

salvarli. A livello di codice la decodifica richiede “solo” la conoscenza della passphare e dell’algoritmo di cifratura. In pratica operiamo a ritroso, si controlla che la pass è uguale a quella cifrata con md5 (dalla stringa a 32 byte si trova la nostra stringa), poi con l’algoritmo DES troviamo i bits cambiati, li compattiamo nel file ed il programma ritroverà il file.

Fig.39 Decodifica S-Tools

4.1.1 LSB E LIMITI SW

Per quanto riguarda l’hiding dei file WAV, il software lavora su file WAV a 8 o 16 bits avviene secondo lo schema LSB cioè vengono considerati ridondanti i bits meno significativi di ogni byte. I Cover Bits, ovvero il sottoinsieme di bits che effettivamente verranno rimpiazzati vengono scelti in base alla passphrase inserita in input. Infatti, S-tools usa un generatore di numeri pseudo-casuale che genera il suo output a partire dalla passphrase e lo usa per scegliere la posizione del prossimo bit del cover da rimpiazzare. Se, ad esempio, il file WAV ha 100 bits disponibili per l’embedding e si vogliono nascondere solo 10 bits, S-Tools non sceglierà i bits da 0 a 9 perché risulterebbero facilmente individuabili da un attaccante.

-79-

Page 85: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Piuttosto, sceglierà i bits 63, 32, 89, 2, 53, 21, 35, 44, 99, 80 o altri dieci, il tutto dipendente dalla passphrase inserita. In questo modo un attaccante si troverà in grossa difficoltà.

Ma come vengono nascosti in pratica i dati nei due tipi di file? Questi sono, per loro natura, stime non precise del corretto valore dell'onda

sonora in un particolare momento del tempo. Ad esempio i file sonori WAV in Windows sono immagazzinati usando 8 o 16 bit (che vengono poi eventualmente convertiti da una scheda sonora). Un file da 8 bit implica che i valori possono essere in un range da 0 a 255. Il range dei 16 bit varia invece da 0 a 65535. Tutto quello che S-Tools fa è distribuire la sequenza di bit che corrispondono al file da nascondere nei bit meno significativi del file sonoro. Ad esempio, ammettiamo che siano presenti i seguenti otto byte di informazione da qualche parte:

132 134 137 141 121 101 74 38

che in binario diventano: 10000100 10000110 10001001 10001101

01111001 01100101 01001010 00100110 Supponendo di voler nascondere il byte 11010101 (cioè 213) in questa

sequenza, il programma semplicemente sostituisce i bit meno significativi di ogni byte con il corrispondente bit estratto dal byte che si vuole nascondere. In questo modo la sequenza originaria è diventata:

133 135 136 141 120 101 74 39

che in binario è:

10000101 10000111 10001000 10001101

01111000 01100101 01001010 00100111 Come si può quindi vedere, i valori del file sonoro sono cambiati, al massimo,

di un valore per ciascun byte. Questa differenza non sarà assolutamente percepibile all'orecchio umano. Proprio qui c’è un limite di questo SW, si garantisce una velocità nella codifica senza modello psicoacustico (visto nel capitolo 2), ma la stima con cui viene approssimato esso può essere alcune volte troppo approssimativa per dare dei risultati soddisfacenti.

-80-

Page 86: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Altra limitazione non pratica ma che riguarda l’utilità e derivante dal fatto che S-Tools 4, come si è visto in codifica ed in decodifica, fornisce solo degli strumenti per trattare file WAV. Detti file sono molto pesanti e non sono compressi, per questo non sono molto popolari sulla rete Internet, basta vedere quanto tempo ci mettiamo a trasferire un file di tali dimensione. Quindi, già l’utilizzo intrinseco di tale file può portare a destare sospetti.

Ultima limitazione riscontrata è quella relativa alla possibilità di attacco di tale

sistema. Dalle conoscenze espresse nel capitolo, si è potuto capire che basta immagazzinare i bit meno significativi (LSB ogni 8 bit) all’interno di un vettore e cercare tutte le possibili combinazioni che porteranno ad avere un certo file (cosa troppo dispendiosa se il file è grande), l’inghippo sta nell’utilizzo del DES. Oppure si può optare, conosciuti i passi, ad eseguire un reverse engineering. Sul web si sono riscontrati alcuni tentavi di infrangere il sistema, culminati solo con la scoperta della presenza del watermark nella cover. Per questo programma ancora nessuno è stato in grado di eliminare o rintracciare il contenuto del watermark.

4.2 MP3Stego

Mp3Stego è stato rilasciato nell’agosto del 1998 ed è disponibile sia per i sistemi operativi Microsoft che per Linux. Oltre all’eseguibile, l’autore Fabien Petitcolas (Computer Laboratori, Cambridge (UK)) distribuisce anche il sorgente liberamente (in linguaggio C). Il programma si basa su un’interfaccia a linea di comando anche se è possibile scaricare una interfaccia grafica ancora da migliorare. Esistono due comandi: encode e decode. Alla sua realizzazione hanno contribuito appassionati ed esperti di tutto il mondo [5].

Fig.40 MP3Stego dal DOS

-81-

Page 87: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

In generale, MP3Stego nasconde un file di testo (watermark) all’interno di un file mp3, durante il processo di codifica di un file da un formato WAV al formato MP3. L’informazione aggiuntiva viene prima compressa e criptata, ed infine nascosta nell’MP3 sfruttando le frequenze non udibili dall’orecchio umano. Ovviamente per la fase di codifica , è necessario avere la chiave segreta utilizzata durante la codifica.

L’encoder è il componente che viene implementato con può sforzo

computazionale. Esso esegue la procedura di codifica prendendo in input una serie di parametri:

- File audio WAV - Un file di testo o altro file (ma di piccolissime dimensione) - Una chiave segreta (passphare) - Il nome del file mp3

Il file WAV da codificare, però, non deve essere un file qualunque ma deve

sottostare ad un insieme di caratteristiche (tra le più comuni nei file audio): - Avere una frequenza di campionamento a 44100 Hz, - Essere mono. - Essere campionato a 16 bit. Dal prompt dei comandi possiamo utilizzare l’encode in questo modo:

..>encode –E data.txt sound.wav sound.mp3

Eseguendo questo comando e svolgendo le aspettate alchimie su di esso, si è potuto osservare che il file codificato con watermark restituito è di uguale dimensione al file solo codificato da WAV a MP3. Questo ci riporta al discorso dell’LSB, ma alla fine come vedremo MP3Stego utilizza un’altra tecnica.

Lo schema di codifica, operato da MP3Stego, può essere rappresentato

tramite la figura sottostante:

-82-

Page 88: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.41 MP3Stego encode

Si può notare dalla codifica, che è diminuito il bit rate da 705Kbps a 128 Kbps ed inoltre il fattore di compressione è all’incirca 1:6 (alcuni codificatori possono raggiungere anche fattori molto maggiori es. Lame 1:11). Le altre caratteristiche viste ossia frequenza di campionamento etc.. sono rimaste invariate. Ed infine il processo di encode rigetta se tentassimo di iniettare nel file WAV un file watermark più grande dello 0,0108..% della grandezza del cover stesso. Questa ultima constatazione è stata realizzata sulla base dello studio di più cover di diverso peso, ma uguale risoluzione. Es. venditti44.wav=24.300.908 byte*8=194.407.264 bits

Capacità cover = 194.407.264*0,0108% = 21094 bits

Si può comprendere da quanto detto, che sia impossibile iniettare file audio o

altri tipi, che non siano alla fine file di testo TXT. Dal codice sorgente del programma, abbiamo potuto constatare che il

processo di generazione e inclusione del watermark avviene nel cuore della fase di codifica Layer III, vale a dire nel rate-loop (visto nel capitolo 2). La compressione è di tipo Loosy (con perdita di dati). Il rate-loop quantizza i dati in input e accresce la dimensione del quantizzatore fino a quando i bit quantizzati possono essere codificati con il numero necessario di bit. L’altro loop crecerà le distorsioni apportate. Verrà poi creato un certo vettore che consentirà di immagazzinare il numero di bit principali usati per i fattori di scala e la codifica Huffman nel bit stream MP3. Noi possiamo codificare questi bit secondo un discorso di parità, cambiando la condizione di fine rate-loop. Solo alcuni di questi bit però verranno modificati, sulla base di un selezione pseudo random bit generator attinta con l’algoritmo SHA-1 [13].

-83-

Page 89: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Alla base dell’inclusione c’è il discorso di parità, ossia viene utilizzato un blocco monouso (es. cifrario di Vigenere) per selezione un insieme di questi bit, in modo da includere i bit del testo cifrato attraverso la parità (procedura per il controllo degli errori). In questo modo l’informazione può essere nascosta cambiando qualunque dei bit in modo meno invadente. Si può immaginare il compromesso: più bits possono essere nascosti nel testo codificato.

MP3Stego utilizza l’algoritmo di cifratura 3DES e un hash SHA-1. Essi sono

ampiamente implementati e ben testati. Sulla base che “…Un buon sistema steganografico potrebbe essere basato nell’assunzione che possibili attaccanti abbiano piena conoscenza di questa sequenza di azioni e quindi i dettagli d’implementazione. L’unica cosa che potrebbe sviarli dalla conoscenza di tale tecnica, utilizzata su di un file, è quella piccola sequenza di numeri casuali ”. MP3Stego quindi impiega una passphare e l’algoritmo di cifratura per proteggere i dati inseriti (watermark) e SHA-1 per generare casualmente i bit per il processo di mascheramento (calcola una rappresentazione digitale di lunghezza fissa di una sequenza di dati in ingresso di lunghezza qualunque).

La forza del SHA-1 sta nel fatto di utilizzare la rappresentazione digitale della

sequenza a 160 bits, mentre ad esempio MD5 (stesso algoritmo hash) a 128. Il 3DES, venne creato per ovviare alle lacune riscontrate dal DES (visto in S-

Tools), si basa sulla ripetizione del cifrario (DES) per 3 volte. Il DES originariamente proponeva una chiave a 56 bit che non era accettabile contro attacchi brute-force (verifica di tutte le soluzioni teoricamente possibili fino a che non si trova quella corretta).

Per quanto riguarda la decodifica, i parametri che vengono presi in input sono: - File MP3; - La chiave segreta utilizzata; Dal prompt dei comandi possiamo utilizzare decode in questo modo:

..> decode –X venditti44+watermark.mp3

Il watermark estratto sarà memorizzato all’interno di un file testo dal nome venditti44+watermark.mp3.txt. Lo schema della decodifica è espresso dalla seguente figura:

-84-

Page 90: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.42 MP3Stego decode

Si può immaginare che i dati segreti vengano prima decifrati, poi decompressi e in ultimo salvati in un file TXT.

A questo punto è del tutto superficiale andare ad evidenziare eventuali differenze tra file cover wav e file in uscita mp3, come si è fatto per S-Tools, poiché denoteremo delle differenze grandissime. E’ sicuramente interessante però andare a vedere eventuali differenze tra il file mp3 con il watermark e lo stesso codificato senza l’hiding. Per la nostra trattazione, si considerano:

- venditti44+watermark.mp3 (4,20Mb) - venditti44.mp3 (4,20 Mb) - file watermark TXT da 2 Kb (visto che di più non riesce a reggere). - Stessa passphare (“ciao”).

Fig.43 confronto file MP3 con e senza watermark con compo del DOS

-85-

Page 91: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Quasi per caso è capitato che, la prima differenza rilevata faccia trovare 2 valori ASCII consecutivi: ossia 24 e 25. Questo ci riporta alla tecnica utilizzata da S-Tools, ma alla fine non è così. Con l’evidenziazione delle altre differenze già notiamo un totale cambiamento casuale, es. “(“ = 40, “+” = 43. Denotiamo una certa progressione lineare di errori nell’offset (non si intende l’ordine che viene fornito dalla rilevazione di comp), ossia 1A8,1A9,1B2,1B3,1B4 etc.. ed un’alta percentuale di valori 0 in ASCII, per il file watermarkato.

Per capire ancora meglio le differenze, c’è la necessità di studiarne le forme

d’onda. Ci viene in ausilio il programma Audition dell’Adobe. Nella successiva figura verrano plottate le 2 forme d’onda dei primi 460 millisecondi:

Fig.44 confronto file MP3 con e senza watermark con Adobe Audition

Come volevasi dimostrare, non è stato semplicissimo individuare differenze

evidenti. L’unica cosa che può saltare all’occhio è la crescita o decrescita di intensità in MOLTI punti. Ad esempio plottando le onde da 0.06 secondi a 0.12 secondi abbiamo:

-86-

Page 92: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.45 confronto file MP3 con e senza watermark in dettaglio

La nostra trattazione delle differenze continua con l’utilizzo di matLab.

Accompagnati dalla routine mp3read (che si appogia su 2 applicativi 123mp3.exe e mp3info.mp3 relativi alla ricostruzione di frame mp3), saremo in grado di trattare i 2 file mp3, poiché come si è detto in precedenza, MatLab non riesce a svolgere nessuna tipo di operazione su di essi. Mp3read intende la stessa sintassi di wavread. Quindi leggendo con tale funzione venditti44.mp3 e venditti44+watermark.mp3, potremmo confrontare i 2 vettori (non matrici perché il file è mono) che definiscono i campioni con la function find. Dal command window:

>> [y,fs,bits,opt]=mp3read('venditti44.mp3'); >> [Y,Fs,Bits,Opt]=mp3read('venditti44+watermark.mp3'); % all’interno di opt.fmt verranno definite le caratteristiche dell’mp3(bit rate etc..)

>> i=1:length(y); % i=indice contatore, la lunghezza è impostata su y, ma è uguale a Y = 12.149.039

>> Differenze=find(y(i) ~=Y(i)); % Differenze= vettore che ospita tutti gli indici (campioni differenti), ossia ricerchiamo le differenze

visuali viste prima con audition a livello pratico.

>> length(Differenze); % quante differenze ci sono nel file (ne sono tantissime)

>> Concordanze=length(y)-length(Differenze); % notiamo per i file un numero di concordanze alto, non quanto però si potrebbe aspettare

dall’ascolto di tutti e 2 i file. Concordanze=8.514.983, Differenze=3.634.056.

-87-

Page 93: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Per dare visione completa al nostro discorso occorre, a questo punto, analizzare alcuni valori di intensità relativi ai campioni. La prima differenza riscontrata è nel primo campione: y(1)= 2.4414*10-4, Y(1)= 2.1362*10-4, notiamo un valore minore nel file watermarkato. La prima concordanza, invece, è sul valore 2: y(2)=Y(2)= 2.4414*10-4, è lo stesso valore del primo campione senza watermark. L’aspetto importante, che ne viene fuori, è quello di vedere che entità hanno le differenze su tali campioni:

>> for i=1:length(y) % per la mia trattazione o preso valori più piccoli di lunghezza tipo 100 if(y(i)~=Y(i)) disp(y(i)-Y(i)) % si può creare anche un vettore per immagazzinare le entità delle differenze es. g(i)=y(i)-Y(i);

end end

Con questo codice notiamo alcune cose interessanti riguardanti la sequenza di valori. Ossia l’entità della differenza al campione 1 è uguale a quella del campione 3, visto che in 2 c’è concordanza: 3.0518*10-5.

Quanto detto è verificato, ad esempio, anche sul campione 4 e 5: 6.1035*10-5. Cosa più interessante è che 3.0518*10-5*2= 6.1035*10-5. Queste coincidenze si verificano in molti campioni del file, ma non su tutti ed alcune volte presentano un + davanti (valore maggiore file senza watermark) ed un – (contrario). In definitiva, si può assumere che creando un vettore x che prenda questi punti (differenze), si può ricreare il segnale relativo al watermarking inserito. Dopo di che bisognerà togliere l’eventuale eco o risonanza aggiuntiva dal segnale (in base alla tecnica utilizzata), calcolare i suoi valori discreti 0 e 1 e decriptarlo, per ottenere il file .TXT. La distribuzione di queste deviazioni standard relative a variabili casuali (gaussiane), segue una distribuzione di X2.

Se avessimo voluto calcolare i valori evidenziati dai puntini sulla figura senza e

con watermark, precedentemente presentata nell’intervallo di tempo 0.06 sec e 0.12 sec, avremmo dovuto fare:

>> length(y)/Fs % troviamo il tempo complessivo in secondi dei file mp3, Fs =44100

>> inf=0.06*Fs % campione inferiore da analizzare

>> super=0.12*Fs %campione superiore

-88-

Page 94: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

>> i=inf:super >> g(i)=y(i)-Y(i); % notiamo tutte le differenze in un vettore Nostro

Le due differenze, sottointese dai puntini saranno presenti in questo vettore,

per evidenziare la più grande differenza, basterà utilizzare max(g). In merito a questo si è potuto cercare anche la differenza maggiore in relazione all’intero file riscontrata in 0,0187.

Una differenza, in ambito di codifica, che sale all’occhio facilmente tra il

programma S-Tools e MP3Stego è relativa alla distribuzione delle differenze. Il lavoro da fare in Matlab sarà quello di trovare l’ultima differenza tra i 2 vettori relativi all’mp3.

>> Mass=max (Differenze) % Mass è uguale a 3.981.734 (1/3 del file), questo significa che l’ultimo campione diverso è questo. % y(Mass)-Y(Mass)≠0.. Interessante è che il watermark viene diffuso solo all’inizio del file e non su % tutto come S-Tools. Altra cosa che ne viene fuori è che l’ultimo campione differenza (Mass), è % uguale a 3*10-5. Prima differenza tra i file e differenza standard S-Tools.

>> for i=1:Mass if(y(i)-Y(i)<0) g=g+1; % contatore posto a 0 inizialmente

end end % notiamo le evenienze di differenze <0 ... 1.820.037 ossia intorno al 50% delle differenze.. Si ricordi la casualità di SHA-1... Utilizzando questi tipi di file (4,20Mb, grande mole di dati da trattare) si è

potuto osservare, con un velo di rabbia, che matlab impiega molto tempo a trattare ogni singolo campione (con la find), infatti è grandissimo il costo computazionale relativo ad un controllo (es. if). Detto questo sul mio PC da 512MB di RAM e 1,8 GHz per la frequenza di clock del processore, queste tipi di operazioni sui vettori visti provocavano degli errori relativi all’esaurimento della memoria virtuale con un utilizzo complessivo della CPU attestata per tutta la durata delle operazioni al 100%. Si fa riferimento a quelle operazioni riguardanti l’intero/i file. Anche per la generazione di eventuali plot, per la raffigurazione delle forme d’onda, si è potuto constatare questa situazione.

Da quanto detto in questo paragrafo potremmo capire che MP3Stego utilizza

una tecnica di watermarking molto vicina all’ Echo-Data-Hiding. Vediamo perché.

-89-

Page 95: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

4.2.1 Echo Data Hiding E LIMITI SW

L’Echo Data Hiding è una tecnica di watermarking audio che include, dentro un segnale audio (la nostra cover) introducendo un eco, un insieme di dati (watermark). Se il suono originale e la sua risonanza sono divisi da uno spazio di tempo piccolo abbastanza, l’orecchio umano non riesce a distinguere i due suoni. I dati vengono codificati in questi eco rappresentando gli 0 e gli 1 come 2 offsets differenti di eco. In poche parole, essi dipendono da 3 parametri: ampiezza iniziale, tasso di indebolimento del suono e da un’offset (ritardo). Attraverso quest’offset, che si trova tra il segnale originale e l’eco (che decresce), i 2 segnali si miscelano. Ad un certo punto, il sistema uditivo umano non sarà in grado di distinguere i 2 segnali. L’eco sarà avvertito come aumento di risonanza dovuta a distorsione ambientale. Questo punto è difficile da determinare poiché dipende da alcuni fattori: ascoltatore, qualità audio del file etc.. In generale possiamo dire che questa fusione avviene ogni millesimo di secondo per molti ascoltatori e molti suoni [9].

Fig.46 Metodologia Echo Data Hiding

In definitiva, il codificatore userà 2 tempi di indugio: uno per rappresentare gli

0 (offset, all’incirca 0.5 ms) e un altro per rappresentare gli 1 (offset+delta 1 ms). Entrambi questi tempi sono al di sotto della soglia di mascheramento indetta dal sistema uditivo. Quindi si sta riprendendo il discorso condotto nel capitolo 2 sull’effetto di mascheramento. Per codificare più di un bit, il segnale originale sarà diviso in più porzioni piccole: su ognuna di queste viene introdotta un’eco, per codificare il bit desiderato. Il segnale finale codificato sarà la combinazione di tutte le sottoparti di segnale codificate indipendentemente.

Page 96: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Fig.47 Combinazione parti codificate

Se una cifra binaria uno è rappresentata da un certo ritardo y, mentre la cifra

binaria zero è caratterizzata da un ritardo x, la scoperta del segnale nascosto comporta la rilevazione di spazi fra gli eco. Questa procedura di echo hiding lavora particolarmente bene su file sonori sui quali non vi sia un peggioramento del suono dovuto a rumore aggiuntivo o a codifiche con perdita (lossy) ed in cui non vi siano intervalli di silenzio. Infatti, l’estrazione delle informazioni nascoste è legata all’individuazione di eventuali spazi fra le eco inserite. L’aggiunta di risonanza però, può essere problematica in alcune applicazioni musicali, alcuni parametri della tecnica di echo-hiding possono essere modificati durante il processo di masterizzazione. Un esempio di codice matLab relativo a questa tecnica è fornito nell’appendice.

L’approccio visto per S-Tools, in alcuni casi, modifica il file cover introducendo

un rumore di fondo facilmente avvertibile. Mentre quello visto in questo paragrafo evita questo inconveniente, sotto intende un’ottima qualità del file stego, ma una scarsa capacità del cover. In pratica, lo stesso fine del programma MP3Stego.

Da qui si possono incominciare ad accennare alcune limitazione, che questo

tipo di programma propone: - Il WAV che viene codificato, deve possedere una struttura (44100 Hz,

Mono, 16bits) ben definita. Molte volte c’è bisogno, quindi, di un programma in grado di codificare primariamente questo tipo di file nel formato utilizzato da MP3Stego. Si pensi al fatto che molti file audio WAV sono stereo.

-90-

Page 97: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

- Il watermark può essere rimosso solamente attraverso una decompressione e successivamente una re-compressione del bitstream. Ma non senza una notevole degradazione della qualità del file audio risultante.

- L’ultimo parametro su cui si fonda lo studio del watermarking, è la

resistenza alla stegoanalisi. Uno dei metodi primari, che viene utilizzato per denotare la presenza di un messaggio nascosto è vedere se ci siano degli ovvi e ripetitivi modelli. Ad esempio, nel caso di S-Tools, abbiamo visto che alcuni campioni vengono modificati in base al bit meno significativo. Questo può essere un rischio avendo il file originale. Per MP3Stego, il concetto è un po’ più complicato, poiché utilizziamo SHA-1, e quindi non si fornisce un modello ben preciso all’eventuale stegoanalista. Comunque, rimane sempre il fatto che ci sarà la possibilità di comprimere il file in uscita MP3 e comprimerlo, sempre in MP3, di un fattore bassissimo 0,01%.

La prima tecnica, che si è pensato di adottare per verificare la robustezza del

metodo di watermarking, introdotto in MP3Stego è il cropping. Da ricerche in materia, si è potuto osservare che scomponendo (tagliando) il numero di campioni del file watermarkato in una serie di vettori di grandezza uguale ognuno (molto minori alla dimensione totale del file watermarkato), secondo tematiche riguardanti il tempo (es.30 sec,10 sec etc..), e poi successivamente ricomponendole creando un apposito vettore in grado di contenere il tutto, avviene la possibilità di perdere parte del watermark. In tal senso si perde tutto il watermark.

Fig.48 Decomposizione file venditti44+watermark.mp3

-91-

Page 98: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Questa questione potrebbe essere espressa, nella perdita di alcuni dati nei campioni che si trovano all’estremità inferiore o superiore del crop. Infatti, attraverso il matlab immettendo un valore decimale per i campioni (y(3.4)) restituisce un errore (ossia con il tempo non si è mai precisi nell’individuare il campione e abbiamo sempre un discorso di interpolazione dei punti da non trascurare). Riprendendo il nostro file di Venditti con il watermark è possibile fare alcune interessanti assunzioni:

- Il watermark si estende su 1/3 del file: per questo creando 3 vettori che

ospitino 1/3 del file ognuno si potrebbe anche non verificare la perdita del watermark. Immettendo un variabile temporale 30 sec, abbiamo che il file viene diviso in 9 parti (essendo lungo 4 min 20sec). Si può capire che il watermark verrà toccato in 3 parti, riferendoci all’alta densità di valori differenza nell’ampiezza nel primo intervallo.

- Il watermark è grande 2 Kb: questo significa trovare la dimensione giusta

(non troppo grande) per cancellare il watermark. Da quanto si è detto nello scorso capitolo MP3Stego ha una capacità max per la cover di 0,01 %. D’altronde più è piccolo l’intervallo, più c’è la possibilità di cambiare valori relativi l’ampiezza in un certo punto. Visto che il file cover venditti44.wav era grande 23.800.908 byte e quindi poteva ospitare un watermark al massimo di 2,3Kb, possiamo affermare che la grandezza massima degli intervalli non debba superare l’1/3 del file watermarkato.

In Matlab, assumendo che si conosca il tempo totale (275 sec, relativo a Ncampioni/Fs ), per esempio potremmo effettuare:

>> soglia=length(y)/9; % calcolare l’intervallo da ≈30 sec relativo al file watermarkato.. 672.517 campioni

>> h(length(y))=0; % creiamo un vettore ospitante della lunghezza di y >> for i=1:soglia % esempio primo crop h(i)=y(i); %popoliamo il vettore end; % questo discorso verrà fatto altre 8 volte, aggiungendo man mano i campioni al vettore h

Il vettore risultante h potrà divenire anche più grande o più piccolo di y,

poiché si và a tralasciare alcuni decimali e nel caso di crop tramite audition avviene la stessa problematica. La routine è solo esemplificativa per il procedimento di cropping e quindi non si presta bene al confronto. Questo discorso ci porta alla conclusione che la tecnica utilizzata da mp3Stego, non è robusta ad un eventuale attacco effettuato con il cropping.

-92-

Page 99: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Si palesa, altresì, la fragilità del metodo dopo un’ulteriore compressione per l’eliminazione di bit ridondanti:

>> mp3write(h,fs,16,’crop.mp3’); [18] % ci appoggiamo al codificatore lame.exe

Anche in questo attacco abbiamo 2 vettori differenti, vuoi per numero di

campioni, vuoi per valore dei campioni. Come si è detto alla fine del capitolo 3, la tecnica migliore è quella che fa riferimento al modello psico acustico più l’espansione di spettro, dove il watermarking si muove in maniera continua all’interno del file cover.

In definitiva, l’inghippo più grande per tutti e due i sw analizzati è quello di

conoscere le sequenze di passi (algoritmi), con un’opportuna reingegnerizzazione potremmo capire se una cover possa ospitare un messaggio segreto. L’unica cosa da menzionare è che per S-Tools si è trovato qualche progetto sul web, che si presupponeva l’intenzione di andare ad attaccare brutalmente il programma (STcrack scritto in C++) o almeno di andare se un certo file è affetto da watermark. Si ricordi sempre che essi sono dei programmi free (abbiamo il codice sorgente), mentre alcuni sw commerciali (STEGANOS) saranno sempre più difficili da attaccare, a meno che non si abbia una mano dal team di sviluppo. Si può palesare l’importanza della componente umana (mantenimento del segreto), in uno studio di steganografia e del relativo lavoro di stegoanalisi.

-93-

Page 100: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

4.3 CONCLUSIONI

Negli ultimi anni, le tecniche steganografiche riguardanti i file audio stanno

conoscendo un’ampia popolarità, non solo tra quelle industrie o società di grandi dimensioni (Microsoft), ma anche verso un uso privato. Si può fare un cenno ai produttori dei SW visti nel precedente paragrafo, che hanno lasciato la ricerca per dedicarsi al lavoro sotto varie società informatiche (ultima versione di MP3Stego 1998). Questo è dovuto essenzialmente al fatto che i tool di stegoanalisi, che sono a disposizione del pubblico (free), trovano una certa difficoltà a rintracciare eventuali etichette o code all’interno di questi tipi di file. Un altro fattore può essere confermato dall’aumento della popolarità e di utilizzo degli mp3, che ormai si trovano su qualsiasi hard-disk e sono diffusissimi sul web. Programmi come MP3Stego e S-Tools promettono di mantenere un comunicazione all’interno di un file, che sia essa un etichetta oppure un messaggino non ha differenza. Esiste però una diversa forma di steganografia.

Essa è costituita da tutte quelle pratiche, più o meno legali, di occultamento di

messaggi nascosti in dischi o in altri tipi di registrazione del suono: i così detti “messaggi subliminali”. I messaggi subliminali sono intorno a noi, suoni rapidissimi troppo veloci perché l’orecchio possa avvedersene. Eppure li sente. Questo ci riporta allo studio affrontato più volte nella tesi della percezione umana. In questo caso oltre alle conoscenze psico acustiche (eco e rumore), si dovrebbe riuscire ad apprendere la modalità con cui l’uomo immagazzina quello che sente, nella memoria temporanea, e poi per esercitazione (suoni uguali ripetuti più volte) la mantiene. Non pochi casi giudiziari sono stati aperti da persone che giustificano atti compiuti con il controllo delle proprie menti, operato da tali mezzi. Si ricordi il caso della morte di John Lennon, dove l’omicida si è discolpato dicendo che l’ho aveva sentito da lui nelle sue canzoni. Infatti, in alcune canzoni dei Beatles, in particolare “Revolution Number 9”, si possono sentire (attraverso la chiave di decodifica “sentire la traccia indietro”) delle frasi cantate che intimano la conoscenza della morte di Paul MCcartney e come sarebbe morto (incidente stradale).

Qui c’ è da fare un’appunto: si potrebbe anche trattare di una trovata di

marketing per vendere i propri dischi. Si può notare che nella filmografia internazionale moderna (specialmente in quella degli USA), il tema dei controlli sul cervello attraverso messaggi ripetuti è trattata in molti film (“The Manchurian Candidate”, “The Island”, “The Jacket” etc..), questo non solo perché l’argomento interessa al pubblico, ma anche perché ci dovrebbe essere un fondo di verità.

-94-

Page 101: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

Le aree che riguardano le tecniche di data-hiding possono essere molteplici, si pensi ad esempio all’utilizzo di queste tecniche sul DNA e alle possibili novità che potrebbe apportare in ambito sanitario. Molte volte però, dette tecniche possono essere utilizzate per scopi di evasione di alcuni vincoli legali imposti: del tipo terrorismo Bin Laden (visto nel primo capitolo), oppure per diffondere codici di decodifica per alcuni sistemi di sicurezza ed autenticazione. Un esempio ne è il sistema CSS per garantire il controllo contro la copia e la diffusione dei contenuti multimediali sui DVD. Il tutto si basa sulla conoscenza che un programma (insieme di righe di codice) è una stringa di bit, quindi un numero alcune volte primo. Nel marzo del 2001, il matematico Phil Carmody scoprì un numero primo, composto da 1401 cifre, che, scritto in esadecimale, rappresenta il file gzip del codice sorgente originale in linguaggio C che decifra lo schema di cifratura dei film in DVD. Poiché è evidentemente illegale possedere questo programma, anche il numero in questione è stato classificato con il nominativo “primo illegale”. Inizialmente Carmody non fece altro che comprimere il file sorgente di decodifica con GZIP (programma di compressione per sistemi UNIX), chiamiamo il numero risultante K. Per il teorema di Dirichlet sui numeri primi in una progressione aritmetica, che afferma che se a e se b sono 2 numeri interi positivi primi fra loro, allora la progressione aritmetica a, a+b, a+2b, a+3b, a+4b.. contiene un’infinita di numeri primi, sappiamo che per ogni intero fissato b relativamente primo con k, esiste un’infinita di numeri primi della forma a*k+b.

Se scegliamo a come potenza di 256 (28) maggiore di b, il numero risultante può essere ancora decompresso per ottenere il file originale: perciò esiste un’infinità di numeri primi che producono lo stesso codice. Fra questi Carmody trovò:

k*2562+2083 k*256211+99

Nel momento in cui furono scoperti, il secondo dei due era abbastanza grande

da rientrare nella lista dei più grandi numeri primi conosciuti. Il primo illegale scoperto da Carmody:

4 85650 78965 73978 29309 84189 46942 86137 70744 20873 51357 92401

96520 73668 69851 34010 47237 44696 87974 39926 11751 09737 77701 02744 75280 49058 83138 40375 49709 98790 96539 55227 01171 21570 25974 66699 32402 26834 59661 96060 34851 74249 77358 46851 88556 74570 25712 54749 99648 21941 84655 71008 41190 86259 71694 79707 99152 00486 67099 75923 59606 13207 25973 79799 36188 60631 69144 73588 30024 53369 72781 81391

-95-

Page 102: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

47979 55513 39994 93948 82899 84691 78361 00182 59789 01031 60196 18350 34344 89568 70538 45208 53804 58424 15654 82488 93338 04747 58711 28339 59896 85223 25446 08408 97111 97712 76941 20795 86244 05471 61321 00500 64598 20176 96177 18094 78113 62200 27234 48272 24932 32595 47234 68800 29277 76497 90614 81298 40428 34572 01463 48968 54716 90823 54737 83566 19721 86224 96943 16227 16663 93905 54302 41564 73292 48552 48991 22573 94665 48627 14048 21171 38124 38821 77176 02984 12552 44647 44505 58346 28144 88335 63190 27253 19590 43928 38737 64073 91689 12579 24055 01562 08897 87163 37599 91078 87084 90815 90975 48019 28576 84519 88596 30532 38234 90558 09203 29996 03234 47114 07760 19847 16353 11617 13078 57608 48622 36370 28357 01049 61259 56818 46785 96533 31007 70179 91614 67447 25492 72833 48691 60006 47585 91746 27812 12690 07351 83092 41530 10630 28932 95665 84366 20008 00476 77896 79843 82090 79761 98594 93646 30938 05863 36721 46969 59750 27968 77120 57249 96666 98056 14533 82074 12031 59337 70309 94915 27469 18356 59376 21022 20068 12679 82734 45760 93802 03044 79122 77498 09179 55938 38712 10005 88766 68925 84487 00470 77255 24970 60444 65212 71304 04321 18261 01035 91186 47666 29638 58495 08744 84973 73476 86142 08805 29443 .

È materia di dibattito la questione se tale numero, in quanto tale, sia o meno illegale. La questione non è mai stata portata in giudizio, ma è possibile che il numero in sé e il suo possesso possano essere dichiarato legale, ma non una certa interpretazione dello stesso. L’algoritmo di decrittazione viene utilizzato su alcuni SW adibiti a rippare i DVD: DVD Decrypter.

Concludendo, in questa tesi abbiamo visto come sia possibile salvaguardare la

paternità delle nostre o altrui opere e come alcune volte sia possibile che questi metodi venga utilizzato a fini illegali e illegittimi che ricadano anche nell’alterazione delle proprietà intellettive dell’uomo stesso. A tal proposito la legge in materia di privacy e diritti inviolabili deve trovare un giusto compresso per l’utilizzo di tale tecniche, fornendosi di specialisti attinti alla ricerca di eventuali watermark nocivi. Oppure alle stesse macchine ideate a tale scopo.

-96-

Page 103: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

APPENDICE A

° serieFourier.m

% simulazione serie di Fourier function serieFourier(action) switch action %scegli un' azione case 'fondamentale' t = 0:1/200:1; x = sin(2*pi*t)*4/pi; plot(t,x); grid; ylabel('Amplitude') xlabel('Time') hold case 'armonica_3' t = 0:1/200:1; x = sin(2*pi*t)+1/3*sin(3*2*pi*t); x = x*4/pi; plot(t,x); grid; ylabel('Amplitude') xlabel('Time') hold case 'armonica_7' t = 0:1/200:1; x = sin(2*pi*t)+1/3*sin(3*2*pi*t)+ ... 1/5*sin(5*2*pi*t)+1/7*sin(7*2*pi*t); x = x*4/pi; plot(t,x); grid; ylabel('Amplitude') xlabel('Time') hold case 'risultante' t = 0:1/200:1; x = sin(2*pi*t)+1/3*sin(3*2*pi*t)+ ... 1/5*sin(5*2*pi*t)+1/7*sin(7*2*pi*t)+ ... 1/9*sin(9*2*pi*t)+1/11*sin(11*2*pi*t)+ ... 1/13*sin(13*2*pi*t); x = x*4/pi; plot(t,x); grid;

-97-

Page 104: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

ylabel('Amplitude') xlabel('Time') hold case 'make_title' my_title = get(gcbo,'String'); title(my_title,'fontsize',16); end

° curva_isofonica.m %implementazione della curva isofonica in quiete utilizzata nei modelli %psicoacustici forniti da MPEG Fmax = 22000; Fnorm = 1000; f = 1:1:Fmax; %for f=1:1:Fmax Tq = (3.64 * ((f / Fnorm).^(-0.8))) - (6.5 * (exp(1).^(-0.6*((f/Fnorm-3.3).^2)))) + ((10.^(-3))*(f/Fnorm).^4); semilogx(Tq); %PLOT SU SCALA LOGARITMICA grid on; zoom on; figure; plot(Tq); grid on;

° hz2bark.m function barks = hz2bark(hz) % bark_frequency = hz2bark (hertz_frequency) % %hz2bark cambia la frequenza dall'unità Hz In BarK barks=13*atan(.00076*hz)+3.5*atan((hz/7500).^2);

° normalize.m function newsig = normalize(origsig, fftlength, numbits) % newsig = normalize(originalsignal, fftlength, numberbits) % % NORMALIZE prende un segnale e normalizza la sua potenza spettrale % ad un Massimo di 0 db. newsig=origsig./(fftlength.*(2.^(numbits-1)));

-98-

Page 105: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

° specgram.m

function [yo,fo,to] = specgram(varargin) error(nargchk(1,5,nargin)) [msg,x,nfft,Fs,window,noverlap]=specgramchk(varargin); error(msg) nx = length(x); nwind = length(window); if nx < nwind % zero-pad x if it has length less than the window length x(nwind)=0; nx=nwind; end x = x(:); % make a column vector for ease later window = window(:); % be consistent with data set ncol = fix((nx-noverlap)/(nwind-noverlap)); colindex = 1 + (0:(ncol-1))*(nwind-noverlap); rowindex = (1:nwind)'; if length(x)<(nwind+colindex(ncol)-1) x(nwind+colindex(ncol)-1) = 0; % zero-pad x end if length(nfft)>1 df = diff(nfft); evenly_spaced = all(abs(df-df(1))/Fs<1e-12); % evenly spaced flag (boolean) use_chirp = evenly_spaced & (length(nfft)>20); else evenly_spaced = 1; use_chirp = 0; end if (length(nfft)==1) | use_chirp y = zeros(nwind,ncol); % put x into columns of y with the proper offset % should be able to do this with fancy indexing! y(:) = x(rowindex(:,ones(1,ncol))+colindex(ones(nwind,1),:)-1); % Apply the window to the array of offset signal segments. y = window(:,ones(1,ncol)).*y; if ~use_chirp % USE FFT % now fft y which does the columns y = fft(y,nfft); if ~any(any(imag(x))) % x purely real if rem(nfft,2), % nfft odd select = [1:(nfft+1)/2]; else select = [1:nfft/2+1]; end

-99-

Page 106: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

y = y(select,:); else select = 1:nfft; end f = (select - 1)'*Fs/nfft; else % USE CHIRP Z TRANSFORM f = nfft(:); f1 = f(1); f2 = f(end); m = length(f); w = exp(-j*2*pi*(f2-f1)/(m*Fs)); a = exp(j*2*pi*f1/Fs); y = czt(y,m,w,a); end else % evaluate DFT on given set of frequencies f = nfft(:); q = nwind - noverlap; extras = floor(nwind/q); x = [zeros(q-rem(nwind,q)+1,1); x]; % create windowed DTFT matrix (filter bank) D = window(:,ones(1,length(f))).*exp((-j*2*pi/Fs*((nwind-1):-1:0)).'*f'); y = upfirdn(x,D,1,q).'; y(:,[1:extras+1 end-extras+1:end]) = []; end t = (colindex-1)'/Fs; % take abs, and use image to display results if nargout == 0 newplot; if length(t)==1 imagesc([0 1/f(2)],f,20*log10(abs(y)+eps));axis xy; colormap(jet) else imagesc(t+(nwind/2),f,20*log10(abs(y)+eps));axis xy; colormap(jet) end xlabel('Time') ylabel('Frequency') elseif nargout == 1, yo = y; elseif nargout == 2, yo = y; fo = f; elseif nargout == 3, yo = y; fo = f; to = t; end

-100-

Page 107: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

function [msg,x,nfft,Fs,window,noverlap] = specgramchk(P) %SPECGRAMCHK Helper function for SPECGRAM. % SPECGRAMCHK(P) takes the cell array P and uses each cell as % an input argument. Assumes P has between 1 and 5 elements. Msg = []; x = P{1}; if (length(P) > 1) & ~isempty(P{2}) nfft = P{2}; else nfft = min(length(x),256); end if (length(P) > 2) & ~isempty(P{3}) Fs = P{3}; else Fs = 2; end if length(P) > 3 & ~isempty(P{4}) window = P{4}; else if length(nfft) == 1 window = hanning(nfft); else msg = ‘You must specify a window function.’; end end if length(window) == 1, window = hanning(window); end if (length(P) > 4) & ~isempty(P{5}) noverlap = P{5}; else noverlap = ceil(length(window)/2); end % NOW do error checking if (length(nfft)==1) & (nfft<length(window)), msg = ‘Requires window’’s length to be no greater than the FFT length.’; end if (noverlap >= length(window)), msg = ‘Requires NOVERLAP to be strictly less than the window length.’; end if (length(nfft)==1) & (nfft ~= abs(round(nfft))) msg = ‘Requires positive integer values for NFFT.’; end if (noverlap ~= abs(round(noverlap))), msg = ‘Requires positive integer value for NOVERLAP.’; end if min(size(x))~=1, msg = ‘Requires vector (either row or column) input.’; end

-101-

Page 108: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

° hanning.m

function c = hanning(m) % necessaria per il finestramento error(nargchk(1, 1, nargin)); if (m == 1) c = 1; else m = m - 1; c = 0.5 - 0.5 * cos (2 * pi * (0 : m)' / m); end

° psd.m function p = psd(sig, fftlength, powernormconst) % power_spectral_density = psd(sig, fft_length, power_normalization_constant) % % psd takes a signal and computes its power spectral density. % This is done by first computing its fft, squaring its % magnitude, changing to decibels, and adding a constant % for power normalization. p=powernormconst+10.*log10((abs(fft(sig,fftlength))).^2);

° find_tones.m

function Ptm = find_tones(P) % power_spectral_density_of_tones = find_tones(power_spectral_density_of_sig) % % find_tones takes a given power spectrum, finds the tones, % and returns a spectrum with only the tones intact. These values % are produced by summing the value at some k with the values at % k-1 and k+1. % first assign Ptm Ptm=zeros(1,length(P)); % go through spectrum for k=1:length(P), % if the value at k is a tone if(is_it_tone_masker(P,k)) % place the tone in the output spectrum with its new value Ptm(k) = 10*log10(dbinv(P(k-1))+dbinv(P(k))+dbinv(P(k+1))); end end

-102-

Page 109: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% ************************************************************* function bool = is_it_tone_masker(P, k) % boolean = is_it_tone_masker(power_spectrum, index) % % is_it_tone_masker checks the power spectrum P at index k % and returns a boolean indicating whether it is a tone. % If P(k) is a local maxima and is greater than 7dB in % a frequency dependent neighborhood, it is a tone. % % This neighborhood is defined as: % within 2 if 2 < k < 63 % within 2,3 63 <= k < 127 % within 2,3,4,5,6 127 <= k < 256 % if it's at the beginning or end of P (where a 6 length neighborhood is required), then it's not a local maxima if ((k<=1) | (k>=250)) bool = 0; % if it's not a local maxima, get out now with bool=0 elseif ((P(k)<P(k-1)) | (P(k)<P(k+1))), bool = 0; % otherwise, we need to check if it is a max in its % neighborhood. elseif ((k>2) & (k<63)), % for frequencies between 0.17-5.5kHz bool = ((P(k)>(P(k-2)+7)) & (P(k)>(P(k+2)+7))); elseif ((k>=63) & (k<127)), % for frequencies between 5.5-11Khz bool = ((P(k)>(P(k-2)+7)) & (P(k)>(P(k+2)+7)) & (P(k)>(P(k-3)+7)) & (P(k)>(P(k+3)+7))); elseif ((k>=127) & (k<=256)), % for frequencies between 11-20Khz bool = ((P(k)>(P(k-2)+7)) & (P(k)>(P(k+2)+7)) & (P(k)>(P(k-3)+7)) & (P(k)>(P(k+3)+7)) & (P(k)>(P(k-4)+7)) & (P(k)>(P(k+4)+7)) & (P(k)>(P(k-5)+7)) & (P(k)>(P(k+5)+7)) & (P(k)>(P(k-6)+7)) & (P(k)>(P(k+6)+7))); else bool = 0; end

° noise_maskers.m function [Pnm_at_loc, loc] = noise_masker(P, Ptm, low, high) % [power_spectral_density_of_noise_at_loc, location_within_critical_band] % = noise_maskers(power_spectral_density, power_spectral_density_tones, % low_bin_of_critical_band, high_bin_of_critical_band) % % noise_masker takes a power spectrum and related tone spectrum, % as well as the low and high ranges to deal with (so that you can % later specify a critical bandwidth), and returns a noise masker % value along with where it should be located. % If loc=-1, there was NO noise masker in the region.

-103-

Page 110: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% this array will hold whether a given element is part of the % noise. Begin with ones. noise_members=ones(1,high-low+1); % go through tonal power spectrum for k=low:high, % if there is a tone if (Ptm(k)>0), % check frequency location and determine neighborhood length if ((k>2) & (k<63)) m=2; elseif((k>=63) & (k<127)) m=3; elseif((k>=127) & (k<256)) m=6; else m=0; end % set all members of the neighborhood to 0, which % removes them from the list of noise members for n=(k-low+1)-m:(k-low+1)+m, if (n > 0) noise_members(n)=0; end end end end % those indices in noise_members that have a 1 % are part of the noise masker. % go through the noise locations and perform power summation, % which requires going back to magnitude (dB doesn't add linearly.). % if there are no noise members in the range, then get out if (isempty(find(noise_members))) Pnm_at_loc=0; loc=-1; else temp=0; for k=(low+find(noise_members)-1), temp = temp + dbinv(P(k)); end

-104-

Page 111: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% take summation and make it into dB Pnm_at_loc=10*log10(temp); loc=geomean(low+find(noise_members)-1); end

° check_maskers.m function [Ptm_above_ATH, Pnm_above_ATH]= check_maskers(Ptm, Pnm, ATH, b) % [important_tone_maskers, = check_maskers(power_spectral_density_tones, % important_noise_maskers] power_spectral_density_noise, % absolute_threshold_of_hearing, % bark_array) % % check_maskers takes a masker power spectrum and checks to see if values % are above the absolute threshold of hearing (ATH). If not, the masker is % eliminated because you will not hear it anyway. Then, it locates maskers % that have other maskers within their critical bandwidth. If one is % found, the lower of the two is set to zero, because they will not be % detectable by the human ear anyway. % First, take the power spectrum. If any of the values are below corresponding values % of the absolute threshold of hearing, then set them to zero. This is because % it will not be heard anyway! Ptm_above_ATH=Ptm.*(Ptm>ATH); Pnm_above_ATH=Pnm.*(Pnm>ATH); %figure; %subplot(2,1,1); %stem(b, Ptm_above_ATH); %hold on; %plot(b,ATH,'r--'); %xlabel('Frequency (Bark)'); %ylabel('Magnitude'); %title('Ptm above ATH');

-105-

Page 112: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

%subplot(2,1,2); %stem(b, Pnm_above_ATH); %hold on; %plot(b,ATH,'r--'); %xlabel('Frequency (Bark)'); %ylabel('Magnitude'); %title('Pnm above ATH'); % the remaining maskers must now be checked to see if any are % within a critical bandwidth. If they are, then only the strongest % one matters. The other can be set to zero. % go through masker list for j=1:length(ATH), toneFound=0; noiseFound=0; % was a tone or noise masker found? if (Ptm_above_ATH(j)>0) toneFound=1; %disp([num2str(j),' is a tone.']); end if (Pnm_above_ATH(j)>0) noiseFound=1; %disp([num2str(j),' is noise.']); end % if either masker found if (toneFound | noiseFound) masker_loc_barks = b(j);

-106-

Page 113: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% determine low and high thresholds of critical bandwidth crit_bw_low = masker_loc_barks-0.5; crit_bw_high = masker_loc_barks+0.5; % determine what indices these values correspond to low_loc = max(find(b<crit_bw_low)); if (isempty(low_loc)) low_loc=1; else low_loc=low_loc+1; end high_loc = max(find(b<crit_bw_high)); % at this point, we know the location of a masker and its % critical bandwidth. Depending on which type of masker it is, % go through and eliminate maskers within the critical bandwidth that % are lower. % go through critical bandwidth for k=low_loc:high_loc, if (toneFound) % find other tone maskers in critical bandwidth if ((Ptm_above_ATH(j) < Ptm_above_ATH(k)) & (k ~= j)), Ptm_above_ATH(j)=0; %disp(['Ptm(', num2str(j),') < Ptm(', num2str(k),')']); break; elseif (k ~= j) Ptm_above_ATH(k)=0; end % find noise maskers in critical bandwidth if (Ptm_above_ATH(j) < Pnm_above_ATH(k)), Ptm_above_ATH(j)=0; %disp(['Ptm(', num2str(j),') < Pnm(', num2str(k),')']);

-107-

Page 114: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

break; else Pnm_above_ATH(k)=0; end elseif (noiseFound) % find other noise maskers in critical bandwidth if ((Pnm_above_ATH(j) < Pnm_above_ATH(k)) & (k ~= j)), Pnm_above_ATH(j)=0; disp(['Pnm(', num2str(j),') < Pnm(', num2str(k),')']); break; elseif (k ~= j) Pnm_above_ATH(k)=0; end % find tone maskers in critical bandwidth if (Pnm_above_ATH(j) < Ptm_above_ATH(k)), Pnm_above_ATH(j)=0; %disp(['Pnm(', num2str(j),') < Ptm(', num2str(k),')']); break; else Ptm_above_ATH(k)=0; end else disp('ERROR??'); end end end end

-108-

Page 115: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

° global_threshold.m

function overall = global_threshold(ATH, tone_power, noise_power, b) % global_masking_threshold = global_threshold(absolute_threshold_of_hearing, % tone_power_spectral_density, % noise_power_spectral_density, % bark_spectrum) % % global_threshold takes the absolute threshold of hearing as well as the % spectral densities of noise and tones to determine the overall global % masking threshold. This method assumes that the effects of masking % are additive, so the masks of all maskers and the absolute threshold % are added together. % begin with zeros temp1=zeros(1,length(tone_power)); %figure; %hold on; %plot(b(find(tone_power)), tone_power(find(tone_power)), 'rx'); % go through tone list for k=find(tone_power), % determine the masking threshold around the tone [thres, start]=mask_threshold(1,k,tone_power(k),b); %plot(b(start:start+length(thres)-1), thres); % add the power of the threshold to temp in the proper frequency range temp1(start:start+length(thres)-1)=temp1(start:start+length(thres)-1)+dbinv(thres); end %plot(b,10*log10(temp1), 'c'); %xlabel('Frequency (Bark)'); %ylabel('Power (dB)'); %title('Tones and Related Thresholds'); temp2=zeros(1,length(noise_power)); %figure; %hold on; %plot(b(find(noise_power)), noise_power(find(noise_power)), 'ro'); % go through noise list for k=find(noise_power) % determine the masking threshold around the noise masker [thres, start]=mask_threshold(0,k,noise_power(k),b); %plot(b(start:start+length(thres)-1), thres); % add the power of the threshold to temp in the proper frequency range temp2(start:start+length(thres)-1)=temp2(start:start+length(thres)-1)+dbinv(thres); end %plot(b,10*log10(temp2), 'c'); %xlabel('Frequency (Bark)'); %ylabel('Power (dB)'); %title('Noise and Related Thresholds');

-109-

Page 116: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

temp=temp1+temp2; % finally, add the power of the absolute hearing threshold to the list for k=1:length(ATH), temp(k)=temp(k)+dbinv(ATH(k)); end % all effects have been added, so now change to dB, the way everything else has been. overall=10*log10(temp);

° mask_threshold.m function [threshold, start] = mask_threshold(type, j, P, b) % [masking_threshold, starting_bin] = mask_threshold(type, location_of_masker_bin, % power_spectral_density_at_j, bark_spectrum) % % mask_threshold returns an array of the masked threshold in dB SPL that % results around a mask located at a frequency bin (i.e., in % discrete terms). It also returns a starting index for this threshold, % which is discussed later. % % The user should also supply the power spectral density and the related Bark % spectrum so that all calculations can be made. Note also that two % different threshold are possible, so the user should specify: % % type = 0 threshold = NOISE threshold % type = 1 threshold = TONE threshold % % This thresholding is determined in a range from -3 to +8 Barks % from the mask. (This is why a bark spectrum is needed.) In case you % would like to overlay different thresholds, you need to know where each % one actually starts. Thus, the starting bin for the threshold is also % returned. % determine where masker is in barks maskerloc=b(j); % set up range of the resulting function % in barks low=maskerloc-3; high=maskerloc+8; % in discrete bins lowbin=max(find(b<low)); if (isempty(lowbin)) lowbin = 1; end highbin=max(find(b<high)); % calculate spreading function SF = spreading_function(j, P, lowbin, highbin, b);

-110-

Page 117: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% which type are we dealing with? The equations are slightly different. if (type==0) % calculate noise threshold threshold=P-.175*b(j)+SF-2.025; else % calculate tone threshold threshold=P-.275*b(j)+SF-6.025; end % finally, note that the lowest value in threshold corresponds % to the frequency bin at lowbin. start=lowbin; % ----------------------------------------------------------------- function spread = spreading_function(masker_bin, power, low, high, b) % spreading_around_masker = spreading_function(masker_bin, masker_power, % low_bin, high_bin, bark_spectrum) % % spreading_function takes a masker_bin and related power to determine % the spreading function that surrounds it. This function indicates % the minimum level that nearby frequencies must attain before they % are detectable by the human ear. Along with the power in the % masker and other data, this can be used to determine whether a % signal is audible over a masker. masker_bark=b(masker_bin); for i=low:high, maskee_bark=b(i); deltaz=maskee_bark-masker_bark; if ((deltaz>=-3.5) & (deltaz<-1)) spread(i-low+1)=17*deltaz-0.4*power+11; elseif ((deltaz>=-1) & (deltaz<0)) spread(i-low+1)=(0.4*power+6)*deltaz; elseif ((deltaz>=0) & (deltaz<1)) spread(i-low+1)=-17*deltaz; elseif ((deltaz>=1) & (deltaz<8.5)) spread(i-low+1)=(0.15*power-17)*deltaz-0.15*power; end end

° plots.m close all;

-111-

Page 118: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% ***************get a plot of Hz vs. Bark*************** %f=[1:1:20000]; %b=hz2bark(f); %plot(f,b); %xlabel('Frequency (Hz)'); %ylabel('Frequency (Bark)'); %title('Relationship between Hertz and Bark Frequencies'); % ***************open a file*************** [y, fs, nbits]=wavread('camp96.wav'); % ***************necessary constants*************** FFTlength=512; % FFT length, naturally f=[1:FFTlength/2]*(fs/FFTlength); % array of Hz corresponding to bins b=hz2bark(f); % array of Bark corresponding to bins % get absolute threshold of hearing with given freq. ATH=3.64.*(f./1000).^(-.8) - 6.5.*exp(-0.6.*(f./1000-3.3).^2) + 0.001.*(f./1000).^4; %figure; %plot(f,ATH); %xlabel('Frequency (Hz)'); %ylabel('SPL (dB)'); %title('Absolute Threshold of Hearing (Hz scale)'); %figure; %plot(b,ATH); %xlabel('Frequency (Bark)'); %ylabel('SPL (dB)'); %title('Absolute Threshold of Hearing (Bark scale)'); % ***************practice run*************** y=y(140:140+255);

-112-

Page 119: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

figure; plot(y); xlabel('Time (sample)'); ylabel('Magnitude'); title('sub1.wav'); % step 1: normalize the signal %y=normalize(y, FFTlength, nbits); %figure; %plot(y); %xlabel('Time (sample)'); %ylabel('Magnitude'); %title('sub1.wav NORMALIZED'); % step 2: get power density spectrum powernormalizationconstant=90.302; power=psd(y, FFTlength, powernormalizationconstant); % only need first half since signal is real power=power(1:256); figure; subplot(2,1,1); plot(f, power); hold on; plot(f, ATH, 'r--'); xlabel('Frequency (Hz)'); ylabel('Magnitude'); title('Power Density Spectrum of sub1.wav'); subplot(2,1,2); plot(b, power); hold on; plot(b, ATH, 'r--'); xlabel('Frequency (Bark)'); ylabel('Magnitude'); title('Power Density Spectrum of sub1.wav'); % step 3: find tones tone_psd=find_tones(power);

-113-

Page 120: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

figure; toneloc=find(tone_psd); subplot(2,1,1); stem(f(toneloc), tone_psd(toneloc), 'x'); hold on; plot(f, power, 'b'); plot(f, ATH, 'r--'); xlabel('Frequency (Hz)'); ylabel('Magnitude'); title('Tone Maskers'); subplot(2,1,2); stem(b(toneloc), tone_psd(toneloc), 'x'); hold on; plot(b, power, 'b'); plot(b, ATH, 'r--'); xlabel('Frequency (Bark)'); ylabel('Magnitude'); title('Tone Maskers'); % step 4: find noise maskers within critical band % start with 0-1 noise_psd=zeros(1,length(tone_psd)); lowbin=1; highbin=max(find(b<1)); % remainder of critical bands can be done with loop

-114-

Page 121: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

for band = 1:24, [noise_psd_at_loc, loc]=noise_masker(power, tone_psd, lowbin, highbin); if (loc ~= -1) noise_psd(floor(loc))=noise_psd_at_loc; end lowbin=highbin; highbin=max(find(b<(band+1))); end figure; noiseloc=find(noise_psd); subplot(2,1,1); stem(f(noiseloc), noise_psd(noiseloc), 'o'); hold on; plot(f, power, 'b'); plot(f, ATH, 'r--'); xlabel('Frequency (Hz)'); ylabel('Magnitude'); title('Noise Maskers'); subplot(2,1,2); stem(b(noiseloc), noise_psd(noiseloc), 'o'); hold on; plot(b, power, 'b'); plot(b, ATH, 'r--'); xlabel('Frequency (Bark)'); ylabel('Magnitude'); title('Noise Maskers');

-115-

Page 122: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% step 5: remove maskers that are near each other [tone_psd, noise_psd]=check_maskers(tone_psd, noise_psd, ATH, b); figure; toneloc=find(tone_psd); subplot(2,1,1); stem(f(toneloc), tone_psd(toneloc), 'x'); hold on; plot(f, power, 'b'); plot(f, ATH, 'r--'); xlabel('Frequency (Hz)'); ylabel('Magnitude'); title('Checked Tone Maskers'); subplot(2,1,2); stem(b(toneloc), tone_psd(toneloc), 'x'); hold on; plot(b, power, 'b'); plot(b, ATH, 'r--'); xlabel('Frequency (Bark)'); ylabel('Magnitude'); title('Checked Tone Maskers'); figure; noiseloc=find(noise_psd); subplot(2,1,1); stem(f(noiseloc), noise_psd(noiseloc), 'o'); hold on; plot(f, power, 'b'); plot(f, ATH, 'r--');

-116-

Page 123: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

xlabel('Frequency (Hz)'); ylabel('Magnitude'); title('Checked Noise Maskers'); subplot(2,1,2); stem(b(noiseloc), noise_psd(noiseloc), 'o'); hold on; plot(b, power, 'b'); plot(b, ATH, 'r--'); xlabel('Frequency (Bark)'); ylabel('Magnitude'); title('Checked Noise Maskers'); % step 6: now that we have important maskers, calculate global threshold thres=global_threshold(ATH, tone_psd, noise_psd, b); figure; plot(b,thres); hold on; plot(b(find(tone_psd)), tone_psd(find(tone_psd)), 'x'); plot(b(find(noise_psd)), noise_psd(find(noise_psd)), 'o'); plot(b, power, 'g'); plot(b, ATH, 'r--'); xlabel('Frequency (Bark)'); ylabel('Magnitude'); title('Global Masking Threshold'); legend('Soglia globale', 'Tones', 'Noise', 'Original PSD', 'ATH');

-117-

Page 124: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

° mdct.m e imdct.m

function y = fast_mdct(x) x=x(:); N=length(x); n0 = (N/2+1)/2; wa = sin(([0:N-1]'+0.5)/N*pi); y = zeros(N/2,1); x = x .* exp(-j*2*pi*[0:N-1]'/2/N) .* wa; X = fft(x); y = real(X(1:N/2) .* exp(-j*2*pi*n0*([0:N/2-1]'+0.5)/N)); y=y(:); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y = fast_imdct(X) X=X(:); % force X to be a column vector N = 2*length(X); ws = sin(([0:N-1]'+0.5)/N*pi); n0 = (N/2+1)/2; Y = zeros(N,1); Y(1:N/2) = X; Y(N/2+1:N) = -1*flipud(X); Y = Y .* exp(j*2*pi*[0:N-1]'*n0/N); y = ifft(Y); y = 2*ws .* real(y .* exp(j*2*pi*([0:N-1]'+n0)/2/N));

° huffman.m

function [code,compression]=huffman5(p); %HUFFMAN5 %HUFFMAN CODER FOR V5 % Format [CODE,COMPRESSION]=HUFFMAN5(P) % % P is the probability (or number of occurences) of each alphabet symbol % CODE gives the huffman code in a string format of ones and zeros % COMPRESSION gives the compression rate % % Huffman5 works by first building up a binary tree (eg p =[ .5 .2 .15 .15]) % % a_1 a_4 % 1/ 1/ % / / % b3 b1 % \ / \

-118-

Page 125: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% 0\ 1/ 0\ % b2 a_3 % \ % 0\ % a_2 % % Such that the tree always terminates at an alphabet symbol and the % symbols furthest away from the root have the lowest probability. % The branches at each level are labeled 0 and 1. % For this example CODE would be % 1 % 00 % 010 % 011 % and the compression rate 1.1111 % Sean Danaher University of Northumbria at Newcastle UK 98/6/4 p=p(:)/sum(p); %normalises probabilities c=huff5(p); code=char(getcodes(c,length(p))); compression=ceil(log(length(p))/log(2))/ (sum(code' ~= ' ')*p); %--------------------------------------------------------------- function c=huff5(p); % HUFF5 Creates Huffman Tree % Simulates a tree structure using a nested cell structure % P is a vector with the probability (number of occurences) % of each alphabet symbol % C is the Huffman tree. Note Matlab 5 version % Sean Danaher 98/6/4 University of Northumbria, Newcastle UK c=cell(length(p),1); % Generate cell structure for i=1:length(p) % fill cell structure with 1,2,3...n c{i}=i; % (n=number of symbols in alphabet) end while size(c)-2 % Repeat till only two branches [p,i]=sort(p); % Sort to ascending probabilities c=c(i); % Reorder tree. c{2}={c{1},c{2}};c(1)=[]; % join branch 1 to 2 and prune 1 p(2)=p(1)+p(2);p(1)=[]; % Merge Probabilities end %--------------------------------------------------------------- function y= getcodes(a,n) % Y=GETCODES(A,N) % Pulls out Huffman Codes for V5 % a is the nested cell structure created by huffcode5 % n is the number of symbols % Sean Danaher 98/6/4 University of Northumbria, Newcastle UK global y y=cell(n,1); getcodes2(a,[])

-119-

Page 126: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

%---------------------------------------------------------------- function getcodes2(a,dum) % GETCODES(A,DUM) %getcodes2 % called by getcodes % uses Recursion to pull out codes % Sean Danaher 98/6/4 University of Northumbria, Newcastle UK global y if isa(a,'cell') getcodes2(a{1},[dum 0]); getcodes2(a{2},[dum 1]); else y{a}=setstr(48+dum); end

° mp3read.m (con mpg123.exe, mp3info.exe) function [Y,FS,NBITS,OPTS] = mp3read(FILE,N,MONO,DOWNSAMP,DELAY) path = fileparts(which('mp3read')); % %%%%% Directory for temporary file (if needed) % % Try to read from environment, or use /tmp if it exists, or use CWD tmpdir = getenv('TMPDIR'); if isempty(tmpdir) || exist(tmpdir,'file')==0 tmpdir = '/tmp'; end if exist(tmpdir,'file')==0 tmpdir = ''; end % ensure it exists %if length(tmpdir) > 0 && exist(tmpdir,'file')==0 % mkdir(tmpdir); %end %%%%%% Command to delete temporary file (if needed) rmcmd = 'rm'; %%%%%% Location of the binaries - attempt to choose automatically %%%%%% (or edit to be hard-coded for your installation) ext = lower(computer); if ispc ext = 'exe'; rmcmd = 'del'; end mpg123 = fullfile(path,['mpg123.',ext]); mp3info = fullfile(path,['mp3info.',ext]);

-120-

Page 127: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

%%%%% Process input arguments if nargin < 2 N = 0; end % Check for FMT spec (per wavread) FMT = 'double'; if ischar(N) FMT = lower(N); N = 0; end if length(N) == 1 % Specified N was upper limit N = [1 N]; end if nargin < 3 forcemono = 0; else % Check for 3rd arg as FMT if ischar(MONO) FMT = lower(MONO); MONO = 0; end forcemono = (MONO ~= 0); end if nargin < 4 downsamp = 1; else downsamp = DOWNSAMP; end if downsamp ~= 1 && downsamp ~= 2 && downsamp ~= 4 error('DOWNSAMP can only be 1, 2, or 4'); end if nargin < 5 mpg123delay44kHz = 2257; % empirical delay of lame/mpg123 loop delay = round(mpg123delay44kHz/downsamp); else delay = DELAY; end if strcmp(FMT,'native') == 0 && strcmp(FMT,'double') == 0 && ... strcmp(FMT,'size') == 0 error(['FMT must be ''native'' or ''double'' (or ''size''), not ''',FMT,'''']); end %%%%%% Constants NBITS=16;

-121-

Page 128: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

%%%%% add extension if none (like wavread) [path,file,ext] = fileparts(FILE); if isempty(ext) FILE = [FILE, '.mp3']; end %%%%%% Probe file to find format, size, etc. using "mp3info" utility cmd = ['"',mp3info, '" -r m -p "%Q %u %b %r %v * %C %e %E %L %O %o %p" "', FILE,'"']; % Q = samprate, u = #frames, b = #badframes (needed to get right answer from %u) % r = bitrate, v = mpeg version (1/2/2.5) % C = Copyright, e = emph, E = CRC, L = layer, O = orig, o = mono, p = pad w = mysystem(cmd); % Break into numerical and ascii parts by finding the delimiter we put in starpos = findstr(w,'*'); nums = str2num(w(1:(starpos - 2))); strs = tokenize(w((starpos+2):end)); SR = nums(1); nframes = nums(2); nchans = 2 - strcmp(strs{6}, 'mono'); layer = length(strs{4}); bitrate = nums(4)*1000; mpgv = nums(5); % Figure samples per frame, after % http://board.mp3-tech.org/view.php3?bn=agora_mp3techorg&key=1019510889 if layer == 1 smpspfrm = 384; elseif SR < 32000 && layer ==3 smpspfrm = 576; if mpgv == 1 error('SR < 32000 but mpeg version = 1'); end else smpspfrm = 1152; end OPTS.fmt.mpgBitrate = bitrate; OPTS.fmt.mpgVersion = mpgv; % fields from wavread's OPTS OPTS.fmt.nAvgBytesPerSec = bitrate/8; OPTS.fmt.nSamplesPerSec = SR; OPTS.fmt.nChannels = nchans; OPTS.fmt.nBlockAlign = smpspfrm/SR*bitrate/8; OPTS.fmt.nBitsPerSample = NBITS; OPTS.fmt.mpgNFrames = nframes; OPTS.fmt.mpgCopyright = strs{1}; OPTS.fmt.mpgEmphasis = strs{2}; OPTS.fmt.mpgCRC = strs{3}; OPTS.fmt.mpgLayer = strs{4}; OPTS.fmt.mpgOriginal = strs{5};

-122-

Page 129: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

OPTS.fmt.mpgChanmode = strs{6}; OPTS.fmt.mpgPad = strs{7}; OPTS.fmt.mpgSampsPerFrame = smpspfrm; if SR == 16000 && downsamp == 4 error('mpg123 will not downsample 16 kHz files by 4 (only 2)'); end if downsamp == 1 downsampstr = ''; else downsampstr = [' -',num2str(downsamp)]; end FS = SR/downsamp; if forcemono == 1 nchans = 1; chansstr = ' -m'; else chansstr = ''; end % Size-reading version if strcmp(FMT,'size') == 1 Y = [floor(smpspfrm*nframes/downsamp)-delay, nchans]; else % Temporary file to use tmpfile = fullfile(tmpdir, ['tmp',num2str(round(1000*rand(1))),'.wav']); skipx = 0; skipblks = 0; skipstr = ''; sttfrm = N(1)-1; % chop off transcoding delay? %sttfrm = sttfrm + delay; % empirically measured % no, we want to *decode* those samples, then drop them % so delay gets added to skipx instead if sttfrm > 0 skipblks = floor(sttfrm*downsamp/smpspfrm); skipx = sttfrm - (skipblks*smpspfrm/downsamp); skipstr = [' -k ', num2str(skipblks)]; end skipx = skipx + delay; lenstr = ''; endfrm = -1; decblk = 0;

-123-

Page 130: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

if length(N) > 1 endfrm = N(2); if endfrm > sttfrm decblk = ceil((endfrm+delay)*downsamp/smpspfrm) - skipblks + 10; % we read 10 extra blks (+10) to cover the case where up to 10 bad % blocks are included in the part we are trying to read (it happened) lenstr = [' -n ', num2str(decblk)]; % This generates a spurious "Warn: requested..." if reading right % to the last sample by index (or bad blks), but no matter. end end % Run the decode cmd=['"',mpg123,'"', downsampstr, chansstr, skipstr, lenstr, ... ' -q -w "', tmpfile,'" "',FILE,'"']; %w = mysystem(cmd); % Load the data Y = wavread(tmpfile); % % pad delay on to end, just in case % Y = [Y; zeros(delay,size(Y,2))]; % % no, the saved file is just longer if decblk > 0 && length(Y) < decblk*smpspfrm/downsamp % This will happen if the selected block range includes >1 bad block disp(['Warn: requested ', num2str(decblk*smpspfrm/downsamp),' frames, returned ',num2str(length(Y))]); end % Delete tmp file mysystem([rmcmd,' "', tmpfile,'"']); % debug % disp(['sttfrm=',num2str(sttfrm),' endfrm=',num2str(endfrm),' skipx=',num2str(skipx),' delay=',num2str(delay),' len=',num2str(length(Y))]); % Select the desired part if skipx+endfrm-sttfrm > length(Y) endfrm = length(Y)+sttfrm-skipx; end if endfrm > sttfrm Y = Y(skipx+(1:(endfrm-sttfrm)),:); elseif skipx > 0 Y = Y((skipx+1):end,:); end

-124-

Page 131: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

% Convert to int if format = 'native' if strcmp(FMT,'native') Y = int16((2^15)*Y); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function w = mysystem(cmd) % Run system command; report error; strip all but last line [s,w] = system(cmd); if s ~= 0 error(['unable to execute ',cmd,' (',w,')']); end % Keep just final line w = w((1+max([0,findstr(w,10)])):end); % Debug %disp([cmd,' -> ','*',w,'*']); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function a = tokenize(s) % Break space-separated string into cell array of strings % 2004-09-18 [email protected] a = []; p = 1; n = 1; l = length(s); nss = findstr([s(p:end),' '],' '); for ns = nss % Skip initial spaces if ns == p p = p+1; else if p <= l a{n} = s(p:(ns-1)); n = n+1; p = ns+1; end end end

° mp3write.m (con lame.exe)

function mp3write(varargin) if length(varargin) < 3 | length(varargin) > 5 error('Unsopported number of argument inputs') end Y = varargin{1}; FS = varargin{2}; NBITS = varargin{3};

-125-

Page 132: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

if NBITS~=8 & NBITS~=16 & NBITS~=24 & NBITS~=32 error('Unsopported bit depth') end if length(varargin) >= 4 MP3FILE = varargin{4}; if ischar(MP3FILE) ~= 1 error('File name is not a string') end else MP3FILE = 'Default_name.mp3'; disp('File name = Default_name.mp3') end if isempty(findstr(MP3FILE,'.mp3')) MP3FILE = strcat(MP3FILE,'.mp3'); end if length(varargin) == 5 ENCODING = varargin{5}; else ENCODING = '2'; disp('Fixed bit rate, joint-stereo, 128 kb/s encoding') end s = which('mp3write.m'); ww = findstr('mp3write.m',s); lame = s(1:ww-2); wavwrite(Y,FS,NBITS,strcat(lame,'\temp.wav')); tmpfile = strcat(lame,'\temp.wav'); MP3FILE = strcat(pwd,'\',MP3FILE); ENCODING = num2str(ENCODING); switch ENCODING case {'1'} cmd = [lame,'\lame', ' --quiet', ' ', tmpfile, ' ',MP3FILE]; case {'2'} cmd = [lame,'\lame', ' --quiet', ' -b 128 ', tmpfile, ' ',MP3FILE]; case {'3'} cmd = [lame,'\lame', ' --quiet', ' --abr 112 ', tmpfile, ' ',MP3FILE]; case {'4'} cmd = [lame,'\lame', ' --quiet', ' -f ', tmpfile, ' ',MP3FILE]; case {'5'} cmd = [lame,'\lame', ' --quiet', ' -h ', ' -V ', tmpfile, ' ',MP3FILE]; otherwise error('Encoding parameters not suported') end

-126-

Page 133: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% Data Encoding using "Lame.exe"%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dos(cmd); % Delete temporary file delete(tmpfile);

° echoDataHiding.m (risorsa free sul web) [x,fs,nbit]=wavread('C:\Ann\project\echo_tech\sound\userwebfinal.wav');

% BEG:realizing the zero and ones signal

zero_offset=50

one_offset=100

for (j=1:zero_offset)

x_zero(j)=0;

end

for (i=1:length(x))

x_zero(i+zero_offset)=x(i);

end

for (j=1:one_offset)

x_one(j)=0;

end

for (i=1:length(x))

x_one(i+one_offset)=x(i);

end

x_zero = x_zero * 0.4

x_one = x_one *0.4

% END:realizing the zero and ones signal

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%

% BEG: generation of the hidden signal

m=1

l=0

-127-

Page 134: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

for i=1:50

u(i)=l

m = m+1

if (m==5)

m=1

l = not(l)

end

end

% END: generation of the hidden signal

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%

%BEG: Hiding the data in the signal

windows_number =50

windows_limit = floor(length (x)/windows_number ) n=0

for w =1:(windows_number-1) % from 1 to 49

window_begin = (((w-1)*windows_limit)+1)

window_end = (w*windows_limit)

if (u(w)==0)

for (j= window_begin : window_end)

x_modified2(j)=x(j) + x_zero(j)

end

else

for (j= window_begin : window_end)

x_modified2(j)=x(j) + x_one(j)

end

end

end

%END: Hiding the datain the signal

wavplay(x_modified2)

wavwrite(x_modified2,fs, nbit,

'C:\Ann\project\echo_tech\sound\userwebfinal333.wav'

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DECODING

k=1

for w =1:(windows_number-1) % from 1 to 49

window_begin = (((w-1)*windows_limit)+1)

window_end = (w*windows_limit)

a= x_modified2(window_begin:window_end)

s=fft(a)

d=log2(s)

f=ifft(d)

g=xcorr2(f)

if (abs(g(50)) > abs(g(100)))

h(k)=0

else

h(k)=1

end

k=k+1

end

-128-

Page 135: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

°ConfAlg.m (confronto file S-Tools watermarkati con diversi algoritmi di cifratura) function ConfAlg() [FileName,PathName] = uigetfile('*.wav','Seleziona file cover'); [FileName1,PathName] = uigetfile('*.wav','Seleziona file Des'); [FileName2,PathName] = uigetfile('*.wav','Seleziona file 3Des'); [FileName3,PathName] = uigetfile('*.wav','Seleziona file IDEA'); [FileName4,PathName] = uigetfile('*.wav','Seleziona file MDC'); % Funzione attinta alla ricerca delle differenze tra i file wav, utilizzati per S-Tools 4 [y,Fs,bits]=wavread(FileName); % File Audio Cover [Y]=wavread(FileName1); % File watermarkato con alg DES [Y1]=wavread(FileName2); % File watermarkato con alg 3DES [Y2]=wavread(FileName3); % File watermarkato con alg IDEA [Y3]=wavread(FileName4); % File watermarkato con algoritmo MDC i=1:length(y); % notiamo il numero di differenze per ogni algoritmo. Notiamo un numero % diverso di incoerenze, anche se abbiamo uno stesso file watermarkato con 2Kb. confPrimo=find(y(i)~=Y(i)); confSecondo=find(y(i)~=Y1(i)); confTerzo=find(y(i)~=Y2(i)); confQuarto=find(y(i)~=Y3(i)); % va detto che il file è stereo per questo andrebbe condotto il discorso su tutti e due i canali % es. confPrimo=find(y(i,2)~=Y1(i,2)); lung=length(confPrimo); lung1=length(confSecondo); lung2=length(confTerzo); lung3=length(confQuarto); % ci concentriamo sul fatto che i bit del watermark si espandono su tutto il file.. disp('N° dei campioni dei file:'); disp(length(y)); disp('Ultimo campione cambiato per ogni algoritmo'); disp(confPrimo(length(confPrimo))); disp(confSecondo(length(confSecondo))); disp(confTerzo(length(confTerzo))); disp(confQuarto(length(confQuarto))); % assumiano con i risultati che questo è vero. disp(' N° Differenze tra file cover e file water Des:'); disp(lung); disp(' N° Differenze tra file cover e file water 3Des:'); disp(lung1); disp(' N° Differenze tra file cover e file water Idea:'); disp(lung2); disp(' N° Differenze tra file cover e file water Mdc:'); disp(lung3); % notiamo l'entità delle differenze per il primo campione differente. % es. confPrimo(1)=7 caso DES -> il settimo campione sarà diverso per la cover

-129-

Page 136: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

disp(' Entità prima differenza :'); a=confPrimo(1); b=confSecondo(1); c=confTerzo(1); d=confQuarto(1); disp(y(a)-Y(a)); disp(y(b)-Y1(b)); disp(y(c)-Y2(c)); disp(y(d)-Y3(d)); % ci accorgiamo che 3 *10^-5, si ripete per ogni campione.. cambiando % alcune volte il segno (cambiamento ultimo bit quello di destra del % campione).. I nostri risultati vengono forniti, come da sottrazione, in questa maniera: % - cambiamento bit di destra da 0 a 1 quando abbiamo -3*10^-5 % - cambiamento bit di destra da 1 a 0 quando abbiamo 3*10^-5 % a questo punto analizziamo il numero di occorrenze di - e +, per ogni % algoritmo di cifratura. u=0; % contatore di -3*10^-5 u1=0; u2=0; u3=0; for l=confPrimo(1):confPrimo(lung) if(y(l)-Y(l)<0) u=u+1; end end for l=confSecondo(1):confSecondo(lung1) if(y(l)-Y(l)<0) u1=u1+1; end end for l=confTerzo(1):confTerzo(lung2) if(y(l)-Y(l)<0) u2=u2+1; end end for l=confQuarto(1):confQuarto(lung3) if(y(l)-Y(l)<0) u3=u3+1; end end % stampiamo le u disp(' N° occorrenze di -3*10^-5 e 3*10^-5 e percentuale: '); disp([u length(confPrimo)-u u/length(confPrimo)]); disp([u1 length(confSecondo)-u1 u/length(confSecondo)]); disp([u2 length(confTerzo)-u2 u2/length(confTerzo)]); disp([u3 length(confQuarto)-u3 u3/length(confQuarto)]); % all'incirca, da come si può notare, abbiamo un numero di - e + pressochè uguali. % ma questo alla fine è un risultato relativo poichè il file watermark può % essere composto da diversi 0 e 1.. e quindi può essere anche % rappresentato in diversi modi. "Primo illegale".

-130-

Page 137: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

°ConfAlg2.m (confronto file MP3Stego con e senza watermark)

function ConfAlg2() % Stegoanalizzare file output mp3Stego [FileName,PathName] = uigetfile('*.mp3','Seleziona file mp3 Senza Watermark'); [FileName1,PathName] = uigetfile('*.mp3','Seleziona file mp3 con Watermark'); [y]=mp3read(FileName); [Y]=mp3read(FileName1); disp(' N° dei campioni è : '); disp(length(y)); i=1:length(y); Differenze=find(y(i)~=Y(i)); Primo=Differenze(1); % primo indice differenza disp(' N° delle differenze è : '); disp(length(Differenze)); max(Differenze); % ultimo campione cambiato % proviamo che non ci siano differenze negli altri i=max(Differenze)+1:length(y); Differenze2=find(y(i)~=Y(i)); % Differenze dovrebbe essere un vettore vuoto Standard=y(Primo)-Y(Primo); % occorrenze delle entità 3*10^-5 g=0;% contatore for i=1:max(Differenze) if(y(i)-Y(i)==Standard) g=g+1; end end % proviamo a vedere il numero di occorrenze delle entità -3*10^-5 h=0;% contatore for i=1:max(Differenze) if(y(i)-Y(i)==-Standard) h=h+1; end end disp(' Numero occorrenze 3*10^-5 :'); disp(g); disp(' Numero occorrenze -3*10^-5 :'); disp(h); disp(' Vediamo il rapporto :'); disp(h/g); % all'incirca è intorno a 1 per tutti i file processati 50%

-131-

Page 138: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

BIBLIOGRAFIA - SITOGRAFIA

[1] Nicola Amato “La steganografia da Erodoto a Bin Laden”, Università di Varese.

[2] G.J. Simmons, “The prisoners’ problem and the subliminal channel”, pp 51-67.

[3] Steganografia moderna, http://www.pazuzu.it/tritemio/modern.asp [4] L. Boney, A. Tewfik, K. Hamdy “Digital Watermarks for Audio Signal”,

University of Minesota. [5] Anderson, R. and F. Petitcolas, “On the limits of steganography”, IEEE Journal of

Selected Areas in Communications, 16(4): 474-481.

[6] Simon Singh, “Codici e segreti (the code BOOK)”, BUR saggi.

[7] M. Swanson, M. Kobayashi “Multimedia Data-Embedding and Watermarking

Technologies”, IEEE. [8] Bender, W., et al., “Techniques for data hiding”, IBM Systems Journal, Vol. 35, Nos

3&4, pp. 313-36, 1996.

[9] Nascondersi nel rumore (Hiding Process),

http://www.dm.unito.it/personalpages/cerruti/studenti/Longhini/cap2.pdf, Università di Torino.

[10] Crittografia, http://www.beta.it/beta/bs019598/0696/b696web1.htm. [11] Articolo MrWebMaster Watermark PHP,

http://www.mrwebmaster.it/php/articoli/aggiungere-proprio-watermark-immagine_735.html. [12] S-Tools, ftp://ftp.ntua.gr/pub/crypt/mirrors/idea.sec.dsi.unimi.it/code/s-tools4.zip.

[13] MP3Stego, http://www.cl.cam.ac.uk/~fapp2/steganography/.

[14] Brute forcing S-Tools, http://www.jasonmacpherson.com/brute-forcing-s-tools/.

[15] WAV Format, http://ccrma.stanford.edu/courses/422/projects/WaveFormat/. [16] MP3 Format, http://www.multiweb.cz/twoinches/MP3inside.htm.

-132-

Page 139: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008

[17] MPEG AUDIO LAYER 3, http://www.iis.fhg.de/amm/techinf/laweb/infoBC.htm?p.

[18] mp3read e mp3write (routine matlab di supporto),

http://labrosa.ee.columbia.edu/matlab/mp3read.html.

[19] Tesi Ricardo Garcia, http://mue.music.miami.edu/thesis/ricardo_garcia/ricardo_garcia_thesis.PDF, University of Miami.

[20] Articolo WebNews “Stealthy Audio Watermarking”,

http://www.webnews.it/news/leggi/6735/microsoft-brevetta-il-watermark-audio-perfetto/. 13-9-2007.

[21] http://www.dia.unisa.it/~ads/corso-security/www/CORSO-0203/steganografia.pdf.

[22] Audio Watermarking Techniques, http://www.musemagic.com/papers/watermark.html.

-133-

Page 140: Tesi di Laurea su "Alcuni Metodi per il Watermarking Audio" 2008