[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: Gennaio 2006 ml@sikurezza.org
Soggetto: [ml] Xorro Chat
Mittente: Formichiere
Data: Sun, 22 Jan 2006 18:15:12 +0100 (CET)
-------------------------------------------------------------------------
(se solo avessi letto qualcosina eh ?)

> Purtroppo per te, ho letto tutto. Credo piuttosto che a te manchi
> una buona lettura come ad esempio lo Schneier, "Applied
> Cryptography". O lo Stallings. O l'Anderson. O comunque, una
> qualsiasi nozione base di crittografia.
-------------------------------------------------------------------------
Ciao Stefano,
come sempre in questi casi si rischia di "non costruire nulla", ma di far scadere la conversazione nell'attacco personale all'interlocutore. Io sono Gabriele Nardella, programmatore e utilizzatore di molti tra i più diffusi linguaggi (VB, C++, Assembly, Java, Prolog, etc etc.) e co-creatore di Xorro. Consiglio al mio collega MultiTaskinG di non fare critiche "ad personam" per mantenere alto il livello del servizio offerto dalla mailinglist e a te Stefano (così come a qualunque altro lettore) di non raccogliere provocazioni ;-)





-------------------------------------------------------------------------
> Una chiave pseudocasuale generata da un segreto lungo meno dei
> messaggi da trasmettere NON E' UN CIFRARIO DI VERNAM.
-------------------------------------------------------------------------
Ho letto con vivo interesse il vostro scambio e quello su cui sono perfettamente d'accordo è che la nostra non è l'implementazione di un vero Vernam, ma un algoritmo che si basa su alcuni schemi di funzionamento di Vernam, (e l'ho detto anche in privato a MultiTaskinG) dovrei spiegare il perchè di questa scelta (di non usare il vero Vernam ma qualcosa che ci andasse vicino) parlando dell'entropia che si riesce ad accumulare su un calcolatore e soprattutto parlando in formule come si è abituati a fare nell'ingegneria, ma sarebbe lungo e inutile, piuttosto ho capito dalle tue critiche una cosa ben più importante: in effetti l'utente che per la prima volta si trova davanti il sito ed il programma non può comprendere a pieno i presupposti con cui è nato il tutto. Oltre tutto i newsgroup ed i forum in genere sono pieni di accesissimi dibattiti sull'accumulo di entropia, non serve al nostro (di noi autori di Xorro) scopo parlarne qui. Credo per questo che introdurrò a breve sul sito una sezione in cui "prima di scaricare il programma" l'utente è obbligato a leggere cosa gli autori (noi) intendevano realizzare prima di mettersi a codare:


1) I presupposti (ad esempio: come hai detto tu non c'è modo di difendersi da un attacco man in the middle, però è anche vero che tutte le registrazioni vanno effettuate online per cui i dati in qualche modo possono sempre essere sniffati e non conta se usi qualche tipo di algoritmo per criptarli come SSL perchè anche se funziona bene da anni come hai ricordato tu, nessuno assicura all'utente che non verranno mai letti, 15 anni di buon funzionamento non significano niente se domani appare su bugtraq un exploit che compromette l'SSL, qualsiasi script-kiddy sarà in grado di decodificare. Perciò quello che intendeva MultiTaskinG parlando della STR1 che viene inviata al server una sola volta e che è possibile aggiornare in qualsiasi momento, era solo VOLER RICORDARE una buona norma che tutti dovrebbero conoscere, cioè che ogni utente dovrebbe aver cura di effettuare le registrazioni a siti, servizi etc... in più fasi e da connessioni diverse quando possibile. A dire il vero inizialmente si era pensato di far effettuare la registrazione in più step obbligando l'utente ad effettuare connessioni diverse con il riconoscimento dell'ip e l'invio tramite mail di una conferma di registrazione, ma poi si è deciso di rimettere questa cosa alla diligenza dell'utente, dando la possibilità di modificare la STR1 in qualsiasi momento, come hai detto tu si parte dal presupposto che "lo spione" sia in grado di intercettare QUALSIASI tua connessione, però tu sai bene che ogni "realtà" viene descritta da un modello e in questo caso ci si mette nelle condizioni peggiori appositamente per prevedere ogni eventualità, inoltre i modelli non sono infallibili, essere scrupolosi è giusto, premettimi di chiamarti collega, però bisogna avere anche buon senso nel fare le cose. Io davvero vorrei trovare qualcuno che è in grado di spiarti in qualsiasi momento e da qualsiasi connessione. Qui taglio in po' corto comunque perchè ripeto anche io come MultiTaskinG che l'intenzione è di passare a chiave pubblica e chiave privata nel più breve tempo possibile). ;-)

2) La spiegazione di cosa gli autori danno per assodato che non competa a Xorro, cioè tutto ciò che non sarà espressamente specificato tra le competenze del programma (come ad esempio la protezione dei dati di registrazione che risiedono sul proprio Hard Disk, non saremo responsabili noi se il signor TIZIO lascerà il proprio Hard Disk alla mercè di tutti, ovvio).

