¿Cómo utilizar Argon2 con sal de un archivo binario?

¿Cómo utilizar Argon2 con sal de un archivo binario?

En el programa de Linux Argon2, debemos proporcionar sal en la línea de comando. Esto limita la sal a caracteres imprimibles. ¿Cómo podemos usar una cadena binaria como sal?

# argon2 -h

Usage:  argon2 [-h] salt [-i|-d|-id] [-t iterations] [-m log2(memory in KiB) | -k memory in KiB] [-p parallelism] [-l hash length] [-e|-r] [-v (10|13)]
        Password is read from stdin
Parameters:
        salt            The salt to use, at least 8 characters
        -i              Use Argon2i (this is the default)
        -d              Use Argon2d instead of Argon2i
        -id             Use Argon2id instead of Argon2i
        -t N            Sets the number of iterations to N (default = 3)
        -m N            Sets the memory usage of 2^N KiB (default 12)
        -k N            Sets the memory usage of N KiB (default 4096)
        -p N            Sets parallelism to N threads (default 1)
        -l N            Sets hash output length to N bytes (default 32)
        -e              Output only encoded hash
        -r              Output only the raw bytes of the hash
        -v (10|13)      Argon2 version (defaults to the most recent version, currently 13)
        -h              Print argon2 usage

Intenté usar \x0Anotación y no funciona. Como se ve a continuación, \x0Ay \x0aproduce diferentes hashes.

# cat /tmp/keyfile | argon2 "\x0A\x0B\x0C\x0D\x1A\x1B\x1C\x1D" -id -t 4 -m 5 -p 1 -l 64 -r

6694bba14b3955a77beea3fb4c6018bd86953627949df2bc7e57bc7597519d2fed64a24380757bf6d963115656ce0ddcf59b2504b736036c239101c3e069849b

# cat /tmp/keyfile | argon2 "\x0a\x0B\x0C\x0D\x1A\x1B\x1C\x1D" -id -t 4 -m 5 -p 1 -l 64 -r 

3e97b90537a9ecdceaee638aee2b122c89a2cc3e03630bac31cf72c9b7e3e0565a4c3945eb7fc2a04922bb1453cc5fdafc3303327097749b0ceb87111cd1349c

Para obtener información adicional, me gustaría utilizar Argon para simular el PBKDF de LUKS.

Respuesta1

En la solicitud de función Ejecutable argon2: agregue la opción -b que permite proporcionar la sal en codificación base64 #264, un respuesta El autor mencionó un nuevo -bparámetro que usa salt en formato base64.

De hecho, las fuentes de argon2 parecen ser más recientes que la liberación.

Se supone que el interruptor debe usarse como:

argon2 <base64-encoding> -b

Es posible que necesites compilar argon2 desde el código fuente para tener la última versión con la -bopción. Si aún así no funciona, que se lo pregunten al autor, identificado como "charno".

Respuesta2

Creo que solo catfuncionaría el archivo en un shell interno.

% xxd argon2id.salt 
00000000: abbc 1b5b d919 2bce 0459 1c31 97cc 03d9  ...[..+..Y.1....
00000010: 135a 6f54 6a1b 81b8 c693 0e19 d1a0 0c15  .ZoTj...........

% cat keyfile | argon2 "$(cat argon2id.salt)" -id -t 4 -m 5 -p 1 -l 64
Type:           Argon2id
Iterations:     4
Memory:         32 KiB
Parallelism:    1
Hash:           83ed8343d0539ba4f44fd79ac1becce1c7dd5001b7098f0cfb6a6cc7a07123890ccafb4cf8b7a8cb3ba1475e738f1268fb66eb89c42faf8460272878781cd952
Encoded:        $argon2id$v=19$m=32,t=4,p=1$q7wbW9kZK84EWRwxl8wD2RNab1RqG4G4xpMOGdGgDBU$g+2DQ9BTm6T0T9eawb7M4cfdUAG3CY8M+2psx6BxI4kMyvtM+LeoyzuhR15zjxJo+2bricQvr4RgJyh4eBzZUg
0.000 seconds
Verification ok

Los personajes especiales tampoco romperán este juguete.

% xxd another.salt 
00000000: 6027 2228 2960 2722 2829 6027 2228 2960  `'"()`'"()`'"()`
00000010: 2722 2829 6027 2228 2960 2722 2829 6027  '"()`'"()`'"()`'
00000020: 2228 29                              

% cat keyfile| argon2 "$(cat another.salt)" -id -t 4 -m 5 -p 1 -l 64   
Type:           Argon2id
Iterations:     4
Memory:         32 KiB
Parallelism:    1
Hash:           c5de872b35447ad75b3a9581fb1cf85a31ae61d92594b61888e8ca4701c32b13639656f5222cde7e5cb59be0731e0782871315747f542af0941cecfcfecb6027
Encoded:        $argon2id$v=19$m=32,t=4,p=1$YCciKClgJyIoKWAnIigpYCciKClgJyIoKWAnIigpYCciKCk$xd6HKzVEetdbOpWB+xz4WjGuYdkllLYYiOjKRwHDKxNjllb1Iizefly1m+BzHgeChxMVdH9UKvCUHOz8/stgJw
0.000 seconds
Verification ok

información relacionada