¿Dónde encontrar la especificación exacta para los “valores” de sha512?

4

Actualmente estoy trabajando en hashing con SHA512.

Que yo sepa, el resultado de tal hash a menudo se transmite como una cadena en este formato

$6$salt$hashed-secret

Y ahora simplemente me pregunto: dentro de esta cadena, ¿cuál es la verdadera naturaleza de "salt" y "hash-secret"? son cadenas "reales" (como se muestra here por ejemplo, como salida de la herramienta de cripta); o hay una "regla" que dice que esas cadenas deben estar siempre codificadas en base64 .

    
pregunta GhostCat 20.01.2017 - 13:37
fuente

4 respuestas

10

Debe distinguir entre SHA512 (una función hash de propósito general) y sha512crypt (una función de hashing de contraseña basada en SHA512). Una cadena que comienza con $6$ es la salida de sha512crypt. Es posible que ya lo supieras, pero la redacción de tu pregunta deja abierta la posibilidad de que no lo hicieras.

La especificación para sha512crypt es aquí . No dice mucho sobre la construcción de la sal, solo esto:

  

Para los métodos basados en SHA, la cadena SALT puede ser una cadena simple de   que se utilizan hasta 16 caracteres.

Al menos una implementación ( para python ) dice que la sal debe estar compuesta de alfanuméricos , punto y barra diagonal (los caracteres utilizados en la cripta unix basada en DES original). Creo que sería prudente atenerse a esos personajes.

El hashed-secret está codificado en base64, no con el alfabeto MIME base64 sino con el alfabeto criptográfico de Unix.

  

La codificación utilizada es la siguiente:

           111111111122222222223333333333444444444455555555556666
 0123456789012345678901234567890123456789012345678901234567890123
 ----------------------------------------------------------------
 ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    
respondido por el Wumpus Q. Wumbley 20.01.2017 - 14:21
fuente
1

Ese formato es solo una representación común del valor de hash subyacente. El hash en sí es un valor binario de una longitud específica (dependiendo del algoritmo de hashing específico utilizado). En el caso de SHA-512, tiene 512 dígitos binarios, o 64 bytes, o 128 caracteres hexadecimales, o una cadena codificada en base64 de 88 caracteres. Todos corresponden al mismo hash subyacente, al igual que "uno", "un" y "eins" todos corresponden a 1.

De manera similar, la sal es solo un grupo de dígitos binarios. Puede representarlo en cualquier forma que elija, siempre y cuando lo represente de la misma manera en donde quiera que pueda comparar los valores de hash. La codificación Base64 resulta ser una forma bastante razonable de transferir datos binarios arbitrarios. En algunos casos, el conjunto de dígitos binarios corresponde a una cadena en algún formato de codificación de texto, en cuyo caso no necesitaría la codificación, técnicamente, pero necesitaría alguna forma de detectar si la cadena estaba pensada como una cadena. , o como una representación de binario subyacente.

    
respondido por el Matthew 20.01.2017 - 14:27
fuente
1
  

a menudo se transmite como una cadena en este formato

Creo que me invitan a fiestas diferentes a las tuyas.

Este es el formato utilizado para almacenar contraseñas en sistemas Unix y procesado por crypt . También se usa en algunos otros sistemas (por ejemplo, apache ).

  

hay una "regla" que dice que esas cadenas deben estar siempre codificadas en base64.

Crypt no usa base64 (o al menos nunca lo hace para los formatos de contraseña más antiguos) usa la codificación radix-64. Ambos utilizan 64 caracteres ASCII para codificar datos binarios, pero no son compatibles .

AFAIK no hay estándares que documenten definir estos registros, solo una convención.

    
respondido por el symcbean 20.01.2017 - 14:39
fuente
0

Solo para el registro: en base a la entrada que proporcionaron las otras respuestas, finalmente utilicé las palabras de búsqueda "correctas"; lo que me señaló a

a esta pregunta sobre SO ... eso me dio exactamente lo que estaba buscando.

    
respondido por el GhostCat 24.01.2017 - 15:31
fuente

Lea otras preguntas en las etiquetas