Officine Bitcoin

Lezioni online Bitcoin-only

This project is maintained by valerio-vaccaro

Officine Bitcoin Bitcoin-only урок Этот проект поддерживается valerio-vaccaro

🌍 Переводы

🇨🇳 中文 🇬🇧 English 🇪🇸 Español 🇵🇹 Português 🇷🇺 Русский 🇫🇷 Français 🇩🇪 Deutsch 🇮🇹 Italiano 🇭🇺 Magyar 🏳️ Milanés 🏳️ Veneto

подписей

Темой этого урока будут цифровые подписи и их применение к Bitcoin.

Что такое подпись?

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

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

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

Мы будем использовать наш закрытый ключ, который представляет собой число, и с помощью некоторой математической магии создадим подпись, которая представляет собой другое число и доказывает, что определенное состояние определенного документа принадлежит определенному идентификатору, связанному с открытым ключом, или известно под ним. То, что я собираюсь подписать, — это отпечаток пальца (или ХЭШ) определенного документа (или ПОЛЕЗНОЙ НАГРУЗКИ).

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

Если я изменяю ПОЛЕЗНУЮ НАГРУЗКУ, я изменяю ХЭШ, и, очевидно, это делает подпись недействительной.

Итак, почему же эта более сложная подпись была введена в цифровой мир? Да потому, что в цифровом мире, в отличие от физического (а это, наверное, помнят те, кто прогуливал школу), скопировать подпись гораздо проще.

С другой стороны, цифровая подпись содержит информацию о документе и, следовательно, изменяется для каждого документа и не может быть вставлена ​​и повторно использована в другом документе.

Таким образом, цифровая подпись используется для:

Подписи в Bitcoin

Эта технология используется в Bitcoin под аббревиатурой ECDSA (Алгоритм цифровой подписи с электронной кривой), который представляет собой алгоритм создания цифровых подписей на эллиптической кривой, другие схемы подписи пока мы рассматривать не будем.

Напоминаем, что в Bitcoin вы можете оформлять подписи для:

Но как эти подписи связаны с транзакцией? Каждый адрес имеет механизм расходования — сценарии, которые необходимо запустить, чтобы узнать, можно ли авторизовать расходы. Внутри этих скриптов есть команды (или OPCODE), предназначенные для проверки цифровых подписей, такие как OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG, OP_CHECKMULTISIGVERIFY.

Напомним, что транзакция в Bitcoin состоит из:

По сути, в большинстве случаев мне придется предоставлять ДЛЯ КАЖДОГО ВХОДА подпись(и), необходимую для завершения сценария расходов.

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

Очевидно, что транзакция действительна, если все входы правильно подписаны, а если хотя бы один из входов не подписан, транзакция не может считаться действительной.

Подпись может быть проверена каждым и не может быть отвергнута, но для гибкости Сатоши очень и очень умным способом ввел различные режимы подписи, то есть подпись всегда одна и та же, но ПОЛЕЗНАЯ НАГРУЗКА, то есть часть транзакции, подлежащая подписи, меняется, это позволяет, например, генерировать сложные схемы и протоколы, в которых части транзакций могут комбинироваться друг с другом, Сатоши назвал эти режимы (настоящие флаги на языке сценариев) SIGHASH.

СИГАШ

Самый простой SIGHASH — это SIGHASH_ALL, что означает создание подписи со ВСЕМИ ВХОДАМИ и ВСЕМИ ВЫХОДАМИ. Это самый простой и наиболее используемый способ создания подписи.

Первое отличие может быть с SIGHASH_NONE, который подписывает ВСЕ ВХОДЫ, но НИ ОДИН ВЫХОД, что позволяет вам впоследствии добавлять выходы или изменять комиссии. ВНИМАНИЕ, что с помощью этой схемы, если она не защищена мультиподписью или другими функциями, майнер или любой другой, кто увидит транзакцию с этой схемой подписи, может заменить выходные данные, перенаправив средства на свой собственный адрес.

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

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

Все эти подписи являются действительными независимо от типа адреса и скриптов, что оставляет кошельку максимальную гибкость выражения. Обычно он использует SIGHASH_ALL, но может также следовать более сложным протоколам, требующим других схем подписи. В случае мультиподписи нет необходимости использовать один и тот же тип подписи, кошелек 2di2 может подписать некоторые из своих UTXO с помощью SIGHASH_NONE и ANYONECANPAY, чтобы предоставить полный контроль второй подписывающей стороне, которая сможет, например, собрать все эти входные данные в транзакции, которая будет подписана с помощью SIGHASH_ALL.

Подписи в произвольном тексте

Для полноты картины те же подписи, которые используются для ввода транзакций, можно использовать и для подписи произвольного текста.

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

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

После проверки вы получаете открытый ключ, который затем можно использовать для регенерации адреса, поэтому, если у меня есть текст и подпись, я извлекаю подписанный открытый ключ и из открытого ключа могу пересчитать адрес и сверить его, например, с предоставленным.

Программа

Урок по подписям можно повторить, вот список уже проведенных:

Дата Заметки