Поставщик членства в ASP.NET - раскрыть суть

Задний план

Мы используем поставщика членства ASPNET, который хранит информацию для входа в систему, а также MongoDB для хранения вторичного набора информации.

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

Цель

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

Альтернатива

Либо так, либо кто-нибудь может предложить лучший подход? Одно из преимуществ хранения соли в другом месте - защитить ее от "посторонних".

Спасибо, Макс.


person Max    schedule 26.07.2012    source источник
comment
Если вы решите сохранить пароль пользователя в хешированном формате, провайдер членства в aspnet сгенерирует соль и сохранит ее в базе данных. Я пытаюсь сделать эту соль доступной в коде, чтобы я мог использовать ту же соль для шифрования данных mongodb   -  person Max    schedule 26.07.2012


Ответы (1)


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

public static string hashCalculator(string username, string password)//Use username as salt.
        {
            byte[] stringbytes = System.Text.Encoding.Unicode.GetBytes(username.ToLower() + password);
            return Convert.ToBase64String(new SHA384Managed().ComputeHash(stringbytes));
        }
person Ashwin Singh    schedule 26.07.2012
comment
Спасибо за быстрый ответ. Я не хочу рассчитывать новую соль, я хочу использовать существующую в провайдере членства в aspnet. В вашем примере, если пользователь изменит свое имя пользователя или пароль / адрес электронной почты, нам придется повторно зашифровать все его данные, иначе они будут потеряны. - person Max; 26.07.2012
comment
Нет проблем, если они изменятся, используйте приведенное выше, чтобы пересчитать новый хэш и сохранить его в базе данных, при входе в систему просто сравните хеши. - person Ashwin Singh; 26.07.2012
comment
Это потребует хранения соли с солеными данными, что я не хочу делать, потому что это снижает безопасность, или сохранение ее в новом поле данных в таблице членства aspnet, которая дублирует данные. Не было бы проще расширить один из классов членства aspnet и раскрыть существующую соль? - person Max; 26.07.2012
comment
AFAIK, поставщик членства в ASP.NET Sql хранит случайно сгенерированную соль в базе данных. Итак, соль сохраняется. Кроме того, соль используется для предотвращения взлома людей, использующих одинаковые пароли. Всегда нужно хранить соль. - person Ashwin Singh; 26.07.2012
comment
Да, есть, и это именно та соль, которую я хочу использовать. Я говорю, что если злоумышленник взломает mongodb, он должен иметь возможность получить соль из отдельной базы данных ASPNET, чтобы иметь возможность легко декодировать данные из mongodb. Если мы сохраним новую соль в mongodb, они могут провести атаку методом грубой силы, используя уже имеющуюся соль ... - person Max; 26.07.2012
comment
RNG Crypto используется для генерации соли, если это помогает. - person Ashwin Singh; 26.07.2012
comment
Я не хочу создавать новую соль, я хочу использовать ту, которую провайдер членства ASPNET сгенерировал, когда пользователь был создан и сохранен в базе данных. Вопрос в том, как мне получить к нему доступ? - person Max; 26.07.2012
comment
Возможно ли для вас иметь централизованную службу, которая выполняет аутентификацию / авторизацию за вас, что-то вроде WIF? - person Mr. Mr.; 26.07.2012
comment
Это могло бы быть хорошим решением, но, возможно, излишним для того, чего я пытаюсь достичь. После безуспешной попытки расширить несколько классов членства aspnet, чтобы раскрыть существующую соль, я решил, что самый простой способ решить эту проблему - в переопределенном методе createuser моего настраиваемого поставщика членства создать новую соль и сохранить ее как часть пользователей. профиль. Спасибо всем за помощь. Если кто-то, читающий это, знает, как раскрыть существующую соль в коде, я все равно хотел бы знать :) - person Max; 26.07.2012