ZRTP PROTOCOL 03 [modalit compatibilit ]margara/map/files/downloads/seminarisicurezzaold/...La Legge...

Post on 16-Feb-2019

215 views 0 download

Transcript of ZRTP PROTOCOL 03 [modalit compatibilit ]margara/map/files/downloads/seminarisicurezzaold/...La Legge...

ZRTP PROTOCOL

Di Phil Zimmermann

Studenti: Anton Duoda,

Angelo Cofano

Cos’è ZRTP?• ZRTP è un nuovo protocollo per telefonate sicure

che consente di effettuare chiamate criptate sulla rete Internet.

• Utilizza un algoritmo pubblico ed evita la complessità dell'Infrastruttura a Chiave Pubblica. In effetti non impiega alcun sistema pubblico di In effetti non impiega alcun sistema pubblico di distribuzione delle chiavi crittografiche. Utilizza l'algoritmo Diffie-Hellman di generazione e scambio delle chiavi e consente il rilevamento di attacchi di tipo Man in The Middle (MiTM),visualizzando una breve stringa di autenticazione che gli utenti leggono e confrontano al telefono.

La Legge

• Forward Secrecy perfetta nel senso che le chiavi di sessione sono distrutte alla fine della chiamata, questo evita anche di poter decriptare vecchie comunicazioni registrate

• La legge impone agli operatori di dare accesso alla Magistratura a qualsiasi tipo di informazione o servizio in loro possesso che, nel caso di ZRTP, sarebbero solo loro possesso che, nel caso di ZRTP, sarebbero solo pacchetti di dati criptati. ZRTP esegue la negoziazione delle chiavi in modalità peer-to-peer e gli operatori di rete non hanno alcun accesso alle chiavi.

• Solo gli utilizzatori finali sono coinvolti nel processo di creazione e negoziazione delle chiavi crittografiche

• ZRTP non ha trapdoors

Concetti

• RTP

• SRTP

• Protocollo Diffie-Hellman

• Un po’ di teoria dei numeri• Un po’ di teoria dei numeri

RTP

• RTP definisce un formato standard per l’invio

di pacchetti audio e video attraverso Internet,

disegnato per comunicazione di tipo end-to-

end, real-time. Garantisce la consegna dei end, real-time. Garantisce la consegna dei

pacchetti perche gestisce la loro perdita.

• Secure Real-time Transport Protocol (SRTP)

definisce un profilo di Real-time Transport

Protocol (RTP)

SRTP

• SRTP si fa carico di provvedere alla cifratura, autenticazione dei messaggi e all’integrità degli stessi in confronto a RTP.

• Le caratteristiche quali cifratura e autenticazione sono opzionali e possono essere disattivate separatamente. opzionali e possono essere disattivate separatamente. Solo l’autenticazione dei messaggi è indispensabile.

• Utilizza come cifrario AES successore di DES.

• Si basa su una gestione esterna della creazione delle chiavi.

• Sono due i protocolli disegnati specificatamente per essere usati con SRTP, ZRTP e MIKEY.

Protocollo Diffie-Hellman

• Lo scambio di chiavi Diffie-Hellman (Diffie-Hellman key exchange) è un protocollo crittografico che consente a due entità di stabilire una chiave condivisa e segreta utilizzando un canale di comunicazione insicuro (pubblico) senza la necessità che le due parti si siano scambiate informazioni o si siano incontrate in precedenza. si siano incontrate in precedenza.

• Lo schema del protocollo Diffie-Hellman fu pubblicato per la prima volta nel 1976 nell'ambito di una collaborazione tra Whitfield Diffie e Martin Hellman.

• I documenti riguardanti l'invenzione, all'epoca giudicata tecnologicamente impraticabile, sono stati tenuti segreti fino al 1997.

• Il protocollo è considerato sicuro contro gli eavesdropper

Descrizione del protocollo

Diffie-Hellman

• Due interlocutori Alice e Bob.

• Si sceglie un numero g (generatore o radice primitiva modulo p), dove p è un numero primo

• Alice, sceglie un numero casuale a e calcola il valore A = ga mod p, e lo invia a Bob, assieme ai valori g e p. A = g mod p, e lo invia a Bob, assieme ai valori g e p.

• Bob da parte sua sceglie un numero casuale b, calcola B = gb mod p e lo invia ad Alice.

• A questo punto Alice calcola KA

= Ba mod p, mentre Bobcalcola K

B= Ab mod p.

