- Вернуться к меню
- Вернуться к менюЦены
- Вернуться к менюИсследовать
- Вернуться к менюМероприятия
- Вернуться к менюПартнерский материал
- Вернуться к меню
- Вернуться к меню
- Вернуться к менюВебинары и Мероприятия
Объяснение хэш-функций 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
Corin Faife is a CoinDesk contributor and has covered the social and political impact of emerging technologies for VICE, Motherboard and the Independent. Corin is not an investor in any digital currencies or blockchain projects (See: Editorial Policy). Follow Corin: corintxt
