Хеширование пароля в приложении для магазина Windows

Я пишу службу проверки подлинности для своего приложения. Клиенты будут подключаться через HTTP к этой службе аутентификации для регистрации или подключения. После того, как они подключились, они получат sessionkey, чтобы они могли использовать шифрование пакетов TCP/UDP для отправки на вторичный сервер. Это все еще WIP, поэтому, чтобы дать вам обзор с большим рисунком.

Serverside, я использую BCrypt для хеширования входящего пароля. и сохранить это в базе данных. Serverside, я также использую метод проверки BCrypts Verify для проверки любого входящего пароля с сохраненным хэшем. Так что в принципе работает.

Тем не менее, я, естественно, не хочу передавать неуправляемый пароль по проводу. Для приложений Windows Store не существует приложений BCrypt, но я нашел несколько примеров кода MSDN, демонстрирующих, как использовать новый API криптографии для приложений Windows Store для хэширования строки, например:

    public static string Hash(string password)
    {
        HashAlgorithmProvider provider = 
            HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512);

        CryptographicHash hash = provider.CreateHash();

        IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf16BE);
        hash.Append(buffer);
        IBuffer hashedBuffer = hash.GetValueAndReset();

        return CryptographicBuffer.EncodeToBase64String(hashedBuffer);
    }

Я планирую, что к клиенту подключаются разные клиенты, а не только приложения для хранения Windows (также традиционные приложения для Windows Desktop). Поэтому, естественно, мне нужен «один» способ хэширования клиентской стороны пароля.

Мне нужен совет по дополнительным механизмам безопасности, которые я должен реализовать, и если хэширование паролей клиентов с использованием SHA512, как показано в приведенном выше коде, «достаточно» при передаче его на сервер (который снова хэширует и соли его перед хранением).

3
nl ja de
Почему бы не использовать асимметричные ключи? msdn.microsoft.com/en-us/library /5e9ft273(v=vs.71).aspx
добавлено автор paparazzo, источник
Два (или более) варианта. Используйте асимметричный для всей коммуникации или просто используйте асимметричный для передачи симметричного ключа. Симметричный ключ быстрее.
добавлено автор paparazzo, источник
@Блам, не могли бы вы немного разобраться? Вы имеете в виду, что я должен создать асимметричный ключ «сеанс»?
добавлено автор UrbanEsc, источник
Я думаю, что нет надежного защитника без SSL ... Вы не можете защитить его от злоумышленника «человек в середине».
добавлено автор Reno, источник

1 ответы

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


На стороне клиента должно быть возможно ввести по крайней мере соль и коэффициент работы. Эти параметры могут быть получены с серверной стороны, поскольку они должны оставаться постоянными. Затем вы можете использовать клиентскую часть brypt. Вы говорите, что он недоступен в API, но это не должно вас беспокоить. Bcrypt - это всего лишь алгоритм, и он будет доступен в Интернете.

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

0
добавлено
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)