Pensando en estos dos casos a continuación, cuál es el mejor y el más seguro
1er caso
//key1 generated from static salt and user password, because in case attacker don't know about source code (bad assumption, but still my assumption), attacker have only hashed or encrypted data + random generated salt
staticSalt = "StaticSalt"
key1 = pbkdf2(userPassword, staticSalt, iteration)
//key2 generated from key1 and randomSalt, this will be actual key to be used for encryption
randomSalt = GenerateRandomSalt()
key2 = pbkdf2(key1, randomSalt, iteration)
aes.Key = Key2
aes.IV = aes.GenerateIV()
o
segundo caso
//directly generate key from randomSalt and password
randomSalt = GenerateRandomSalt()
key1 = pbkdf2(userPassword, randomSalt, iteration)
aes.Key = Key1
aes.IV = aes.GenerateIV()
Mi pregunta es, ¿hay algún inconveniente en el uso del primer caso, aumentará o disminuirá la entropía o será menos seguro?
o el segundo caso es una forma mucho mejor y segura de hacerlo
Buscando la respuesta de algún experto en criptografía.