• A questo punto i due interlocutori sono entrambi in possesso della chiave.

Un po' di teoria dei numeri

• Generatore o radice primitiva modulo n è un

numero g con la proprietà che ogni numero coprimo

con n è congruente con una potenza di g.

– Per ogni intero a gcd(a, n) = 1, esiste un intero k

tale che gk ≡ a (mod n) quindi gk congruo con a.

– Questi numeri a coprimi ad n, considerati modulo

n, costituiscono un gruppo ciclico rispetto

all'operazione di moltiplicazione indicato con

(Z/nZ)×

Un po' di teoria dei numeri

• EsempioSi consideri per esempio n = 14.

Gli elementi di (Z/14Z)× sono

le classi di congruenza di 1, 3, 5, 9, 11 e 13.

3 è un generatore modulo 14, perché

32 = 9, 33 = 13, 34 = 11, 35 = 5 e 36 = 1 (modulo 14)3 = 9, 3 = 13, 3 = 11, 3 = 5 e 3 = 1 (modulo 14)

• Non è nota nessuna formula generale ragionevolmente semplice per determinare i generatori modulo n.

• Vi sono però dei metodi per individuare un generatore che sono più veloci della semplice verifica per tentativi di tutti i candidati.

Un po' di teoria dei numeri

• Il numero di generatori modulo n, se ne

esistono, è uguale a φ(φ(n))

• Dove φ(n) è la funzione phi di Eulero, detta

anche funzione totiente, il numero degli interi anche funzione totiente, il numero degli interi

positivi minori o uguali ad n tali che sono

coprimi con n

Schema del protocollo

Diffie-Hellman

Ricapitolando• Alice e Bob trovano lo stesso risultato perché gab e gba sono uguali.

• Si noti come solo a, b e gab = gba sono segreti.

• Chiaramente i valori di a, b e p devono esser grandi

• Se p è un primo di almeno 300 cifre e a e b sono almeno di 100

cifre, il miglior algoritmo conosciuto oggigiorno non può trovare il

valore di a (il numero segreto), a partire dalla conoscenza di g, p e

ga mod p usando tutta la potenza computazionale della terra.ga mod p usando tutta la potenza computazionale della terra.

• Questo è il problema del logaritmo discreto.

• Il problema del calcolo dei logaritmi discreti ha notevoli somiglianze

con quello della fattorizzazione dei numeri interi, in quanto

entrambi i problemi sono supposti difficili (non sono noti algoritmi

che li risolvono in tempo polinomiale)

• Si noti come g non debba esser grande, infatti nella pratica è spesso

piccolo.

Esempio di funzionamento

• Partecipanti Alice, Bob (interlocutori), Eve (eavesdropper)

• Posto s = chiave segreta condivisa. s = 2, a = chiave privata di Alice. a = 6, b = chiave privata di

Bob. b = 15, g = base pubblica. g = 5, p = numero primo pubblico. p = 23

Alice

conosce non conosce

p = 23 b = 15

base g = 5

a = 6

56 mod 23 = 8

Bob

conosce non conosce

p = 23 a = 6

base g = 5

b = 15

515 mod 23 = 19

Eve

conosce non conosce

p = 23 a = 6

base g = 5 b = 15

s = 2

5a mod 23 = 8

• Deve essere difficile (deve richiedere troppo tempo di calcolo) per Alice trovare la chiave privata di

Bob e per Bob trovare la chiave privata di Alice. In caso contrario, Eve potrebbe trovare le chiavi dei

due e utilizzarle per mettersi in mezzo, facendo credere a Bob di essere Alice, e ad Alice di essere

Bob. In questo caso si avvierebbero due comunicazioni cifrate, una tra Alice ed Eve, e una tra Eve e

Bob (e la sicurezza della comunicazione sarebbe completamente aggirata).

56 mod 23 = 8

5b mod 23 = 19

196 mod 23 = 2

8b mod 23 = 2

196 mod 23 = 8b mod 23

s = 2

515 mod 23 = 19

5a mod 23 = 8

815 mod 23 = 2

19a mod 23 = 2

815 mod 23 = 19a mod 23

s = 2

5a mod 23 = 8

5b mod 23 = 19

19a mod 23 = s

8b mod 23 = s

19a mod 23 = 8b mod 23

Panoramica del protocollo ZRTP

• Il flusso di chiamata

• Istituzione della sessione RTP

• Accordo sulle chiavi, metodo Diffie-Hellman

– Scoperta– Scoperta

– Commit

