Что такое соль в Enterprise Library HashProvider? (SaltEnabled ключ) - PullRequest
3 голосов
/ 24 сентября 2008

Как соль генерируется в HashProvider в Microsoft Enterprise Library, когда мы устанавливаем SaltEnabled?

Это случайно для новых машин? Это магическое число?

(я знаю, что такое соль, вопрос в том, каково действительное значение соли в Enterprise Library HashProvider)

Ответы [ 4 ]

4 голосов
/ 24 сентября 2008

Edit:

См. Пример реализации Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.HashAlgorithmProvider. Шаги хеширования:

  1. Если SaltEnabled, генерировать случайные байты для длины соли с помощью RNGCryptoServiceProvider.
  2. Добавьте соль в открытый текст.
  3. Хэш соленого открытого текста.
  4. Затем (это важный шаг), снова добавьте соль к хешу .

Для сравнения с хешированным текстом вы должны использовать:

public bool CompareHash(byte[] plaintext, byte[] hashedtext)

против перефразирования и сравнения. Если вы перефразируете, генерируется новая случайная соль, и вы потерялись.

CompareHash выполняет следующие действия:

  1. Снимает неотмешанную соль с хеш-текста. Помните, что он был добавлен на шаге 4 выше.
  2. Использует эту соль для вычисления хэша для открытого текста.
  3. Сравнивает новый хеш с хештекстом минус соль. Если они одинаковы - правда, иначе ложь.

Оригинал:

"если соль включена на HashProvider, провайдер сгенерирует случайную последовательность байтов, которая будет добавлена ​​к хешу. Если вы сравните хешированное значение с нехешированным значением, соль будет извлечена из хешированного значения и используется для хеширования неперехваченного значения до сравнения. "

и

"Что касается декодирования как хеш-значения. Это невозможно сделать. После создания хеш-функции не должно быть способа преобразовать это в исходное значение. Однако, что вы можете сделать, это сравнить не хэшированное значение с хэшированным значением, применив тот же алгоритм и сравнив выходные данные. "

С http://www.codeplex.com/entlib/Thread/View.aspx?ThreadId=10284

0 голосов
/ 02 декабря 2014

Я ответил на аналогичный вопрос, касающийся Enterprise Library и значения соли, которое она использует для хеширования.

Вы можете посмотреть его здесь: https://stackoverflow.com/a/27247012/869376

Основные моменты:

  1. Соль - это случайно сгенерированный 16-байтовый массив.
  2. Генерируется с помощью метода CryptographyUtility.GetRandomBytes(16); в пространстве имен Microsoft.Practices.EnterpriseLibrary.Security.Cryptography. В конечном итоге это вызывает метод библиотеки C с именем [DllImport("QCall", CharSet = CharSet.Unicode)] private static extern void GetBytes(SafeProvHandle hProv, byte[] randomBytes, int count);
  3. Первые 16 байтов строки в кодировке Base64 - это соль, которая использовалась для хеширования исходного значения
0 голосов
/ 15 декабря 2010

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

0 голосов
/ 06 октября 2008

Слегка оффтоп:

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

'Дядя' Джефф имеет запись в блоге об этом .

Дополнительно вы можете посмотреть Википедию:

http://en.wikipedia.org/wiki/Rainbow_table

...