3) La spiegazione (spero) il più possibile chiara di cosa il programma si prefigge di fare (tenendo presente che è un progetto ancora molto giovane e che indubbiamente può essere migliorato, anche con l'aiuto di persone come te che gentilmente ci dedicano la loro attenzione e il loro tempo, a tutto vantaggio di qualcosa che potrebbe un domani servire anche a loro dal momento che le specifiche pensiamo di continuare a rilasciarle anche in futuro ad uso e consumo di tutti).

4) Xorro è un progetto nato da tanta passione per le sfide di programmazione di cose non banali (parallelamente in php, c++, vb sia su linux che su windows) e soprattutto portato avanti nel tempo libero, ma cercando di fare le cose in modo serio, per cui il protocollo è libero, e tutti possono valutare se il modo in cui opera sia per essi soddisfacente o meno inoltre chiunque può crearsi grazie a ciò il proprio client se gli va e se non si fida, anzi noi come c'è scritto al sito invogliamo anche questa strada e siamo a disposizione per chiarimenti (non mi sembra poi tanto inaccettablie)

-------------------------------------------------------------------------
> MD5 non e' un buon algoritmo per generare uno stream pseudocasuale
> da una chiave statica.

si a livello teorico...

> Esatto, e siccome a livello teorico e' gia' sbagliato, e ci sono
> modi migliori per fare la stessa cosa, perche' non usare i modi
> migliori ? Quello che tu chiami "aumento arbitrario della lunghezza
> della chiave" (che e' una bestialita' dal punto di vista
> entropico) si chiama "stream cipher" in crittografia.
-------------------------------------------------------------------------
Esatto si ritorna sull'entropia, provo invece a spiegare più in dettaglio i motivi della scelta: MD5 è un One-Way Hash e come tale "abbastanza irreversibile" (dico abbastanza perchè in campo informatico 1 giorno è una vita e non si sa mai cosa succede domani). Altra premessa da fare è che tutti i sistemi "comprovati" che io conosco per accumulare entropia non sono poi così veloci. Il programma similmente a un cifrario di Vernam prende una stringa e la Xorra con il testo che l'utente invia al suo interlocutore, poi quella stringa non verrà mai + riutilizzata perciò le stringhe a disposizione per effettuare i successivi Xor ad un certo punto finiranno e sarà necessario generarne di nuove. Come puoi ben vedere cambia totalmente la maniera in cui viene utilizzato rispetto ai tradizionali sistemi. Se tu fossi un malintenzionato quale tipo di attacco proveresti a portare? Sniffare tutto il testo criptato che passa sulla rete OK quella è la base con cui ricostruire l'intero scambio, poi? Tieni presente che le stringhe successieve utilizzate per lo xor dei messaggi vengono generate sempre dall'MD5 di ciò che rimane dalle stringhe precedenti ed ogni messaggio viene xorrato con una stringa di pari lunghezza.





-------------------------------------------------------------------------
INFATTI LA CHIAVE E' SEMPRE PIU' LUNGA DEI MESSAGGI

> No, e' falso. La chiave e' quella che usi per INIZIALIZZARE quel
> sistema, non tutto il brodo che generi con MD5. Se solo avessi
> letto qualcosina di crittografia... non dico l'articolo del '48
> (credo, vado a memoria) di Shannon, ma un qualsiasi abbecedario che
> spieghi cos'e' un "one-time pad". I.E. nel tuo esempio la chiave
> e' ZUMPAPPERO, e il massimo messaggio che puoi cifrare, con la
> sicurezza garantita da Vernam, e' lungo quanto ZUMPAPPERO. Se e'
> piu' lungo di cosi', matematicamente, quello NON E' un one-time
> pad. E non e' matematicamente garantito un bel nulla su di esso.
-------------------------------------------------------------------------
Concordo te Stefano. In verità dicevo che non è un vero Vernam ma qualcosa di simile perchè le stringhe per lo Xor non sono affatto casuali, ma generate da una password a cui vengono fatti diversi MD5 (che è un One-Way Hash) e che non uscira mai dal pc dell'utilizzatore tranne che per sua negligenza, e la stessa passord per generare le stringhe dello Xor si automodifica in maniera IMPOSSIBILE da prevedere (dal momento che è impossibile prevedere la somma delle lunghezze dei messaggi che l'utilizzatore scriverà al suo interlocutore e come spiagato nel .pdf la nuova password per i prossimi MD5 sarà la rimanenza delle stringhe non Xorrate). Però è anche vera un'altra cosa... c'è nessuno che sa tornare indietro da una stringa MD5 alla password da cui la stringa è stata generata? Aggiungo brevemente u'altra cosa, l'utilizzo che il client fa dell'md5 è molto modulare e qualora Md5 si rivelasse inefficace verrebbe sostituituito seduta stante da un OneWay Hash più sicuro.





