Newsgroup: it.comp.sicurezza.unix
Titolo: Server, client ed il terzo incomodo : un Hacker.

Salve a tutti,
devo instaurare una comunicazione Client-Server.
Il client spedisce informazioni al Server.
Il server le momorizza nel mio DB .
Da quel che ne so , l'unico attacco Hacker possibile (sia su win che unix)
è che il mio Hacker "ascolta" la comunicazione tra Client e Server.
Se utilizzo un sistema a chiave pubblica/privata risolvo il problema .
La mia domanda è :
un Hacker può conoscere l'IP del client da cui proviene quella comunicazione ?
Perchè potrei usere l'IP come chiave Hash (sia il server che il client la conoscono!),
ed essere sicuro che l'hacker non la conosce !
Dovrei proteggere delle informazioni delicate (username e password) ,
e non posso usare SSL :-(
Qualche dritta ?
n

ed essere sicuro che l'hacker non la conosce !
E cosa ne fai di questa "chiave hash"?
Ciao
 Max

> E cosa ne fai di questa "chiave hash"?
un codice univoco per ogni client,
prendo le informazioni del client e gli faccio un Encrypt in base alla chiave IP :
212.100.23.4
Il server gia' conosce la chiave pubblica ( che è proprio l'IP del client) ,
se l'hacker non aveva modo di ascoltare l'IP era fatta poichè
senza la chiave pubblica (ip) non sapeva come "decrittare" il valore inviato
dal client al server.
Non posso usare SSL , e devo inventarmi un modo per inviare queste
benedette informazioni .
n

dal client al server.
Ah ecco. 
No, non funziona cosi'. Le chiavi pubblica e privatra vanno generate
in una maniera abbastanza particolare, non puoi prendere un numero e
dire "questa e' la chiave pubblica!". Poi cosa fai? calcoli la chiave
privata partendo dalla pubblica? E non potrebbe farlo anche l'hacker?
La forza di questo tipo di cifratura sta' nel fatto di non poter
ricavare la chiave privata dalla pubblica. Il bello della chiave
pubblica e', perdona l'ovvieta', che e' pubblica. Quindi puoi generare
una coppia pubblica/privata su ogni macchina (client e server),
distribuirle pubblicamente (solo le pubbliche), e ogni volta che devi
mandare dei dati critici a qualcuno prima li cifri con la chiave
pubblica di questo qualcuno. In genere, vista la complessita' di
questi algoritmi, non vengono quasi mai utilizzati per cifrare flussi
di dati, ma solo piccoli blocchi, per esempio una chiave 3des da usare
per la comunicazione vera e propria, oppure un digest per autenticare
qualcosa.
Ciao
 Max

Ok , benissimo ma è come un cane che si morde la coda.
Quando io invio la chiave pubblica al client in modo tale che SOLO il client
possa ricostruire i messaggi che cifro con la chiave privata,
il possibile Hacker potrebbe ascoltare ANCHE la chiave pubblica
e di conseguenza "capire" tutti i messaggi che sto inviando al client.
Esatto ?
n

e di conseguenza "capire" tutti i messaggi che sto inviando al client.
E' qui il tuo errore: la cifratura si fa SEMPRE con la chiave pubblica
del destinatario, in modo che SOLO il destinatario con la sua chiave
privata sia in grado di decifrare il messaggio. 
NON si fa con la tua chiave privata. Non ha senso. E' chiaro che in
questo caso chi ha la tua chiave pubblica (si chiama pubblica mica per
niente) riesce a decifrare quello che tu hai cifrato con la tua chiave
privata.
La cifratura utilizzando la chiave privata si usa per fare la "firma
digitale", per essere certi del mittente di un messaggio.
Allora, schemino :-))
Soggetto A: Chiavi: Pub_A, Priv_A
Soggetto B: Chiavi: Pub_B, Priv_B
I due soggetti si scambiano le chiavi pubbliche IN CHIARO. Se qualcuno
le intercetta, per esempio la chiave Pub_A, l'unica cosa che puo' fare
e' cifrare qualcosa che potra' essere letto solo da A con Priv_A. 
Ciao
 Max

Quindi
se il Client con la chiave Pubblica che il server gli ha fornito , cifra un messaggio con la
chiave pubblica del Server ed invia l'informazione al server
l'unico modo per decifrare il messaggio è essere in possesso della chiave privata
del Server.
Quindi, o sfondo il server e rubi la chiave privata oppure non potrai mai e poi mai
decifrare il messaggio .
Esatto ?
Interessante, perchè se è cosi ho risolto i miei problemi ^_^
n

 privata sia in grado di decifrare il messaggio.
Beh, sei un genio.
In una frase di 3 righe mi hai fatto capire ciò che era nebulosa
nella mia mente da anni :-)
Anch'io ho sempre pensato come "nessuno", e mi sono sempre
chiesto come faceva a funzionare.
Si cifra con la pubblica **del destinatario**: ora è  tutto chiaro!
Grazie 2000.
Ferro.
PS:
che gnuc che sono

Esatto ?
Si, e' cosi'. L'unico modo, a parte venire in possesso della chiave
privata, sarebbe quello di ricavarla da quella pubblica
corrispondente. Se l'algoritmo e' un RSA o simili, questo comporta una
scomposizione in fattori primi tutt'altro che semplice, almeno con le
attuali conoscenze matematiche e con i numeri in gioco. Anche per
questo si presta particolare attenzione alla fase di generazione delle
chiavi. Una leggerezza potrebbe compromettere la robustezza
dell'algoritmo.
Ciao
 Max

Beh, sei un genio.
Grazie! :-D
Ciao
 Max

 Salve a tutti,
...
Salve,
ferma restando la correttezza dei consigli dati su chiave
pubblica/privata, mi sembra che nel tuo caso sia sufficiente che il
client e il server conoscano la chiave di un qualsiasi sistema, tipo
DES. Il client critta, il server decritta con la stessa chiave. Non
vedo il bisogno di un sistema a due chiavi...
Ovviamente la chiave deve essere ben protetta... con uno sforzo un po'
maggiore puoi organizzare un sistema di rotazione delle chiavi cosi'
che ogni x giorni (ore, minuti) la chiave cambia in un modo noto solo
a client e server.
-- 
Stefano -