Как хранить соль в распределенной среде - PullRequest
4 голосов
/ 26 мая 2011

Я не знаю, как использовать «соленую концепцию» в моем сценарии.

Предположим, у меня есть клиентское настольное приложение, которое шифрует данные для определенных пользователей и отправляет их на удаленный сервер.Клиентское приложение генерирует ключ с помощью PKCS # 5, с паролем пользователя и солью.Удаленный рабочий стол НИКОГДА не должен контактировать с паролем пользователя.

Предположим, мы генерируем случайную соль для шифрования.Клиентское приложение может зашифровать данные и отправить их на удаленный сервер.Если пользователь попытается получить доступ к своим данным на другом компьютере, как он сможет расшифровать их, поскольку соль неизвестна?

Я думаю, что использование одной и той же соли все время (жестко закодировано в приложении) нехорошая идея (плохая защита от запутывания).

Как мне решить мою проблему?

Ответы [ 3 ]

8 голосов
/ 26 мая 2011

Соль хранится в незашифрованном виде вместе с зашифрованными данными.

Цель соли - не дать злоумышленнику заранее вычислить словарь зашифрованных паролей.(Как, например, злоумышленник тратит год или что-то еще, генерируя зашифрованную форму каждого слова на каждом языке.)

Другая цель соли - убедиться, что два пользователя будут иметь разные зашифрованные пароли, даже если ихнезашифрованные пароли одинаковы.

Ни одна из целей не требует, чтобы соль оставалась секретной.

[обновить, чтобы уточнить]

См. запись Википедии для Соли (криптография) .В частности, прочитайте вступительные абзацы.

Цель соли - взять неслучайный ввод (например, предоставленные пользователем данные) и сделать его случайным, прежде чем передавать его через криптографическую функцию.Чтобы это работало, соль должна генерироваться случайным образом для каждого входа.

Традиционный пример - хранение зашифрованных паролей.Большинство пользователей надежно выбирают неслучайные пароли, поэтому без малейшего затруднения каждый, кто выберет «SEKRIT» в качестве пароля, получит такой же зашифрованный пароль в базе паролей.Решение состоит в том, чтобы добавить случайную соль перед шифрованием пароля, а затем сохранить ее (в незашифрованном виде) вместе с зашифрованным паролем.

0 голосов
/ 13 июля 2017

Существует аспект засоления в распределенной среде, который не охватывается ни одним из ответов, которые я видел до сих пор.Если у вашего сайта есть несколько баз данных, которые необходимо синхронизировать, как защититься от состояния гонки, при котором случайная соль генерируется на двух или более сайтах почти одновременно.Когда базы данных согласованы, как узнать, какой столбец соли для данной строки является правильным?

ИМХО, случай, когда значение соли должно быть постоянно пересчитываемой случайной строкой, еще не былсделано против использования чего-то вроде первичного ключа (PK) для пользовательской строки.Прежде чем ответить в ужасе, выслушайте меня.

  • Любая разумная хеш-функция будет производить совершенно другой хеш независимо от того, насколько изменяется простой текст (добавляется один или 100 символов).
  • Если вы используете PK, то это значение не зависит от всей предоставленной пользователем информации.
  • Как и любое соленое действие, PK-as-salt можно вставить в любом месте в виде простого текстапо алгоритму.Это не обязательно должно быть в начале или в конце.
  • В распределенной среде нет условий гонки для соляного столба, потому что нет соляного столба.
  • Использование подразумеваемая соль , как и в PK, каждый хэш выглядит по-разному, даже если два пользователя используют один и тот же пароль.Таким образом, идея PK-как-соль делает то, что соль должна делать без осложнений примирения.
0 голосов
/ 26 мая 2011

Если вы добавите соль в зашифрованные данные, клиентское приложение на другом компьютере может успешно вычислить хэш пароля.

...