Firma digital

Una firma digital te permite verificar que nadie manipule tus datos. Proporciona autenticidad e integridad de los datos firmados, pero no su confidencialidad. Es asimétrica, lo que significa que usa un par de claves (pública y privada).

Las firmas tienen las siguientes propiedades:

  • Autenticidad: Es imposible crear una firma para la que PublicKeyVerify.Verify(signature, message) sea valida, a menos que tengas la clave privada.
  • Asimétrica: en la creación de la firma, se usa una clave diferente a la verificación. Esto te permite distribuir la clave pública para verificar firmas a las partes que no pueden crear firmas por sí mismos.

Si no necesitas la asimetría, considera usar la MAC más simple y eficiente.

La funcionalidad de las firmas digitales se representa en Tink como un par de primitivas:

  • PublicKeySign para firmar datos
  • PublicKeyVerify para verificar la firma

Elige un tipo de clave

Recomendamos usar ECDSA_P256 para la mayoría de los casos de uso, pero hay una variedad de opciones. En general, se cumple lo siguiente:

  • ECDSA_P256 es la opción más utilizada y un valor predeterminado razonable. Sin embargo, ten en cuenta que las firmas ECDSA son malleables.
  • ED25519 crea firmas deterministas y proporciona un mejor rendimiento que ECDSA_P256.
  • RSA_SSA_PKCS1_3072_SHA256_F4 crea firmas deterministas y proporciona el mejor rendimiento de verificación (pero la firma es mucho más lenta que ECDSA_P256 o ED25519).

Garantías de seguridad mínimas

  • Los datos que se firmarán pueden tener una longitud arbitraria
  • Nivel de seguridad de 128 bits contra ataques adaptativos de mensaje elegido para esquemas basados en curvas elípticas
  • Nivel de seguridad de 112 bits contra ataques adaptativos de mensaje elegido para esquemas basados en RSA (permite claves de 2,048 bits)

Ejemplo de caso de uso

Consulta Quiero firmar datos de forma digital.

maleabilidad

Un esquema de firma es maleable si un atacante puede crear una firma válida diferente para un mensaje ya firmado. Si bien esto no es un problema en la mayoría de los casos, en algunos casos, los programadores suponen implícitamente que las firmas válidas son únicas y esto puede generar resultados inesperados.