Esiste un'associazione univoca tra la chiave pubblica e privata. Ovvero, se il mittente utilizza una determinata chiave privata per firmare un messaggio e tu verifichi la firma utilizzando il pubblico corrispondente, la verifica della firma avrà esito positivo solo se il messaggio non è stato alterato .¹
La procedura di verifica e la natura dell'associazione tra pubblico e privato varia con il crittosistema che stai considerando (RSA, DSA, ecc.), ma la dichiarazione di cui sopra vale per qualsiasi schema asimmetrico.
Ciò che conta davvero è che il mittente è l'unico che può produrre una firma valida perché è l'unico che conosce il privato, ma chiunque conosce il pubblico, quindi chiunque può verificare la firma .
Al momento della firma, GPG aggiunge un token al messaggio di testo che può essere utilizzato per verificare che il messaggio non sia stato alterato durante il transito: questa è la firma. Non hai bisogno che GPG legga il messaggio perché il testo stesso non è crittografato , c'è solo un token extra, che potrebbe essere o un blob codificato con radix64 alla fine del messaggio o un testo allegato con una struttura simile.
GPG non firma direttamente il messaggio², firma un hash crittografico (SHA-1 o SHA-2 in genere). Quello che succede dopo la verifica è che la firma viene verificata usando la chiave pubblica del mittente per assicurarsi che l'hash ricevuto sia stato effettivamente creato dal mittente. Se l'hash calcolato dal mittente è considerato autentico, viene confrontato con l'hash calcolato dal destinatario. Se entrambe le fasi hanno esito positivo, il messaggio viene firmato correttamente.
[¹] in realtà, esiste una possibilità teorica di violare questa regola generando una cosiddetta collisione di hash . Vale a dire, un messaggio diverso con lo stesso hash (vedi l'ultimo paragrafo). Le collisioni sono state generate per MD5, mentre la ricerca per SHA-3, SHA-2 e SHA-1 è considerata non fattibile, anche se il margine di sicurezza nel corso dell'ultimo sta diventando così sottile che è consigliabile smettere di usarlo ora.
[²] per alcuni cryptosystems, come DSA, firmare un hash è l'unica possibilità.