Я не могу вам точно ответить "как" ... но, судя по публикациям, всё несколько сложнее:
- то как salt смешивается с passwd - зависит от метода...
- смешиваются они как символьные строки до хэширования...
- смешиваться они могут достаточно причудливым способом, см. как пример Где соль, прикрепленная к паролю, ПОСЛЕ или ДО пароля? для MD5:
Прежде всего, способ использования солей зависит от используемой функции хеширования. Вы упомянули MD5, поэтому мы возьмем этот случай.
Вы должны найти ответ в файле glibc / crypt / md5-crypt.c, в источниках glibc.
Там вы обнаружите, что сначала он делает что-то вроде md5 (KEY $ 1 $ SALT), затем выполняет md5 (KEYSALTKEY), а затем смешивает их странным образом. Затем он делает еще несколько странных итераций, основанных на ключе, соли и предыдущих результатах, и, наконец, после некоторого дополнительного смешивания байтов вы закончите.
Я не могу вам точно ответить "как" ... но, судя по публикациям, всё несколько сложнее:
- то как salt смешивается с passwd - зависит от метода...
- смешиваются они как символьные строки до хэширования...
- смешиваться они могут достаточно причудливым способом, см. как пример Где соль, прикрепленная к паролю, ПОСЛЕ или ДО пароля? для MD5:
Но каким способом это делается - это не принципиально важно.
Linux хорош тем, что, в отличие от привычек выработанных всеми предыдущими операционными системами, здесь - лезешь в исходные коды, чего угодно: ядра, модулей-драйверов, утилит GNU, другого ПО ... и всё уточняется - пусть не том уровне, чтобы править код, но на уровне понимания происходящего, это точно. И если не один человек разберётся, то другой, и обязательно опишут, так что любая деталь, в конечном счёте, становится прозрачной.
*в сторону*
Пароль из 2 символов при словаре в 96 символов - это, условно, 72 Кбайт словарь. В фактических системах используют 72-78 символьный словарь, так что размер словаря - 26.4 Кбайт. Дальше смотрим выхлоп в спойлере. Что там про 2.5 часа, а?
root@debian-9-64 ~/john # ls -ln
итого 32
-rw-r--r-- 1 0 0 124 сен 15 18:58 rules.lst # собственно, хэш для пароля a2
-rw-r--r-- 1 0 0 27075 сен 15 18:59 words2.txt # словарь
# запускаем john в 8 потоков с использованием нашего словаря
root@debian-9-64 ~ # time john --wordlist=/root/john/words2.txt --fork=8 /root/john/rules.lst
Loaded 1 password hash (crypt, generic crypt(3) [?/64])
Node numbers 1-8 of 8 (fork)
Press 'q' or Ctrl-C to abort, almost any other key for status a2 (root)
1 1g 0:00:00:04 100% 0.2439g/s 93.65p/s 93.65c/s 93.65C/s U ..mW
Session completed real 0m10,209s
user 0m19,924s
sys 0m0,020s
to Olej
Вы реально считаете, что в "боевых" (не учебных) задачах кто-то будет применять john без параллелизации? Без предварительно собранного словаря, основанного на данных "разведки"? Или вне среды кластеризации на GPU, которая ускоряет bruteforce в разы? Если так, то мне жаль вас...
Можно сколь угодно долго кричать, что вручную молотком невозможно разрушить пирамиду Хеопса. Но отрицать принципиальную возможность положительного результата (при большом числе молотков) или ругать сам молоток - могут либо дегенераты, либо словоблуды, которым больше нечем заняться в жизни. Выбирайте, любезный, кто же вы из этого списка? Третьего не дано...