Одна из хороших практик заключается в хранении ключа, зашифрованного с помощью симметричного аутентифицированного шифра, такого как AES-256-GCM, с ключом, полученным с использованием Argon2 или scrypt из введенной пользователем парольной фразы и случайной соли, хранящейся в криптограмме. PBKDF2 раньше использовался вместо Argon2 или scrypt, но больше не считается лучшей практикой.
Аргон2 это состояние искусства, скрипт все еще может быть более доступным. Не существует однозначной передовой практики, в частности, некоторые предпочитают что-то стандартное чему-то максимально безопасному, некоторые добавляют перец поверх соли. Обновление: и все чаще двухфакторная аутентификация становится лучшей практикой.
Если вы определяете что-то на основе парольной фразы/пароля, я рекомендую Argon2id с тщательно продуманными параметрами: что-то, что удобно работает на всех целевых платформах, но создает серьезное препятствие для перебора пароля методом грубой силы.
Является ли Argon2 стандартом NIST или чем-то еще?
Argon2 стал победителем соревнования по хешированию паролей. Это не было организовано NIST. Argon2 не одобрен NIST, но цитируется NIST. здесь (вдоль Воздушный шар, что мне тоже нравится; но, похоже, он потерял импульс после осознания того, что заявленное преимущество над Argon2 не является очевидным):
- Q-B17: SP 800-63B Раздел 5.1.1.2, Запоминаемые секретные верификаторы, говорит о том, что ДОЛЖЕН использоваться пароль с жесткой памятью. PBKDF2, который широко используется, не требователен к памяти. Какие примеры функций, требовательных к памяти, удовлетворяют этому требованию?
- A-B17: В тексте рекомендуется, но не требуется, использование жесткой памяти для получения пароля.
  NIST считает, что безопасность хеш-функции (однонаправленной) используемой при получении ключа имеет первостепенное значение, и поэтому требует использования утвержденной (тщательно проверенной) односторонней функции при получении ключа. BALLOON — это требовательный к памяти и времени алгоритм, который позволяет использовать утвержденную базовую одностороннюю функцию, но, к сожалению, он не получил широкого распространения.Другие алгоритмы, такие как ARGON2, требовательны к памяти и времени, но не используют базовую одностороннюю функцию, которая была тщательно проанализирована.
В то время как PBKDF2 требовательна ко времени, но не к памяти, она настолько широко распространена, что нецелесообразно (во всяком случае, в настоящее время) вводить требование для функции вывода ключей, требующей жесткой памяти, поэтому мы представили это как рекомендация (т.е. «СЛЕДУЕТ»).
  Функция формирования ключа считается менее важной, чем лежащая в ее основе односторонняя функция, поэтому спецификация в этой области менее предписывающая и не определяет конкретные алгоритмы получения ключа.
Таким образом, NIST еще не дезавуирует свое прежнее официальное рекомендация PBKDF2-HMAC-SHA-1. И это несмотря на то, что он предлагает слабую защиту в эпоху, когда хорошо финансируемые злоумышленники могут использовать ASIC или, по крайней мере, FPGA или GPU для поиска паролей. Неясно, является ли эта технически несостоятельная позиция злонамеренной; это противоречит прежней позиции NIST о Dual_EC_DRBG, который явно предназначался для продвижения криптографии, разведка США может взломать.