Соляные пароли в проектах с открытым исходным кодом - PullRequest
1 голос
/ 18 ноября 2010

Я готовлюсь опубликовать проект на github. В моем проекте для аутентификации при входе в систему я беру строку и строго набираю ее как Password:

// Stripped down here on SO for brevity
public class Password
{
    private const string salt = "sealab2021";

    public Password(string password) 
    {
        this.saltedPasswordHash = new MD5Hash(password + this.salt).ToString();
    }

    public string SaltedHash { get; private set; }
}

Очевидно, что если соль общедоступна, соль бесполезна.

Что другие люди делают для подсчета паролей в проектах с открытым исходным кодом и при этом сохраняют надёжную скрытую фразу?

Должна ли соль существовать где-то в файловой системе и быть загружена при запуске приложения? Кажется разумным решением, но если я собираюсь использовать github для управления исходным кодом, а не просто делать дампы в github при выпуске новых версий, этот файл все еще будет доступен для общественности.

Ответы [ 2 ]

5 голосов
/ 18 ноября 2010

Очевидно, что если соль на всеобщее обозрение, соль ничего не стоит.

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

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

Я бы также рекомендовал использовать систему типа PBKDF2 или bcrypt вместо простого соленого хэша.

4 голосов
/ 18 ноября 2010

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

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

Наконец, это не проблема с открытым исходным кодом. Такие жестко запрограммированные значения могут быть легко перепроектированы из проприетарного программного обеспечения.

...