La primitiva de firma digital te permite verificar que nadie haya manipulado tus datos. Proporciona autenticidad e integridad, pero no confidencialidad, de los datos firmados. Es asimétrica, lo que significa que usa un par de claves (clave pública y clave privada).
La primitiva de firma digital tiene las siguientes propiedades:
- Autenticidad: Es imposible crear una firma para la que
PublicKeyVerify.Verify(signature, message)
valide, a menos que tengas la clave privada. - Asimétrica: Para crear la firma, se usa una clave diferente a la que se usa para verificarla. Esto te permite distribuir la clave pública para verificar las firmas a las partes que no pueden crearlas por sí mismas.
Si no necesitas asimetría, considera usar la primitiva 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 una opción predeterminada razonable. Sin embargo, ten en cuenta que las firmas ECDSA son maleables.
- 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 de mensaje elegido adaptable para esquemas basados en curvas elípticas
- Nivel de seguridad de 112 bits contra ataques de mensaje elegido adaptable para esquemas basados en RSA (permite claves de 2,048 bits)
Maleabilidad
Un esquema de firma es maleable si un atacante puede crear una firma válida diferente para un mensaje que ya está 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.
Ejemplo de caso de uso
Consulta Quiero firmar datos de forma digital.