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 rispetto alla 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
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 per il quantum computing. 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 attacchi adattivi con messaggio scelto 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 presuppongono implicitamente che le firme valide siano uniche e ciò può portare a risultati imprevisti.
Esempio di caso d'uso
Voglio firmare digitalmente i dati.