Ответ 1
1. Размер случайных байтов:
Соли должны быть как минимум того же размера, что и ваша хеш-функция, поэтому для sha256
вы должны использовать не менее 32 байт. Node.js Crypto pbkdf2
использует SHA1
, поэтому 20 байтов должны быть минимальными. Однако, по крайней мере, вы должны использовать 64 бита (8 байтов), как описано в № 3. (Источник: https://crackstation.net/hashing-security.htm).
2. PBKDF2 число итераций:
См. этот вопрос для отличной дискуссии. Я взял из него, что 10.000 диапазон достаточно без ударной производительности, но это зависит от оборудования/производительности.
3. Длина PBKDF2:
См. эту другую дискуссию о длине ключа. Параметр снова использует функцию хеширования, в вашем случае SHA-1, поэтому 20 байт является правильным значением. Поскольку стандарт PBKDF2 рекомендует соли не менее 64 бит, это отходы для генерации ключей, меньших, чем ваш вход, поэтому используйте как минимум 8 байт. Не используйте длину вывода больше 20, поскольку она не обеспечивает дополнительной безопасности, но удваивает время вычисления для каждого кратного 20.
4. Как сохранить переменные:
Обсуждаемый во всех ссылках выше (особенно первый), соли следует сохранять по паролям (но никогда не использовать в других местах), обычно добавив его сначала в результирующую строку (соль: хэш) или в другой столбец базы данных.
В отношении других переменных их знания не являются критическими для нарушения безопасности (как указано в Принцип Kerckhoffs, чтобы вы могли безопасно его параметризовать в любом месте. Ваш способ сделать это, разделив их на "::", прекрасен, но вы сохраняете дополнительную информацию. коды Crackstation сохранить только "algorithm:iterations:salt:hash"
, поэтому в вашем случае "salt::derivedKey::iterations"
- это все, что вам нужно.