Сразу оговорюсь, что я не ахти какой спец по безопасности.
Но чего я не могу понять, так это зачем хранить в базе случайную соль? Если я правильно понимаю, хэши солятся для того, чтобы нельзя было подобрать пароль по радужным (или каким-либо другим) таблицам. При этом считается, что чем больше соль содержит энтропии, тем менее вероятно провести успешную атаку по такой таблице.
Какая принципиальная разница, между
sha1($random_salt . sha1($password))
sha1(sha1($username . $email . $time_of_registration) . sha1($password))