Newsgroup: it.comp.sicurezza.crittografia
Titolo: Commenti richiesti: protocollo scambio chiavi

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Protocollo scambio chiavi per progetto universitario, commenti richiesti
Voglio stabilire una chiave simmetrica di sessione tra le entità A e B.
Ipotesi:
- - A è dotata di una coppia di chiavi asimmetriche (Pubblica: Ka, Privata:
(Ka^-1))
- - B è dotato di una coppia di chiavi asimmetriche (Pubblica: Kb, Privata:
(Kb^-1))
- - A conosce (B,Kb) (e se ne fida)
- - B conosce (A,Ka) (e se ne fida)
- - A è in grado di generare chiavi di sessione (Ks) buone
crittograficamente
- - B ritiene che A sia competente nella generazione delle chiavi 
- - A e B generano rispettivamente X ed Y, entrambe fresche e random
Obiettivi del protocollo:
- - A e B devono condividere una chiave di sessione (Ks) buona e fresca ad
ogni nuova esecuzione del protocollo di scambio chiavi (key authentication)
- - Sia A che B credono che l'altro conosca la chiave di sessione (Ks) (key
confirmation)
- - Key freshness di Ks
Schema del protocollo:
Messaggio 1) A -> B : {A, X}_Kb 
A invia a B un messaggio cifrato con Kb contenente il proprio
identificativo "A" ed "X"
Messaggio 2) B -> A : {B, X, Y}_Ka
B invia ad A un messaggio cifrato con Ka contenente il proprio
identificativo "B", "X" ed "Y"
Messaggio 3) A -> B : {A, Y, Ks}_Kb
A invia a B un messaggio cifrato con Kb contenente il proprio
identificativo "A", "Y" e la chiave di sessione "Ks"
Messaggio 4) B -> A : {B, X, Ks}_Ka
B invia ad A un messaggio cifrato con Ka contenente il proprio
identificativo "B", "X" e la chiave di sessione "Ks"
Domande:
a) Così com'è il protocollo permette di giungere agli obiettivi desiderati
in modo confidenziale?
b) Dimostrarne la correttezza mediante la logica BAN ...
c) Una eventuale modifica del messaggio 2 e 3 come segue migliorerebbe il
protocollo?
        Modifica di M2 B->A : {B, {X}_(Kb^-1), Y}_Ka
        Modifica di M3 A->B : {A, {Y}_(Ka^-1), Ks}_KB
Grazie.
toro83.ng_at_gmail.com
- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.3 (GNU/Linux)
mQGiBEV+2w0RBADUnS7MBupJsGueWumgT7YNlT1IaaH3apRB7CSv3qDN13D+iKMH
UkEeO2bbA7C/5B76auqvr4qxtZNo2aUyFMVed5nkDYJVKzqh2sK+waqoS5bEMbXS
FPW2vzd4zFoUHw8j3QT+g0KB6wsDW2L/RLaY+wp/K4Lllsf1O0oUA42eowCgvjy4
SsUI8OfAwRzEpmUZHvlXZckD/211I6m/ve/511iIYgAUMq3H6nMETZ8wSOdTfOD2
Y+VTqLiPyoUO59esa6LwWDYThwwT9YDzab5EN0ANjC2YPpnyjghJurr7buNurfLg
3aS0ho4U0mMELEQTRyHdgueafaX3V2gpAqJaSeXluR5/H3YykTGMVKYCH+jzGGrz
4zstBAC0iBkNUYMrpRCVWyNU6ReZmBb+copSWhx19sqkzktasZKKTUxckNF1dL23
ZqkK9lvv/L5nL3BoDB9OR9na10IP67pYApD50wqbbdFG3nM++mDgrpbpa52JDTpu
7ZrfG5Hl7KZwDi4N8dvDTge0uuRB0zdStwkxh3XzyttSm58sgbQfdG9ybzgzLm5n
IDx0b3JvODMubmdAZ21haWwuY29tPohdBBMRAgAdBQJFftsNBgsJCAcDAgQVAggD
BBYCAwECHgECF4AACgkQBPBbcTLyp6LIywCfcfDt7jcGOt3w00bAHh3Ix6S/ozYA
oJSzu+ZjKvZK5rEEvYViagnVxU2vuQENBEV+2w4QBACPyDH/kCP33uhKfHhiSkhB
O6/RtUaCXzn67hZC7YO20qsQfF9cMP1o9399FLHaheCD61B3bYuJQ9kAiLLTROgF
j8q3aawG+Lov2HS/1NtIOE7SIr2KUmJpoGGFm+zZNR/GoPGhaxbLqQcqL69K0EsI
kICfkboGKsLIaQCbYJJwywADBQP8DJu55B4CCyvh++HfMAGqOpInPvGFZGg9ib+V
BvlUcoiFCjH14LURh+eqV8ycLEJy9F/8601k3y0QO89zhKxKLrdwZC2PT3LURjq2
AmL/LpKwUH7uf4UOsn+Rfmka1bX8SllseGZV8YNd/NAYcVi29QZ+bWHR3t9jRHMB
ogDtU5eIRgQYEQIABgUCRX7bDgAKCRAE8FtxMvKnos2kAKC+MkF7D4SCK9a0H96u
MNSx/uIURwCgrFmAdhNwVuQlVgeywXMv1vFDEpY=
=WP59
- -----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
iD8DBQFFvemlBPBbcTLyp6IRApL3AJ4oTtA0SmkyMwbqsyskprX+uld6/gCeKUDg
GoYIT5OGD2i05kjRbX9+jfc=
=XNz6
-----END PGP SIGNATURE-----

        Modifica di M3 A->B : {A, {Y}_(Ka^-1), Ks}_KB
