Nel messaggio firma , non c'è crittografia. Altrimenti dovremmo chiamarlo encryption .
Un algoritmo di firma è, nominalmente, la combinazione di tre sotto-algoritmi:
-
Generazione di coppie di chiavi: quell'algoritmo produce una nuova coppia di chiavi pubblica / privata, utilizzando una strong fonte casuale e utilizzando come parametro un "livello di sicurezza" da raggiungere (cioè la dimensione della chiave che deve essere generata).
-
Generazione firma: gli input sono il messaggio da firmare m e la chiave privata. L'output è il valore della firma s .
-
Verifica firma: gli input sono il messaggio m , la firma s e la chiave pubblica. L'output è un valore booleano: "true" se la firma corrisponde al messaggio e alla chiave pubblica, "false" altrimenti.
Gli algoritmi di generazione e verifica della firma dovrebbero essere in grado di elaborare messaggi di lunghezza arbitraria, possibilmente gigabyte. E lo fanno. Gli algoritmi di firma esistenti sono già molto efficienti nel gestire enormi input. Quindi non c'è alcun problema che richiederebbe una costruzione aggiuntiva, contrariamente alla crittografia asimmetrica in cui è necessario qualcos'altro per far fronte ai severi limiti di questi algoritmi.
La maggior parte dei testi che parlano di crittografia ibrida dicono che dobbiamo farlo perché la crittografia asimmetrica è lenta, ma è sbagliato . Il motivo reale per cui viene utilizzata la crittografia ibrida è perché i noti algoritmi di crittografia asimmetrica non possono semplicemente elaborare messaggi di lunghezza arbitraria e non abbiamo alcuna idea reale su come potremmo modificarli al fine di farlo in modo sicuro . Fondamentalmente, le "modalità di concatenamento" per i codici a blocchi non hanno equivalenti per la crittografia asimmetrica che sarebbe ovviamente sicura. Tuttavia, gli algoritmi di firma non hanno mai avuto una limitazione sulla lunghezza dell'input, quindi questo è un non-problema.
Succede, internamente, che la maggior parte degli algoritmi di firma sono efficienti nel gestire grandi input perché il loro primo passo è elaborare il messaggio completo attraverso un funzione di hash crittografica , quindi funziona solo sul valore hash. Questo è un elemento di progettazione della maggior parte degli algoritmi di firma e non dovrebbe interessare gli estranei che usano solo usano l'algoritmo. Spiega, però, perché alcune persone che parlano di "firme RSA" iniziano improvvisamente a parlare di funzioni hash come SHA-1: questo perché l'algoritmo della firma include , come uno dei suoi elementi costruttivi, una funzione di hash. Nota che alcuni algoritmi non funzionano esattamente in questo modo; sarebbe sbagliato affermare che gli algoritmi di firma tutti iniziano con un semplice hashing.
In fin dei conti è una questione di terminologia. Nel caso di crittografia asimmetrica, ad es. RSA, è normale parlare di "algoritmo di crittografia" usando solo un breve input; e qualsiasi strato di crittografia simmetrica extra è considerato, in effetti, un livello esterno extra. Tuttavia, nel caso delle firme digitali, la stessa tradizione sostiene che il passaggio di hashing iniziale è parte di ciò che chiamiamo "algoritmo di firma".
Ci sono alcune buone ragioni per questa scelta terminologica; in particolare, vogliamo la funzione di hash di essere parte di ciò che chiamiamo "algoritmo di firma" perché utilizza un algoritmo di firma come RSA o ECDSA senza un passo di hashing (utilizzando un "input breve" direttamente senza hashing) può indurre gravi carenze. Tuttavia, al suo interno, è ancora un problema di terminologia.