Объяснение хэш-функций Bitcoin
Все, что вы всегда хотели знать о хешировании Bitcoin , но боялись спросить.
Любой, кто интересуется Bitcoin , в какой-то момент слышал фразу «криптографическая хэш-функция». Но что именно она означает и как она связана с Криптовалюта?
Хэш-функции являются неотъемлемой частью не только протокола Bitcoin , но и информационной безопасности в целом.
В следующей статье мы рассмотрим несколько простых примеров их работы, а также проведем простую демонстрацию.
Что такое хеш-функция?
Абстрактно, хеш-функция — это математический процесс, который принимает входные данные любого размера, выполняет над ними операцию и возвращает выходные данные фиксированного размера.
В более конкретном примере это можно использовать для взятия последовательности буквлюбойдлина в качестве входных данных – то, что мы называемнить– и вернуть последовательность буквзафиксированныйДлина. Независимо от того, является ли входная строка одной буквой, словом, предложением или целым романом, выходной сигнал, называемыйдайджест– всегда будет одинаковой длины.
Распространенное применение этого вида хеш-функции — хранение паролей.
Когда вы создаете учетную запись пользователя в любой веб-службе, требующей пароль, пароль проходит через хэш-функцию, и хэш-дайджест сообщения сохраняется. Когда вы вводите свой пароль для входа, та же хэш-функция запускается для введенного вами слова, и сервер проверяет, соответствует ли результат сохраненному дайджесту.
Это означает, что если хакеру удастся получить доступ к базе данных, содержащей сохраненные хэши, он не сможет немедленно скомпрометировать все учетные записи пользователей, поскольку не существует простого способа найти пароль, с помощью которого был создан тот или иной хэш.
Простые хеш-функции на 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
