Firma digitale

La primitiva Firma digitale ti consente di verificare che nessuno abbia manomesso i tuoi dati. Garantisce l'autenticità e l'integrità, ma non la 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 la quale PublicKeyVerify.Verify(signature, message) convalida, a meno che tu non abbia la chiave privata.
  • Asimmetrica: per creare la firma viene utilizzata una chiave diversa da quella utilizzata per verificarla. In questo modo puoi distribuire la chiave pubblica per la verifica delle firme a terze parti che non possono creare le firme.

Se non hai bisogno di asimmetria, valuta la possibilità di utilizzare la 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

Consigliamo di utilizzare ECDSA_P256 per la maggior parte dei casi d'uso, ma sono disponibili diverse opzioni. In generale, vale quanto segue:

  • ECDSA_P256 è l'opzione più utilizzata e un valore predefinito ragionevole. Tieni tuttavia 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 il miglior rendimento 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 di 128 bit contro gli attacchi adattivi con messaggio scelto per gli schemi basati su curve ellittiche
  • Livello di sicurezza di 112 bit contro gli attacchi adattivi con messaggio scelto per i metodi basati su RSA (consente chiavi a 2048 bit)

Duttilità

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 univoche e questo può portare a risultati imprevisti.

Esempio di caso d'uso

Voglio firmare digitalmente i dati.