I just read this blog post (Signal - Technology Preview for secure value recovery) by Signal and something is not quite clear to me. In section "Stretching beyond a KDF" they generate a stretched_key
on the client side using stretched_key = Argon2(passphrase=user_passphrase, output_length=32)
. Argon2 needs a salt and other parameters (iterations, parallelism, etc.) as far as I know.
Now my question is: How do they store this salt (and Argon2 parameters)? Since a user could delete the app and later want to login again, it has to be stored on the server or the salt and parameters need to be the same for all users. If it is indeed stored on the server, how do they protect it? Or is it sufficient for "key stretching" purposes to use the same salt and parameters for all users?
Hope somebody can help me out here. Cheers!