Блокчейн. Принципы и основы | страница 16



● «Конкатенация» (то есть «сцепление» или «склеивание» двух блоков данных, когда второй становится продолжением первого, например, конкатенация «1111» и «2222» дает результат «11112222»).

● «Сложение» (обычное арифметическое действие для двух и более чисел).

● «Конъюнкция», или «Логическое И», «AND» (результат этой побитовой операции будет истинным (1), если оба бита являются единицами, в противном случае результат будет ложным (0)).

● «Дизъюнкция», или «Логическое ИЛИ», «OR» (результат этой операции будет истинным (1), если хотя бы один из аргументов является истинным (1), в противном случае результат будет ложным (0)).

● «Логическое Исключающее ИЛИ», «XOR» (результат этой операции для двух бит будет истинным (1), только если один из аргументов будет истинным (1), а второй ложным (0), в противном случае результат будет ложным (0)).

● «Логическое отрицание», «NOT» (побитовая инверсия, результат унарной операции, где результирующий бит всегда будет противоположен по значению входящему биту, то есть единицы становятся нулями и наоборот).

● «Побитовые сдвиги» (когда значения битов перемещаются в соседние регистры по направлению сдвига, например, для блока «10100110» результатом логического сдвига влево будет «01001100»).

Побитовые сдвиги могут быть логическими (когда последний бит по направлению сдвига теряется, а первый становится нулем) и циклическими (когда последний бит по направлению становится на место первого). В приведенном выше примере рассматривается именно логический сдвиг, поскольку результат циклического сдвига влево в данном случае представлял бы из себя результат «01001101». Кроме того, внутри каждой итерации могут применяться наборы вспомогательных констант, закрепленные за каждым из алгоритмов. Эти константы используются в различных операциях, описанных выше. Таким образом, с каждым шагом алгоритма результат все больше отдаляется от исходных данных. Происходит сложное циклическое «перемешивание» данных – возможно, именно поэтому эту процедуру и назвали «хеширование», что в переводе с английского означает «мешанина» и часто относится к блюдам из мелко порубленного мяса или овощей. Ингредиенты подобных блюд, как и результат хеширования, невозможно привести к исходному виду (прообразу). Однако попытки поиска эффективных методов восстановления прообразов для различных хеширующих алгоритмов существовали с самого начала их появления.

Для того чтобы представить себе проблематику, связанную с криптостойкостью самых популярных алгоритмов хеширования, оценим рассчитанные показатели многообразия вариантов хешей и вероятностей нахождения коллизий для них. Соотношение между разрядностью (размером) хеша n и числом возможных выходов (вариантов генераций хеша) равно 2 в степени n. Если средняя длина хеша в основных популярных блокчейн-проектах составляет 256 бит, это означает число выходов, равное 2