Temi per il corso di Lab. Didattico di Ing. dell’Informazione AA 2010-2011 March 3, 2011 Contents 1 Introduzione 1.1 Consegna dell’esercitazione . . . . . . . . . . . . . . . . . . . . . . 1.2 Valutazione dell’esercitazione . . . . . . . . . . . . . . . . . . . . . 1 1 2 2 Tema N. 1: cancellazione d’eco per conferenza 2.1 Commenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 Tema N. 2: telefonia sicura tramite steganografia 3.1 Commenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 5 1 Introduzione Gli studenti si riuniscono in gruppi ed ogni gruppo sceglie un tema tra quelli proposti. I temi descrivono un sistema da sviluppare dandone le specifiche “a livello utente,” ossia, spiegando cosa il sistema deve fare, ma non come lo fa. Ogni decisione tecnica è lasciata agli studenti. Qualsiasi scelta va bene, purché sia ragionevole e purché il sistema finale abbia i requisiti richiesti. La libertà di scelta si estende anche agli “strumenti” che gli studenti decidono di utilizzare tra cui, per esempio, il linguaggio di programmazione (C, C++, Java, Ada, Ruby, Python, . . . ) l’architettura utilizzata (PC, scheda DSP, . . . ). 1.1 Consegna dell’esercitazione Il risultato dell’esercitazione sarà, tipicamente, un software sviluppato dagli studenti accompagnato da una relazione sull’attività svolta. La relazione sarà nella forma di un piccolo sito web che verrà successivamente pubblicato in rete, a richiesta dello studente, a documentazione del lavoro svolto. In fase di consegna dell’esercitazione gli studenti faranno anche una breve (≈ 15-20 minuti) presentazione del lavoro svolto. 1 1.2 Valutazione dell’esercitazione L’esercitazione può essere conclusa a diversi “gradi di finitura,” per esempio, gli studenti possono decidere di consegnare • Un prototipo matlab • Un prototipo in C (o altro linguaggio) funzionante off line (per esempio, leggendo e scrivendo da e su file) • Un prototipo completo, funzionante in tempo reale La valutazione finale dell’esercitazione terrà conto di vari aspetti, tra cui • Il grado di “finitura” dell’esercitazione • La strutturazione del prodotto finale (per esempio, quanto facile sia estenderlo con nuove funzionalità o quanto portabile sia il codice prodotto) • La chiarezza e completezza della relazione finale 2 Tema N. 1: cancellazione d’eco per conferenza Si vuole creare un servizio di conferenza audio cosı̀ strutturato • Ogni singolo partecipante legge campioni dalla scheda audio e li invia (previa eventuale codifica) ad un nodo centrale che agisce da mixer • Il nodo centrale combina tra di loro i segnali ricevuti, in modo da creare un unico segnale contenente le voci di tutti i partecipanti. Il mixer può decidere di “pesare” diversamente i singoli contributi e può anche decidere di non includere i contributi di quegli utenti che al momento non stanno parlando. • Il nodo centrale ridistribuisce a tutti gli utenti il segnale creato via multicast. • Ogni nodo riceve un segnale che contiene anche il proprio contributo, oltre al contributo degli altri utenti. Tale componente causerebbe un fastidioso effetto d’eco se presente nel segnale presentato all’utente. • Il nodo stima la componente del segnale ricevuto dovuta al proprio contributo, la cancella e presenta all’utente un segnale “pulito” 2.1 Commenti Segnale in uscita dal mixer Sia N il numero di utenti. Se indichiamo con vi : Z → R il segnale associato alla voce dell’i-simo utente, il segnale ricevuto dal mixer avrà la forma (1) M(n) = ∑ = N αi vi (n − di ) + ε (n) i=1 2 dove αi ∈ R rappresenta l’attenuazione applicata all’utente i-simo, di ∈ Z è il ritardo subito dalla voce dell’i-simo utente e ε è un processo aleatorio che modella il rumore introdotto dal sistema (principalmente rumore di codifica dovuto alla codifica lossy usata per la voce). Il nodo ℓ-simo opera, a grandi linee, come Comportamento (a braccio) di un nodo segue • Legge i campioni vℓ (n) dalla scheda audio, li codifica, li invia al mixer e li memorizza da qualche parte per usarli in seguito • Riceve i campioni M(n) dal mixer • Stima i valori di αℓ e dℓ , siano α̂ℓ e dˆℓ i valori ottenuti dal processo di stima • Presenta all’utente il segnale M(n) − α̂ℓ vℓ (n − dˆn ) (2) Stima di dℓ e αℓ La parte più complessa è chiaramente la stima dei valori di αℓ e dℓ a partire da vℓ e M. Dal punto di vista teorico, modellando le voci vi ed il rumore di codifica ε come processi aleatori stazionari, a media nulla e tra loro incorrelati (ipotesi abbastanza ragionevoli), αℓ e dℓ possono essere stimati osservando che gℓ (k) = E[M(n + k)vℓ (n)] " = E[ ∑ = N αi vi (n + k − di ) + ε (n + k) i=1 # vℓ (n)] = ∑ = N αi E[vi (n + k − di )vℓ (n)] + E[ε (n + k)vℓ (n)] (3) i=1 = αℓ E[vℓ (n + k − dℓ )vℓ (n)] = αℓ rℓ (k − dℓ ) dove rℓ (k) := E[vℓ (n + k)v(n)] è l’autocorrelazione di vℓ . Poiché rℓ assume il valore massimo nell’origine, si deduce che gℓ (k) in (3) ha il massimo in k = dℓ e che gℓ (dℓ ) = αℓ rℓ (0) = αℓ σℓ2 dove σℓ2 = rℓ (0) è la varianza del processo vℓ . Un possibile approccio alla stima di αℓ e dℓ può essere quindi 1. Stima σℓ2 (usando i campioni di vℓ letti dalla scheda audio) 2. Stima gℓ (k) 3. Trova il massimo di gℓ (k), determinando cosı̀ dℓ 4. Calcola gℓ (dℓ )/σℓ2 per trovare αℓ 3 (4) Stima frazionaria di dℓ Si osservi che in questo modo dℓ è sempre un multiplo del passo di campionamento. Supponendo l’audio campionato a 8 kHz, il passo di campionamento è 0.125 ms, precisione probabilmente più che sufficiente per gli scopi dell’esercitazione. Volendo raffinare la stima di dℓ si può, per esempio, interpolare i tre campioni gℓ (dℓ − 1), gℓ (dℓ ) e gℓ (dℓ + 1) con una parabola e trovare il massimo della parabola interpolante. Per calcolare vℓ (n − dn ) con dn non intero si può usare la struttura di Farrow (chiedere al docente per maggiori dettagli) Numero dei campioni di vℓ da conservare Si osservi che il ritardo dℓ può essere “considerevole” (quando confrontato con il passo di campionamento). Su Internet non è raro trovari tempi di andata-e-ritorno (RTT, round trip time) dell’ordine del centinaio di millisecondi. A 8.000 campioni al secondo, un ritardo di un centinaio di millisecondi corrisponde a circa mille campioni. Il nodo dovrà quindi memorizzare i dati abbastanza a lungo per poter fare la stima del ritardo. 3 Tema N. 2: telefonia sicura tramite steganografia Si vuole creare un servizio di telefonia sicura. Lo schema base è il seguente • Si supponga che Alice voglia parlare in maniera sicura con Bob e che Charlie e David siano “complici” di Alice e Bob. • Alice e Bob si accordano su una chiave comune (magari usando un protocollo di scambio chiavi quale il Diffie-Hellman) • Il programma usato da Alice – Legge i campioni della voce di Alice dalla scheda audio – Li codifica (probabilmente con un codificatore per voce) – Cifra i bit risultanti dalla codifica e li trasmette a Bob • Il programma usato da Bob – Riceve i bit criptati e li decifra – Decomprime il risultato della decifratura ed ascolta la voce di Alice • La trasmissione dei bit non avviene direttamente in Internet, ma usando un canale “nascosto” – Charlie e David iniziano una sessione di video-conferenza. – I bit prodotti da Alice vengono usati per “modificare” il video che Charlie manda a David – David estrae dal video i bit prodotti da Alice e li passa a Bob (che li decifra, decodifica l’audio, . . . ) 4 3.1 Commenti Il canale nascosto La maggior parte del sistema da sviluppare è implementabile con blocchi già pronti (cifratura, decifratura, scambio chiavi, codifica voce, . . . ) la parte più difficile è l’implementazione del canale “nascosto nel video.” Si noti che il video che viaggia da Charlie a David dovrebbe apparire agli occhi di un eventuale intercettatore come un video normale, senza informazioni nascoste. Alcune soluzioni possibili per la creazione di un canale nascosto • Usare i bit prodotti da Alice per modificare i pacchetti prodotti dal codificatore video. L’applicabilità di questa soluzione dipende molto dal formato video usato e richiede di andare a “mettere le mani” sulla “sintassi” del formato video. • Aggiungere un jitter ai pacchetti video scegliendo l’istante in cui vengono spediti sulla base dei bit prodotti da Alice. David ricaverà i bit di Alice dall’osservazione degli istanti di arrivo dei pacchetti. • Usare i bit prodotti da Alice per modificare i singoli frame video prima della compressione. Si faccia attenzione che poiché il video viene codificato in maniera lossy, il video ricostruito da David sarà quello acquisito da Charlie con l’aggiunta di un termine di rumore. Uno schema spread spectrum-like Un possibile schema per “nascondere” i bit di Alice nel flusso video potrebbe essere la seguente. Sia n f (r, c) il pixel di riga r e colonna c dell’n-simo frame fn e siano b1 , b2 , . . . , bK i bit da trasmettere. Siano R e C, rispettivamente, il numero di righe e di colonne di f . Si generino K “immagini aleatorie” G1 , G2 , . . . , GK , dove ogni pixel Gi (r, c) assume il valore 1 con probabilità 1/2 e −1 con probabilità 1/2. Gli KRC pixel delle K immagini aleatorie sono scelti in maniera indipendente l’uno dall’altro. I pixel delle immagini Gi sono ottenuti usando un generatore pseudo-aleatorio. Charlie e David si accordano all’inizio sullo stato iniziale del generatore (magari generato dalla chiave di Alice e Bob), sı̀ che le immagini generate da Charlie coincidano con le immagini generate da David. (In un caso reale il generatore usato dovrebbe essere crittograficamente forte) Per comodità di notazione, definiamo la funzione s : {0, 1} → {−1, 1} che mappa bit in ±1 come ( 1 se b = 0 s(b) = (5) −1 se b = 1 I bit b1 , b2 , . . . , bK vengono “inclusi” nel frame fn tramite la K gn (r, c) = fn (r, c) + ∑ s(bi )Gi (r, c) (6) i=1 In altre parole, si usa una modulazione PAM usando come “impulsi base” le funzioni aleatorie generate da Charlie e David. La sequenza dei frame gn in (6) viene elaborata dal codificatore video che produce un bitstream che viene inviato a David. 5 David decodifica il bitstream ricevuto ed ottiene i frame K ĝn (r, c) = gn (r, c) + εn (r, c) = fn (r, c) + ∑ s(bi )Gi (r, c) + εn (r, c) (7) i=1 dove εn (r, c) rappresenta il rumore di codifica dovuto al fatto che il codificatore usato è lossy. Per recuperare il bit bℓ David calcola # " K 1 R C 1 R C ∑ ∑ ĝn (r, c)Gℓ (r, c) = RC ∑ ∑ fn (r, c) + ∑ s(bi )Gi (r, c) + εn (r, c) Gℓ (r, c) RC r=1 r=1 c=1 c=1 i=1 ! R C 1 = ∑ ∑ fn (r, c)Gℓ (r, c) RC r=1 c=1 ! 1 R C + ∑ ∑ εn (r, c)Gℓ (r, c) RC r=1 c=1 ! K 1 R C +∑ ∑ ∑ s(bi )Gi (r, c)Gℓ (r, c) i=1 RC r=1 c=1 ≈ E[ fn (r, c)Gℓ (r, c)] + E[εn (r, c)Gℓ (r, c)] K + ∑ E[s(bi )Gi (r, c)Gℓ (r, c)] i=1 = E[ fn (r, c)] E[Gℓ (r, c)] | {z } 0 + E[εn (r, c)] E[Gℓ (r, c)] | {z } 0 + ∑ s(bi ) E[Gi (r, c)]E[Gℓ (r, c)] | {z }| {z } i6=ℓ 0 0 2 + s(bℓ )E[Gi (r, c) ] = s(bℓ ) (8) Si osservi che • Nella (8) il segno di ≈ discende dal fatto che, per la legge dei grandi numeri applicata “a braccio,” ci aspettiamo che la media eseguita su tutti i pixel si avvicini alla media statistica. • Nel penultimo passaggio si è supposto che i pixel di Gi siano scorrelati dai pixel del frame fn e dal rumore di codifica εn , un’ipotesi tutto sommato ragionevole. • La (8) può essere riscritta 1 R C ∑ ∑ ĝn (r, c)Gℓ (r, c) = s(bℓ ) + ηℓ RC r=1 c=1 6 (9) dove ηℓ è un termine aleatorio che tiene conto del fatto che le medie campionare in (8) non sono esattamente uguali alle medie statistiche. È chiaro che il termine ηℓ agisce come un “rumore” e può causare una decodifica non corretta del bit bℓ . Per proteggersi dagli eventuali errori indotti da ηℓ si possono usare codici per la correzione degli errori (chiedere al docente per ulteriori dettagli). • La “banda” richiesta (in bit/pixel) è veramente minima. Supponendo di codificare la voce a 2400 bit/s e di avere 25 frame al secondo con R = 288 e C = 352 (le dimensioni di un CIF, un po’ più piccolo di un video YouTube) abbiamo bisogno di 2400bit/sec ≈ 10−3 bit/pixel (10) 25frame/sec(288 × 352)pixel/frame 7