La crittografia a chiave pubblica e in particolare il cifrario RSA forniscono un efficiente strumento per generare la cosiddetta firma digitale.
Il problema della firma digitale è fondamentale sulle reti come Internet, dove non è poi così difficile inviare messaggi di posta elettronica sotto falso nome. Diviene vitale quando per esempio si devono fare bonifici o acquisti in linea.
Si potrebbe pensare di usare una certa sequenza segreta di caratteri come firma, come avviene per le password; ma una volta usata tale firma non potrebbe essere più riutilizzata con sicurezza, essendo di fatto divenuta pubblica; qualcuno potrebbe averla intercettata, e di certo il destinatario del messaggio.
Ed è qui che viene utile l'idea di fondo della crittografia a chiave pubblica: ogni utente ha una sua chiave (numero) pubblica e una privata (segreta) che gli servono per generare i messaggi cifrati: supponiamo allora di avere due utenti, i soliti Aldo e Bruno; Aldo vuole avere la conferma che un certo messaggio viene realmente da Bruno; invia a Bruno una parola qualsiasi p.es. abcdef cifrata in wxyz, Bruno la decifra usando la sua chiave segreta ottiene e riottiene abcdef e la rispedisce ad Aldo con il messaggio cifrandola con la chiave pubblica di Aldo (p.es. in fgijk); Aldo la decifra usando la chiave pubblica di Bruno; se la parola decifrata è identica a quella inviata Aldo è sicuro che il messaggio viene da Bruno. Solo Bruno infatti poteva cifrare la parola inviata, in modo che Aldo potesse decifrarla. Un terzo che intercettasse la parola di Aldo non potrebbe decifrarla non possedendo la chiave di Bruno e se anche scoprisse la parola non potrebbe comunque cifrarla in modo che Aldo la decifri usando la chiave pubblica di Bruno, poichè non conosce la chiave privata di Bruno.
Questo meccanismo ha il solo limite di non essere riutilizzabile, e quindi la firma digitale va rigenerata ad ogni nuovo messaggio. Nell'esempio precedente Aldo e Bruno dovranno ogni volta inventarsi una parola nuova; nella realtà saranno i computer a genererare ogni volta una nuova sequenza casuale e a controllare che quella che ritorna indietro una volta decifrata sia identica a quella iniziale.