La confidenzialità, in teoria, sarebbe più alta perché {X}_(Kb^-1) è la 
firma di B relativa a X (solo B può firmare X) e A farebbe {X}_Kb per 
verificare che X l'ha firmato proprio B; stessa cosa per Y. Ma, con le 
ipotesi fatte, M2 e M3 originari sono già sufficienti a raggiungere gli 
obiettivi desiderati in modo confidenziale.
La velocità peggiorerebbe a causa dei due elevamenti a potenza aggiuntivi (2 
per A e 2 per B) e della lunghezza molto superiore di {X}_(Kb^-1) rispetto a 
quella che sarebbe necessaria per X (M2 modificato potrebbe arrivare a circa 
10, 20 volte la lunghezza di M2 originario), per cui direi che la risposta è 
no.
Cristiano 

Intanto ti ringrazio Cristiano,
non penso di fare quelle modifiche ad M2 ed M3 visto il tuo consiglio.
Ora devo passare il tutto in C, avvalendomi delle librerie OpenSSL. Ti farò
sapere come procede il lavoro domani.
Ciao.
toro83.ng

 Ti farò sapere come procede il lavoro domani.
Bene, almeno ogni tanto in questo ng si parla anche di crittografia. :-)
Cristiano 

Il lavoro serve per poter accedere all'esame di Sicurezza nelle Reti.
Il protocollo deve funzionare, ma non serve che sia infallibile, bisogna
dimostrarne la validità per mezzo della logica BAN ed implementarlo come
detto in C per una semplice applicazione Client-Server, tipo chat, ma
sicura.
Grazie,
toro83.ng 

 bisogna dimostrarne la validità per mezzo della logica BAN [...]
Gia che ci siamo, mi spieghi, a grandi linee, cos'è 'sta logica BAN?
Cristiano 

 Gia che ci siamo, mi spieghi, a grandi linee, cos'e' sta logica BAN?
Ciao Cristiano.
La logica BAN serve per vagliare la validità di un protocollo di scambio
chiavi.
Per mezzo di una serie di postulati dettati dalla Logica BAN stessa,
applicati alle ipotesi iniziali ed alle conclusioni cui puoi giungere mano
a mano che analizzi i messaggi del protocollo, puoi controllare meglio il
protocollo stesso e scoprirne più facilmente eventuali problemi di
sicurezza.
Applicare la logica BAN non è sempre immediato, ne' è in grado di dare
certezza sulla effettiva debolezza di un protocollo, ma può indirizzarti
verso la giusta strada.
Per approfondimenti puoi vedere il seguente link: 
http://en.wikipedia.org/wiki/Burrows-Abadi-Needham_logic
Se poi vuoi altre info puoi vedere anche il seguente pdf, del professore che
ci tiene il corso qui a Pisa:
http://www2.ing.unipi.it/%7Ed8333/Teaching/SNR/materiale-didattico/\
Analisi-progetto-cryptoproto.pdf
Okkei, se hai altre domande fammi sapere.
Io intanto sono abbastanza in alto mare con la programmazione, diamine, il C
secco non mi va giù, molto meglio il C++ ... però ... pazienza.
Ciao toro83.ng

 pazienza.
Condivido in pieno! :-) Una volta che ti abitui al C++, ritornare al C...
Ciao
Cristiano 

 Io intanto sono abbastanza in alto mare con la programmazione,
