バイナリファイルからソルトを使用して Argon2 を使用するにはどうすればよいでしょうか?

バイナリファイルからソルトを使用して Argon2 を使用するにはどうすればよいでしょうか?

Linux プログラムではArgon2、コマンド ラインで salt を指定する必要があります。これにより、salt は印刷可能な文字に制限されます。バイナリ文字列を salt として使用するにはどうすればよいでしょうか。

# 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

表記法を使用してみましたが、\x0A機能しません。以下に示すように、\x0A異なる\x0aハッシュが生成されます。

# 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

追加情報として、Argon を使用して LUKS の PBKDF をシミュレートしたいと思います。

答え1

機能リクエストでは argon2 実行ファイル: base64 エンコードでソルトを提供できるオプション -b を追加 #264答え 著者は、-bbase64 形式のソルトを使用する新しいパラメータについて言及しました。

確かに、アルゴン2のソースはリリースよりも新しいようです。

スイッチは次のように使用されることになっています:

argon2 <base64-encoding> -b

オプション付きの最新バージョンを入手するには、argon2 をソースからコンパイルする必要があるかもしれません-b。それでも動作しない場合は、「charno」として識別される作者に問い合わせてください。

答え2

cat内部シェル内のファイルだけでも機能することがわかりました。

% 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

特殊文字はこのおもちゃも壊しません。

% 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

関連情報