Firma digitale

La firma digitale ti consente di verificare che nessuno possa manomettere i tuoi dati. Garantisce l'autenticità e l'integrità dei dati firmati, ma non la loro segretezza. È asimmetrica, ovvero utilizza una coppia di chiavi (chiave pubblica e chiave privata).

Le firme hanno le seguenti proprietà:

  • Autenticità: è impossibile creare una firma che sia convalidata da PublicKeyVerify.Verify(signature, message), 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 crearle personalmente.

Se non hai bisogno di asimmetria, valuta di utilizzare il MAC, il più semplice ed efficiente.

La funzionalità delle firme digitali è rappresentata in Tink come una coppia di primitivi:

  • PublicKeySign per la firma dei dati
  • PublicKeyVerify per la verifica della firma

Scegli un tipo di tasto

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

  • ECDSA_P256 è l'opzione più utilizzata e un valore predefinito ragionevole. Tieni presente, tuttavia, che le firme ECDSA sono ereditabili.
  • 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 lunghezza arbitraria
  • Livello di sicurezza a 128 bit contro gli attacchi adattivi con messaggi scelti per schemi a curva ellittica
  • Livello di sicurezza a 112 bit contro gli attacchi adattivi con messaggi scelti per schemi basati su RSA (consente chiavi a 2048 bit)

Esempio di caso d'uso

Vedi Voglio firmare i dati digitalmente.

Malleabilità

Uno schema di firma è modificabile nel caso in cui un utente malintenzionato possa creare un'altra firma valida per un messaggio già firmato. Anche se questo non è un problema per la maggior parte degli scenari, in alcuni casi i programmatori presuppongono implicitamente che le firme valide siano univoche, il che può portare a risultati imprevisti.