¿El hashing de un archivo también considera su firma digital?

0

Tengo un ejecutable firmado (utilizando Windows signtool ) que hash por SHA1 Algoritmo y cifrado mediante RSA. Ahora me gusta verificar el ejecutable para evitar vulnerabilidades de seguridad. Para eso tengo una idea para obtener el algoritmo de hash de la firma digital y hash nuevamente el ejecutable firmado y compararlo con el hash descifrado usando la clave pública que se encuentra en el certificado. Sería igual el hash, ya que:

  1. Hash descifrado desde la firma: Hashed solo el binario
  2. Hashing: hasheado el binario con firma digital.

También me gustaría aclarar que podemos recuperar el hash cifrado de la firma digital. Si es así, ¿cómo?

    
pregunta Kethiri Sundar 10.10.2018 - 09:20
fuente

1 respuesta

1

Actualizar
Acabo de entender lo que en realidad estás preguntando. Dejaré la vieja respuesta a continuación, en caso de que alguien necesite eso.

La respuesta:
La aplicación signtool le permite especificar una opción llamada 'verificar'. No necesita obtener acceso al valor hash cifrado, lo verificará por usted. Probablemente no sea posible hacerlo manualmente si lo prefieres. Tal vez cuando use el modo detallado en el momento de la firma, le mostrará el valor de hash, en caso de que realmente quiera verlo. Firmar solo el binario suena como una buena idea si no hubiera ningún archivo de metadatos / configuración / cualquier cosa que no se compile. No usé Windows por un tiempo, pero tal vez puedas usar makecat en lugar de signtool, creo que debería permitir tamaños de aplicaciones más grandes. Espero que esto ayude.

La respuesta anterior, explicando cosas técnicas:

Me parece que está intentando comprender cómo funcionan las firmas digitales y cómo puede implementar el mecanismo. Si me equivoco, vuelva a formular su pregunta e intente explicar paso a paso lo que está haciendo, como en el caso de un pseudocódigo de algoritmo. Intentaré explicarte lo que creo que quieres saber.

Cuando firma un documento: puede leer el documento (para que no esté encriptado), solo quiere asegurarse de que sea válido para que busque su firma y sello. La firma y el sello le informan si el documento es válido / verificado. De la misma manera, cuando utiliza firmas digitales, siempre envía 2 datos: el ejecutable en su caso (no hash, no encriptado, puede "leerlo") más la firma. Así que tienes el ejecutable, no tienes la firma.
Para crear la firma:

  1. hash el ejecutable. El ejecutable suele ser grande, por lo que llevaría mucho tiempo cifrarlo. Afortunadamente, si utiliza un buen algoritmo de hash, existe una probabilidad infinitesimal de que 2 archivos den la misma cadena de hash. Por lo tanto, puede estar seguro de que el hash representa su ejecutable (incluso si es solo una cadena sin sentido) y usarlo en lugar de usar todo el ejecutable en este proceso.
  2. generar un par de clave público-privada. Su certificado contendrá la clave pública y la clave privada debe mantenerse en secreto. Lo bueno aquí es que siempre puede cifrar con cualquiera de la clave pública o privada y descifrar con la otra. Nunca de una manera diferente o con una llave diferente. Por lo tanto, si está seguro de que la clave pública pertenece a alguien (el certificado es de confianza), si encripta algo con la clave privada, puede descifrarla utilizando la pública. Si alguien más cifró los datos, ya que la clave privada es secreta y no tienen acceso, no importa la clave que generaron, no podrá descifrarla.
  3. cifre el hash con la clave privada generada en el paso 2. El valor obtenido aquí es su firma.

Ahora que tiene el archivo y la firma, envíelos al otro extremo o utilícelos como desee. Una vez que la información se recibe en el otro extremo, ¿cómo verifican que sea válida? Ellos tienen el documento, solo quieren estar seguros de que no haya sido cambiado por otra persona. También tienen la firma. Así que siguen los siguientes pasos:

  1. descifre el valor de la firma usando la clave pública (el certificado). Si no pueden descifrar el valor, entonces alguien falsificó la firma (cambiaron ese valor con otro). Si pueden descifrarlo, entonces saben que la firma es válida. Después de descifrar, obtienen el valor hash del ejecutable (paso 1 anterior, al crear la firma). Saben que este valor de hash identifica el ejecutable válido. Esta es la fuente de la verdad.
  2. hash el documento recibido (el ejecutable) con el mismo algoritmo que se usó al crear las firmas. Cuando utilice un buen algoritmo de hash, no importa cuántas veces lo haga con el mismo documento, el valor de hash obtenido siempre será el mismo. Por lo tanto, si el documento no se modificó, el valor hash será idéntico al obtenido en el paso 1. Si no son iguales, significa que ahora, cuando hasheado el documento recibido, el valor hash fue diferente, por lo que el documento se modificó / reemplazado por otra persona. Así que no puedes confiar en ello.
  3. verifique si los 2 hashes son iguales (si no lo son, como se explicó en el paso 2, el documento no es el verdadero, alguien más lo modificó). Si son iguales, puede confiar tanto en el documento como en la firma.

Estos pasos también deben responderle cómo tendrá los valores hash iguales y cómo recibirá el valor hash del valor de la firma.
Una última cosa, utilice algoritmos seguros, como SHA-256 en lugar de SHA1 como mínimo y eventualmente (no necesariamente) EC en lugar de RSA.

    
respondido por el rtsec 10.10.2018 - 12:36
fuente

Lea otras preguntas en las etiquetas