Вопросы по PBKDF2 и C#

я пытаюсь понять эту ключевую функцию деривации, и у меня есть несколько вопросов

1) в C# кажется, что Rfc2898DeriveBytes реализует его с SHA1, но я хочу попробовать использовать SHA512 для большей безопасности. Как я могу использовать SHA512 для PBKDF2 в С#?

2) Я читал о столкновении хэшей, но пока не понимаю этого, так какова правильная длина соли и хэша для обеспечения достойной безопасности?


person Nauzet    schedule 09.12.2014    source источник
comment
Какие исследования, проведенные вами, показывают, что использование SHA512 повысит безопасность при выполнении функции деривации ключа по сравнению с SHA1? Все недостатки, которые относятся к SHA1 и SHA512, не относятся к тому, как он используется здесь.   -  person Scott Chamberlain    schedule 11.12.2014
comment
о, извините, я не проводил никаких исследований, но SHA1 использует 20 байт, а SHA512 использует 64, PBKDF2 имеет длину, которую вы решаете, но я читал, что вы не можете выбрать случайную длину, потому что вы должны учитывать длину вашей соли, потому что есть что-то, называемое коллизиями .. Так что я немного запутался здесь. Возможно, SHA512 не более безопасен, но имеет больше байтов на выходе, я думаю, это вынуждает вас использовать большую длину PBKDF2, и это кажется мне более безопасным.   -  person Nauzet    schedule 11.12.2014


Ответы (1)


в C# кажется, что Rfc2898DeriveBytes реализует его с SHA1, но я хочу попробовать использовать SHA512 для большей безопасности. Как я могу использовать SHA512 для PBKDF2 в С#?

Rfc2898DeriveBytes теперь принимает HashAlgorithmName в конструкторе, начиная с .NET Framework 4.7.2.

Для более старых версий .NET:

К сожалению, это всего лишь предел реализации Rfc2898DeriveBytes, он не позволяет указать хеш-функцию. SHA512, вероятно, является излишним, и многие утверждают, что SHA1 все еще, вероятно, безопасен в использовании. Однако многие люди действительно используют SHA256. Вам придется найти другую реализацию. Microsoft создала еще одну библиотеку под названием CLR Security, которая расширяет пространство имен System.Security.Cryptography.

Одна из вещей, которые он делает, — это использование Microsoft CNG API. Он предлагает реализацию PBKDF2, которая поддерживает указание хеш-функции, включая SHA512. Вы можете найти его на Codeplex. Единственным недостатком этого является то, что он не будет работать на XP или Server 2003, поскольку CNG был представлен в Windows Vista / Server 2008.

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

Ваша соль должна быть довольно длинной. Хорошим примером может быть соль того же размера, что и выходные данные хэш-функции, поэтому с SHA512 вы должны использовать 64-байтовую соль. Как правило, ваша соль должна быть достаточно большой, чтобы ее нельзя было легко взломать. Это также должно быть случайным, а не какими-то «пользовательскими» данными, такими как имя пользователя.

person vcsjones    schedule 11.12.2014
comment
Допустим, я использую реализацию C # PBKDF2 по умолчанию с SHA1, и я решил использовать 64-байтовую соль с выходом 128 байтов, алгоритм использует SHA1, который составляет 20 байтов вывода для моей 64-байтовой соли... Это правильно? Могу ли я использовать уже полученную соль с SHA512 в качестве соли? это повысить безопасность? - person Nauzet; 12.12.2014
comment
@Ralstlin Я бы прочитал этот пост в блоге, я думаю, он прояснит много вопросов: security.blogoverflow.com/2013/09/about-secure-password-hashing - person vcsjones; 15.12.2014