Come verificare il certificato con pochissime informazioni

4

Supponiamo che ci sia un server e un client e vuoi collegarli. Il server ha un certificato autofirmato e, prima di stabilire la connessione per la prima volta (iscrizione), il server crea un certificato client e una password monouso per il cliente specifico. (avviato sul server)

L'amministratore ha entrambe le macchine di fronte a sé, quindi digita la password monouso nel client (presuppone il trasporto sicuro del token al client). Il client si collega quindi al server (https) e in caso di successo lo identifica con la password monouso. Il server invia quindi il certificato client al client.

L'insicurezza è nel momento della prima connessione. Poiché il client non conosce il certificato del server (ed è autofirmato), qualcuno potrebbe dirottare la connessione e reindirizzare il client a un "server non valido" e inviare la password monouso a quello senza nemmeno saperlo. (La rete intranet dovrebbe essere molto probabile, il vero pericolo è quando questo viene fatto su Internet)

C'è un modo per risolvere completamente questo problema: non solo fornire al client una password monouso, ma anche l'impronta digitale del certificato server. Sfortunatamente questo non può essere fatto in questo scenario, e posso solo trasferire 4 a 6 o 8 byte per lo scopo di validare il certificato.

So che questo non stabilisce una sicurezza completa, ma suppongo che sia meglio di nessun controllo, giusto? Com'è facile per un utente malintenzionato, creare un certificato con l'URL e le corrispondenze corretti. Pronunciare i primi 4-8 caratteri dell'impronta digitale. C'è un modo per renderlo più sicuro con solo 4-8 byte?

    
posta Flo 10.01.2013 - 15:02
fonte

2 risposte

8

Una soluzione teorica consiste nel fare una prima connessione con TLS-SRP . Questo è SSL, ma con una suite di cifratura speciale che non utilizza alcun certificato; invece, il client e il server sono autenticati l'uno con l'altro per quanto riguarda la conoscenza di una "password" comune; questo tollera anche le password a bassa entropia perché è intrinsecamente immune da attacchi di dizionario offline . All'interno di questa connessione iniziale, il server dovrebbe trasmettere una copia del suo certificato "normale", da utilizzare per ulteriori connessioni. Questa strategia viene utilizzata in alcuni casi per abbinamento di dispositivi Bluetooth .

Sfortunatamente, non tutte le librerie SSL / TLS conoscono SRP. GnuTLS fa.

Se riesci a ottenere i primi 8 byte dell'impronta digitale (non 8 caratteri esadecimali ), allora questo può essere sufficiente. Generare un falso certificato che corrisponda ai primi 8 byte (cioè 64 bit) dell'impronta digitale è tecnicamente fattibile, ma costoso (si pensi a qualche centinaio di PC in esecuzione per alcuni mesi).

    
risposta data 10.01.2013 - 15:23
fonte
1

Il server non deve creare il certificato client, il client deve creare il certificato e inviare la chiave privata al server attraverso il canale SSL che hai descritto. Nella situazione che descrivi, l'utente malintenzionato può fingere di essere il server (che il client non conosce poiché il certificato è autofirmato) e quindi di prendere la password per effettuare la richiesta al server. L'utente malintenzionato può quindi mantenere la chiave privata e inoltrarla all'utente e né il server né l'utente sono a conoscenza di un problema.

Se invece il client esegue il certificato e invia la chiave pubblica al server e firma la chiave pubblica con la propria chiave privata, l'utente malintenzionato può ancora intercettare la password e inviare la propria chiave pubblica, tuttavia il client non sarebbe in grado di collegare e l'intrusione viene rilevata. Questo non funziona se l'hacker è in grado di fingere di essere persistentemente il server, in quanto può nascondere il fatto che il client non si connette al server reale.

    
risposta data 10.01.2013 - 15:25
fonte

Leggi altre domande sui tag