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 (una pública y una privada).
El primitivo 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: La creación de la firma usa una clave diferente de la que se usa para verificarla. Esto te permite distribuir la clave pública para verificar las firmas a las partes que no pueden crear firmas por sí mismas.
Si no necesitas asimetría, considera usar la primitiva MAC, que es 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 llave
Recomendamos usar ML_DSA_65 o ECDSA_P256 para la mayoría de los casos de uso, pero hay una variedad de opciones. En general, se cumple lo siguiente:
- ML-DSA-65 es seguro para la computación cuántica. Estamos implementando esta función de forma activa y ahora se recomienda para los lenguajes de programación en los que está disponible.
En el caso de los siguientes algoritmos no poscuánticos, es posible que debas cambiar el tipo de clave en el futuro cercano.
- ECDSA_P256 es la opción más utilizada y un valor predeterminado razonable. Sin embargo, ten en cuenta que las firmas ECDSA son maleables.
- ED25519 crea firmas determinísticas y proporciona un mejor rendimiento que ECDSA_P256.
- RSA_SSA_PKCS1_3072_SHA256_F4 crea firmas determinísticas 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 mensajes elegidos para esquemas basados en curvas elípticas
- Nivel de seguridad de 112 bits contra ataques adaptativos de mensajes elegidos 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 ya firmado. Si bien esto no es un problema en la mayoría de los casos, en algunos casos, los programadores suponen de forma implícita que las firmas válidas son únicas, lo que puede generar resultados inesperados.
Ejemplo de caso de uso
Consulta Quiero firmar datos digitalmente.