Безопасность PBKDF2 в Javascript

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

Моя идея для соли — это SHA1-хэш имени пользователя и пароля, поэтому он будет уникальным для каждого пользователя.

На самом деле я должен сгенерировать хэш PBKDF2 в среде JavaScript. Стоит ли показывать, как генерируется соль, потому что исходники JavaScript представляют собой обычный текст?


person Dennis    schedule 06.06.2013    source источник


Ответы (2)


Использование имени пользователя в качестве соли в основном удовлетворительно, но не защищает от нескольких сценариев атак. Например, пароль можно сравнить в базах данных двух сайтов, использующих один и тот же алгоритм. Кроме того, радужные таблицы могут быть сгенерированы заранее, что сокращает время взлома после компрометации. Именно по этой причине соль должна генерироваться с использованием криптографического генератора случайных чисел. Идея сделать так, чтобы исходный код случайного источника был виден злоумышленникам, сама по себе не является проблемой, если она непредсказуема. См. этот вопрос, чтобы узнать, как сгенерировать его с помощью javascript.

person Zack4    schedule 15.07.2013
comment
Радужные таблицы эффективны только против паролей без соли. Если соль уникальна для каждого пользователя, то радужные таблицы должны быть созданы для каждого пользователя, что полностью опровергает смысл радужных таблиц. - person Benjamin Cutler; 15.07.2013
comment
Нет, это все еще помогает вычислить радугу, прежде чем получить хэш; как только вы получите хэш, его взлом будет быстрее. (но вы правы, говоря, что это таблица для каждого пользователя, что менее удобно) - person Zack4; 15.07.2013

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

Хеш имени пользователя и пароля, объединенных вместе, должен быть в порядке. Поскольку пароль является секретным, хеш имени пользователя и пароля будет непредсказуемым. Однако, как уже упоминалось, может возникнуть проблема с безопасностью, если есть два веб-сайта, использующие один и тот же алгоритм, и кто-то, использующий эти веб-сайты, использует одни и те же учетные данные для обоих (т. Е. Глядя на их хешированные пароли, мы можем сказать, что они используют один и тот же пароль для каждый сайт). Добавление домена вашего сайта должно обойти это. Например (+ это конкатенация):

salt = hash(domain + username + password)

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

person Benjamin Cutler    schedule 15.07.2013