Ho appena iniziato a conoscere i certificati digitali, la sua architettura e come funziona internamente. Cosa succederà se qualcuno mi invia un certificato autentico per l'autenticazione che in realtà non gli appartiene?
Ho appena iniziato a conoscere i certificati digitali, la sua architettura e come funziona internamente. Cosa succederà se qualcuno mi invia un certificato autentico per l'autenticazione che in realtà non gli appartiene?
What will happen if someone sends me a genuine certificate for authentication which does not really belong to him?
Un certificato è in realtà solo una chiave pubblica che qualcuno ha timbrato con la loro approvazione. Con questo in mente, le proprietà speciali delle coppie di chiavi pubbliche / private (ad es. Ognuna può decodificare univocamente ciò che l'altra codifica) viene utilizzata per dimostrare "l'appartenenza".
Tale certificato "appartiene a" la persona che possiede la chiave privata corrispondente. Quando viene utilizzato per l'autenticazione, viene utilizzato un certificato per decodificare qualcosa che è stato codificato con la chiave privata corrispondente, dimostrando così che la connessione è nelle mani della persona a cui il certificato appartiene "; perché a nessun altro è richiesta la chiave privata.
Ecco perché i certificati (chiavi pubbliche) possono essere pubblici - se qualcuno ti consegna un certificato che non possiede, non può "eseguirne il backup" con una prova privata generata dalla chiave e l'autenticazione fallirà.
Se qualcuno ti invia un certificato che non possiede e crittografa un messaggio che lo utilizza, semplicemente non sarà in grado di decrittografarlo senza la chiave privata associata al certificato.
Nel contesto di HTTPS / TLS il client autentica l'host inviando loro qualcosa che solo loro sanno (solitamente casuali) crittografati con la chiave pubblica del certificato e l'host deve dimostrare di avere la chiave privata decodificando quel qualcosa. Il qualcosa è spesso una chiave da utilizzare con un algoritmo di crittografia simmetrica come AES. (I dettagli esatti qui dipendono dal ciphersuite utilizzato)
Un certificato è fondamentalmente solo qualcosa che ti dice qualcosa del tipo:
The following public key belongs to example.com, and it's been verified by SEA (Some Example Authority)
Public key: 348abb1c...
SEA's signature on this document: 72ff541c...
I certificati sono pubblici, non devono essere segreti. Ora, cosa succede se un diverso sito Web dannoso ti ha dato quel certificato, fingendo di essere example.com? Dovresti crittografare i tuoi dati con quella chiave pubblica (appartenente a example.com) e inviare i dati crittografati al sito Web dannoso. Ma il sito Web dannoso non può decrittografarlo, perché avrebbero bisogno della chiave privata per quello, e solo example.com lo ha.
L'autore dell'attacco potrebbe inserire la propria chiave pubblica nel certificato, in modo che possano utilizzare la propria chiave privata per decrittografare i dati. Ma se cambiano la chiave pubblica nel certificato, la firma dell'Autorità non è più valida, quindi il certificato non è valido (ricevi avvisi nei browser, ecc.) E non dovresti accettarlo.
Esistono tuttavia tipi speciali di certificati che è necessario gestire con cura, e questi sono i certificati di origine o tutti i certificati autofirmati. In pratica dicono:
The following public key belongs to example.com, and it's been verified by example.com itself. Just trust it!
In generale, non dovresti davvero fidarti di questi certificati. Tuttavia, alcuni certificati come questo sono automaticamente considerati affidabili dal tuo browser o dal tuo sistema operativo, ad esempio. Perché? Perché hai bisogno delle chiavi pubbliche di alcune autorità per verificare le firme nei certificati. Pertanto, le chiavi pubbliche di alcune autorità sono considerate di default dal sistema operativo e da alcune delle tue applicazioni.
Leggi altre domande sui tag digital-signature public-key-infrastructure certificates