Название | Введение в технологию Блокчейн |
---|---|
Автор произведения | Тимур Сергеевич Машнин |
Жанр | Компьютеры: прочее |
Серия | |
Издательство | Компьютеры: прочее |
Год выпуска | 2021 |
isbn |
Существует множество хэш функций, но функция, которую использует биткойн, это функция, которая называется SHA-256, и она работает следующим образом.
Она принимает сообщение, которое вы хешируете, и она разбивает его на блоки размером 512 бит.
Сообщение не обязательно кратно размеру блока, поэтому мы должны добавить в конце дополнение. И это дополнение будет состоять из, в конце дополнения, поля длиной 64 бит, которое является длиной сообщения в битах.
И затем до этого находится один бит, за которым следует некоторое количество нулевых бит.
И вы выбираете число нулевых бит, чтобы выйти точно в конец блока.
После того как вы разбили сообщение на блоки, вы начинаете вычисление.
Вы начинаете с 256-битного начального значения и берете первый блок сообщения.
Затем вы берете эти 768 полных битов, и обрабатываете специальной функцией сжатия, которая на выходе дает 256 бит.
Вы берете полученные 256 бит и следующие 512 бит сообщения, снова пропускаете через функцию сжатия и так далее, пока не обработаете все блоки сообщения.
Таким образом вы получите хэш, как 256-битное значение.
И нетрудно показать, что если эта функция сжатия, C, является свободной от коллизий, то вся эта хэш-функция также будет свободна от коллизий.
Хэш указатели и структуры данных
Далее мы поговорим о хэш указателях и их применении.
Хэш указатель – это вид структуры данных, которая указывает где хранится некоторая информация.
И в которой вместе с указателем хранится криптографический хэш самой информации.
Поэтому, если обычный указатель дает способ получения информации, хеш-указатель позволяет не только получить информацию, но и также проверить, что эта информация не изменилась.
И мы можем использовать хэш указатели для создания всех видов структур данных.
Здесь ключевая идея, использовать любую структуру данных, связанные списки или двоичное дерево поиска или что-то вроде этого, и реализовать это с помощью хеш-указателей.
Например, здесь есть связанный список, который мы построили с помощью хэш-указателей.
И это структура данных, которую мы собираемся назвать цепочкой блоков.
Так что, по сравнению с обычным связанным списком, где у вас есть серия блоков, и каждый блок имеет данные, а также указатель на предыдущий блок в списке, здесь указатель на предыдущий блок заменяется на хэш-указатель, который хранит указатель на предыдущий блок и хэш всего содержимого блока.
Эта структура не только позволяет хранить данные, но и защищать их.
Теперь, что произойдет, если кто-то изменит данные в блоке.
Мы это легко обнаружим, сравнив хэш указатель и данные блока.
Если же кто-то изменит и хэш-указатель предыдущего блока, тогда возникнет несогласованность с хэш-указателем следующего блока, так как хэш-указатель хранит хэш не только самих данных, но