Я использую Fernet python.cryptography с хешированием парольной фразы PBKDF2 для шифрования части данных (значения), которая хранится в зашифрованном виде в базе данных. Хэшированная парольная фраза нет хранится в базе данных, и по этой причине ни соль. Вместо этого соль поступает из хранилища паролей в среде выполнения приложения, а затем модифицируется, чтобы сделать ее уникальной для каждого значения.
У меня есть один вопрос по этому поводу: если у злоумышленника есть парольная фраза и зашифрованные данные для одного значения, могут ли они перепроектировать соль (что помогло бы им взломать оставшиеся данные)? Что, если у них также есть копия незашифрованной версии данных для этого значения?
(Вектор атаки, рассматриваемый здесь, — это когда злоумышленник имеет обычную учетную запись пользователя в системе и получил копию базы данных с зашифрованными значениями. Таким образом, они могут создать единственное значение (свое), где они знают парольную фразу и результирующее зашифрованное значение. У них также есть доступ к копии кода приложения, так как оно с открытым исходным кодом.)
По запросу, вот как обрабатывается соль:
- Соль генерируется администратором (мы рекомендуем 32-байтовое случайное значение).
- Соль хранится в хранилище паролей (сетевая услуга)
- Когда приложение развернуто, соль вводится во время выполнения.
- Когда новые значения сохраняются, секретная соль объединяется с уникальным идентификатором значения для формирования соли для каждого значения.
- Эта соль затем используется с введенной пользователем парольной фразой для генерации ключа с использованием PBKDF2 (с 500 000 итераций).
- Затем значения пользователя шифруются своими индивидуальными ключами.
Я считаю, что вышеизложенное известно как шаблон «соль и перец».