Prueba de verificación de firma digital

1

Estoy probando un sistema que implica actualizar una base de datos utilizando archivos enviados desde terceros. Estos archivos enviados desde partes externas son básicamente archivos planos grandes para actualizar una base de datos. El requisito es que estos archivos deben estar firmados con una clave de firma de archivos de acuerdo con el estándar de firma digital FIPS 186-4 usando el algoritmo de hash SHA-256 y cifrando el hash derivado usando un algoritmo de firma digital RSA de 2048 módulo de bits de acuerdo con PKCS # 1. El algoritmo de hash SHA-256 se aplicará a todo el archivo de datos. Esto dará como resultado una firma digital de 2048 bits en forma de octeto, que se adjuntará dentro del archivo .

Para probar que el sistema verifica la firma correctamente, primero debo firmar el archivo. La seguridad de la información no es realmente mi fuerte y agradecería la orientación en la dirección correcta. ¿Hay alguna herramienta que pueda usar para realizar esto? Aparte de los certificados, ¿cuáles serían los requisitos previos?

Muchas gracias.

    
pregunta fdama 14.07.2014 - 14:04
fuente

1 respuesta

1

El texto que cita básicamente significa: el archivo está firmado con RSA , y la firma se adjunta "tal como está" al archivo. No hay nada acerca de los certificados aquí; las firmas usan claves . Los certificados son formas de vincular las claves públicas a las identidades. El pasaje que cita, aunque atroz de muchas maneras, todavía es relativamente claro acerca de los certificados: no hay ninguno aquí.

Las firmas solo tienen sentido en relación con la verificación :

  • La firma se produce con, como entradas, los datos a firmar (todo el archivo) y la clave privada .
  • La verificación toma como entrada los datos firmados (el archivo completo, nuevamente), la firma y la clave pública , y le informa si la firma es buena o no.

Al describir el problema, la base de datos espera que los archivos de entrada se firmen con una clave privada específica , correspondiente a la clave pública que la base de datos utilizará para la verificación. Si no tiene esa clave privada a mano, no podrá generar firmas. Usted necesita esa clave si desea firmar un archivo propio. De lo contrario, eso es un absoluto de ninguna manera.

Si tiene la clave privada en algún formato u otro, aún deberá escribir un pequeño fragmento de código para calcular la firma y adjuntarla al archivo (este proceso simple "adjunto" no es un formato de firma estándar, por lo que no obtendrá una herramienta independiente disponible para hacerlo). Esto se puede hacer en muchos marcos de programación, por ejemplo, con Java (utilizando java.security.Signature ) o C (con alguna biblioteca como OpenSSL ).

De todos modos, en criptografía, no puede hacer pruebas decentes "desde afuera". Lo mejor que puede hacer es tomar un archivo de actualización firmado existente, que la base de datos acepta; luego modifique la firma (cambie el valor de uno de los bytes de la firma, que deberían ser los últimos 256 bytes del archivo firmado, a partir de su descripción), y vea que la base de datos ya no acepte el archivo con la firma modificada . Esto demostraría que la base de datos "verifica algo", no que lo haga correctamente. Saber si un sistema criptográfico hace su trabajo adecuadamente no lo hace testing sino auditando el código .

    
respondido por el Thomas Pornin 14.07.2014 - 19:24
fuente

Lea otras preguntas en las etiquetas