what I Know: Password based key derivation functions generate a key suitable for ciphers from a given password. It relies only on the original password being kept secret.
The purpose of the salt is simply to prevent the use of rainbow tables. A rainbow table would have to be made for each salt, and if (as is common practise), each user has their own salt, a rainbow table would have to be constructed for that particular user. In general it is not assumed to be secret.
Salts are used in conjunction with a higher number of iterations inside the PBKDF function to hinder any attempt to create a rainbow table.
The key derived from the PBKDF2 can used as AES key to encypt data.
My problem: Lets say in some limited world, I only can use user's Email as an input for Key derivation functions like Scrypt, The salt is also used to the reasons mentioned above.
Since email can be guesses easily, so the scrypt keys but not the salt. Isnt it a better approach to hide the salt, so that the attacked couldnt bruteforce the scrypt keys? If the attacker wants to guess the salt, it will be difficult for him as it will be of 16 bytes.
Note: The scrypt keys are used to encrypt some data, which will then be distributed to various other parties. The salt will be stored in the database. Theoretically, decryption of this data by a single party is impossible, since no one has complete information. DB only has salt, other parties only have shares of the file data not the complete data.