Stai usando l'analogia "criptare con la chiave privata". Non farlo, provocherà solo confusione.
Quello che vuoi è uno schema di firma digitale . Tale schema consiste di tre algoritmi:
-
Generazione chiavi: questo algoritmo produce una nuova coppia di chiavi, con una chiave pubblica K p e una chiave privata K s . La chiave pubblica, come dice il nome, può essere resa public , cioè rivelata al mondo in generale, e questo non rivela la chiave privata (sebbene la chiave privata sia ancora collegata matematicamente alla chiave pubblica ).
-
Generazione firma: dato un messaggio m , viene prodotta una firma s , utilizzando la chiave privata K < sub> s .
-
Verifica firma: dato un messaggio m , un valore di firma s e la chiave pubblica K p , l'algoritmo di verifica restituisce "true" o "false", a seconda che la firma corrisponda al messaggio per quella chiave pubblica, oppure no.
La firma è suono se l'algoritmo di generazione della firma è effettivamente dichiarato valido dall'algoritmo di verifica della firma. La firma è sicura se non è fattibile, senza conoscere K s , per produrre una coppia (m, s) che l'algoritmo di verifica dichiarerà valido per la chiave pubblica K p .
Sfortunatamente, quando è stato descritto il primo algoritmo di firma utilizzabile, la idea dell'algoritmo è stata definita "crittografia asimmetrica al contrario": la firma è stata generata "crittografando il messaggio con la chiave privata" "(o, equivalentemente, scambiando le chiavi private e pubbliche, cioè rendendo pubblica la chiave privata e viceversa). Questo è stato sfortunato perché:
- Non tutti gli algoritmi delle firme possono essere visti come "crittografia asimmetrica invertita". Questa analogia funziona solo per RSA.
- In effetti, l'analogia non funziona nemmeno per RSA; funziona solo per il nucleo matematico di RSA, ma non con il "full RSA" che include anche cose come il padding, che sono cruciali per la sicurezza ma rompono l'analogia "reverse encryption".
La descrizione della "crittografia al contrario" è un modo diffuso di "spiegare le firme" e, così facendo, diffonde per lo più confusione. Non cadere in quella trappola.
Un algoritmo di firma sembra mappare bene a ciò che stai immaginando. L'autore includerebbe la sua chiave pubblica nel primo messaggio. Quindi ogni ulteriore messaggio sarebbe firmato con la corrispondente chiave privata, e tutti potrebbero verificare quella firma relativamente alla chiave pubblica nel primo messaggio.
Tuttavia, nota che la paternità è la combinazione di due concetti:
- Responsabilità: "Sì, sono disposto ad affermare che ho scritto queste parole e che sarò vincolato da loro."
- Esclusività: "Tutte le altre persone che sostengono di aver scritto queste parole sono dei bugiardi bugiardi."
Una firma garantirà sia solo se le persone hanno un modo per assicurarsi che ciò che vedono come "primo messaggio" sia effettivamente il vero primo messaggio, cioè contiene la chiave pubblica corretta. Un'altra persona che desiderava rivendicare la paternità degli stessi testi potrebbe pubblicare il proprio "primo messaggio" con la propria chiave pubblica e firmare (con la propria chiave privata) qualunque cosa X pubblichi. Il pubblico in generale avrebbe difficoltà a scoprire chi ha scritto il testo prima . Per stabilire la vera paternità (in questo senso), è possibile utilizzare timestamp (oltre alle firme, non sostituendole) .