уточнение для алгоритма шифрования SHA-512 (c #) - PullRequest
2 голосов
/ 21 октября 2011

РЕДАКТИРОВАТЬ: Извините, я забыл упомянуть, я не использую реализованный криптой sha512, потому что, насколько я могу судить, это не требует соли или определенного числа раундов для вычисленияхеш с.

Хорошо, я кодирую крипту sha-512 в c # и следую инструкциям, найденным здесь ...

http://people.redhat.com/drepper/SHA-crypt.txt

Этоя впервые делаю что-то связанное с шифрованием, поэтому я хочу убедиться, что я правильно понимаю шаги ... Я недостаточно хорошо понимаю код на c, чтобы перевести с c на c #: /

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

Предполагая, что все было сделано правильно для шагов 1-8, мои сомнения начинаются с шага 9

9.Для каждого блока из 32 или 64 байтов в строке пароля (исключая завершающий NUL в представлении C), добавьте дайджест B для дайджеста A

Поскольку я использую SHA-512, у меня есть блокразмеры 64 байта.

Будет ли следующий код давать желаемый результат?

//FYI, temp = digestA from steps 1-3 (before expanding digestA for step 9)
//alt_result = computed digestB hash (64 byte hash)

for (cnt = key.Length; cnt > 64; cnt -= 64)                         //9
{
    int i = 0;
    ctx.TransformBlock(alt_result, 0, 64, digestA, temp.Length + 64 * i);
    i++;
}

Если кто-то может уточнить, что то, что я сказал, правильно, я был бы признателен.Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 февраля 2013

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

Первое: SHA512 и SHA512Crypt - это два разных алгоритма для двух разных целей.SHA512 - это алгоритм хеширования общего назначения ( см. ).SHA512Crypt - это алгоритм хранения паролей или ключей, основанный на паролях, который использует SHA512 (хеш) для внутреннего использования ( см. ).SHA512Crypt основан на более ранней функции Crypt, в которой вместо SHA512 использовался MD5.

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

Второму: НЕ пишите свои собственные методы криптографии .( см. Это ) Существует множество способов облажаться, даже если вы точно знаете, что делаете.

Если вы не хотите использовать встроенный Rfc2898DerviceBytes из-заОсновываясь на SHA1, вы можете взглянуть на bcrypt или на какую-либо другую публичную рецензированную реализацию известных криптографических алгоритмов.

3 голосов
/ 21 октября 2011

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

О самом алгоритме: кажется, вы начинаете с недостатка.Неофит, вы делаете много «предположений» об основной терминологии шифрования, которые даже нуждаются в разъяснении.Если реализация CLR не сработает для вас, я думаю, вам лучше потратить время на поиск хорошей реализации C и поиск путей ее интеграции.Выяснить вызовы взаимодействия (extern) для этого будет гораздо проще, чем погрузиться во внутренние системы шифрования, результаты будут более эффективными, а знания, которые вы получите о собственном взаимодействии, будут гораздо более полезными / пригодными для повторного использования.

...