-------------------------------------------------------------------------
 si ma noi l'abbiamo implementato correttamente... non capisco di cosa
 ti preoccupi :-P

> Apri Bugtraq. Cerca "http server" nelle vulnerabilita'. Capirai
> immediatamente di cosa mi preoccupo.
-------------------------------------------------------------------------
Per l'ennesima volta devo darti ragione, però in ingegneria siamo abituati a circoscrivere i problemi, non si può fare un calderone pazzesco. Il problema della sicurezza HTTP non rientra tra le competenze di un client, no? Poi se la mettiamo su questo piano, è l'ammininistratore che deve preoccuparsi della sicurezza del webserver (bug di Apache IIS o qualsioglia server) anche perchè se ti preoccupi di quel "man in the middle" non dovresti neanche navigare, tutti si possono sostituire a tutti e fare attacchi a previsione del numero di sequenza dei pacchetti per poi fingersi qualcun'altro.




-------------------------------------------------------------------------
oltretutto il client c'?.. il server pure... testalo se vuoi no ?

> Senza sorgenti, quindi l'analisi della sicurezza del suddetto e'
> tutta da ridere...
-------------------------------------------------------------------------
E' tutto vero quello che dici, ma il protocollo è sempre open, e un esperto sa perfettamente che per quanto è semplice e lineare (mi pare anche abbastanza schematica la spiegazione) potrebbe pure reinventarsi da zero i files PHP che gestiscono il lato server, magari anche meglio di come abbiamo fatto noi. Cosa si può desiderare di più? La luna? Io credo che per quanto tu possa amare l'open source non lavori se non ti pagano. Quindi cerca di capire anche noi... se il protocollo dovesse iniziare a prendere piede perchè non riservarci la possibilità di esser ripagati del lavoro fin qui svolto gratis? In ogni caso, se vogliamo essere "ingegneri" (e quindi pignoli e rompiscatole, mi ci includo anche io nell'etichetta di rompiscatole) l'analisi della sicurezza va fatta sul protocollo non sul programma dal momento che tutti possono crearsene uno a piacimento in base alle specifiche. Quindi a cosa servono i sorgenti?






-------------------------------------------------------------------------
 per arrivare a chiave pubblica e privata ci vuole un po' di tempo e
 stiamo valutando come procedere...

> Guarda, e' molto semplice: c'e' un algoritmo che si chiama
> Diffie-Helman, fa questa cosa, la fa bene in modo dimostrabile.
> Quello scambio di chiavi che fate voi e' buggato.
-------------------------------------------------------------------------
Per motivi che ti esporrò nell'ultimo punto credo che la chiave pubblica e privata non saranno un punto d'arrivo, ma solo un'aggiuta all'attuale funzionamento. Cosa esattamente è buggato?
Io davvero non l'ho capito, non voglio fare polemica... l'invio della STR1 in chiaro? Sono disponibile per qualsiasi prova: se vuoi creo un un utente e poi io ti dico la mia STR1 facendo finta che tu l'abbia sniffata, può essere che mi sbaglio, ma credo lo stesso che non si arriverebbe da nessuna parte, ma se mi sbaglio sarò felice di riconoscerlo e di correggere la procedura con tanti ringraziamenti.





-------------------------------------------------------------------------
 ad ogni modo la STR1 conta solo per l'autenticazione dell'utente e
 non inficia minimamente la segretezzadel messaggio

> Allora il documento sul tuo sito e' sbagliato :)
-------------------------------------------------------------------------
Sarà... conrollerò, intanto grazie per avermelo fatto notare.




-------------------------------------------------------------------------
 questo vale SOLO in fase di registrazione. (quando sarà implementato
 uno scambio di chiave pubblica/privata di cui sopra questo "problema"
 non ci sar?)

> E quando sara' implementata il programma sara' diverso e forse non
> sara' una ciofeca :)
-------------------------------------------------------------------------
Anche se fosse perchè offendere il lavoro non retribuito e svolto con
impegno e passione da un'altra persona?



-------------------------------------------------------------------------
 inoltre questo processo di sniffare la STR1 non invalida la
 segretezza del messaggio ma (ripeto) "solo" l'autenticazione del
 mittente

> Quindi il protocollo e' incompleto, capisco... Allora perche' lo
> rilasci? :D
-------------------------------------------------------------------------
Ok ecco spiegato: Xorro è nato per scopi privati (lo so che sono ripetitivo), ma tante volte un estraneo vede cose che io non vedo perchè sono concentrato su altri aspetti, e poi del resto io ho una visione del tutto da programmatrore, mentre tu da esperto in ambito di sicurezza, un'altra persona magari da amministratore di rete, tutti insieme si va avanti nel modo giusto, da soli io e MultiTasking potremmo trascurare aspetti fondamentali. Infine il fatto che questo progetto ci stesse invogliando a fare le cose per bene ci ha anche convinti a mettere le nostre idee (considera che l'idea è tutto il client non conta niente perchè qui si sta parlando di un metodo per scambiarsi informazioni) a disposizione di tutti.






