I see there are a lot of questions relating to handling of a salt value but nothing I have seen so far has cleared the following question.
When using a KDF such a scrypt, I believe the value of the salt should be random and change each time even on a per user basis (same user generating two different keys at different points in time). Due to this is it safe to store the randomly generated salt in some persistent storage?
I am using scrypt to generate a key for AES. I do not store the key used for encryption. As such, to decrypt the data I must use scrypt once again to generate the key. To do this I must take the users password (this is entered by the user each time) and the salt. Given the key must match the key used for encryption, must I have stored the salt in order to re-derive the same key?
Similarly to an initialisation vector, can this salt to be stored in public? For my use case the encrypted string and IV will both be stored in public, can the salt also be stored like this?