Хуёвое хеширование
Что такое хеширование, соль и перец на хуёвых примерах для девочек.
Представь, что у тебя есть несколько знакомых парней и тебе очень хотелось бы знать, у кого из них самый большой хуй. Ты девочка приличная, поэтому, конечно же, не будешь спрашивать у каждого точную длину (height, h) и толщину (width, w) в сантиметрах. Вместо этого, ты попросишь каждого измерить свой хуй самостоятельно и прислать тебе произведение двух чисел (умножить одно на другое, типа 25 * 10 = 250). Это одно число не есть размер само по себе, однако два одинаковых хуя всегда дадут одинаковое число. Также, что важно для тебя, число это растёт вместе с размерами хуя. По сути, ты только что ввела простейшую хеш-функцию. Назовём её XYI-8, в надежде, что любое из возможных произведений можно уместить в 8 бит в двоичном представлении (десятичные числа от 0 до 255).
XYI-8(w, h) = w * h
Хеш-функция - это функция, алгоритм, который превращает осмысленные данные в бессмысленную кашу (англ. hash - мешанина, месиво, от названия вот этого блюда). Применять хеш-фунцию - хешировать. Результат хеширования, значение хеш-функции - хеш.
Скажем прямо, функция XYI-8 достаточно хуёвая. А именно, имеет два существенных недостатка.
Во-первых, она довольно легко обратима - ты можешь с точностью сказать, хуи каких размеров могут дать значение XYI-8 = 100 или XYI-8 = 200. Что может поставить обладателя хуя в неловкое положение.
Во-вторых, как можно легко заметить, XYI-8(10, 2) = XYI-8(20, 1) = 20. Такая ситуация называется коллизией хеш-функции и при сравнении хуёв может привести к сюрпризам, как приятным, так и не очень.
Причиной второй проблемы является простота функции XYI-8. Вероятность коллизии можно снизить, скажем, дополнительно прибавляя к произведению толщину хуя. В нашем примере, возможно, коллизий можно было бы избежать и полностью, подобрав подходящий алгоритм. Однако, если брать размеры хуя в миллиметрах (а у некоторых, возможно и в сантиметрах, прости господи) - то результат не влезет в 8 бит. Если мы достаточно умны, то сможем придумать такую функцию, которая и в этом случае будет давать значения строго в пределах 8 бит - например, мы можем использовать формулу XYI-8(w, h) = 255 / (w * h), предполагая, что деление целочисленное. Но, как несложно заметить, все хуи, больше некоторого размера, будут приводить к коллизии (значение 0). Хороший алгоритм может снизить вероятность коллизии, но если числа на входе слишком большие - они не влезут в нашу 8-битную хеш-функцию, как ни запихивай.
Из чего мы делаем важный вывод: размер имеет значение любая хеш-функция приводит к коллизиям, вопрос лишь в их вероятности.
С первой проблемой всё интереснее. Достаточно сложный алгоритм уменьшит вероятность раскрытия длины хуёв подопытных. Обратная функция, в математическом смысле, может вообще не существовать. Тем не менее, мы всё ещё можем просто перебирать все возможные размеры хуёв, считать хеш-функцию и сравнивать с предоставленными нам данными, пока не найдём совпадение.
Такой взлом 👩💻 называется brute force, брутфорс, перебор. Попадание в цель здесь - вопрос времени. Ускорить процесс могут т.н. радужные 🏳️🌈 таблицы - значения хеш функции для наиболее распространённых размеров хуя, вычисленные заранее.
Вот тут-то нам на помощь и спешат соль 🧂 с перцем 🌶️.
Если все подопытные, перед использованием XYI-8, умножат длину и толщину своего хуя на некоторое число, которое тебе неизвестно, то, всё ещё имея возможность сравнить размеры, ты уже никак не сможешь вычислить их значения. Естественно, если повторять измерения одного и того же хуя несколько раз, число при этом меняться не должно, поэтому парням придётся его где-то записать. Если каждый придумает своё число и, например, набьёт с ним татушку на ягодице, то такое число называется солью 🧂.
Недостатком является то, что ты, даже не имея доступа к хую, но имея доступ к жопе (зная соль), сможешь взломать хеш перебором. Но уже не по радужной таблице, что сильно тебя замедлит (шутка ли - придётся двузначные числа умножать). Для простоты примера мы также полагаем, что соль пропорциональна размерам хуя, не уточняя, как именно подопытные выполнят это требование.
Однако, если все парни будут использовать одно и то же число, которое набито, скажем, на ягодице их общей подружки, то тебе придётся взламывать жопку этой подружки, поскольку на парнях уже ничего не написано, а прямого доступа к хуям всё еще нет. Такое число называется перцем 🌶️.
Соль - некий рандом (энтропия 🤓), который хранится вместе с данными (и для разных данных может быть разным). Перец - рандом (энтропия 🤓), который хранится отдельно от данных (и для всех данных будет одинаковый). Ничто не мешает использовать их вместе.
Таким образом, прежде чем передать тебе столь чувствительную информацию, как длина и толщина хуя, подопытные посолят его и поперчат.
В менее хуёвых ситуациях, хеш-функции используются, обычно, для сравнения паролей при аутентификации, без необходимости хранения самих паролей - просто замени в примере выше размеры хуя на пароль. Для этого, кстати, тебе уже не нужна возможность сравнивать значения хеш-функции на больше/меньше, только на равенство. Это значительно снижает требования к хеш-функции и позволяет проще сделать её необратимой, а также уменьшить вероятность коллизий. Самые охуенные сейчас - это SHA-256 и SHA-512.
Также, хеш-функции используются для построения хеш-таблиц и цифровой подписи, но это уже совсем другая история.
Более хуёвого способа потратить несколько часов я не нашёл.
Спасибо за внимание.
Забавный срач увидел
olegletthedevilsinhellfuckyou - 29 символов, но в консольке терминальной набирать сложновато будет. И с пятого ребута потухшего с непонятно чего сервервака Олеженька окончательно будет раздолбан чертями.
Как слёзы под дождем…
Сможете найти на картинке цифру среди букв?
Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi