If they find a different value that produces the same SHA-1 digest as the website's actual public key, what have they gained?
Supponiamo di avere a che fare con MD5. Gli attacchi SHA-1 sono ancora in corso e presumo che seguano le stesse linee degli attacchi possibili su MD5.
Con MD5 è possibile creare due valori diversi che producono una collisione hash (entro certi limiti). Ciò tuttavia non significa che sia possibile creare una collisione hash, dati solo i dati di input e il valore hash su quei dati.
Nel tuo esempio significa che non puoi semplicemente ottenere un certificato firmato MD5 o SHA1 e quindi creare un falso. Pertanto, i certificati CA interni creati all'interno di una CA non sono molto a rischio. È tuttavia possibile inviare un certificato appositamente formattato a una CA e quindi modificare i dati firmati in modo tale che la firma venga ancora verificata.
Quindi la stessa organizzazione che richiede il certificato è quella che sta facendo l'attacco. Questo significa che hanno già la chiave privata. Quindi sostituire la chiave pubblica potrebbe essere possibile, ma non avrebbe molto senso.
Quindi cosa possono fare. Bene, si tratta di "alcune altre informazioni" all'interno del certificato. Ciò può essere modificato dall'organizzazione che richiede l'informazione. Fondamentalmente possono mettere tutto ciò che vogliono lì dentro. Ciò significa che un certificato per un determinato dominio può diventare un certificato per un altro dominio. Il certificato potrebbe diventare un certificato che può essere utilizzato per creare altri certificati (sebbene i vincoli sulla lunghezza del percorso possano alleviare quel problema).
In altre parole, l'autorità di certificazione firma un hash, che potrebbe essere valido per altri dati. L'autorità di certificazione non sa più quale certificato sta firmando più! Tu, come utente, puoi ottenere un certificato per mail.google.com con una firma valida creata per happy.attacker.com, con l'hacker che detiene la chiave privata. In altre parole, potresti non comunicare affatto con Google!
Idee sbagliate:
The hashing function is applied to a subject's public key.
No, è applicato agli attributi del certificato che richiedono un trust esplicito (quindi anche il nome del dominio nell'esempio); non solo la chiave pubblica.
The CA then uses their private key to encrypt the hash output.
No, la generazione della firma non è crittografia. Per RSA utilizza anche exponentiation modulare , ma ciò non equivale alla crittografia. Anche le specifiche RSA - PKCS # 1 - distinguono tra generazione della firma e crittografia.
The output of that encryption along with some other information becomes the certificate.
Che alcune informazioni siano piuttosto importanti, e molte di esse sono firmate insieme alla chiave pubblica. Periodo di validità, emittente, chiave pubblica, firma, soggetto, utilizzo della chiave, limiti di lunghezza del percorso, informazioni relative alla revoca sono tutti molto importanti.
So, say someone is determined to impersonate a site that has an SHA-1 certificate and attacks the SHA-1 digest, by trying to produce a hash collision.
Ciò richiederebbe ancora circa 2 ^ 159 operazioni. Quindi no, non è probabile che venga mai tentato da un ricercatore serio.
They could now forge a certificate that appears to be signed by the CA but instead of the actual public key contains X, but wouldn't this be useless to them without a matching private key for X?
Bene, si. In realtà, una chiave pubblica non consiste in un singolo valore X, è costituito da un modulo e un esponente, che sono codificati ASN.1 / DER all'interno dei certificati X5.09. Quindi X dovrebbe avere una struttura piuttosto specifica. Se si tenta di rompere il certificato in questo modo (che - come già stabilito sopra - è irrealizzabile). Quindi sarebbe utile solo per sostituire la chiave con una specifica X.
La codifica della chiave e del certificato firmato può tuttavia contenere informazioni aggiuntive. Questo può essere abusato da un utente malintenzionato e in realtà è necessario per eseguire l'attacco MD5 effettivo.
I thought hashes are used in digital signatures mainly for performance reasons, due to the fact that public key cryptography like RSA is slow for large inputs.
No, non solo per motivi di prestazioni. RSA richiede il riempimento, che lascia circa 11 byte in meno della dimensione della chiave (modulo) per il messaggio, nel caso in cui venga utilizzata comunque la precedente imbottitura PKCS # 1 v1.5. Gli attributi firmati in generale sarebbero più grandi di questo. In tal caso è necessario comprimere i dati utilizzando un metodo hash. ECDSA, un altro algoritmo a chiave pubblica, in realtà non può crittografare alcun dato.
In generale, è meglio pensare al metodo hash come opzione di configurazione dell'algoritmo di firma. In altre parole, è una parte integrale dell'algoritmo della firma. Questo è anche il modo in cui è specificato nei vari standard.