Consensus 2025
00:05:06:36
Поделиться этой статьей

Объяснение хэш-функций Bitcoin

Все, что вы всегда хотели знать о хешировании Bitcoin , но боялись спросить.

Любой, кто интересуется Bitcoin , в какой-то момент слышал фразу «криптографическая хэш-функция». Но что именно она означает и как она связана с Криптовалюта?

Хэш-функции являются неотъемлемой частью не только протокола Bitcoin , но и информационной безопасности в целом.

Продолжение Читайте Ниже
Не пропустите другую историю.Подпишитесь на рассылку Crypto Daybook Americas сегодня. Просмотреть все рассылки

В следующей статье мы рассмотрим несколько простых примеров их работы, а также проведем простую демонстрацию.

Что такое хеш-функция?

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

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

Распространенное применение этого вида хеш-функции — хранение паролей.

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

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

Простые хеш-функции на Python

Вы можете экспериментировать со значениями хэша, используя Python, язык программирования, установленный в операционных системах Mac и Linux по умолчанию. (В этом руководстве предполагается, что вы используете какую-либо версию OS X или Linux, поскольку использование Python в Windowsболее сложный.)

Сначала откройте терминал, введитепитони нажмите ENTER.

Это перенесет вас в Python REPL — среду, в которой вы можете опробовать команды Python напрямую, а не писать программу в отдельном файле.

Затем введите следующее, нажимая клавишу ENTER после каждой строки и клавишу TAB там, где она отмечена:

импорт hashlibdef hash(mystring):[TAB] hash_object = hashlib.md5(mystring.encode())[TAB] print(hash_object.hexdigest())[ENTER]

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

хэш("CoinDesk рулит")

И нажмите ENTER, чтобы увидеть хэш-дайджест этой строки.

Вы увидите, что вызов хеш-функции для одной и той же строки всегда будет генерировать один и тот же хеш, но добавление или изменение ONE символа будет генерировать совершенно другое значение хеш-функции:

хэш("CoinDesk рулит") => 7ae26e64679abd1e66cfe1e9b93a9e85хэш("CoinDesk рулит!") => 6b1f6fde5ae60b2fe1bfe50677434c88

Хэш-функции в Bitcoin

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

При майнинге Bitcoin входными данными для функции являются все последние, еще не подтвержденные транзакции (вместе с некоторыми дополнительными входными данными, относящимися к временной метке и ссылке на предыдущий блок).

В примере кода выше мы уже видели, что изменение небольшой части входных данных для хэш-функции приводит к совершенно иному выходу. Это свойство имеет решающее значение для алгоритма «доказательства работы», используемого в майнинге: чтобы успешно «решить» блок, майнеры пытаются объединить все входные данные со своими собственнымипроизвольный фрагмент входных данныхтаким образом, чтобы полученный хеш начинался с определенного количества нулей.

В качестве базовой демонстрации мы могли бы попробовать «майнить» с помощью нашей хэш-функции Python, вручную добавляя восклицательные знаки после «CoinDesk rocks!», пока не найдем хэш, начинающийся с одного нуля.

>>> хэш("CoinDesk рулит!!")66925f1da83c54354da73d81e013974d>>> хэш("CoinDesk рулит!!!")c8de96b4cf781a6373766c668ceac0f0>>> хэш("CoinDesk рулит!!!!")9ea367cea6a2cc4a6f5a1d9a334d0d9e>>> хэш("CoinDesk рулит!!!!!")b8d43387d98f035e2f0ac49740a5af38>>> хэш("CoinDesk рулит!!!!!!")0fe46518541f4739613b9ce29ecea6b6 => РЕШЕНО!

Конечно, решение хэша для блока Bitcoin – который на момент написаниядолжен начинаться с 18 нулей – требуетсяочень сильнобольшой объем вычислений (и поэтому объединенная вычислительная мощность всех компьютеров в сети по-прежнему требует около 10 минут для решения блока).

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

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

Какие еще основы Криптo вы хотели бы получить? Электронная почта: CoinDesk.

Изображение Bitcoin на клавиатуречерез Shutterstock

Corin Faife

Корин Фейф — автор статей на CoinDesk , освещавший социальное и политическое влияние новых технологий для VICE, Motherboard и Independent. Корин не является инвестором в какие-либо цифровые валюты или блокчейн-проекты (см.: Редакционная Политика). Социальные сети на Корин: corintxt

Picture of CoinDesk author Corin Faife