Come può un server dimostrare l'autenticità

1

Sto lavorando su una piattaforma di messaggistica sicura e sto avendo problemi a capire come proteggere dagli attacchi MITM.

La mia configurazione corrente può essere riassunta come segue: Il server mantiene una chiave privata e rende pubblica la chiave pubblica che può quindi essere installata nei client. Quando si inviano dati al server, questo deve essere cifrato con la chiave pubblica che verrà quindi decrittografata sul server e crittografata nuovamente con la chiave privata prima di essere inoltrata al destinatario.

Schizzo ASCII della situazione normale:

Mittente - Encrypted, can be intercepted but not deciphered - > Server - Encryped with the private key, if intercepted can be broken since the public key is public - > Destinatario

Da quella sola informazione dovremmo vedere che la parte Sender- > Server è sicura e un uomo nel mezzo non farebbe nulla (Provare qualcosa danneggerà il protocollo e la connessione verrà interrotta). Tuttavia, la parte Server- > Recipient non è sicura contro gli attacchi MITM .. affatto!

Per peggiorare le cose, quando i dati vengono inviati, viene anche rispedito al mittente per confermare che è stato inviato, compromettendo così entrambi i client agli attacchi MITM.

Quindi ecco la mia domanda, al momento della connessione iniziale, in che modo il server può dimostrare che è davvero il vero server?

Scenari di esempio:

Evil Server non deve essere in grado di fingere di essere il Real Server Client - > Evil Server - > Real Server

Real Server deve essere in grado di dimostrare di essere, in effetti, il Real Server. Client - > Real Server

Note: Questo è fatto su TCP. Sto cercando una soluzione che non richieda una infrastruttura pesante, ma posso consentire l'utilizzo di un paio di server esterni per controllare (tuttavia anche questi avranno bisogno di dimostrare la loro autenticità).

    
posta Slava Knyazev 14.05.2016 - 01:02
fonte

1 risposta

3

Iniziare ogni sessione facendo generare al client una chiave di crittografia simmetrica, crittografarla con la chiave pubblica del server e inviarla al server. Sia il server che il client possono quindi crittografare tutte le ulteriori comunicazioni durante la sessione con quella chiave simmetrica.

Un server impostore non avrebbe la chiave privata del server, quindi non può decifrare la chiave di sessione e quindi non può comunicare con il client.

A proposito, stai attualmente reinventando TLS con il blocco dei certificati. In generale, dovresti evitare di inventare i tuoi sistemi crittografici. Usa ciò che è già lì e già testato per le vulnerabilità da innumerevoli persone.

    
risposta data 14.05.2016 - 01:08
fonte

Leggi altre domande sui tag