– Scambio Diffie-Hellman

– Passaggio a SRTP e conferma

• Fine della sessione

Il flusso di chiamata

• Vengono identificati due ruoli iniziatore e

risponditore

• Scambio di pacchetti ZRTP differenti dai

pacchetti RTP pur mantenendo piena pacchetti RTP pur mantenendo piena

compatibilità

Istituzione della sessione RTP

• La negoziazione delle chiavi e fatta attraverso una sessione RTP.

• signaling secret (sigs)

– sigs = H(call-id|to-tag|from-tag)– sigs = H(call-id|to-tag|from-tag)

– Call-id generata in maniera random

• SRTP segreto (srtps)

– srtps = H(SRTP-mkey|SRTP-msalt)

– Mkey, chiave primaria

– Msalt, chiave conservata (bit Random)

Diffie-Hellman (Scoperta)

• Scambio di identificatori ZRTP (ZID) usati anche

per lo scambio dei segreti conservati (rs1, rs2)

• Scambio di informazioni sulle capacita altrui

– Versioni ZRTP supportate (zrtpv)– Versioni ZRTP supportate (zrtpv)

– Funzioni hash supportate (hash)

– Cifrari supportati (cipher)

– Lunghezza tag (at)

– Tipo di key-agreement (keya)

– Algoritmi (sas)

Diffie-Hellman (Scoperta)

Diffie-Hellman (Scoperta)

• Messaggi chiamati (Hello)

• Risposta (HelloACK)

• Oltre ai segreti rs1, rs2 (ZID) possono esistere

altri segreti che indicheremo con (os)altri segreti che indicheremo con (os)

• Se un segreto non esiste ne verrà creato uno

random

Diffie-Hellman (messaggio iniziale)

Diffie-Hellman (Commit)

• Invio del commit da parte del iniziatore con le informazioni riguardanti i strumenti da utilizzare durante la comunicazione.

• Creazione da parte del iniziatore del valore • Creazione da parte del iniziatore del valore segreto svi corrispondente al valore a della Diffie-Hellman e del valore publico pvicorrispondente al valore A della Diffie-Hellman, svi ha lunghezza doppia rispetto alla lunghezza della chiave AES

Diffie-Hellman (Commit)

Diffie-Hellman (Commit)

• L'iniziatore calcola hvi che è la hash di pviconcatenato con l’informazione del hello del risponditore

hvi = H(pvi|Alice's Hello)hvi = H(pvi|Alice's Hello)

• A causa della simmetria di questa fase ognuno dei interlocutori può comportarsi come un iniziatore, in questo modo inviando il proprio commit. Si risolve questa discordia dando precedenza a chi ha il hvi più alto

Diffie-Hellman

• L'iniziatore si genera le chiavi :– Un valore segreto scelto dall'iniziatore che

chiameremo svi

– Un valore pubblico che chiameremo pvi

• Calcolo del pvi :• Calcolo del pvi :

gsvi mod p

– Dove p,g sono già state scelte key agreement typedurante fase commit

• Calcolo Hash del pvi :

Hvi= H( pvi |Alice's hello)

DH- Continuità delle chiavi ZRTP

• ZRTP fornisce un secondo livello di autenticazione oltre al SAS che vedremo in seguito, contro gli attacchi Man in the Middle ed è basato su una forma di continuità della chiave crittografica.

• Preleva parte dei vecchi dati della chiavi del segreto condiviso Diffie Hellaman durante la chiamata in atto(ZID).condiviso Diffie Hellaman durante la chiamata in atto(ZID).

• Se l’attaccante non è presente nella prima parte è tagliato fuori dalla seconda. Quindi anche se la stringa SAS non è mai usata, la maggior parte degli attacchi è bloccata.

• Le caratteristiche di continuità delle chiavi ZRTP hanno le proprietà di auto riparazione

• Le caratteristiche di continuità derivano da SSH.

Diffie-Hellman-scambio chiavi

• I due interlocutori cercano di generarsi un

segreto condiviso S0 che successivamente

diventerà il segreto condiviso rs0.

• Il risponder ricevuto il commit si genera svr e • Il risponder ricevuto il commit si genera svr e

pvr e raccoglie il segreto condiviso con

l'iniziatore già scambiato in precedenza(ZID)

• Il risponder invia il suo Dhpart1(segreti del

risponder) all'iniziatore

Diffie-Hellman-scambio chiavi

• L'iniziatore che già possiede il proprio Dhpart2

ricevuto il Dhpart1, ordina i segreti, perchè

posizionati in maniera diversa o addirittura

diversi e questo comprometterebbe il calcolo diversi e questo comprometterebbe il calcolo

del segreto condiviso S0

Diffie-Hellman-scambio chiavi

Diffie-Hellman-scambio chiavi

• Una volta che i Dhpart 1-2 corrispondono

viene assegnata questa corrispondenza:

S1 = rs1

S2 = rs2S2 = rs2

S3 = sigs

S4 = srtps

S5 = os

• L'iniziatore calcola mh (message hash):mh= H( Alice's Hello |commit|Dhpart1|Dhpart2)

