La primitiva Firma digitale ti consente di verificare che nessuno abbia manomesso i tuoi dati. Fornisce autenticità e integrità, ma non segretezza, dei dati firmati. È asimmetrica, il che significa che utilizza una coppia di chiavi (chiave pubblica e chiave privata).
La primitiva Firma digitale ha le seguenti proprietà:
- Autenticità: è impossibile creare una firma per cui
PublicKeyVerify.Verify(signature, message)esegue la convalida, a meno che tu non disponga della chiave privata. - Asimmetrica: la creazione della firma utilizza una chiave diversa da quella per la verifica. In questo modo puoi distribuire la chiave pubblica per verificare le firme alle parti che non possono creare firme autonomamente.
Se non hai bisogno di asimmetria, valuta l'utilizzo della primitiva MAC, più semplice ed efficiente.
La funzionalità delle firme digitali è rappresentata in Tink come una coppia di primitive:
- PublicKeySign per la firma dei dati
- PublicKeyVerify per la verifica della firma
Se la chiave privata si trova in una posizione in cui il messaggio non può essere inviato facilmente, ad esempio un HSM o un KMS, consulta Prehash e SignPrehash, che suddivide la firma in un passaggio di hashing solo con chiave pubblica e un passaggio di firma solo con chiave privata.
Scegli un tipo di chiave
Ti consigliamo di utilizzare ML_DSA_65 o ECDSA_P256 per la maggior parte dei casi d'uso, ma esistono diverse opzioni. In generale, vale quanto segue:
- ML-DSA-65 è sicuro dal punto di vista quantistico. Lo stiamo implementando attivamente ed è ora consigliato per i linguaggi di programmazione in cui è disponibile.
Per i seguenti algoritmi non post-quantistici, puoi aspettarti di dover modificare il tipo di chiave nel prossimo futuro.
- ECDSA_P256 è l'opzione più utilizzata e un valore predefinito ragionevole. Tieni presente che le firme ECDSA sono malleabili.
- ED25519 crea firme deterministiche e offre prestazioni migliori rispetto a ECDSA_P256.
- RSA_SSA_PKCS1_3072_SHA256_F4 crea firme deterministiche e offre le migliori prestazioni di verifica (ma la firma è molto più lenta di ECDSA_P256 o ED25519).
Garanzie di sicurezza minime
- I dati da firmare possono avere una lunghezza arbitraria
- Livello di sicurezza a 128 bit contro gli attacchi adattivi di messaggi scelti per schemi basati su curve ellittiche
- Livello di sicurezza a 112 bit contro gli attacchi adattivi di messaggi scelti per schemi basati su RSA (consente chiavi a 2048 bit)
Malleabilità
Uno schema di firma è malleabile se un malintenzionato può creare una firma valida diversa per un messaggio già firmato. Sebbene questo non sia un problema per la maggior parte degli scenari, in alcuni casi i programmatori presumono implicitamente che le firme valide siano uniche e ciò può portare a risultati imprevisti.
Caso d'uso di esempio
Voglio firmare digitalmente i dati.