2014-12-04 2 views
3

Я пишу программу на Python для криптографии с эллиптическим кривым (для школы и без интереса). В настоящее время я работаю над алгоритмом цифровой подписи. В настоящее время я ищу хорошую и безопасную функцию хеширования, которая является стандартной для Python или ее можно легко загрузить и импортировать. Я думал о SHA256, так как это единственный, кого я знаю, который еще не сломался (насколько я знаю). Тем не менее, я также прочитал, что SHA не следует использовать для криптографии. Является ли SHA256 подходящим для алгоритма цифровой подписи? Или следует использовать другую функцию хэширования? Если да, то какой из них будет хорошим выбором?Криптографические хэш-функции в Python

+0

Если мне нужно было подписать сообщение в проекте, я бы использовал http://pythonhosted.org/itsdangerous/, и они используют HMAC и SHA1, видимо, – Anentropic

+0

Не устарел ли SHA1? Я думал, что это оказалось очень уязвимым? Во всяком случае, я ищу программу, насколько смогу. Это означает, что я хочу запрограммировать почти все для ECDSA, кроме функции хеширования, поскольку я пока недостаточно осведомлен об этом предмете. – Dasherman

+1

@ Энтропия Это MAC, а не подпись. МАС является симметричным. – CodesInChaos

ответ

0

Я использую SHA-512 для аналогичной цели, я думаю, вам будет трудно получить гораздо более безопасную защиту. SHA-512 доступен в hashlib питона, и может быть использован как так:

import hashlib 
hashGen = hashlib.sha512() 
hashGen.update("What you want to hash") 
hash = hashGen.hexdigest() 
print "your hash is: ", hash 
+0

1) Можно ли «очистить» объект от всех его обновлений, чтобы он начинался со всего, как бы? 2) Стоит ли SHA512 использовать, если моя эллиптическая кривая использует только 256 бит и порядок? – Dasherman

+0

1) Не совсем, но вы можете добиться такого же эффекта, повторяя строку hashGen = hashlib.sha512(). 2) Его все равно стоит использовать, но у вас не будет полного потенциала (я не 100% на этом). –

0

Лучший стандартизованный алгоритм в настоящее время доступны по-прежнему SHA-2. SHA-2 теперь состоит из 6 хэш-функций: сначала были определены SHA-256, SHA-384 и SHA-512. SHA-224 был добавлен позже, чтобы обеспечить меньший размер выпуска. После этого были введены менее хорошо доступные SHA-512/224 и SHA-512/256.

SHA-2 в основном состоит из 32-битных ориентированных SHA-256 вариантов - SHA-256 и SHA-224 - и 64-битных SHA-512 вариантов - других. Производительность вариантов SHA-512 на самом деле может быть выше на 64-битных машинах, поэтому введение SHA-512/224 и SHA-512/256. В принципе, варианты SHA-256/SHA-512 отличаются только константами, которые они используют внутри, и количеством бит, используемым в качестве размера вывода.

Во время соревнований SHA-3 выяснилось, что SHA-2 по-прежнему довольно силен, даже если SHA-1 находится под атакой. Я бы предложил только посмотреть на другие хеши, если SHA-2 находится под атакой или если стандартизированы алгоритмы хеширования.

Материал из Википедии:.

В 2005 году недостатки безопасности были определены в SHA-1, а именно, что математическая слабость может существовать, что указывает на более сильную хэш-функция была бы желательна [6] Хотя SHA-2 имеет некоторое сходство с алгоритмом SHA-1, эти атаки не были успешно распространены на SHA-2.

Обратите внимание, что SHA-2 использует значительно более сложные раунды по сравнению с SHA-1.

+0

1) Достаточно ли хэширования сообщения для цифровой подписи? Или я должен делать хэш несколько раз перед подписанием? 2) Будет ли SHA-2 достаточным для получения симметричных ключей шифрования, например, от пользовательского ввода или от точки эллиптической кривой или координаты x? Или я должен использовать для этого другой алгоритм? – Dasherman

+0

1) Только один раз.2) Вы должны использовать PBKDF, такой как PBKDF2 или bcrypt/scrypt для паролей, и * официально * вы должны использовать KBKDF, такой как HKDF для второго. Для второго вы можете обмануть бит и использовать (самые левые бит) выход одного из алгоритмов SHA-2 как KDF. Обратите внимание, что PBKDF2 построен на HMAC, который, в свою очередь, основан на хеш-функции, такой как SHA-2. –

+0

Может ли ваш «чит» быть более уязвимым для атак, чем с использованием HKDF? – Dasherman

Смежные вопросы