Per prima cosa, ecco la mia interpretazione del processo di convalida del certificato (se sbagliata, per favore sentiti più che libero di correggermi).
Durante la connessione a un sito Web utilizzando https, il sito Web presenta un certificato SSL per il browser. È usato per autenticare il sito web. Il browser deve avere un modo per decidere se fidarsi di quel certificato. Il browser esegue questa operazione controllando se il certificato del sito Web è stato emesso e firmato da un'autorità di certificazione attendibile. Quando viene emesso un certificato, l'Autorità di certificazione include questa prova crittografando "firmando" il certificato utilizzando una chiave privata, in un modo che solo la CA reale potrebbe fare e che i browser possono verificare. Ma la CA in realtà non firma il certificato grezzo. Se esegue il certificato tramite un algoritmo di hash unidirezionale come SHA-1 e lo firma con la chiave privata della CA. Quando il browser viene presentato con il certificato, una delle prime cose che fa è controllare la firma. Poiché il certificato è stato firmato con la chiave privata della CA (e assumiamo che sia solo in possesso della CA) possiamo verificare la firma (quindi autenticare) il server perché la corrispondente chiave pubblica della CA è racchiusa in un certificato X.509 che è precaricato nel browser. Successivamente il browser calcola SHA-1 per quel certificato e quindi si confronta con il valore presentato nel certificato inviato dal sito Web per verificarne l'integrità, che non è stato alterato durante il transito.
Se quanto sopra è vero, allora ho la seguente domanda. Anche se è stato recentemente dimostrato dai ricercatori di Google che due diversi file .pdf hanno prodotto lo stesso valore SHA-1, quindi si è verificata una collisione, mi chiedo come possa essere sfruttato. Voglio dire, ad esempio example.com ha ottenuto un certificato con un valore SHA-1 uguale a X ed è firmato da Verisign. Un utente malintenzionato crea un certificato per example.com e anche il valore SHA-1 è uguale a X, quindi, di nuovo, abbiamo una collisione, ma questa volta non è da nessuna CA attendibile! Quindi, se l'autore dell'attacco tenta ora di impersonare example.com, come può essere sfruttato se il browser non è in grado di verificare che sia stato firmato da una CA radice affidabile? Questo non causerebbe problemi solo SE la CA radice viene compromessa?
Aggiunto: O perché è anche un problema con la firma del documento? Voglio dire, dire che un socio in affari sta per mandarmi un contratto. È firmato da lui e posso verificarlo e l'ho rispedito dopo aver firmato con la mia chiave privata. Quindi, perché dovrei essere preoccupato che è stato in grado di calcolare un documento simile con lo stesso valore di hash? Se non l'ho capito, come può provare che l'ho firmato? Immagino, non può. E anche se ottengo il documento "falso", solo perché è firmato, non dovrei ancora verificare cosa c'è nel documento prima di firmarlo e inviarlo?
EDIT:
Penso di iniziare a capire. Quindi, se per il certificato A il digest del messaggio è uguale a X e una CA root lo firma con la sua chiave privata, chiunque può verificarne l'autenticità decrittografando la firma con la chiave pubblica che viene precaricata nel browser sotto forma di una X .509 certificato, corretto? Quindi dato il valore hash di X (dato che non è un segreto comunque) e anche non conoscendo la chiave privata che ha firmato l'hash, so che il risultato finale (firma) = Y. Quindi se so che hash del certificato A = X e Sono in grado di calcolare un altro certificato (con l'Emittente archiviato sulla CA radice che ha firmato il certificato reale) e anche il suo valore hash = X (si è verificata una collisione), anche se non conosco la chiave privata dei firmatari, se fornisco il Valore Y come per la firma (poiché l'hash univoco del certificato più la crittografia tramite la chiave privata produrrebbe un valore di firma di Y), il browser accetterà e convaliderà il certificato, poiché sarà in grado di decifrare la firma con il corrispondente chiave pubblica della CA radice, che sta eseguendo la convalida, calcola nuovamente l'hash e lo confronta con ciò che è stato inviato dal server falso e il certificato falso, corretto? Grazie