Хэш пароля: Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Содержание
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа.
Определения типов хэшей при помощи скрипта hash-Identifier для расшифровки паролей
Автор: Kody
Хэши обычно используются для хранения конфиденциальной информации, как, например, учетных записей, которые не должны находиться в открытом виде. При помощи утилит наподобие Hashcat мы можем взломать эти хэши однако только в случае, если знаем алгоритм генерации. Используя инструменты навроде скрипта hash-identifier, можно легко определить тип любых хэшей, чтобы затем указать правильный режим при работе с Hashcat.
Помимо взлома хэшей hash-identifier также полезен для идентификации алгоритма, используемого при выдаче контрольной суммы для загрузки файлов. Кроме того, этот скрипт помогает определить, к какому приложению относится хэшированный файл или значение (например, SQL базе или какому-либо другому формату, специфичному для конкретного поставщика).
Что такое хэш и как расшифровать пароль?
Как было сказано ранее, пароли, извлекаемые из базы данных или компьютера, обычно хранятся в виде хэшей, а не в открытом виде. Функция хэширования преобразует пароли в хаотичный набор символов и чисел, которые не должны быть обратимы обратно в пароль.
Однако два или более одинаковых пароля, при использовании одной и той же функции, будут иметь один и тот же хэш. Соответственно, при помощи этой функции можно получить набор хэшей для списка паролей, а затем использовать этот перечень для обнаружения подходящего пароля. Подобным образом работает множество утилит для взлома.
Хотя хранение пароля в виде хэша лучше, чем в открытом виде, вероятность взлома все равно остается, если у злоумышленника хороший набор правил или словарь, которые можно использовать в Hashcat или другой подобной программе.
Если вы много работаете с хэшами, то легко увидите разницу между разными и часто используемыми типами.
Например, сможете ли вы на глаз определить, к какому типу относятся хэши, указанные ниже?
8743b52063cd84097a65d1633f5c74f5 b89eaac7e61417341b710b727768294d0e6a277b
Хотя вы могли видеть и тот и другой хэш ранее, ответ на вопрос, какой хэш — MD5, а какой — SHA1, не столь очевиден. Еще большая путаница может возникнуть со схожими типами хэшей, относящиеся к разным режимам в Hashcat. В случае с хэшами, приведенными выше, этот факт имеет чрезвычайно важное значение.
При использовании Hashcat для взлома этого хэша мы должны установить опцию –m с целью работы в нужном режиме. Для взлома хэша MD5 мы бы указали режим 0.
~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force hashcat (v4.0.1) starting... OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU 8743b52063cd84097a65d1633f5c74f5:hashcat
В итоге, установив нужный алгоритм и используя хороший словарь, после расшифровки хэша мы получили слово «hashcat».
Какие хэши поддерживаются?
На данный момент Hashcat в состоянии расшифровать большое количество хэшей. В репозитории на GitHub для утилиты hash-identifier список поддерживаемых хэшей очень внушителен:
ADLER-32 CRC-16 CRC-16-CCITT CRC-32 CRC-32B DES (Unix) Domain Cached Credentials FCS-16 GHash-32-3 GHash-32-5 GOST R 34.11-94 Haval-128 Haval-160 Haval-192 110080 Haval-224 114080 Haval-256 Lineage II C4 MD2 MD4 MD5 MD5 ($pass.$salt) - Joomla MD5 (APR) MD5 (Half) MD5 (HMAC(WordPress)) MD5 (Middle) MD5 (phpBB3) MD5 (Unix) MD5 (WordPress) MySQL MySQL 160bit - SHA-1(SHA-1($pass)) MySQL5 - SHA-1(SHA-1($pass)) NTLM RAdmin v2.x RipeMD-128 RipeMD-160 RipeMD-256 RipeMD-320 SAM - (LM_hash:NT_hash) SHA-1 SHA-1 (Django) SHA-1 (MaNGOS) SHA-224 SHA-256 SHA-256 (Django) SHA-384 SHA-384 (Django) SHA-512 SNEFRU-128 SNEFRU-256 Tiger-128 Tiger-160 Tiger-192 XOR-32 Whirlpool
и другие…
Что понадобится
Для начала нужно установить Python3
на вашем компьютере (есть версии для разных платформ). Кроме того, вам понадобится утилита Hashcat, которую можно загрузить, используя команду apt install hashcat, после обновления системы при помощи команд apt update и apt upgrade.
Если вы хотите сгенерировать ваши собственные хэши для тестового взлома, то можете воспользоваться командой в формате echo —n PLAINTEXT | (HASHTYPE)sum. Например, при создании хэша SHA1 для слова «nullbyte» я запустил следующую команду:
~$ echo -n nullbyte | sha1sum 32c0ced56f1fe08583bdb079d85a35a81995018c -
Шаг 1. Загрузка и установка Hash-Identifier
Установить скрипт, написанный на Python, – очень просто. Откройте терминал и запустите следующую команду:
~$ git clone https://github.com/blackploit/hash-identifier.git Cloning into 'hash-identifier'... remote: Enumerating objects: 21, done. remote: Total 21 (delta 0), reused 0 (delta 0), pack-reused 21 Unpacking objects: 100% (21/21), done.
Затем посмотрите содержимое директории hash-identifier:
~$ cd hash-identifier ~/hash-identifier$ ls hash-id.py README.md screenshots
Вы должны обнаружить файл hash—id.py, который можно запустить при помощи команды ниже:
~/hash-identifier$ python3 hash-id.py ######################################################################### # __ __ __ ______ _____ # # /\ \/\ \ /\ \ /\__ _\ /\ _ `\ # # \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ # # \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ # # \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ # # \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ # # \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 # # By Zion3R # # www.Blackploit.com # # [email protected] # ######################################################################### -------------------------------------------------- HASH:
Шаг 2. Идентификация неизвестных хэшей
В качестве пробного подхода при помощи hash-identifier попробуем опознать следующие пять неизвестных хэшей:
Hash 1: 7196759210defdc0 Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256) Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1) Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512) Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)
Для начала в командной строке вводим первую строку и быстро получаем результат, что скорее всего имеем дело с хэшем, используемым в MySQL, который попробуем взломать чуть позже.
HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Второй хэш, показанный ниже, опознается как SHA256. Другой вероятный вариант — Haval256.
HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d Possible Hashs: [+] SHA-256 [+] Haval-256 Least Possible Hashs: [+] GOST R 34.11-94 [+] RipeMD-256 [+] SNEFRU-256 [+] SHA-256(HMAC) [+] Haval-256(HMAC) [+] RipeMD-256(HMAC) [+] SNEFRU-256(HMAC) [+] SHA-256(md5($pass)) [+] SHA-256(sha1($pass))
Третий хэш опознается как SHA1:
HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)
Четвертый хэш опознается как SHA512:
HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 Possible Hashs: [+] SHA-512 [+] Whirlpool Least Possible Hashs: [+] SHA-512(HMAC) [+] Whirlpool(HMAC)
Наконец, пятый и последний хэш опознается как MD5:
HASH: 5f804b61f8dcf70044ad8c1385e946a8 Possible Hashs: [+] MD5 [+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username))) Least Possible Hashs: [+] RAdmin v2.x [+] NTLM [+] MD4 [+] MD2 [+] MD5(HMAC) [+] MD4(HMAC) [+] MD2(HMAC) [+] MD5(HMAC(WordPress)) [+] Haval-128 [+] Haval-128(HMAC) [+] RipeMD-128 [+] RipeMD-128(HMAC) [+] SNEFRU-128 [+] SNEFRU-128(HMAC) [+] Tiger-128 [+] Tiger-128(HMAC) [+] md5($pass.$salt) [+] md5($salt.$pass) [+] md5($salt.$pass.$salt) [+] md5($salt.$pass.$username) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($pass.$salt)) [+] md5($salt.md5($salt.$pass)) [+] md5($salt.md5(md5($pass).$salt)) [+] md5($username.0.$pass) [+] md5($username.LF.$pass) [+] md5($username.md5($pass).$salt) [+] md5(md5($pass)) [+] md5(md5($pass).$salt) [+] md5(md5($pass).md5($salt)) [+] md5(md5($salt).$pass) [+] md5(md5($salt).md5($pass)) [+] md5(md5($username.$pass).$salt) [+] md5(md5(md5($pass))) [+] md5(md5(md5(md5($pass)))) [+] md5(md5(md5(md5(md5($pass))))) [+] md5(sha1($pass)) [+] md5(sha1(md5($pass))) [+] md5(sha1(md5(sha1($pass)))) [+] md5(strtoupper(md5($pass)))
Все прошло без особых проблем. Следующий шаг – поиск нужного режима, соответствующего обнаруженному типу, который будет указываться в Hashcat во время взлома.
Шаг 3. Подбор режима в Hashcat
При поиске нужного режима мы можем взглянуть на огромный список хэшей, поддерживаемых в Hashcat. Сокращенный вариант с наиболее популярными типами приведен ниже:
Hash-Mode Hash-Name Example 0 MD5 8743b52063cd84097a65d1633f5c74f5 10 md5($pass.$salt) 01dfae6e5d4d90d9892622325959afbe:7050461 20 md5($salt.$pass) f0fda58630310a6dd91a7d8f0a4ceda2:4225637426 30 md5(utf16le($pass).$salt) b31d032cfdcf47a399990a71e43c5d2a:144816 40 md5($salt.utf16le($pass)) d63d0e21fdc05f618d55ef306c54af82:13288442151473 50 HMAC-MD5 (key = $pass) fc741db0a2968c39d9c2a5cc75b05370:1234 60 HMAC-MD5 (key = $salt) bfd280436f45fa38eaacac3b00518f29:1234 100 SHA1 b89eaac7e61417341b710b727768294d0e6a277b 110 sha1($pass.$salt) 2fc5a684737ce1bf7b3b239df432416e0dd07357:2014 120 sha1($salt.$pass) cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024 130 sha1(utf16le($pass).$salt) c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225 140 sha1($salt.utf16le($pass)) 5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872 150 HMAC-SHA1 (key = $pass) c898896f3f70f61bc3fb19bef222aa860e5ea717:1234 160 HMAC-SHA1 (key = $salt) d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234 200 MySQL323 1EAFFED54F552AA5 300 MySQL4.1/MySQL5 fcf7c1b8749cf99d88e5f34271d636178fb5d130
В списке выше есть два примера, которые могут соответствовать первому хэшу (7196759210defdc0), рассмотренному нами в предыдущем шаге. На первый взгляд, режим 200 «MySQL323» наиболее соответствует. Подтвердить гипотезу можно при помощи проверки тестового хэша в hash-identifier.
HASH: 1EAFFED54F552AA5 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Точное совпадение с нужным хэшем:
HASH: 7196759210defdc0 Possible Hashs: [+] MySQL [+] MD5(Middle) Least Possible Hashs: [+] MD5(Half)
Если мы попробуем другой тип (300), то увидим, что результаты не совпадают.
HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130 Possible Hashs: [+] SHA-1 [+] MySQL5 - SHA-1(SHA-1($pass)) Least Possible Hashs: [+] Tiger-160 [+] Haval-160 [+] RipeMD-160 [+] SHA-1(HMAC) [+] Tiger-160(HMAC) [+] RipeMD-160(HMAC) [+] Haval-160(HMAC) [+] SHA-1(MaNGOS) [+] SHA-1(MaNGOS2) [+] sha1($pass.$salt) [+] sha1($salt.$pass) [+] sha1($salt.md5($pass)) [+] sha1($salt.md5($pass).$salt) [+] sha1($salt.sha1($pass)) [+] sha1($salt.sha1($salt.sha1($pass))) [+] sha1($username.$pass) [+] sha1($username.$pass.$salt) [+] sha1(md5($pass)) [+] sha1(md5($pass).$salt) [+] sha1(md5(sha1($pass))) [+] sha1(sha1($pass)) [+] sha1(sha1($pass).$salt) [+] sha1(sha1($pass).substr($pass,0,3)) [+] sha1(sha1($salt.$pass)) [+] sha1(sha1(sha1($pass))) [+] sha1(strtolower($username).$pass)
Соответственно, еще раз убеждаемся, что режим 200 выбран правильно.
Шаг 4. Расшифровка хэша при помощи Hashcat
После идентификации типа хэша и подбора нужно режима можно приступать к расшифровке пароля в Hashcat. Вначале нужно создать словарь с паролями, который будет использоваться в Hashcat для атаки на хэш. В сети есть много доступных списков, например, RockYou, но в нашем случае мы будем создавать тестовый словарь example.dict с несколькими паролями.
Если вы все еще находитесь внутри скрипта hash-identifier, нажмите Ctrl—C, а затем откройте файл в текстовом редакторе nano, запустив следующую команду:
~/hash-identifier$ nano example.dict
После добавления нескольких предполагаемых паролей, один из которых – «hashcat», нажимаем Ctrl—X для выхода из редактора и вводим Y, чтобы сохранить изменения в файле. Теперь мы можем использовать этот файл в качестве словаря вместе с ранее выбранным режимом для взлома хэша. Базовая команда выглядит примерно так:
sudo hashcat -m MODE_NUMBER -a 0 HASH_VALUE example.dict
Вместо значения HASH_VALUE указываем хэш 7196759210defdc0, вместо MODE_NUMBER – подобранный ранее режим 200. Результат работы показан ниже. Если у вас старая система, как в моем случае – нужно указать параметр –force.
~/hash-identifier$ sudo hashcat -m 200 -a 0 7196759210defdc0 example.dict --force hashcat (v5.1.0) starting... OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz, 1024/3639 MB allocatable, 2MCU /usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 1 Applicable optimizers: * Optimized-Kernel * Zero-Byte * Not-Iterated * Single-Hash * Single-Salt Password length minimum: 0 Password length maximum: 31 Watchdog: Hardware monitoring interface not found on your system. Watchdog: Temperature abort trigger disabled. Watchdog: Temperature retain trigger disabled. * Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll' * Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while... Dictionary cache hit: * Filename..: example.dict * Passwords.: 17 * Bytes.....: 76 * Keyspace..: 17 - Device #1: autotuned kernel-accel to 1024 - Device #1: autotuned kernel-loops to 1 [s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small. This means that hashcat cannot use the full parallel power of your device(s). Unless you supply more work, your cracking speed will drop. For tips on supplying more work, see: https://hashcat.net/faq/morework Approaching final keyspace - workload adjusted. 7196759210defdc0:hashcat Session..........: hashcat Status...........: Cracked Hash.Type........: MySQL323 Hash.Target......: 7196759210defdc0 Time.Started.....: Mon Dec 9 17:00:25 2019 (0 secs) Time.Estimated...: Mon Dec 9 17:00:25 2019 (0 secs) Guess.Base.......: File (example.dict) Guess.Queue......: 1/1 (100.00%) Speed.Dev.#1.....: 0 H/s (0.03ms) Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 17/17 (100.00%) Rejected.........: 0/17 (0.00%) Restore.Point....: 0/17 (0.00%) Candidates.#1....: wow -> again HWMon.Dev.#1.....: N/A Started: Mon Dec 9 17:00:17 2019 Stopped: Mon Dec 9 17:00:27 2019
В результате мы получили 7196759210defdc0:hashcat и смогли
расшифровать хэш посредством сравнения с элементами словаря из файла example.dict.
Заключение
Когда вы имеете дело с неизвестным хэшем, первый шаг – корректная идентификация типа. Хотя скрипт hash-identifier – не идеален, но позволяет без особых проблем опознать наиболее распространённые хэши и отличить разные типа хэшей, которые выглядят одинаково, но требуют разных режим работы в Hashcat. Даже если hash-identifier не уверен, с каким типом вы имеете дело, сравнение с результатами примеров с сайта Hashcat, может помочь в идентификации.
Надеюсь это руководство, посвященное опознанию неизвестных хэшей, вам понравилось.
PHP: Хеширование паролей — Manual
I feel like I should comment some of the clams being posted as replies here.
For starters, speed IS an issue with MD5 in particular and also SHA1. I’ve written my own MD5 bruteforce application just for the fun of it, and using only my CPU I can easily check a hash against about 200mill. hash per second. The main reason for this speed is that you for most attempts can bypass 19 out of 64 steps in the algorithm. For longer input (> 16 characters) it won’t apply, but I’m sure there’s some ways around it.8 = 7,21389578984e+15 combinations.
With 100 billion per second it would then take 7,21389578984e+15 / 3600 = ~20 hours to figure out what it actually says. Keep in mind that you’ll need to add the numbers for 1-7 characters as well. 20 hours is not a lot if you want to target a single user.
So on essence:
There’s a reason why newer hash algorithms are specifically designed not to be easily implemented on GPUs.
Oh, and I can see there’s someone mentioning MD5 and rainbow tables. If you read the numbers here, I hope you realize how incredibly stupid and useless rainbow tables have become in terms of MD5. Unless the input to MD5 is really huge, you’re just not going to be able to compete with GPUs here. By the time a storage media is able to produce far beyond 3TB/s, the CPUs and GPUs will have reached much higher speeds.
As for SHA1, my belief is that it’s about a third slower than MD5. I can’t verify this myself, but it seems to be the case judging the numbers presented for MD5 and SHA1. The issue with speeds is basically very much the same here as well.
The moral here:
Please do as told. Don’t every use MD5 and SHA1 for hasing passwords ever again. We all know passwords aren’t going to be that long for most people, and that’s a major disadvantage. Adding long salts will help for sure, but unless you want to add some hundred bytes of salt, there’s going to be fast bruteforce applications out there ready to reverse engineer your passwords or your users’ passwords.
Как расшифровать хеш быстро, без долгих вычислений?
Нередко бывает нужно узнать пароль, имея на руках только хеш. Для перебора вариантов можно использовать свой компьютер, но гораздо быстрее воспользоваться уже существующей базой данных. Даже в общедоступных базах содержатся десятки миллионов пар хеш — пароль, и поиск по ним через облачный сервис занимает считаные секунды.
Еще по теме: Определение хеша
В мире существует несколько зеттабайт цифровых данных, но далеко не вся эта информация уникальна: повторы разбросаны по миллиардам носителей и серверов. Независимо от типа данных, для работы с ними требуется решать одни и те же принципиальные задачи. Это снижение избыточности за счет частичного устранения повторов (дедупликация), проверка целостности, инкрементное создание резервных копий и авторизация пользователей. Конечно, последний аспект интересует нас больше всего, однако все эти технические приемы базируются на общих методах обработки данных с использованием хеширования. Существуют облачные сервисы, которые позволяют использовать эту процедуру быстрее — с хорошо известными целями.
На первый взгляд кажется странным, что в разных задачах применяется общая процедура вычисления и сравнения контрольных сумм или хешей — битовых последовательностей фиксированной длины. Однако этот метод действительно универсален. Контрольные суммы служат своеобразными цифровыми отпечатками файлов, ключей, паролей и других данных, называемых в криптографии messages — сообщения. Хеши (или дайджесты, от англ. digest) позволяют сравнивать их между собой, быстро обнаруживать любые изменения и обезопасить проверку доступа. Например, с помощью хешей можно проверять соответствие введенных паролей, не передавая их в открытом виде.
Математически этот процесс выполняется одним из алгоритмов хеширования — итерационного преобразования блоков данных, на которые разбивается исходное сообщение. На входе может быть что угодно — от короткого пароля до огромной базы данных. Все блоки циклично дописываются нулями или урезаются до заданной длины до тех пор, пока не будет получен дайджест фиксированного размера.
Обычно хеши записываются в шестнадцатеричном виде. Так их гораздо удобнее сравнивать на вид, а запись получается в четыре раза короче двоичной. Самые короткие хеши получаются при использовании Adler-32, CRC32 и других алгоритмов с длиной дайджеста 32 бита. Самые длинные — у SHA-512. Кроме них, существует с десяток других популярных хеш-функций, и большинство из них способно рассчитывать дайджесты промежуточной длины: 160, 224, 256 и 384 бита. Попытки создать функцию с увеличенной длиной хеша продолжаются, поскольку чем длиннее дайджест, тем больше разных вариантов может сгенерировать хеш-функция.
Предельный объем исходных данных, который может обработать хеш-функция, определяется формой их представления в алгоритме. Обычно они записываются как целое 64-битное число, поэтому типичный лимит составляет 264 бит минус единица, или два эксабайта. Такое ограничение пока не имеет практической значимости даже для очень крупных дата-центров.
Неповторимость — залог надежности
Уникальность хеша — одно из его ключевых свойств, определяющее криптостойкость системы шифрования. Дело в том, что число вариантов возможных паролей теоретически бесконечно, а вот число хешей всегда конечное, хоть и очень большое. Дайджесты любой хеш-функции будут уникальны лишь до определенной степени. Степени двойки, если быть точным. К примеру, алгоритм CRC32 дает множество всего из 232 вариантов, и в нем трудно избежать повторений. Большинство других функций использует дайджесты длиной 128 или 160 бит, что резко увеличивает число уникальных хешей — до 2’28 и 2160 соответственно.
Совпадение хешей от разных исходных данных (в том числе паролей) называют коллизией. Она может быть случайной (встречается на больших объемах данных) или псевдослучайной — используемой в целях атаки. На эффекте коллизии основан взлом разных криптографических систем — в частности, протоколов авторизации. Все они сначала считают хеш от введенного пароля или ключа, а затем передают этот дайджест для сравнения, часто примешивая к нему на каком-то этапе порцию псевдослучайных данных, или используют дополнительные алгоритмы шифрования для усиления защиты. Сами пароли нигде не сохраняются: передаются и сравниваются только их дайджесты. Здесь важно то, что после хеширования абсолютно любых паролей одной и той же функцией на выходе всегда получится дайджест одинакового и заранее известного размера.
Псевдореверс
Провести обратное преобразование и получить пароль непосредственно из хеша невозможно в принципе, даже если очистить его от соли, поскольку хеширование — это однонаправленная функция. Глядя на полученный дайджест, нельзя понять ни объем исходных данных, ни их тип. Однако можно решить сходную задачу: сгенерировать пароль с таким же хешем. Из-за эффекта коллизии задача упрощается: возможно, ты никогда не узнаешь настоящий пароль, но найдешь совершенно другой, дающий после хеширования по этому же алгоритму требуемый дайджест.
Методы оптимизации расчетов появляются буквально каждый год. Ими занимаются команды HashClash, Distributed Rainbow Table Generator и других международных проектов криптографических вычислений. В результате на каждое короткое сочетание печатных символов или вариант из списка типичных паролей хеши уже вычислены. Их можно быстро сравнить с перехваченным, пока не найдется полное совпадение.
Раньше на это требовались недели или месяцы процессорного времени, которые в последние годы удалось сократить до нескольких часов благодаря многоядерным процессорам и перебору в программах с поддержкой CUDA и OpenCL. Админы нагружают расчетами таблиц серверы во время простоя, а кто-то арендует виртуальный кластер в Amazon ЕС2.
Поиск хеша гуглом
Далеко не все сервисы готовы предоставить услугу поиска паролей по хешам бесплатно. Где-то требуется регистрация и крутится тонна рекламы, а на многих сайтах можно встретить и объявления об услуге платного взлома. Часть из них действительно использует мощные кластеры и загружает их, ставя присланные хеши в очередь заданий, но есть и обычные пройдохи. Они выполняют бесплатный поиск за деньги, пользуясь неосведомленностью потенциальных клиентов.
Вместо того чтобы рекламировать здесь честные сервисы, я предложу использовать другой подход — находить пары хеш — пароль в популярных поисковых системах. Их роботы-пауки ежедневно прочесывают веб и собирают новые данные, среди которых есть и свежие записи из радужных таблиц.
Как расшифровать хеш
Поэтому для начала просто напиши хеш в поисковой строке Google. Если ему соответствует какой-то словарный пароль, то он (как правило) отобразится среди результатов поисковой выдачи уже на первой странице. Единичные хеши можно погуглить вручную, а большие списки будет удобнее обработать с помощью скрипта BozoCrack
Искать XOR вычислять
Популярные алгоритмы хеширования работают настолько быстро, что к настоящему моменту удалось составить пары хеш — пароль почти для всех возможных вариантов функций с коротким дайджестом. Параллельно у функций с длиной хеша от 128 бит находят недостатки в самом алгоритме или его конкретных реализациях, что сильно упрощает взлом.
В девяностых годах крайне популярным стал алгоритм MD5, написанный Рональдом Ривестом. Он стал широко применяться при авторизации пользователей на сайтах и при подключении к серверам клиентских приложений. Однако его дальнейшее изучение показало, что алгоритм недостаточно надежен. В частности, он уязвим к атакам по типу псевдослучайной коллизии. Иными словами, возможно преднамеренное создание другой последовательности данных, хеш которой будет в точности соответствовать известному.
Поскольку дайджесты сообщений широко применяются в криптографии, на практике использование алгоритма MD5 сегодня приводит к серьезным проблемам. Например, с помощью такой атаки можно подделать цифровой сертификат х.509. В том числе возможна подделка сертификата SSL, позволяющая злоумышленнику выдавать свой фейк за доверенный корневой сертификат (СА). Более того, в большинстве наборов доверенных сертификатов легко найти те, которые по-прежнему используют алгоритм MD5 для подписи. Поэтому существует уязвимость всей инфраструктуры открытых ключей (PKI) для таких атак.
Изнурительную атаку перебором устраивать придется только в случае действительно сложных паролей (состоящих из большого набора случайных символов) и для хеш-функций с дайджестами большой длины (от 160 бит), у которых пока не нашли серьезных недостатков. Огромная масса коротких и словарных паролей сегодня вскрывается за пару секунд с помощью онлайн-сервисов.
Расшифровка хеша онлайн
1. Проект «Убийца хешей» существует уже почти восемь лет. Он помогает вскрыть дайджесты MD5, SHA-160 и NTLM. Текущее количество известных пар составляет 43,7 миллиона. На сайт можно загружать сразу несколько хешей для параллельного анализа. Пароли, содержащие кириллицу и символы других алфавитов, кроме английского, иногда находятся, но отображаются в неверной кодировке. Еще здесь проводится постоянный конкурс взлома паролей по их хешам и доступны утилиты для облегчения этой задачи — например, программы для объединения списков паролей, их переформатирования и устранения повторов.
Hash Killer не дружит с кириллицей, но знает кириллические пароли.
Расшифровка хэш онлайн
«Убийца хешей» нашел три пароля из пяти за пол секунды.
Расшифровать хеш онлайн
2. Крэк-станция поддерживает работу с хешами практически всех реально используемых типов. LM, NTLM, MySQL 4.1+, MD2/4/5 + MD5-half, SHA-160/224/256/384/512, ripeMD160 и Whirlpool. За один раз можно загрузить для анализа до десяти хешей. Поиск проводится по индексированной базе. Для MD5 ее объем составляет 15 миллионов пар (около 190 Гб) и еще примерно по 1,5 миллиона для каждой другой хеш-функции.
По уверениям создателей в базу включены из Англоязычной версии Википедии и большинство популярных паролей, собранных из общедоступных списков. Среди них есть и хитрые варианты со сменой регистра, литспиком, повтором символов, зеркалированием и прочими трюками. Однако случайные пароли даже из пяти символов становятся проблемой — в моем тесте половина из них не была найдена даже по LM-хешам.
3. CloudCracker бесплатный сервис мгновенного поиска паролей по хешам MD5 и SHA-1. Тип дайджеста определяется автоматически по его длине.
CloudCracker
Пока CloudCracker находит соответствия только хешам некоторых английских слов и распространенных паролей, вроде admin123. Даже короткие пароли из случайных наборов символов типа D358 он не восстанавливает по дайджесту MD5.
4. Сервис MD5Decode содержит базу паролей, для которых известны значения MD5. Он также показывает все остальные хеши, соответствующие найденному паролю: MD2, MD4, SHA (160-512), RIPEMD (128-320), Whirlpool-128, Tiger (128-192 в 3-4 прохода), Snefru-256, GOST, Adler-32, CRC32, CRC32b, FNV (132/164), JOAAT 8, HAVAL (128-256 в 3-5 проходов).
MD5Decode
Если число проходов не указано, то функция вычисляет хеш в один проход. Собственного поиска на сайте пока нет, но пароль или его хеш можно написать прямо в адресной строке браузера, добавив его после адреса сайта и префикса /encrypt/.
5. Проект с говорящим названием MD5Decrypt тоже позволяет найти соответствие только между паролем и его хешем MD5. Зато у него есть собственная база из 10 миллионов пар и автоматический поиск по 23 базам дружественных сайтов. Также на сайте имеется хеш-калькулятор для расчета дайджестов от введенного сообщения по алгоритмам MD4, MD5 и SHA-1.
MD5Decrypt
MD5Decrypt находит составные словарные пароли, но хеши на анализ при ни мает только по одному
6. Еще один сайт, MD5Lab получил хостинг у CloudFare в Сан-Франциско. Искать по нему пока неудобно, хотя база растет довольно быстро. Просто возьми на заметку.
Строго говоря, к хеш-функциям в криптографии предъявляются более высокие требования, чем к контрольным суммам на основе циклического кода. Однако эти понятия на практике часто используют как синонимы.
Универсальный подход
Среди десятка хеш-функций наиболее популярны MD5 и SHA-1, но точно такой же подход применим и к другим алгоритмам. К примеру, файл реестра SAM в ОС семейства Windows по умолчанию хранит два дайджеста каждого пароля: LM-хеш (устаревший тип на основе алгоритма DES) и NT-хеш (создается путем преобразования юникодной записи пароля по алгоритму MD4). Длина обоих хешей одинакова (128 бит), но стойкость LM значительно ниже из-за множества упрощений алгоритма.
Постепенно оба типа хешей вытесняются более надежными вариантами авторизации, но многие эту старую схему используют в исходном виде до сих пор. Скопировав файл SAM и расшифровав его системным ключом из файла SYSTEM, атакующий получает список локальных учетных записей и сохраненных для них контрольных значений — хешей.
Далее взломщик может найти последовательность символов, которая соответствует хешу администратора. Так он получит полный доступ к ОС и оставит в ней меньше следов, чем при грубом взломе с помощью банального сброса пароля. Напоминаю, что из-за эффекта коллизии подходящий пароль не обязательно будет таким же, как у реального владельца компьютера, но для Windows разницы между ними не будет вовсе. Как пела группа Bad Religion, «Cause to you I’m just a number and a clever screen name».
Аналогичная проблема существует и в других системах авторизации. Например, в протоколах WPA/WPA2, широко используемых при создании защищенного подключения по Wi-Fi. При соединении между беспроводным устройством и точкой доступа происходит стандартный обмен начальными данными, включающими в себя handshake. Во время «рукопожатия» пароль в открытом виде не передается, но в эфир отправляется ключ, основанный на хеш-функ-ции. Нужные пакеты можно перехватить, переключив с помощью модифицированного драйвера адаптер Wi-Fi в режим мониторинга. Более того, в ряде случаев можно не ждать момента следующего подключения, а инициализировать эту процедуру принудительно, отправив широковещательный запрос deauth всем подключенным клиентам. Уже в следующую секунду они попытаются восстановить связь и начнут серию «рукопожатий».
Сохранив файл или файлы с хендшейком, можно выделить из них хеш пароля и либо узнать сам пароль, либо найти какой-то другой, который точка доступа примет точно так же. Многие онлайн-сервисы предлагают провести анализ не только чистого хеша, но и файла с записанным хендшейком. Обычно требуется указать файл рсар и SSID выбранной точки доступа, так как ее идентификатор используется при формировании ключа PSK.
Проверенный ресурс CloudCracker о котором в последние годы писали все кому не лень, по-прежнему хочет за это денег. Gpuhash принимает биткоины. Впрочем, есть и бесплатные сайты с подобной функцией. Например, DarklRCop.
Пока с помощью онлайн-сервисов и радужных таблиц находятся далеко не все пары хеш — пароль. Однако функции с коротким дайджестом уже побеждены, а короткие и словарные пароли легко обнаружить даже по хешам SHA-160. Особенно впечатляет мгновенный поиск паролей по их дайджестам с помощью Гугла. Это самый простой, быстрый и совершенно бесплатный вариант.
Еще по теме: Cloudtopolis: Мощный инструмент для взлома хешей
♛ Хэши — hash паролей в базе данных Joomla 1.0 1.5 2.5 3.0 или как сбросить пароль администратора?
- Подробности
- Просмотров: 3781
Я постоянно забываю на том или ином сайте пароль администратора. Поэтому данные хеши очень часто мне здорово помогают.
При копировании хешей будьте внимательны — не копируйте пробелы – иначе пароль не сработает.
Так как пароли хранятся с использование хэша MD5 , который предотвращает восстановления пароля , вы не сможете восстановить существующий пароль , но вы можете сбросить его на новый пароль , отредактировав поле пароля в базе данных.
В следующих направлениях , вы установите пароль MD5 значение известное значение , а затем войдите в систему , используя пароль , который соответствует этому значению.
Используем такие как MySQL PHPMyAdmin.
1) Откройте нужную базу данных и выберите таблицу , ***_users . (префикс таблицы , ‘ ***_ ‘ может быть любым. )
Пароль, логин и адрес базы данных можно увидеть в файле конфигурации Joomla: configuration.php
2) Выберите запись (или строку таблицы ) для учетной записи администратора (как правило первую запись созданная по умолчанию) . Откройте ее и вставте любой из трех хешь пароля приведенного ниже (ВНИМАНИЕ БУДЬТЕ ВНИМАТЕЛЬНЫ НЕ КОПИРУЙТЕ ЛИШНИИ ПРОБЕЛЫ В НАЧАЛЕ ИЛИ В КОНЦЕ ХЕША):.
Пароль = «MD5 хеш пароля»
admin = 21232f297a57a5a743894a0e4a801fc3
secret = 5ebe2294ecd0e0f08eab7690d2a6ee69
OU812 = 7441de5382cf4fecbaa9a8c538e76783
3) Сохраните запись.
4) С помощью браузера на ваш сайт и войти в качестве администратора с помощью нового пароля.
5). Зайдя на сайт, Joomla не забудьте изменить пароль администратора на новый известный только вам – и содержащий не менее 8 символов.
- < Назад
- Вперёд >
Добавить комментарий
HASH-алгоритмы: что это такое, безопасность, использование и работа
Для чего используются хеши?
Криптографические хеши в основном используются для защиты паролей, а не для сохранения их в виде открытого текста в базе данных . Если вы когда-либо читали что-либо о хэш-функциях, скорее всего, это было об их основном использовании, защите паролей, чтобы избежать их хранения в виде открытого текста. Представим, что киберпреступники способны взломать сервис и украсть его базу данных, если бы пароли не были хешированы, их учетные данные были бы немедленно раскрыты.
Чтобы убедиться, что мы правильно ввели пароль, который хранится в базе данных (хэш ключа сохраняется), нужно применить алгоритм хеширования к введенному паролю и сравнить его с сохраненным, если это то же самое, ключ правильный, если другой, ключ неправильный. Эта процедура используется во всех операционных системах, на веб-сайтах с аутентификацией пользователя / пароля и т. Д.
Если вам когда-либо придется восстановить или повторно получить свой пароль из онлайн-службы, вам придется сбросить его, потому что даже сама служба не сможет предоставить вам пароль в открытом виде, а будет хранить только хэш пароля. . Если в какой-либо службе вы попросили восстановить пароль, и они предложили его вам в виде обычного текста, это означает, что они хранятся таким образом, и использовать эту службу небезопасно. Хотя типичные пароли 123456 имеют хорошо известные хэши, как только мы введем надежный ключ, его не будет в какой-либо онлайн-системе хеширования, и нам придется взламывать его самостоятельно с помощью таких инструментов, как Hashcat, среди прочих.
Не все алгоритмы хеширования предназначены для паролей, криптографические хеш-функции также используются для обнаружения вредоносных программ, их можно использовать для обнаружения различных песен или фильмов, защищенных авторскими правами, и создания черных списков. Это также публичные списки вредоносных программ , они известны как сигнатуры вредоносных программ, они состоят из хеш-значений полных или небольших частей вредоносного ПО. Таким образом, если, с одной стороны, пользователь обнаруживает подозрительный файл, он может обратиться к этим общедоступным базам данных хешей и, таким образом, узнать, является ли это вредоносный файл или он не представляет никакой опасности, в свою очередь, с помощью On the С другой стороны, они также служат для того, чтобы антивирус обнаруживал и блокировал вредоносные программы, сравнивая хэши своих собственных баз данных и общедоступных баз данных, о которых мы говорим.
Еще одно важное использование функций криптографического хеширования — обеспечить целостность сообщений . Их можно использовать для этой цели. проверять хэши, созданные до и после передачи данных Таким образом, если хэши полностью идентичны, это будет означать, что связь была безопасной и данные не были изменены, в противном случае что-то пошло не так, и данные, полученные в конце связи, не совпадают с те, что были выпущены в начале.
Теперь, когда мы знаем все о хэш-функциях, давайте посмотрим, какие из них сегодня используются наиболее часто.
SHA2
Изначально алгоритм SHA (алгоритм безопасного хеширования или алгоритм безопасного хеширования) был создан NSA и NIST с целью генерации хэшей или уникальных кодов на основе стандарта. В 1993 году родился первый протокол SHA, также названный SHA-0, но он почти не использовался и не оказал большого влияния. Пару лет спустя был выпущен более надежный и безопасный улучшенный вариант SHA-1, который в течение многих лет использовался для подписания цифровых сертификатов SSL / TLS для миллионов веб-сайтов. Спустя несколько лет был создан SHA-2, который имеет четыре варианта в зависимости от количества выходных битов: SHA2-224, SHA2-256, SHA2-384 и SHA2-512 . В настоящее время из соображений безопасности SHA1 больше не используется, но настоятельно рекомендуется использовать SHA2 или SHA3 (в семействе SHA).
Как работает SHA2
Алгоритмы хеширования работают только в одном направлении: мы можем сгенерировать хэш любого контента или отпечаток пальца, но с помощью хеша или отпечатка пальца нет возможности сгенерировать исходный контент. Единственный способ сделать это — использовать словарь или грубую силу, поэтому получение исходной информации может занять тысячи лет (в настоящее время).
Среди множества различных способов создания хэшей алгоритм SHA2-256 является одним из наиболее часто используемых благодаря своему балансу между безопасностью и скоростью, это очень эффективный алгоритм и имеет высокую устойчивость к коллизиям, что очень важно для поддержания безопасности. . этого алгоритма хеширования. Чтобы алгоритм хеширования был безопасным, не должно быть известно о коллизиях. Например, метод проверки биткойнов основан на SHA2-256.
Характеристики различных типов SHA2
- Выходной размер : это размер символов, которые образуют хеш.
- Размер внутреннего состояния : это внутренняя хеш-сумма после каждого сжатия блока данных.
- Размер блока : размер блока, обрабатываемого алгоритмом.
- Максимальное сообщение size: это максимальный размер сообщения, к которому мы применяем алгоритм.
- Word длина: это длина в битах операции, применяемой алгоритмом в каждом раунде.
- Взаимодействия или раунды : это количество операций, которые алгоритм выполняет для получения окончательного хеша.
- Поддерживаемые операции : это операции, выполняемые алгоритмом для получения окончательного хеша.
SHA-256
Он имеет 256-битный выходной размер, 256-битный размер внутреннего состояния, 512-битный размер блока, максимальный размер сообщения, который он может обработать, составляет 2 64 — 1, длина слова составляет 32 бита, а количество примененных раундов — 64, а также операции, применяемые к хешу: +, и, или, xor, shr и rot. Длина хэша всегда одинакова, независимо от того, насколько велик контент, который вы используете для генерации хэша: будь то всего одна буква или образ ISO 4 ГБ, результатом всегда будет последовательность из 40 букв и цифр.
SHA2-384
Этот алгоритм отличается по характеристикам, но принцип его действия такой же. Он имеет размер вывода 384 бит, размер внутреннего состояния 512 бит, размер блока 1024 бит, максимальный размер сообщения, который он может обработать, составляет 2 128 — 1, длина слова — 64 бита, количество примененных раундов — 80, а также операции, применяемые к хешу: +, и, или, xor, shr и rot. Этот алгоритм является более безопасной версией, чем SHA2-256, поскольку применяется больше раундов операций, и он также может применяться к более обширной информации. Этот алгоритм хеширования обычно используется для проверки целостности и подлинности сообщений в виртуальных частных сетях. Отрицательным моментом является то, что он несколько медленнее, чем SHA2-256, но в определенных обстоятельствах это может быть очень хорошим вариантом для его использования.
SHA2-512
Как и во всех SHA2, операция одинакова, они меняют только одну характеристику. Его выходной размер составляет 512 бит. Все остальные функции такие же, как у SHA2-384. 512 бит размера внутреннего состояния, 1024 бит размера блока, 2 128 — 1 для максимального размера сообщения, 64 бита длины слова и 80 — количества раундов, примененных к нему. Этот алгоритм также применяет одни и те же операции к каждому раунду +, и, или, xor, shr и rot.
SHA2-224
Мы не комментировали этот алгоритм как основной, потому что его старший брат (SHA2-256) используется гораздо чаще, поскольку вычислительная разница между ними смехотворна, а SHA2-256 гораздо более стандартизирован. Мы упоминаем об этом, потому что, по крайней мере, до сих пор для этого алгоритма не было обнаружено коллизий, что делает его безопасным и удобным вариантом.
В следующей таблице мы сможем гораздо лучше проверить различия между всеми алгоритмами на основе их характеристик.
Вы увидите, что MD5, SHA-0 и SHA-1 алгоритмы хеширования ранее фигурировали в таблице, мы их исключили, потому что, хотя они использовались очень давно, коллизии уже обнаружены и использовать их уже небезопасно , поэтому в настоящее время используются SHA2 во всех его вариантах и SHA3.
Чтобы прояснить концепцию столкновения и правильно ее понять, мы объясняем, что в вычислениях столкновение хешей это ситуация, которая возникает, когда два разных входа в хеш-функцию производят одинаковый результат.
SHA-3
SHA3 - это новейший алгоритм хеширования семейства SHA, он был опубликован NISH в 2015 году, но пока не получил широкого распространения. Хотя он принадлежит к одному семейству, его внутренняя структура совершенно другая. Этот новый алгоритм хеширования основан на «Конструкция из губки . » Конструкция этой губки основана на случайной функции или случайной перестановке данных, она позволяет вводить любой объем данных и генерировать любой объем данных, кроме того, функция является псевдослучайной по отношению ко всем предыдущим записям. Это позволяет SHA-3 иметь большую гибкость, цель состоит в том, чтобы заменить SHA2 в типичном TLS или VPN протоколы, которые используют этот алгоритм хеширования для проверки целостности данных и их подлинности.
SHA-3 был родился как альтернатива SHA2, но не потому, что использование SHA-2 небезопасно, а потому, что они хотели иметь план B в случае успешной атаки против SHA2, таким образом, как SHA-2, так и SHA-3 будут сосуществовать. Фактически, много лет SHA-3 не используется массово, как SHA-2.
Эксплуатация и характеристики
SHA-3 использует конструкцию «губки», данные «впитываются» и обрабатываются для отображения вывода желаемой длины. На этапе поглощения данных используется операция XOR, которая затем преобразуется в функцию перестановки. SHA-3 позволяет нам иметь дополнительные биты информации, чтобы защитить хеш-функцию от атак расширения, что происходит с MD5, SHA-1 и SHA-2. Другой важной особенностью является то, что он очень гибкий, что позволяет тестировать криптоаналитические атаки и использовать его в легких приложениях. В настоящее время SHA2-512 в два раза быстрее, чем SHA3-512, но последний может быть реализован с помощью аппаратного обеспечения, что тогда может быть таким же быстрым и даже быстрее.
KDF хэш-алгоритмы
Разница между KDF (функция деривации ключа) а функция хеширования пароля состоит в том, что длина с KDF отличается, тогда как функция хеширования пароля всегда будет иметь одинаковую длину вывода. В зависимости от того, хэшируем ли мы ключи шифрования или пароли, хранящиеся в базе данных, рекомендуется использовать одни или другие алгоритмы хеширования. Например, в случае сохраненных паролей рекомендуется, чтобы алгоритм хеширования занимал время, например, 5 секунд для вычисления, но тогда это очень надежно и очень дорого для взлома.
Менее опытные разработчики, которые не знакомы со всеми возможностями алгоритмов хеширования KDF, будут думать, что универсальные односторонние, фиксированные по длине и устойчивые к коллизиям криптографические хеш-функции, такие как SHA2-256 или SHA2-512, лучше, не задумываясь дважды о возможная проблема, которая у них может быть. Проблема с хешами фиксированной длины в том, что они быстрые, что позволяет злоумышленнику очень быстро взломать пароль с помощью мощного компьютера. Хэши переменной длины работают медленнее, это идеально для взломщиков паролей, чтобы получить больше времени.
Криптосообщество объединилось, чтобы представить функции хеширования, разработанные специально для паролей, в которые включена «стоимость». Ключевые функции деривации также были разработаны с учетом «затрат». Основываясь на функциях получения ключей на основе паролей и функциях хеширования, разработанных специально для паролей, сообщество разработало различные алгоритмы для использования в защите паролей.
Наиболее популярные алгоритмы защиты паролей:
- Аргон2 (KDF)
- scrypt (KDF)
- Bcrypt
- PBKDF2 (KDF)
Основное различие между KDF и функцией хеширования паролей состоит в том, что длина KDF произвольна, а типичные хэши паролей, такие как MD5, SHA-1, SHA2-256, SHA2-512, имеют на выходе фиксированную длину.
Для хранения паролей угроза состоит в том, что база данных ключей просочится в Интернет, а взломщики паролей по всему миру работают с хэшами базы данных для восстановления паролей.
Взяв в качестве примера хранение паролей в базе данных, когда мы входим в систему для доступа к веб-сайту, всегда необходимо, чтобы хеширование ключа выполнялось быстро, чтобы не пришлось ждать, не имея доступа, но это предполагает, что проблема в том, что его можно взломать быстрее, особенно если мы будем использовать мощность графических процессоров вместе с Hashcat.
bcrypt, sha256crypt, sha512crypt и PBKDF2
В следующей таблице представлено сравнение нескольких широко используемых алгоритмов хеширования с соответствующей стоимостью в одной таблице. Вы увидите, что зеленая строка выделена там, где возможный рабочий фактор может означать потратить 0.5 секунды на хеширование пароля, что является довольно хорошей взаимосвязью, и красная строка, где возможный рабочий фактор может означать потратить полные 5 секунд на создание пароля. ключ шифрования, что плохо сказывается на эффективности.
Обратите внимание, что для bcrypt это означает, что для хеширования пароля коэффициент 13 обеспечит стоимость примерно 0.5 секунды для шифрования пароля, а коэффициент 16 приблизит затраты примерно на 5 секунд для создания пароля на основе ключа. Для sha256crypt, sha512crypt и PBKDF2 это примерно 640,000 5,120,000 и XNUMX XNUMX XNUMX итераций соответственно.
Scrypt
Когда мы думаем о переходе на scrypt, это потому, что все становится немного сложнее. С bcrypt, sha256crypt, sha512crypt и PBKDF2 наша стоимость полностью равна CPU / ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР коэффициент загрузки, чем выше мощность обработки, тем выше эффективность алгоритма. Плохо то, что они по-прежнему становятся жертвами специализированных ПЛИС и ASIC. Для борьбы с этим может быть включена стоимость памяти. С scrypt у нас будет стоимость как процессора, так и Оперативная память.
В следующей таблице вы можете увидеть сравнение с различными значениями стоимости.
Эти тесты проводились с однопроцессорным четырехъядерным ЦП, была предпринята попытка ограничить стоимость «p» до 1, 2 и 4. Использование ОЗУ также было ограничено и, таким образом, не было необходимости прерывать остальные. текущие действия, которые выполнялись. Следовательно, стоимость «r» была ограничена 4, 8 и 16, умноженными на 128 байтов (512 байтов, 1024 байта и 2048 байтов).
argonxnumx
Argon2 имеет две разные версии: Argon2d и Argon2i; первый зависит от данных (d), а второй не зависит от данных (i). Первый должен быть устойчивым к GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР взламывание, в то время как последний должен быть устойчивым к атакам по сторонним каналам. Другими словами, Argon2d подойдет для хеширования паролей , В то время Argon2i подойдет для получения ключей шифрования. .
У Argon2 есть стоимость ЦП и стоимость ОЗУ, оба обрабатываются отдельно. Стоимость ЦП обрабатывается стандартными итерациями, как в случае с bcrypt или PBKDF2, а стоимость ОЗУ обрабатывается за счет специального увеличения памяти. Когда началось тестирование этого алгоритма, было обнаружено, что простое управление итерациями в конечном итоге очень похоже на bcrypt, но, в свою очередь, на общее время, затрачиваемое на вычисление хэша, можно повлиять, просто манипулируя памятью. Было обнаружено, что сочетание этих двух итераций влияет на стоимость ЦП больше, чем на стоимость ОЗУ, но на обе приходится значительная доля времени вычислений, как можно увидеть в таблицах ниже. Как и в случае с scrypt, он также имеет стоимость распараллеливания, которая определяет количество потоков, над которыми вы хотите работать:
Примечание, которое следует учитывать в этом процессе параметризации, заключается в том, что стоимость ОЗУ варьируется от 256 КиБ до 16 МиБ, в дополнение к количеству итераций и стоимости подсчета процессора. По мере увеличения объема оперативной памяти, используемой для параметризации, мы можем снизить стоимость итерации. Поскольку нам нужно больше потоков для работы с хешем, мы можем еще больше сократить эту итерацию. Таким образом, две рассматриваемые концепции приводят к тому, что независимо друг от друга вы пытаетесь выделить 0.5 секунды для интерактивного входа в систему с паролем и полные 5 секунд для получения ключа шифрования на основе пароля.
Заключение
Мы можем резюмировать использование этих алгоритмов хеширования следующим образом: при хешировании паролей, либо для хранения их на диске, либо для создания ключей шифрования, следует использовать криптографические коды на основе паролей, специально разработанные для решения данной проблемы. Не следует использовать какие-либо хэш-функции общего назначения из-за их скорости. Кроме того, им не следует реализовывать собственный алгоритм «растягивания ключа», такой как рекурсивное хеширование дайджеста пароля и дополнительных выходных данных.
Следовательно, если мы примем во внимание, что если алгоритм был разработан специально для обработки паролей, а стоимость достаточна для покрытия потребностей, модели угроз и злоумышленника, то мы можем без сомнения сказать, что мы делаем это хорошо. . На самом деле, мы не ошибемся, если выберем любой из них, мы просто должны четко понимать, как мы собираемся его использовать, чтобы избежать любого алгоритма, который специально не предназначен для паролей, что повысит безопасность. их.
Теперь у вас есть четкое представление о том, какие алгоритмы используются сегодня, мы объяснили работу каждого алгоритма и даже затраты на обработку, чтобы мы могли четко понимать, какой из них использовать в зависимости от ситуации. Стало ясно, что все они используются для четкой общей цели, нашей защиты, как фиксированные алгоритмы, основанные на хэшах, так и переменные, используются для защиты информации, поскольку, как вы знаете, информация — это сила. Благодаря им наши пароли, файлы и передача данных защищены от любого внешнего агента, который хочет их узнать.
Как использовать хэш пароля PHP password_hash
Каждый в конечном итоге добавит модуль входа в систему при создании приложения PHP. Учетная запись и пароль пользователя будут храниться в базе данных и использоваться для аутентификации пользователя при входе в систему.
Исправьте перед сохранением пароляХеш-пароль
очень важно. Хешированный пароль является односторонним необратимым, хеш-значение представляет собой строку фиксированной длины, и исходный пароль не может быть выведен в обратном направлении. Это означает, что вы можете хэшировать другую строку паролей, чтобы сравнить, являются ли они одним и тем же паролем, не зная исходного пароля. Если вы не хешируете пароль, то когда неавторизованная третья сторона входит в вашу базу данных, вся информация об учетной записи пользователя будет видна сразу. Некоторые пользователи могут (к сожалению) использовать тот же пароль на других сайтах. Поэтому мы должны обратить внимание на вопрос безопасности данных.
Пароль должен бытьЛечение солью
, Соль относится к добавлению случайных подстрок перед хешированием. Это сделано для предотвращения «взлома словаря» или «радужной коллизии» (база данных паролей, в которой могут храниться универсальные хэши, которые можно использовать для обратного вывода паролей).
Хеширование и соление очень важны, потому что во многих случаях пользователи предпочитают использовать один и тот же пароль в разных службах, а безопасность пароля очень низкая.
К счастью, в PHP это легко сделать.
Используйте password_hash для хеширования пароля
password_hash
Функция была представлена в PHP 5.5. Эта функция теперь использует самый мощный алгоритм шифрования BCrypt, который в настоящее время поддерживается PHP. Конечно, в будущем эта функция будет поддерживать больше алгоритмов шифрования. Появление библиотеки password_compat предназначено для поддержки PHP> = 5.3.7.
В следующем примере мы хэшируем строку и сравниваем ее с новым значением хеш-функции. Поскольку две строки, которые мы использовали, различны («секретный пароль» и «неверный пароль»), вход в систему не выполнен.
<?php
require 'password.php';
$passwordHash = password_hash('secret-password', PASSWORD_DEFAULT);
if (password_verify('bad-password', $passwordHash)) {
} else {
}
password_hash () позаботился о добавлении соли для вас. Добавленная случайная подстрока автоматически сохраняется алгоритмом шифрования и становится частью хэша.
password_verify () извлечет из него случайные подстроки, поэтому вам не нужно использовать другую базу данных для записи этих случайных подстрок.
http://php.net/function.password-hash
There is a compatibility pack available for PHP versions 5.3.7 and later, so you don’t have to wait on version 5.5 for using this function. It comes in form of a single php file:
https://github.com/ircmaxell/password_compat
WordPress Password Hash Generator | USEO Tools
Генератор хэшей паролей WordPress
Введите пароль или щелкните значок обновления, чтобы сгенерировать случайный пароль.
Что такое WordPress и хеш паролей WordPress?
Что ж, WordPress хорошо знает очень популярную CMS с открытым исходным кодом (систему управления контентом), которую используют миллионы людей во всем мире. Он популярен благодаря простому в использовании пользовательскому интерфейсу и множеству тем и плагинов. Темы WordPress позволяют пользователю быстро изменять внешний вид / дизайн веб-сайта без какого-либо опыта программирования, а темы WordPress могут использоваться для расширения функциональности WordPress. Пароль WordPress хранится в базе данных в виде хэшей для безопасности, что означает, что они не хранятся в текстовом формате, потому что если сайт WordPress взломан, злоумышленник может легко прочитать все пароли пользователя, поэтому движок WordPress использует передовой алгоритм хеширования для генерации другого хеша. для каждого пароля, так что злоумышленник не сможет прочитать его, даже если получит в руки базу данных сайта.
Что такое генератор хеширования паролей WordPress от Useotools?
Что ж, генератор хэшей паролей WordPress от Useotools находится в сети. инструмент click, который может мгновенно сгенерировать хэш для любого пароля, если вы разработчик и хотите изменить свой пароль WordPress по некоторым причинам, например, вы забыли пароль панели администратора, вам просто нужно ввести новый пароль в нашем инструменте или нажать кнопку обновления значок, чтобы сгенерировать для вас случайный пароль, и нажмите кнопку сгенерировать хеш, затем он сгенерирует хеш для вас, после этого вы можете скопировать хеш, щелкнув значок копирования слева, или выберите хеш с помощью мыши и скопируйте его, а затем вставьте в свою базу данных WordPress. Следует отметить, что этот инструмент генерирует хеш только для WordPress v3, v4. v5 и более новые версии.
Сопутствующие инструменты.
Односторонний путь к усиленной безопасности
Суть аутентификации состоит в том, чтобы предоставить пользователям набор учетных данных, таких как имя пользователя и пароль, и убедиться, что они предоставляют правильные учетные данные всякий раз, когда они хотят получить доступ к приложению. Следовательно, нам нужен способ сохранить эти учетные данные в нашей базе данных для будущих сравнений. Однако хранение паролей на стороне сервера для аутентификации — сложная задача. Давайте рассмотрим один из механизмов, который делает хранение паролей безопасным и простым: хеширование.
Хранение паролей рискованно и сложно
Простым подходом к хранению паролей является создание таблицы в нашей базе данных, которая сопоставляет имя пользователя с паролем. Когда пользователь входит в систему, сервер получает запрос на аутентификацию с полезной нагрузкой, содержащей имя пользователя и пароль. Мы ищем имя пользователя в таблице и сравниваем предоставленный пароль с сохраненным паролем. Соответствие дает пользователю доступ к приложению.
Уровень безопасности и отказоустойчивость этой модели зависит от того, как хранится пароль.Самый простой, но также и наименее безопасный формат хранения паролей — это открытый текст .
Как пояснил Дэн Корнелл из Denim Group, открытый текст относится к «читаемым данным, переданным или сохраненным в открытом виде », например, в незашифрованном виде. Возможно, вы также видели термины plaintext и plain text . Какая разница? Согласно Корнеллу, открытый текст относится к данным, которые будут служить входными данными для криптографического алгоритма, в то время как простой текст относится к неформатированному тексту, например, к содержимому обычного текстового файла или .txt
. По мере продвижения вперед важно понимать разницу между этими терминами.
Хранение паролей в виде открытого текста эквивалентно их записи на листе цифровой бумаги. Если злоумышленник проникнет в базу данных и украдет таблицу паролей, он сможет получить доступ к каждой учетной записи пользователя. Эта проблема усугубляется тем фактом, что многие пользователи повторно используют или используют варианты одного пароля, потенциально позволяя злоумышленнику получить доступ к другим службам, отличным от того, который подвергается взлому.Все это звучит как кошмар безопасности!
Атака могла исходить изнутри организации. Инженер-мошенник, имеющий доступ к базе данных, может злоупотребить этим правом доступа, получить учетные данные в открытом виде и получить доступ к любой учетной записи.
Более безопасный способ сохранить пароль — преобразовать его в данные, которые нельзя преобразовать обратно в исходный пароль. Этот механизм известен как хеширование . Давайте узнаем больше о теории хеширования, его преимуществах и ограничениях.
«Мы должны защищать учетные записи пользователей как от внутреннего, так и от внешнего несанкционированного доступа. Хранение открытого текста никогда не должно быть вариантом для паролей. Хеширование и« соление »всегда должны быть частью стратегии управления паролями».
Твитнуть это
О чем хеширование?
По словарному определению, хеширование означает «измельчение чего-либо на мелкие кусочки», чтобы это выглядело как «беспорядок». Это определение тесно связано с тем, что представляет собой хеширование в вычислениях.
В криптографии хеш-функция — это математический алгоритм, который отображает данные любого размера в битовую строку фиксированного размера. Мы можем ссылаться на вход функции как на , сообщение или просто как на вход. Вывод строковой функции фиксированного размера известен как хэш или дайджест сообщения . Как указано в OWASP, хэш-функции, используемые в криптографии, обладают следующими ключевыми свойствами:
- Вычислить хэш легко и практично, но «трудно или невозможно повторно сгенерировать исходный ввод, если известно только хеш-значение.
- Трудно создать начальный ввод, который соответствовал бы конкретному желаемому результату.
Таким образом, в отличие от шифрования, хеширование является односторонним механизмом. Хешированные данные не могут быть практически «нехешированы».
Обычно используемые алгоритмы хеширования включают алгоритмы дайджеста сообщений (MDx), такие как MD5, и алгоритмы безопасного хеширования (SHA), такие как SHA-1 и семейство SHA-2, которое включает широко используемый алгоритм SHA-256. Далее мы узнаем о силе этих алгоритмов и о том, что некоторые из них устарели из-за быстрого развития вычислительной техники или вышли из употребления из-за уязвимостей в системе безопасности.
В биткойнах для обеспечения целостности и цепочки блоков используется алгоритм SHA-256 в качестве базовой криптографической хеш-функции. Давайте посмотрим на пример хеширования с использованием SHA-256 и Python.
Если вы хотите продолжить, вы можете использовать онлайн-среду Python repl.it, чтобы легко запускать сценарии Python.
IDE Python repl.it предоставляет редактор кода для ввода кода Python, кнопки для сохранения или запуска сценария и консоль для визуализации вывода сценария.
В редакторе кода введите следующую команду, чтобы импортировать метод конструктора хеш-алгоритма SHA-256 из модуля hashlib
:
from hashlib import sha256
В строке ниже создайте экземпляр sha256
class:
h = sha256 ()
Затем используйте метод update ()
для обновления хеш-объекта:
h.update (b'python1990K00L ')
Затем используйте метод hexdigest ()
, чтобы получить дайджест строки, переданной методу update ()
:
hash = h.hexdigest ()
Дайджест — это результат хэш-функции.
Наконец, распечатайте хэш-переменную
, чтобы увидеть хеш-значение в консоли:
print (hash)
Полный сценарий выглядит так:
from hashlib import sha256
h = sha256 ()
часобновление (b'python1990K00L ')
хэш = h.hexdigest ()
print (hash)
Чтобы запустить сценарий, нажмите кнопку «запустить» вверху экрана. На консоли вы должны увидеть следующий вывод:
d1e8a70b5ccab1dc2f56bbf7e99f064a660c08e361a35751b9c483c88943d082
Напомним, вы предоставляете хэш-функцию в виде строки
0: вход
03 представляет собой входную строку 9113, которая представляет собой 9113, хэшированную строку в качестве входных данных.
python1990K00L
Хэш (SHA-256):
d1e8a70b5ccab1dc2f56bbf7e99f064a660c08e361a35751b9c483c88943d0000 2
строка
hashing 900Получили следующий хеш?
11a4a60b518bf24989d481468076e5d5982884626aed9faeb35b8576fcd223e1
«Понимание блокчейнов и криптовалют, таких как биткойн, становится проще, если вы понимаете, как работают криптографические хеш-функции».
Tweet This
Используя SHA-256, мы преобразовали ввод произвольного размера в битовую строку фиксированного размера. Обратите внимание, как, несмотря на разницу в длине между python1990K00L
и python
, каждый ввод создает хэш одинаковой длины.Почему это?
Используя hexdigest ()
, вы создали шестнадцатеричное представление хеш-значения. Для любого ввода каждый дайджест сообщения в шестнадцатеричном формате содержит 64 шестнадцатеричных цифры. Каждая пара цифр представляет собой байт. Таким образом, дайджест имеет 32 байта. Поскольку каждый байт содержит 8 бит информации, всего хеш-строка представляет 256 бит информации. По этой причине этот алгоритм называется SHA-256, и все его входные данные имеют выход равного размера.
Некоторые хэш-функции широко используются, но их свойства и требования не обеспечивают безопасности.Например, проверка циклическим избыточным кодом (CRC) - это хэш-функция, используемая в сетевых приложениях для обнаружения ошибок, но она не устойчива к предварительному изображению, что делает ее непригодной для использования в приложениях безопасности, таких как цифровые подписи.
В этой статье мы собираемся изучить свойства, которые делают хеш-функцию подходящей для использования в приложениях безопасности. Для начала мы должны знать, что даже если бы мы нашли подробности того, как входные данные криптографической хеш-функции вычисляются в хеш-функции, для нас было бы непрактично возвращать хеш обратно во входные данные.Почему это?
Криптографические хеш-функции практически необратимы
Хеш-функции ведут себя как односторонние функции, используя математические операции, которые чрезвычайно сложно и громоздко возвращать, например, оператор по модулю.
Оператор по модулю дает нам остаток от деления. Например, 5 mod 3
равно 2
, поскольку остаток от 5/3
равен 2
с использованием целочисленного деления. Эта операция является детерминированной, поскольку один и тот же ввод всегда дает одинаковый вывод: математически 5/3
всегда дает 2
.Однако важной характеристикой операции по модулю является то, что мы не можем найти исходные операнды с учетом результата. В этом смысле хеш-функции необратимы.
Знание того, что результатом операции по модулю является 2
, говорит нам только о том, что x
, деленное на y
, имеет напоминание 2
, но ничего не говорит нам о x
и y
. Существует бесконечное количество значений, которые можно заменить на x
и y
на x mod y
, чтобы вернуть 2
:
7 mod 5 = 2
9 мод 7 = 2
2 мод 3 = 2
10 мод 8 = 2
...
При использовании криптографической хеш-функции мы не должны иметь возможность найти прообраз , просматривая хэш . Предварительное изображение - это то, что мы называем значением, которое создает определенный конкретный хэш при использовании в качестве входных данных для хеш-функции - значение открытого текста. Следовательно, криптографическая хеш-функция предназначена для защиты от атак с предварительным изображением; это должно быть , устойчивое к прообразу . Таким образом, если злоумышленник знает хэш, с вычислительной точки зрения невозможно найти какой-либо ввод, который хеширует этот заданный вывод.Это свойство делает хеширование одной из основ биткойнов и блокчейнов.
Если вам интересно, как работает хеш-функция, эта статья в Википедии предоставляет все подробности о том, как работает Secure Hash Algorithm 2 (SHA-2).
Небольшое изменение имеет большое влияние
Еще одним достоинством безопасной хеш-функции является то, что ее результат нелегко предсказать. Хэш для dontpwnme4
будет сильно отличаться от хеша для dontpwnme5
, даже если изменился только последний символ в строке, и обе строки будут соседними в алфавитно отсортированном списке:
Ввод:
dontpwnme4
Hash (SHA-256):
4420d1918bbcf7686defdf9560bb5087d20076de5f77b7cb4c3b40bf46ec428b
Вход:
dontpwnme5
Hash (SHA-256) :
3fc79ff6a81da0b5fc62499d6b6db7dbf1268328052d2da32badef7f82331dd6
Вот сценарий Python используется для расчета этих значений в случае необходимости:
из hashlib import sha256
h = sha256 ()
часобновление (b '')
хэш = h.hexdigest ()
print (hash)
Замените
на нужную строку для хеширования и запустите ее на repl.it.
Это свойство известно как лавинный эффект, и оно имеет желаемый эффект, заключающийся в том, что при незначительном изменении входа значительно изменяется выход.
Следовательно, у нас нет реального способа определить, какой хэш dontpwnme6
будет основан на двух предыдущих хэшах; вывод не последовательный.
Использование криптографического хеширования для более безопасного хранения паролей
Необратимые математические свойства хеширования делают его феноменальным механизмом для сокрытия паролей в состоянии покоя и в движении. Еще одно важное свойство, делающее хэш-функции подходящими для хранения паролей, - это их детерминированность.
Детерминированная функция - это функция, которая при одном и том же вводе всегда производит одинаковый вывод. Это жизненно важно для аутентификации, поскольку нам нужна гарантия того, что данный пароль всегда будет давать один и тот же хэш; в противном случае было бы невозможно последовательно проверять учетные данные пользователя с помощью этого метода.
Чтобы интегрировать хеширование в рабочий процесс хранения паролей, при создании пользователя вместо хранения пароля в открытом виде мы хешируем пароль и сохраняем имя пользователя и пару хешей в таблице базы данных. Когда пользователь входит в систему, мы хэшируем отправленный пароль и сравниваем его с хешем, связанным с предоставленным именем пользователя. Если хешированный пароль и сохраненный хеш совпадают, у нас есть действующий логин. Важно отметить, что мы никогда не сохраняем пароль в открытом виде в процессе, мы его хэшируем, а затем забываем.
В то время как передача пароля должна быть зашифрована, хэш пароля не нужно шифровать при хранении. При правильной реализации хеширование паролей является криптографически безопасным. Эта реализация будет включать использование соли для преодоления ограничений хэш-функций.
Уникальность - ключевое свойство солей; длина помогает уникальности.
Ограничения хеш-функций
Хеширование кажется довольно надежным.Но если злоумышленник взламывает сервер и крадет хэши паролей, все, что он может увидеть, - это данные произвольного вида, которые не могут быть преобразованы в открытый текст из-за архитектуры хеш-функций. Злоумышленнику потребуется предоставить входные данные хеш-функции для создания хеш-кода, который затем можно будет использовать для аутентификации, которая может выполняться в автономном режиме, не поднимая никаких красных флажков на сервере.
Затем злоумышленник может либо украсть пароль в открытом виде у пользователя с помощью современных методов фишинга и спуфинга, либо попробовать атаку методом перебора , при которой злоумышленник вводит случайные пароли в хэш-функцию до тех пор, пока не будет найден соответствующий хэш.
Атака полным перебором в значительной степени неэффективна, поскольку выполнение хэш-функций может быть настроено на довольно длительное время. Это повышение скорости хеширования будет объяснено более подробно позже. Есть ли у злоумышленника другие варианты?
Поскольку хеш-функции детерминированы (один и тот же ввод функции всегда приводит к одному и тому же хешу), если несколько пользователей будут использовать один и тот же пароль, их хеш будет идентичным. Если значительное количество людей сопоставлено с одним и тем же хешем, это может быть индикатором того, что хеш представляет собой часто используемый пароль, и позволяет злоумышленнику значительно сузить количество паролей, которые можно использовать для взлома с помощью грубой силы.
Кроме того, с помощью атаки на радужную таблицу злоумышленник может использовать большую базу данных предварительно вычисленных цепочек хэшей, чтобы найти входные данные украденных хэшей паролей. Хеш-цепочка - это одна строка в радужной таблице, хранящаяся как начальное значение хеш-функции и конечное значение, полученное после многих повторных операций с этим начальным значением. Поскольку атака радужной таблицы должна пересчитывать многие из этих операций, мы можем смягчить атаку радужной таблицы, усилив хеширование с помощью процедуры, которая добавляет уникальные случайные данные к каждому входу в момент их сохранения.Эта практика известна как , добавляющая соль к хешу , и она дает хэшей паролей с солью .
С солью хеш не основан только на значении пароля. Ввод состоит из пароля и соли. Радужная таблица строится для набора несоленых хешей. Если каждый прообраз содержит уникальное значение, которое невозможно угадать, радужная таблица бесполезна. Когда злоумышленник овладевает солью, радужная таблица теперь должна быть пересчитана, что в идеале заняло бы очень много времени, дополнительно смягчая этот вектор атаки.
«Уловка состоит в том, чтобы гарантировать, что усилия по« взлому »хеширования превышают ценность, которую злоумышленники получат, сделав это. Ничего из этого не о« невзламываемости »; усилие." - Troy Hunt
Нет нужды в скорости
По словам Джеффа Этвуда, «хэши, используемые для обеспечения безопасности, должны быть медленными». Криптографическая хеш-функция, используемая для хеширования паролей, должна быть медленной для вычисления, потому что быстро вычисляемый алгоритм может сделать атаки с использованием грубой силы более осуществимыми, особенно с быстро развивающейся мощностью современного оборудования.Мы можем добиться этого, сделав вычисление хэша медленным, используя множество внутренних итераций или увеличив объем памяти для вычислений.
Медленная криптографическая хеш-функция затрудняет этот процесс, но не останавливает его, так как скорость вычисления хеш-функции влияет как на благонамеренных, так и на злонамеренных пользователей. Важно достичь хорошего баланса скорости и удобства использования для функций хеширования. Пользователь с благими намерениями не окажет заметного влияния на производительность при попытке единственного действительного входа в систему.
Атаки коллизий не рекомендуют хэш-функции
Поскольку хеш-функции могут принимать входные данные любого размера, но создавать хеши, которые являются строками фиксированного размера, набор всех возможных входов бесконечен, а набор всех возможных выходов конечен. Это позволяет отображать несколько входов на один и тот же хэш. Следовательно, даже если бы мы смогли отменить хэш, мы не знали бы наверняка, что результатом был выбранный вход. Это называется столкновением, и это нежелательный эффект.
Криптографическая коллизия возникает, когда два уникальных входа производят один и тот же хэш. Следовательно, атака коллизии - это попытка найти два предварительных изображения, которые производят один и тот же хэш. Злоумышленник может использовать эту коллизию, чтобы обмануть системы, которые полагаются на хешированные значения, путем подделки действительного хэша с использованием неверных или вредоносных данных. Следовательно, криптографические хеш-функции также должны быть устойчивы к атакам на основе коллизий, так как злоумышленникам будет очень сложно найти эти уникальные значения.
Источник: Объявление о первой коллизии SHA1 (Google)
«Поскольку входные данные могут иметь бесконечную длину, а хэши - фиксированной длины, коллизии возможны. Несмотря на статистически очень низкий риск коллизий, коллизии имеют были найдены в часто используемых хэш-функциях ".
Tweet This
Для простых алгоритмов хеширования простой поиск в Google позволит нам найти инструменты, которые преобразуют хэш обратно в его ввод в виде открытого текста.Сегодня алгоритм MD5 считается вредоносным, и Google объявил о первом конфликте SHA1 в 2017 году. Оба алгоритма хеширования были сочтены небезопасными для использования и не рекомендованы Google из-за возникновения криптографических конфликтов.
Google рекомендует использовать более сильные алгоритмы хеширования, такие как SHA-256 и SHA-3. Другие варианты, обычно используемые на практике, - это bcrypt
, scrypt
и многие другие, которые вы можете найти в этом списке криптографических алгоритмов. Однако, как мы выяснили ранее, одного хеширования недостаточно, и его следует сочетать с солями.Узнайте больше о том, как добавление соли к хешированию - лучший способ хранения паролей.
Краткое содержание
Давайте резюмируем то, что мы узнали из этой статьи:
- Основная цель хеширования - создать отпечаток данных для оценки целостности данных.
- Функция хеширования принимает произвольные входные данные и преобразует их в выходные данные фиксированной длины.
- Чтобы считаться криптографической хэш-функцией, хеш-функция должна быть устойчивой к предварительному изображению и стойкой к конфликтам.
- Из-за радужных таблиц одного хеширования недостаточно для защиты паролей для массового использования. Чтобы смягчить этот вектор атаки, хеширование должно включать использование криптографических солей.
- Хеширование паролей используется для проверки целостности вашего пароля, отправленного во время входа в систему, по сохраненному хешу, так что ваш фактический пароль никогда не нужно сохранять.
- Не все криптографические алгоритмы подходят для современной индустрии. На момент написания этой статьи Google сообщил, что MD5 и SHA-1 уязвимы из-за коллизий.Семейство SHA-2 является лучшим вариантом.
Упрощение управления паролями с помощью Auth0
С помощью Auth0 вы можете минимизировать накладные расходы на хеширование, добавление соли и управление паролями. Мы решаем самые сложные случаи использования удостоверений с помощью расширяемой и простой в интеграции платформы, которая обеспечивает безопасность миллиардов входов в систему каждый месяц.
Auth0 помогает предотвратить попадание важных идентификационных данных в чужие руки. Мы никогда не храним пароли в открытом виде. Пароли всегда хешируются и обрабатываются с помощью bcrypt.Кроме того, предлагается шифрование данных в состоянии покоя и при передаче с использованием TLS с как минимум 128-битным шифрованием AES. Мы встроили в наш продукт самую современную систему безопасности, чтобы защитить ваш бизнес и ваших пользователей.
Сделайте Интернет безопаснее, зарегистрируйте бесплатную учетную запись Auth0 сегодня.
Пароли и взлом: объяснение жаргона хеширования, соления и SHA-2 | Данные и компьютерная безопасность
Хакеры со всего мира украли личную информацию от Yahoo, MySpace и TalkTalk до Эшли Мэдисон и Adult Friend Finder.
Но с каждым взломом возникает большой вопрос, насколько хорошо сайт защищает данные своих пользователей. Был ли он открыт и доступен в свободном доступе или был хэширован, защищен и практически не взломан?
От открытого текста до хешированного, соленого, приправленного и зашифрованного - вот что на самом деле означает непонятный жаргон защиты паролей.
Терминология
Обычный текст
Когда что-то описывается как «открытый текст» или «простой текст», это означает, что этот объект находится в открытом виде в виде простого текста - без защиты, кроме простого контроля доступа в базу данных, которая его содержит.
Если у вас есть доступ к базе данных, содержащей пароли, вы можете прочитать их так же, как вы можете прочитать текст на этой странице.
Хеширование
Когда пароль был «хеширован», это означает, что он был превращен в зашифрованное представление самого себя. Берется пароль пользователя, и - с использованием ключа, известного сайту - хеш-значение получается из комбинации пароля и ключа с использованием заданного алгоритма.
Для проверки правильности пароля пользователя он хешируется, а значение сравнивается с сохраненным в записи при каждом входе в систему.
Вы не можете напрямую превратить хешированное значение в пароль, но вы можете определить, что это за пароль, если вы постоянно генерируете хэши из паролей, пока не найдете подходящий, так называемая атака грубой силы или аналогичные методы.
Salting
Пароли часто называют «хешированными и солеными». Соль - это просто добавление уникальной случайной строки символов, известной только сайту, к каждому паролю до его хеширования, обычно эта «соль» помещается перед каждым паролем.
Значение соли должно храниться на сайте, что означает, что иногда сайты используют одну и ту же соль для каждого пароля. Это делает его менее эффективным, чем использование индивидуальных солей.
Использование уникальных солей означает, что общие пароли, общие для нескольких пользователей, такие как «123456» или «пароль», не сразу раскрываются, когда идентифицируется один такой хешированный пароль, потому что, несмотря на то, что пароли одинаковы, соленые и хешированные ценности нет.
Большие соли также защищают от определенных методов атаки на хеши, включая радужные таблицы или журналы хешированных паролей, ранее взломанных.
И хеширование, и засаливание можно повторять более одного раза, чтобы повысить сложность взлома защиты.
Peppering
Криптографам нравятся их приправы. «Перец» похож на соль - значение, добавляемое к паролю перед хешированием, но обычно помещается в конце пароля.
Существует две разновидности перца. Первый - это просто известное секретное значение, добавляемое к каждому паролю, что полезно только в том случае, если оно не известно злоумышленнику.
Вторая - это значение, которое генерируется случайным образом, но никогда не сохраняется. Это означает, что каждый раз, когда пользователь пытается войти на сайт, он должен попробовать несколько комбинаций алгоритма перца и хеширования, чтобы найти правильное значение перца и сопоставить значение хеш-функции.
Даже при небольшом диапазоне неизвестного значения перца проба всех значений может занять несколько минут на попытку входа в систему, поэтому используется редко.
Шифрование
Шифрование, как и хеширование, является функцией криптографии, но главное отличие состоит в том, что шифрование можно отменить, а хеширование - нет.Если вам нужно получить доступ к исходному тексту, чтобы изменить его или прочитать, шифрование позволяет защитить его, но все же прочитать после расшифровки. Хеширование нельзя отменить, что означает, что вы можете узнать, что представляет собой хеш, только сопоставив его с другим хешем того, что, по вашему мнению, является той же информацией.
Если такой сайт, как банк, просит вас подтвердить определенные символы вашего пароля, а не вводить его целиком, он шифрует ваш пароль, поскольку он должен расшифровать его и проверить отдельные символы, а не просто сопоставить весь пароль с сохраненным хэш.
Зашифрованные пароли обычно используются для вторичной проверки, а не в качестве основного фактора входа в систему.
Шестнадцатеричное
Шестнадцатеричное число, также известное как «шестнадцатеричное» или «основание 16», представляет собой способ представления значений от нуля до 15 с использованием 16 отдельных символов. Цифры 0-9 представляют значения от нуля до девяти, а a, b, c, d, e и f представляют 10-15.
Они широко используются в вычислительной технике как удобный для человека способ представления двоичных чисел.Каждая шестнадцатеричная цифра представляет четыре бита или полбайта.
Алгоритмы
MD5
Первоначально разработанный как алгоритм криптографического хеширования, впервые опубликованный в 1992 году, MD5, как было показано, имеет значительные недостатки, которые позволяют относительно легко взломать его.
Его 128-битные хеш-значения, которые довольно легко получить, чаще используются для проверки файлов, чтобы убедиться, что загруженный файл не был подделан. Его не следует использовать для защиты паролей.
SHA-1
Secure Hash Algorithm 1 (SHA-1) - алгоритм криптографического хеширования, первоначально разработанный Агентством национальной безопасности США в 1993 году и опубликованный в 1995 году.
Он генерирует 160-битное хеш-значение, которое обычно отображается как 40-значное шестнадцатеричное число. По состоянию на 2005 год SHA-1 уже считался небезопасным, поскольку экспоненциальный рост вычислительной мощности и сложных методов означал, что можно было выполнить так называемую атаку на хэш и получить исходный пароль или текст, не тратя миллионы на вычисления. ресурс и время.
SHA-2
Преемник SHA-1, Secure Hash Algorithm 2 (SHA-2), представляет собой семейство хеш-функций, которые создают более длинные хеш-значения с 224, 256, 384 или 512 битами, записанные как SHA- 224, SHA-256, SHA-384 или SHA-512.
Впервые он был опубликован в 2001 году, снова разработан АНБ, и эффективная атака против него еще не продемонстрирована. Это означает, что SHA-2 обычно рекомендуется для безопасного хеширования.
SHA-3, хотя и не является заменой SHA-2, был разработан не АНБ, а Гвидо Бертони, Джоан Дэемен, Микаэль Петерс и Жиль Ван Аше из STMicroelectronics and Radboud University в Неймегене, Нидерланды.Он был стандартизирован в 2015 году.
Bcrypt
По мере увеличения вычислительной мощности количество попыток грубой силы, которые хакер может сделать для эффективного алгоритма хеширования, увеличилось в геометрической прогрессии.
Bcrypt, основанный на шифре Blowfish и включающий в себя соль, разработан для защиты от атак методом грубой силы, намеренно замедляя работу. Он имеет так называемый рабочий фактор, который эффективно пропускает ваш пароль через определенное количество раундов расширения, прежде чем он будет хеширован.
При увеличении коэффициента работы требуется больше времени для подбора пароля и сопоставления хэша. Теория состоит в том, что владелец сайта устанавливает достаточно высокий рабочий коэффициент, чтобы уменьшить количество предположений, которые современные компьютеры могут сделать для пароля, и увеличить время с дней или недель до месяцев или лет, что делает это непомерно затратным по времени и дорогостоящим.
PBKDF2
Функция получения ключа на основе пароля 2 (PBKDF2), разработанная RSA Laboratories, представляет собой еще один алгоритм расширения ключа, который затрудняет перебор хэшей.Считается, что при определенном значении использовать грубую силу несколько проще, чем Bcrypt, потому что для запуска алгоритма требуется меньше памяти компьютера.
Scrypt
Scrypt, такой как Bcrypt и PBKDF2, представляет собой алгоритм, который расширяет ключи и затрудняет атаку грубой силы на хэш. Однако, в отличие от PBKDF2, scrypt спроектирован так, чтобы использовать либо большой объем компьютерной памяти, либо выполнять множество дополнительных вычислений во время работы.
Для законных пользователей, которым необходимо хешировать только один пароль, чтобы проверить, соответствует ли он сохраненному значению, затраты незначительны.Но для кого-то, кто пытается перепробовать 100 000 паролей, это требует гораздо больших затрат или занимает слишком много времени.
А как насчет паролей?
Если пароль правильно хеширован с использованием SHA-2 или новее и имеет соленый вид, то для взлома пароля требуется атака грубой силой.
Чем длиннее пароль, тем дольше будет продолжаться атака полным перебором. И чем дольше требуется атака полным перебором, тем больше времени и дороже требуется сопоставление хэша и обнаружение пароля.
Это означает, что чем длиннее пароль, тем лучше, но конфигурация пароля также имеет значение. По-настоящему случайный восьмизначный пароль будет более безопасным, чем восьмибуквенное словарное слово, потому что при атаках методом грубой силы словари, имена и другие списки слов используются как корм.
Однако, если сайт хранит ваш пароль в виде обычного текста, не имеет значения, как долго будет ваш пароль, если база данных будет украдена.
Лексикон хакеров: что такое хеширование паролей?
Цифровые мегавыступления в последнее время стали настолько обычным явлением, что их практически невозможно различить по шкале тревог: в один день у одной социальной сети украдено сто миллионов паролей, а в следующий - еще несколько сотен миллионов.Все становится удручающим пятном. Но не все проблемы с паролями одинаково опасны. А разница между Трехмильным островом и Хиросимой иногда сводится к загадочной ветви криптографии: хешированию.
Когда хакеры взламывают компанию, чтобы получить доступ к ее коллекции паролей пользователей, то, что они находят и крадут, не сохраняется в форме, доступной для чтения людям - по крайней мере, если у компании есть хотя бы видимость безопасности. Вместо этого кэш паролей часто преобразуется в набор криптографических хэшей, случайных строк символов, в которые пароли были математически преобразованы, чтобы предотвратить их неправильное использование.Это преобразование называется хешированием. Но то, какому типу хеширования подверглись эти пароли, может означать разницу между ворами, заканчивающими зашифрованным текстом, на расшифровку которого уходят годы, или успешным «взломом» этих хэшей за дни или часы, чтобы преобразовать их обратно в используемые пароли, готовые получить доступ к вашим конфиденциальные аккаунты.
Хэш предназначен для работы как «односторонняя функция»: математическая операция, которую легко выполнить, но очень сложно отменить. Как и другие формы шифрования, он превращает читаемые данные в зашифрованный шифр.Но вместо того, чтобы позволить кому-то расшифровать эти данные с помощью определенного ключа, как это делают обычные функции шифрования, хэши не предназначены для дешифрования. Вместо этого, когда вы вводите свой пароль на веб-сайте, он просто снова выполняет тот же хеш и сравнивает результаты с хешем, который он создал для вашего пароля, когда вы его выбрали, проверяя действительность пароля без необходимости хранить сам конфиденциальный пароль.
«Хеш обычно принимает входные данные, что-то с ними делает, а то, что получается, выглядит как случайные данные», - говорит Йенс «Атом» Штойб, создатель популярной программы для взлома хеш-кодов Hashcat.«Когда вы снова вводите те же данные, полученные данные будут точно такими же. И именно так служба узнает, что ввод был правильным».
Сильный и слабый хэш
Теоретически никто, ни хакер, ни даже сама веб-служба, не должны иметь возможность брать эти хэши и преобразовывать их обратно в пароли. Но на практике некоторые схемы хеширования значительно труднее отменить, чем другие. Например, коллекция из 177 миллионов учетных записей LinkedIn, украденных в 2012 году и выставленных на продажу на темном веб-рынке на прошлой неделе, была фактически хэширована.Но компания использовала только простую функцию хеширования под названием SHA1 без дополнительных мер защиты, что позволило легко взломать почти все хешированные пароли. В результате хакеры смогли не только получить доступ к паролям, но и опробовать их на других веб-сайтах, что, вероятно, привело к тому, что Марк Цукерберг взломал свои учетные записи Twitter и Pinterest на выходных.
Напротив, взлом на краудфандинговом сайте Patreon в прошлом году выявил пароли, которые были хэшированы с помощью гораздо более надежной функции, называемой bcrypt, которая, вероятно, обеспечивала относительную безопасность полного кеша, несмотря на нарушение.По словам Рика Редмана, тестера на проникновение в компании KoreLogic, который проводит конкурс по взлому паролей на ежегодной хакерской конференции Defcon. «Сила хэша - в страховом полисе. Он показывает, сколько времени у пользователей есть на смену паролей после взлома данных, прежде чем они пострадают», - говорит Редман. «Если это просто SHA1, окна нет ... Если это bcrypt, у вас есть время сбежать и сменить все свои пароли».
Чтобы увидеть разницу между этими схемами хеширования, подумайте, как работает взлом пароля: хакеры не могут отменить хешированный пароль, созданный с помощью такой функции, как SHA1.Но они могут просто попытаться угадать пароли и запустить их с помощью той же функции. Когда они находят подходящий хэш, они знают, что выбрали правильный пароль. Программа взлома хэшей, работающая с большой базой данных хэшей, может угадывать многие миллионы или миллиарды возможных паролей и автоматически сравнивать результаты со всей коллекцией украденных хешированных паролей для поиска совпадений.
Что такое хеширование паролей? | NordPass
Этот год, мягко говоря, не был удачным для информационной безопасности - 2019 год станет худшим годом для утечки данных за всю историю наблюдений.И неудивительно, почему. Сообщения о серьезных недостатках безопасности в некоторых из крупнейших технологических компаний мира выходят каждые две недели.
Только в этом году два технологических гиганта признали наличие серьезных недостатков безопасности в своих системах. Facebook признал, что хранит пароли миллионов пользователей Instagram в виде простого текста. Несколько месяцев спустя Google раскрыл то же самое о своих пользователях G Suite. Но почему хранить пароли в виде простого текста так важно? И как их хранить?
Если пароли хранятся в виде обычного текста, любой, у кого есть внутренний доступ, может их увидеть.Не говоря уже о том, что если база данных будет взломана, хакеры также увидят учетные данные в открытом виде. Таким образом, любая компания, которая следует хотя бы элементарным правилам безопасности, никогда не будет хранить ваши пароли в своей базе данных.
Вместо этого, когда вы входите в свою учетную запись, ваш пароль преобразуется в сложную строку символов с использованием алгоритмов хеширования паролей. Затем хешированный пароль сравнивается с другими хэшами в базе данных компании. Если хэш пароля совпадает, вам предоставляется доступ к вашей учетной записи.
Но как именно хеширование работает? Хеширование - это односторонняя функция шифрования данных: он берет читаемый текст и преобразует его в совершенно другую строку символов с заданной длиной.
Однако, в отличие от других алгоритмов шифрования, преобразующих данные, хеширование практически невозможно отменить. Так что, если хакеры завладеют базой данных с хешированными паролями, расшифровка хэша будет бесполезной задачей. Тем не менее, у киберпреступников есть и другие способы узнать исходный пароль.
Взлом хеша
Самая большая проблема с хешированием паролей состоит в том, что если вы прогоните определенное слово, например «зеленый», через алгоритм хеширования, результат хеширования для этого слова всегда будет одинаковым. Допустим, киберпреступники завладевают базой данных с хешированными паролями. Никто не мешает им угадать миллионы паролей и прогнать их по одному и тому же алгоритму, чтобы увидеть, как выглядит хеш для определенного слова.
Теперь хакеры не просто используют грубую силу (пытаясь угадать все возможные комбинации паролей).Они основывают его на так называемых «атаках по словарю» - с использованием общих слов и вероятных комбинаций, таких как «пароль123». Теперь хакеры могут использовать «радужные таблицы» - предварительно вычисленные хэш-базы данных для наиболее распространенных паролей.
Сильный и слабый хеш
Вот почему существуют разные типы хеширования. Например, такие алгоритмы хеширования, как SHA1 и MD5, считаются устаревшими и их не так сложно взломать. Теперь хеш-функции, такие как bcrypt, SHA2 и Argon2, не просто хешируют пароль один раз.Они делают это тысячи раз, чтобы гарантировать, что вы не сможете отследить его до исходного пароля. Вот почему NordPass использует bcrypt для хеширования учетных данных при входе в систему - это одна из самых безопасных функций хеширования.
Чтобы сделать процесс хеширования еще более безопасным, есть приправы, а точнее «соль» и «перец». «Соли» означают, что к вашему паролю добавляются несколько случайных символов, даже не известных вам, и они обрабатываются функцией хеширования. «Перчик» работает аналогично, но пароль и «перец» проходят через функцию вместе.
Ограничения хэш-функций
Есть несколько ограничений для хеш-функций, например, хеш-коллизии. Это когда два разных входа имеют одинаковый результат хеширования. Однако вероятность коллизии в большинстве алгоритмов хеширования чрезвычайно мала, особенно в современных функциях, поэтому это не должно вызывать большого беспокойства.
В заключение, вы не всегда можете сказать, насколько надежна функция, используемая вашим поставщиком услуг, поэтому обязательно используйте надежные пароли. Вы можете создать безопасный пароль с помощью генератора паролей NordPass.Тем не менее, как показывают примеры Google и Facebook, иногда ваши учетные данные открыты в виде обычного текста, поэтому никогда не дублируйте и свои пароли. Мы понимаем, что запомнить все эти пароли практически невозможно, поэтому вы всегда можете использовать менеджер паролей NordPass.
Хеширование паролей 😇. Приготовьтесь к взлому | Мартин Тома
Когда происходит утечка учетных данных, по сути, это большая таблица с именами пользователей и (надеюсь) хешированными паролями. Если вы применили один и тот же алгоритм ко всем паролям, вы можете увидеть, у каких пользователей одинаковые пароли.Дополнительная информация, такая как имена пользователей, использование платформы или другие атаки, такие как фишинг, может привести к получению информации об этих паролях.
Чтобы противостоять таким атакам взлома пароля, к паролю добавляется строка. Эта строка генерируется случайным образом для каждого пользователя. Строка хранится рядом с паролем. Единственная причина иметь эту строку - сделать так, чтобы один и тот же простой текстовый пароль имел разные хеш-значения.
Вычисление ключа из пароля, который затем может быть сохранен, теперь стало немного сложнее: нам нужен пароль, функция хеширования, случайная соль для каждого пользователя, а иногда даже несколько раундов хеширования.Есть много возможностей ошибиться. Кроме того, что вы делаете для перехода от одной хеш-функции к другой? Что вы делаете, чтобы увеличить количество раундов по мере улучшения оборудования?
Вы наверняка не хотите заставлять пользователей всегда вводить новый пароль. Вы хотите, чтобы пользователи могли мигрировать с течением времени.
Функция вывода ключей, реализованная в пакете Pythons werkzeug, с регулируемой вычислительной сложностью, такая как PBKDF2, - ваш друг. Это функция, которая принимает пароль, хеш-функцию, соль и количество раундов.Возвращает ключ. В большинстве языков программирования у вас есть две функции:
generate_key (пароль, хеш-функция, длина соли) -> ключ
check_key (пароль, ключ)
В качестве примера:
>>> из werkzeug.security import generate_password_hash as gen_key
>>> ключ = gen_key ( "Foobar", "PBKDF2: sha512: 1000", salt_length = 8) >>> ключ
'PBKDF2: sha512: 1000 $ qc8Q9uqK $ 4f28daacb10dea6667e00c866607073b7a740817e8c4a267c1cedd05cf36cbdf609b14cf446d73d76819f37a3e0475160d444a4fab39526e72aca611960e4c77' >>> из werkzeug.security import check_password_hash as check_key
>>> check_key (key, "foobar")
True
Вы можете видеть, что первая часть метода содержит все параметры, необходимые для метода. Это означает, что его легко расширить. Вторая часть (разделенная символом доллара) - это 8 символов соли. Затем идет пароль, который хешируется с использованием данного метода и соли.
Есть и другие ключевые производные функции. В первую очередь, scrypt, который был не только требователен к процессору, но и требует много памяти.Для Python есть библиотека passlib, которая предлагает множество функций хеширования и функций вывода ключей. Однако, похоже, не слишком распространенным (источник). Вместо этого вы можете создать нечто подобное самостоятельно, используя основные функции Python, такие как hashlib.scrypt
. Заслуживающей внимания ключевой функцией вывода является Argon2.
Давайте составим контрольный список. Если вы разработчик, я надеюсь, вы можете поставить отметку рядом с ними:
☑ Я не храню пароли в виде обычного текста.
☑ Я не использую шифрование паролей.
☑ Я не использую некриптографическую хеш-функцию (например, CRC-32,)
☑ Я не использую слабую криптографическую хеш-функцию (например, MD5, SHA-1)
☑ Я использую другую, случайно вычисляемую соль для каждого пользователя для расчета хешей.
Как пользователь, я надеюсь, что вы можете отметить следующие пункты:
☑ Я не использую пароли повторно. Всегда.
☑ Я не сообщаю свои пароли.
☑ Я не использую слабые пароли.
☑ Я стараюсь не разглашать свои секреты.
☑ Я знаю о фишинге.(Если нет - пост в блоге последует)
Как разработчик, вы можете предотвратить некоторые ошибки пользователя с помощью политики паролей. Например, сделав обязательным наличие не менее 8 символов и, возможно, перед тем, как разрешить пароль, можно выполнить простую атаку по словарю. Однако я бы не стал устанавливать правила для паролей. XKCD 936 объясняет, почему.
Что такое хеширование паролей (и как оно работает)?
Если вы, как и я, часто заходите в Интернет, есть большая вероятность, что вы получили электронное письмо примерно такого вида:
Уважаемый покупатель,
Недавно наш сайт стал жертвой кибератаки на нашу корпоративную сеть.Все пароли были зашифрованы, но в качестве меры предосторожности мы требуем от всех наших клиентов немедленно сбросить свои пароли.
Спасибо.
Итак, произошла утечка информации, в том числе зашифрованный пароль. Ваша учетная запись в опасности?
Краткий ответ: ДА, но почему?
Чтобы понять это, вы должны понимать концепцию «хеширования паролей».
Что такое хеш?
Хеш - это просто способ представить любые данные в виде уникальной строки символов.Вы можете хешировать что угодно: музыку, фильмы, свое имя или эту статью. Образно говоря, хеширование - это способ присвоения «имени» вашим данным. Это позволяет вам взять ввод любой длины и превратить его в строку символов, которая всегда имеет одинаковую длину. Очевидно, для этого существует множество методов (алгоритмов).
Несколько самых популярных алгоритмов хеширования:
- MD5 - Для любых данных будет возвращен уникальный 32-символьный хэш.
- SHA1 - Для любых данных будет возвращен уникальный 40-символьный хэш.
- SHA256 - Для любых данных будет возвращен уникальный 64-символьный хэш; разработан Агентством национальной безопасности.
Давайте посмотрим на простой пример:
Меня зовут «Джамин Беккер»
Хеш-представление моего имени в MD5:
eeb7048c69b088739908f5f5144cd1f5
Хеш-представление моего имени SHA1:
ae480b717c08b6ab36a85075864e35b9c528d7c5
Хэш-представление моего имени SHA256:
a477cc14eae5fd94fe4cb20b36ec80ac6983bad44973ae7f4f230010f01289b0
Почему хеширование безопасно?
Причина, по которой хеширование является безопасным, проста: хеширование - это односторонняя операция.Их нельзя отменить. Учитывая строку «eeb7048c69b088739908f5f5144cd1f5», невозможно отменить хеш MD5, чтобы вернуть «Jamin Becker». Это связано с тем, как математики и программисты структурировали алгоритм хеширования MD5, и он возвращает нас к фундаментальной проблеме информатики под названием «P vs NP». P и NP - это всего лишь два класса алгоритмов.
Большинство алгоритмов хеширования относятся к NP, что означает, что их можно быстро вычислить. Однако алгоритмы нехеширования (например, «eeb7048c69b088739908f5f5144cd1f5» -> «Джамин Беккер») подпадают под класс P и могут быть эффективно решены только за полиномиальное время (т.е.e с использованием квантового компьютера, значительно более продвинутого, чем те, которые доступны сегодня).
Так почему это хорошо для безопасности?
Допустим, вы подписались на веб-сайт и выбрали пароль «12345». Этот веб-сайт сразу же хеширует ваш пароль, вероятно, с помощью SHA1, и сохранит его в базе данных. Теперь каждый раз, когда вы входите в систему, веб-сайт будет повторно кодировать ваш пароль и сравнивать его с паролем, хранящимся в базе данных. Если они совпадают, вы будете успешно аутентифицированы. В случае взлома веб-сайта и утечки базы данных паролей ваш пароль будет отображаться как «8cb2237d0679ca88db6464eac60da96345513964», а не «12345».
Стратегии хэш-атак
Итак, у злоумышленника есть хешированная версия моего пароля, и нет никакого способа изменить его на 12345. Мне не о чем беспокоиться, верно? НЕПРАВИЛЬНЫЙ!
Один из методов, который обычно используется для получения пароля в виде простого текста из хэша, называется атакой грубой силы. В этой атаке злоумышленник просматривает гигантский список слов и хеширует каждое слово с помощью соответствующего алгоритма хеширования. Затем они могут сравнить хэши в списке слов с теми, которые они получили из базы данных.Если хеш из списка слов совпадает с хешем в базе данных, они могут просто найти соответствующий простой текстовый пароль в исходном хешированном списке слов. Опытные злоумышленники будут использовать чрезвычайно большие списки слов в сочетании с мощным программным обеспечением, чтобы перебирать миллионы возможных паролей в секунду.
Другой метод атаки пытается использовать сам алгоритм хеширования, создавая конфликт хеширования. Конфликт хэша возникает, когда два разных набора данных разрешаются в один и тот же хэш, и хотя это случается редко, он может быть смертельным.Это позволит злоумышленнику сгенерировать строку символов, которая не является вашим паролем, но все же сможет войти в вашу учетную запись, поскольку она генерирует тот же хэш.
Заключение
Алгоритмы хеширования становятся все более совершенными. Математики и компьютерные ученые постоянно разрабатывают алгоритмы криптографического хеширования с более низкой вероятностью коллизий. Однако важно помнить, что независимо от того, насколько силен алгоритм хеширования, его всегда можно взломать с помощью атаки грубой силы.Хорошей новостью является то, что вы можете легко защититься от этих атак, просто следуя передовой политике паролей.
- Размер имеет значение - чем длиннее исходный пароль, тем меньше вероятность, что он появится в списке слов
- Не будьте предсказуемы - избегайте таких слов, как «пароль» и «myname123».
- Используйте сочетание специальных символов, цифр, прописных и строчных букв
Что вы думаете о хешировании? Поделитесь своим мнением в комментарии ниже.
Изображение предоставлено: увеличительное стекло, отпечаток пальца в Интернете, автор: BigStockPhot
Эта статья полезна?
да
Нет
Джамин Беккер
Джамин Беккер - студент, изучающий информатику, с очень широким кругом интересов в этой области. Он имеет опыт работы в области системного администрирования и компьютерной безопасности, а также имеет опыт работы с несколькими языками программирования.Он заядлый пользователь Linux и большую часть своей разработки делает на платформе ArchLinux. У него также есть опыт работы в среде домена Windows, и он хорошо знаком с Windows Server 2008/2012. В свободное время он любит работать над проектами программирования, связанными с разработкой алгоритмов.
Что такое соль и как она делает хеширование паролей более безопасным?
Массовая утечка данных LinkedIn в 2012 году продолжает быть источником страданий для организации и ее пользователей.Согласно официальному блогу LinkedIn, в 2012 году компания стала жертвой несанкционированного доступа, в результате которого были раскрыты пароли участников. Хотя в то время немедленный ответ LinkedIn включал обязательный сброс пароля для всех учетных записей, которые, по их мнению, были скомпрометированы, в мае 2016 года LinkedIn снова уведомили о том, что во время того же 2012 года кража, электронная почта и хешированные комбинации паролей были у более 100 миллионов участников LinkedIn. скомпрометирован. Впоследствии LinkedIn аннулировал пароли для всех учетных записей, созданных до 2012 года.
LinkedIn хранит пароли с алгоритмом хеширования, но без применения соли или других дополнительных мер безопасности. Эксперты по безопасности не считают такой подход безопасным. Эти старые алгоритмы используют простые хэши, которые можно легко взломать за считанные минуты с помощью множества инструментов, доступных в Интернете.
Как работает хеширование паролей?
Когда пользователь впервые создает учетную запись на веб-сайте, пароль пользователя хешируется и сохраняется во внутренней файловой системе в зашифрованном виде.Когда пользователь впоследствии входит на веб-сайт, введенный пользователем хэш пароля сопоставляется с хешем пароля, хранящимся во внутренней системе. Если хеш совпадает, пользователю предоставляется доступ. Если проверка хэша не удалась, пользователь не сможет войти на сайт.
Поскольку эти хеш-таблицы разработаны, чтобы быть быстрыми, но не обязательно безопасными, любой хакер может использовать различные инструменты, доступные в Интернете, для быстрого восстановления паролей из этих простых хэшей. В настоящее время существует множество различных способов взлома хэшей паролей, а именно атаки по словарю, атаки методом перебора, таблицы поиска, таблицы обратного просмотра и радужные таблицы.В бэкэнд-системе простые хешированные пароли выглядят следующим образом -
.
хэш ( «letmein») = 0xf73bo1230k35n72nj523dtg9l4n2k6n24nv7i73gf36hf4ow9d4k4c2nm6m
хэш ( «12345678») = 4h5g2c9d0a34lk1k3n0sd8sdl4h54nm9g76dsj3n5ksb38j5ls93md0l3hz9d2
хэш ( «бейсбол») = 3n52k5kcn5kv9cma83ja83d430dm9c83m6n20cj67gb7ksnf8dgsmg056vm
хэш ( «letmein») = 0xf73bo1230k35n72nj523dtg9l4n2k6n24nv7i73gf36hf4ow9d4k4c2nm6m
Обратите внимание, что в приведенном выше примере хеш-значения для двух пользователей с паролем letmein идентичны.
Что такое соль?
Все вышеупомянутые механизмы для взлома хэша возможны, потому что каждый раз, когда хешируется строка открытого текста, она генерирует точно такое же хешированное значение. Например, если злоумышленник хеширует значение «letmein», он сгенерирует то же значение, что и значение, хранящееся в бэкэнд-системе для другого пользователя с паролем «letmein». Злоумышленники используют заранее вычисленные таблицы, созданные мощными компьютерами, которые вводят все возможные значения в алгоритм хеширования. Эти столы также можно приобрести.Используя эти таблицы, злоумышленник может перекрестно ссылаться на украденное хешированное значение (например, пароль) и выполнить обратный поиск, чтобы определить исходное значение.
Чтобы добавить дополнительный уровень безопасности, необходимо добавить случайность к исходному значению открытого текста перед хешированием, чтобы оно не генерировало каждый раз одно и то же значение хеширования. Рандомизация этих хэшей путем добавления или добавления случайной строки, известной как соль, может значительно усложнить злоумышленнику использование таблиц поиска или радужных таблиц для взлома этих паролей за счет увеличения возможных хешированных значений, которые может иметь каждый пароль.Если у каждого пользователя есть уникальная соль, это также делает пароль невосприимчивым к обратному поиску. Внутренняя файловая система, которая имеет хешированные пароли с солью, будет выглядеть следующим образом -
хэш ( «letmein» + «F34564R8») = 8f3k9j3hdk98jk30lsvn9al30lfb48slhbtwe9uka903bwj380dsfj3v2nf930nk3
хэш ( «letmein» + «Y456f3q9») = ber5jg0qhekgl8dkjhl52309uwlkmcbkuw385b9smqnv9c234calq95nf34flql
хэш ( «letmein» + «56hwF3h8») = w2lkg034fmwprm80n59fdmal40djwbel46n32ldn2la9702nd772ha95lg06j
Теперь для каждого пользователя с паролем letmein существует свое хешированное значение.
Как максимально использовать хеширование с использованием соли
- Убедитесь, что соль уникальна для каждого пользователя и для каждого пароля. Использование десяти различных солей повышает безопасность хешированных паролей за счет увеличения вычислительной мощности, необходимой для создания таблиц поиска, в десять раз. Если соль хранится отдельно от пароля, злоумышленнику также сложно реконструировать пароль. Однако для наивысшего уровня защиты используйте уникальную соль, генерируемую для одного и того же пользователя каждый раз, когда она меняет свой пароль.
- В идеале каждая соль должна иметь длинное значение соли, по крайней мере, той же длины, что и результат хэша. Если выходной сигнал используемой хеш-функции составляет 256 бит или 32 байта, длина солт-значения должна быть не менее 32 байтов. Наряду с длинными паролями со специализированными символами этот подход должен обеспечивать необходимую безопасность паролей пользователей.
- Не используйте имена пользователей в качестве значений соли. Поскольку имена пользователей часто предсказуемы и повторно используются пользователем для различных служб, использование имен пользователей в качестве значений соли не так безопасно, как использование несвязанного значения для соли.Кроме того, часто используемые имена пользователей, такие как «admin» и «root», можно легко найти и использовать для взлома этих хэшей.
- Используйте криптографически безопасный генератор псевдослучайных чисел для объединения значений, используемых для хеширования паролей.