-------------------------------------------------------------------------
 se uno sniffer non ha la STR1 e l'hash md5 della password per intero
 non si pu? sostituire all'utente pur sniffando TUTTI i pacchetti

> Il problema e' che chiunque si puo' sostituire al SERVER, e in
> questo modo truffare l'utente.
-------------------------------------------------------------------------
Questo principio è valido per qualsiasi connessione. E' uno dei motivi principali per cui persone che si occupano come te di sicurezza lavorano. Se fosse possibile ovviare a questo non esisterebbero persone che sfruttano le broadcast per spoofare l'IP e lanciare i denial of service. Oltre tutto questa è una delle debolezze intrinseche del protocollo TCP, non poter stabilire con certezza da dove provenga un pacchetto. Se avessimo risolto questo problema senza cambiare l'architettura delle reti di tutto il mondo, credo che assumeremmo Bill Gate come lavandaio :-) sarebbe bello in effetti, però adesso skerzi a parte attribuire questo problema al protocollo Xorro mi pare francamente un po' esagerato.





-------------------------------------------------------------------------
la password va concordata tra gli utenti preventivamente

> Aaaaaah beh, ottimo :)
-------------------------------------------------------------------------
Credo che non esista un modo + sicuro di questo per lo scambio delle password e qualsiasi manuale di crittografia tu possieda sarà concorde con questa cosa. In certi casi può risultare poco pratico, ma sono pronto a scommettere che se avessimo previsto uno scambio delle password online, qualsiasi persona anche quella meno colta in materia a buon diritto avrebbe detto che non è una cosa sicura (forse tu saresti anche stato tra quelli) per cui non capisco francamente questo sarcasmo no?






-------------------------------------------------------------------------
 voglio ripetere che l'utilizzo per il quale ? stato creato ? stato
 quello di registrarsi in un punto "sicuro" o non sniffanibile e poi
 usare il client altrove.

> Per qualsiasi cosa questo oggetto sia stato creato, non fa quello
> che deve fare. E in ogni caso, anche se venisse riscritto da capo e
> funzionasse correttamente, non farebbe nulla in piu' di quanto non
> faccia IRC + SSL o SILC o Qualsiasicosa + Gaim-encryption.
-------------------------------------------------------------------------
Io credo che alla fine il mondo è bello perchè è vario e per fortuna nessuno costringe nessuno nell'utilizzo di Xorro che per ora non pretende nulla, tanto meno di diventare il nuovo standard in fatto di chat, perciò non risponderò a tono a questa critica, se ne vogliamo parlare più in dettaglio, senza polemizzare però, sarò felice di farlo anche perchè personalmente ritengo che nessuno di questi sistemi che hai nominato sia destinato a durare nel tempo, in quanto la dimensione delle chiavi è sempre prestabilita e il workload dei processori in continua crescita. L'attaccante sa in anticipo la lunghezza della chiave, inoltre la chiave con cui i messaggi vengono cifrati è sempre la stessa, l'aggravante poi è che si può sempre sniffare il messaggio, di qui in poi è una pura questione di numeri, perciò verrà sempre il momento in cui il plugin della crittografia sarà da aggiornare. In Xorro invece si fa in modo tale che (come ho esposto qualche punto più in su) lo Xor avvenga con stringhe di pari dimensione del messaggio e sempre diverse e generando le stringhe nuove dalle rimanenze delle vecchie il processo non è invertibile, non serve un apporto matematico per comprendere questo. Certo se fossimo pagati io prenderei seriamente in considerazione anche la possibilità di scrivere la dimostrazione matematica di quanto è sicuro un sistema del genere funzionamento (nei vari passaggi critici), anzi credo che sarebbe proprio una bella soddisfazione, anche perchè giustamente aiuterebbe a capire meglio anche a noi che abbiamo implementato il client.



Cordiali saluti.

Gabriele Nardella




[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005