Двигирование в Sha512 с помощью соли? - Питон
-
04-10-2019 - |
Вопрос
Я просматривал документацию Ths Hashlib, но не нашел ничего говорить об использовании поваренная соль когда хеширование данные.
Помощь будет здорово.
Решение
Ответ Самира правильный, но несколько загадочный. По сути, соль - это просто случайно полученное повреждение данных, которые вы префиксируете или постфиксируете ваши данные, чтобы значительно увеличить сложность атаки словаря на ваше значение HaShed. Так дал соль s
и данные d
Вы только что сделали следующее, чтобы генерировать соленый хэш данных:
import hashlib
hashlib.sha512( s + d ).hexdigest()
Видеть это Статья Википедии Больше подробностей
Другие советы
Просто добавьте соль к конфиденциальным данным:
>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update('salt')
>>> m.update('sensitive data')
>>> m.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> n = hashlib.sha512()
>>> n.update('%ssensitive data' % 'salt')
>>> n.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> hashlib.sha512('salt' + 'sensitive data').hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
Соли не волшебный процесс, который библиотека должна помочь вам с - это просто дополнительные данные, предоставляемые, чтобы остановить радужные таблицы от работы.
>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1'
>>> m.update(b"My super-secret salt.")
>>> m.digest()
b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b'
Если вы ищете замену Crypt (), новые версии Glibc имеют SHA-512 «$ 6 $ $» с подсчетом переменной итерации (см. Страница Ульриха Дреппер, в котором есть описание и ссылки на полную реализацию C sha512_crypt_r()
).
Написание своего собственного крипто очень не распространяется - вышеупомянутое sha512(salt+password)
не помогает против атаки грубой силы.
Для генерации соли, используйте что-то вроде os.urandom(16)
для случайных байтов или ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16)))
Для случайных базовых 64-одинаковых символов (для использования с криптами () - Alikes).
(Я говорю, что Base64 - одинаково, что это не совпадает с базой64 в PEM / MIME.)
Используйте PassLib, написание собственного пароля Crypto - это почти уверенный путь к неудаче.
SHA512 не отличный способ хранить хешитые пароли в эти дни. Вы должны использовать BCRYPT или что-то подобное. Что важно, так это то, что солование встроена и что алгоритм имеет значительный рабочий фактор.
Если вы соли с паролями SHA512, просто добавляя (или представляющую) соль к открытому тексту, любой, кто получает свои руки на набор ваших хэшированных паролей и применяет современный инструмент трещин (http://arstechnica.com/security/2013/05/how-crackers-make-minced-mast-out-of-your-passwords/) сможет увидеть контактные значения Consateenated Password + и, вероятно, через тривиальное сопоставление шаблона, сможете отделить часть пароля из солевой части для большинства, если не все рассматриваемые аккаунты.
Я не думал об этом полностью, и я ни в коем случае не означает эксперт по безопасности, но мне кажется, что если вы должны были зашифровать (использование, например, AES256) пароль, используя соль в качестве ключа, и Тогда хэш это С SHA512 вы были бы в безопасности от уязвимости, которую я описал выше.
Тем не менее, в этот момент вы приложили больше усилий, чем привел бы переключиться на BCRYPT, и у вас все еще не будет защиты рабочего фактора, поэтому я бы только порекомендовал бы подход, если об окружающей среде Работа в не предлагает этот вариант.