Найти тему
CryptoBrain

Хеширование в криптоиндустрии. Анализ явления. Часть 1

Как и было обещано ранее в постах об обеспеченных криптоинструментах (см. предыдущие публикации), разбираемся, что же такое 'хеширование' простым русским языком и с чем его едят...

Термин 'хеширование' происходит от английского слова 'hashing', которое в свою очередь образовано от 'hash', буквально переводимого как 'рубить', 'крошить', 'путать', 'портить'.

На самом деле, хеширование - это довольно обширное понятие, имеющее множество не только значений, но и, как инструмент, - множество применений, в связи с чем и обсуждается, в основном, на уровне специалистов языками, практически не доступными для бытового уровня восприятия.. Для простого определения, для понимания сути вопроса оттолкнемся от коренного значения и приложим на криптоиндустрию.

На самом деле, итоговый код хеша выглядит, как раз, как фарш...в буквальном смысле этого слова и отталкиваясь от его внешнего вида по отношению к зашифрованному тексту.

Например, хеш-код может выглядеть так:

xkghpwnjhuygzxffkoyv

И, не смотря на то, что представленный набор буков является натуральной абракадаброй, реальный хеш, сложенный по уникальному алгоритму, будет абракадаброй только для того, кто не владеет ключом к его расшифровке.

По сути, хеширование - это некоторая определенная последовательность операций, осуществляемых на блоке информации того или иного размера, и преобразование её в уникальную последовательность некоторых символов некоторой длины; при этом, в процессе преобразования используется некий ключ, позволяющий при его конфиденциальности придавать выходной форме вид абракадабры, чем и заинтересовывать пользователей: при незнании ключа и алгоритма шифрования сохранять невозможность прочтения конфиденциальных данных

Но! Чтобы получить нечто рубленое, его сначала нужно разрубить.

Как пример, можно представить следующую последовательность действий:

1. Осуществляется 'рубка' на мелкие элементы некоторой последовательности символов, являющейся блоком информации, подлежащей шифрованию.

2. Каждый из этих символов прогоняется через некоторую функцию с заданным ключом, чем преобразуется в определенный набор не связанных между собой элементов последовательности. Количество таких последовательностей, или хеш-блоков, отражает количество символов в изначальном блоке информации.

3. Так как формат таких хеш-блоков одинаков (создаются по одинаковой функции - алгоритму действий), существует техническая возможность их обработать, например элементарно сложить или перемножить.

Попробуем вспомнить наши школьные забавы в части шифрования текстов через сложение

Берём алфавит, каждую букву нумеруем как и в предыдущем умножении, решаем, какое число будет нашим ключом.

Например, выбираем для ключа число 37.

В алгоритм шифрования прошиваем самую простую формулу: увеличение порядкового номера шифруемой буквы в алфавите на число ключа.

Полученные числовые значения делим на 33 буквы в алфавите и остаток преобразуем обратно в буквы.

Например, зашифруем по заданному выше алгоритму слово 'апельсин'.

Входящими данными будет следующее сочетание двузначных чисел, каждое из которых отражает порядковый номер соответствующей буквы в алфавите:

01.17.06.13.30.19.10.15

Увеличиваем каждое число на ключ 37:

38.54.43.50.67.56.47.52

Делим каждое число на 33 и находим остаток:

05.21.10.17.01.23.14.19

Переводим полученные числа в буквы алфавита (точки использовались для ясности изложения, теперь их исключаем):

дуипахмс

Вот такой хеш-код мы получили: 'дуипахмс'. Теперь, для расшифровки, корреспонденту нужно знать два критерия:

- ключ в число 37
- алгоритм шифрования: увеличение порядкового номера буквы в алфавите на заданный ключ

На самом деле, это самый простой вариант шифрования, так сказать 'школьный' подход. Безусловно, формулу алгоритма и сам ключ можно усложнять и усложнять..

Однако, в представленных примерах на выходе мы получаем хеш-коды по количеству символов равные изначально заданной информации. А современное хеширование пошло дальше и на выходе получает хеш-код с определенным количеством символов, например в 32 единицы, независимо от масштаба кодируемой информации.

У меня уже есть представления, как получаемый на выходе код преобразовать в шаблонный по количеству символов вид, но это исследование нужно провести отдельно, чем и займёмся в следующей части.

Об этом и о многом другом читайте на моем канале, не пропустите ничего интересного – подписывайтесь на канал CryptoBrain!

Ваш КриптоМозг