¿Cómo puede saber qué algoritmo de hash se está utilizando en un sistema? Estamos utilizando un cifrado de 2048 bits y nos preguntamos cómo saber si se está utilizando el algoritmo de hash SHA-1 con SHA-2.
¿Cómo puede saber qué algoritmo de hash se está utilizando en un sistema? Estamos utilizando un cifrado de 2048 bits y nos preguntamos cómo saber si se está utilizando el algoritmo de hash SHA-1 con SHA-2.
Bueno, primero, el hashing no ayuda en la encriptación (estrictamente, puede hacerlo con el relleno OAEP, pero dudo mucho que se aplique a su caso). Supongo que lo que usted llama "encriptación" es en realidad una firma digital . Desafortunadamente, las firmas digitales a menudo se describen como "cifrado con la clave privada", que es una analogía defectuosa, ya que funciona solo para RSA, y en realidad no funciona para RSA, solo "de tipo". Es un artilugio pedagógico histórico que salió mal hace décadas, y es interceptado incesantemente por hordas de blogueros y maestros mal informados, dejando al espectador común atrapado en un pantano sombrío de confusión mental.
Por lo tanto, suponiendo que realmente desea hablar sobre firmas , su pregunta se vuelve más clara. Está utilizando firmas basadas en RSA, y una generación o verificación de firma RSA comienza con hashing ; La magia RSA con la exponenciación modular viene solo después, y funciona con el valor hash.
Dado que quienquiera que verifique la firma también debe calcular el valor de hash, la función de hash que se utiliza no suele ser un secreto. La mayoría de los formatos de firma incluyen un encabezado que lo especifica. Por ejemplo, si observa un certificado X.509 y lo decodifica con OpenSSL , la herramienta de línea de comandos imprimirá el valor de la firma con algo como esto:
$ openssl x509 -text -noout -in cert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 14070511318992561002 (0xc3447f7ef0aa236a)
(...)
Signature Algorithm: sha1WithRSAEncryption
93:00:8e:ac:16:77:3c:dc:ba:89:fc:63:5f:74:c7:bb:72:3a:
6c:af:26:eb:62:04:5b:65:37:cf:c2:41:8e:de:03:db:20:c4:
El sha1WithRSAEncryption
indica claramente que en este caso, RSA se está utilizando con SHA-1 como función hash subyacente.
Si está realizando ingeniería inversa y dicho encabezado no parece estar disponible, aún puede inferirlo a partir de un valor de firma, siempre que tenga la clave pública a su alrededor, y No tengo miedo de hacer algún cálculo en grandes enteros. Es decir, la mayoría de las firmas RSA por ahí usarán PKCS # 1 , y más precisamente el "relleno v1.5 de estilo antiguo" . Con este relleno, una generación de firmas hace así:
Usando una firma dada s , y la clave pública (n, e) ( n es el "módulo", e es el "exponente público"), puede volver a calcular se mod n y esto debería producir la "secuencia rellenada" , que es reconocible debido a su larga secuencia de bytes 0xFF; y luego puede ver el encabezado de la estructura que identifica la función hash, exactamente la información que está buscando.
Cuando debo hacer esas cosas, uso mi computadora portátil con Linux porque viene con el dc
tool, una ingeniosa calculadora de línea de comandos que maneja grandes enteros (incluida la exponenciación modular) y la entrada / salida hexadecimal.
En cualquier caso, vea PKCS # 1 para más detalles. No puede esperar hacer tales investigaciones seriamente sin tener una idea razonable del funcionamiento interno de RSA, y PKCS # 1 es un buen lugar para comenzar.
De todos modos , dado que tanto el sistema de firma generación como el sistema de firma verificación , deben estar de acuerdo con la función hash que se debe utilizar, esto da Ustedes dos lugares donde puede buscar la información.
No puedes, al mirar una secuencia de hash , determinar qué tipo de hash lo generó. Si pudiera, eso sugeriría fuertemente una no aleatoriedad (aún peor, capacidad de reconocimiento ) del hash, lo que lo haría menos útil por motivos de seguridad.
Sin embargo, puede distinguir entre un SHA-1 o SHA-2 valor hash de su longitud. SHA-1 tiene un tamaño de 160 bits (20 bytes), mientras que SHA-2 puede pasar de 224 a 512 bits .
sha-1 tiene 40 caracteres en la representación hexadecimal: 9BE083742A3494DD4DEE4904451AECE5394F5BAA
sha-2 será más largo. sha-256 es un ejemplo de sha-2 y tiene una representación hexadecimal de 32 caracteres:
C3F41471B1E8C1505C8E4AC766E972FC108262EAA45CC1F30FAC8154B0BBF79D
sha-512 también es sha-2 y es, bueno, por muchos que sea (128 caracteres):
489a101ad927ba19a9ed4442339b27498b870d53b8fad2b701e6a3e41e2e2b36b0208b092ea88239474dfeb732793a9695ad47d12e601569061a581c997de99cba
Lea otras preguntas en las etiquetas hash