Diffie-Hellman – SAS

• La SAS sono gli ultimi bit di mh.

• La SAS è visualizzata su entrambe le estremità

comunicanti, per eseguire l'autenticazione è letto

da entrambi gli interlocutori lungo la linea voce. da entrambi gli interlocutori lungo la linea voce.

Qual ora i due valori non combacino siamo sotto

un attacco Man in the Middle. L'uso di un valore

Hash costringe l'attaccante a fare un solo

tentativo per indovinare la SAS, questo permette

di avere SAS molto corte(16 bit) .

Diffie-Hellman-calcolo del segreto

• L'iniziatore calcola il Diffie-Hellman:

dhr = pvrsvi mod p

= (gsvr mod p)svi mod p

= g(svr * svi) mod p

dhss=H(dhr)

• Calcolo del segreto condiviso:S0=H(dhss|S1|S2|S3|S4|S5|mh)

Diffie-Hellman

• L'iniziatore invia il proprio Dhpart2 al

risponder il quale calcolerà :

Hvr = H(pvi|Alice's Hello)

• Se Hvi e Hvr sono diversi abbiamo un attacco • Se Hvi e Hvr sono diversi abbiamo un attacco

Man in the Middle in corso e quindi lo

scambio viene abortito

• Il risponder ordinerà i propri segreti secondo

l'ordine dell'iniziatore e poi si calcolerà S0

HMAC-Hash message authentication code

• E calcolato utilizzando una funzione hash in

combinazione con una chiave segreta ed un

stringa, il quale è utilizzato per verificare sia

l’integrità che l’autenticità del messaggio.l’integrità che l’autenticità del messaggio.

Hm(key|string)

Swich to SRTP and Confermation

• Iniziatore e risponder usano S0 per generare SRTP

master Keys(SRTP-mkey ) e salts (SRTP-msalt). Usano

quindi la funzione Hmac troncando i valori ottenuti

alla lunghezza definita dall’algoritmo SRTP scelto.

Es : New SRTP-mKeyI = Hm(S0, old SRTP-mKey)

• Questa è calcolata anche per msalt e per il responder

e serviranno per le future comunicazioni tra questi

due utenti.

Swich to SRTP and Confermation

• A questo punto iniziatore e risponder si scambiano

due messaggi di conferma che indicano ciò:1. Confermano che l’intera procedura di scambio chiavi è andato a

buon fine e la criptazione è andata a buon fine, e che hanno attivato

la rilevazione contro il Man in the Middle Attackla rilevazione contro il Man in the Middle Attack

2. Utilizzano un flag criptato per confermare che la SAS è stata

scambiata

• Il Ricevente conferma la ricevuta di conferma

dell’iniziatore con un messaggio di conferma

ricevuta CONFACK2

Swich to SRTP and Confermation

• Alla fine entrambe le parti sostituiscono rs0 a

rs1 e rs2 che è calcolato nel seguente modo:

rs0 = Hm(S0 | retained secret)rs0 = Hm(S0 | retained secret)

dove retained secret = RS1 o RS2

Attacchi da un imitatore della voce

a ZRTP

• Difficoltà da parte del attaccante nel

irrompere nella conversazione.

– Tempistica

– Uso di una lista di parole simile al PGP– Uso di una lista di parole simile al PGP

• Possibilità di ripetere più volte la stringa SAS

• Non conoscenza degli utenti

– Basta accorgersi che la voce durante la

conversazione è la stessa che ha letto la stringa

SAS

ZRTP cripta i toni DTMF della

tastiera

• ZRTP cripta tutto il traffico RTP, inclusi i toni

DTMF.

• E' importante cifrare anche questi dati perché

vengono utilizzati, per esempio, per inserire i vengono utilizzati, per esempio, per inserire i

dati delle carte di credito quando vengono

fatte chiamate alle banche.