Master key hash bitcoin

Master key hash bitcoin

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

Форматы Закрытых Ключей

Закрытые ключи-это то. Что используется для разблокировки сатоши с определенного адреса. В Биткойне закрытый ключ в стандартном формате-это просто 256-битное число между значениями: 0x01 и 0xFFFF FFFF FFFF FFFF FFFF FFFF ffff ffff ffff BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140, представляющие почти весь диапазон значений 2256-1. Диапазон регулируется стандартом шифрования secp256k1 ECDSA. Используемым Биткойном.

Формат импорта кошелька (WIF)

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

Возьмите закрытый ключ.

Добавьте перед ним байт 0x80 для адресов mainnet или 0xef для адресов testnet.

Добавьте после него байт 0x01, если он должен использоваться со сжатыми открытыми ключами (описано в более позднем подразделе). Ничего не добавляется. Если он используется с несжатыми открытыми ключами.

Выполните хэш SHA-256 для расширенного ключа.

Выполните хэш SHA-256 по результату хэша SHA-256.

Возьмите первые четыре байта второго хэша SHA-256; это контрольная сумма.

Добавьте четыре байта контрольной суммы из точки 5 в конец расширенного ключа из точки 2.

Преобразуйте результат из байтовой строки в строку Base58 с помощью кодировки Base58Check.

Этот процесс легко обратим. Используя функцию декодирования Base58 и удаляя заполнение.

Формат Мини-Закрытого Ключа

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

Первый символ мини-клавиш ‘

Чтобы определить. Хорошо ли отформатирован мини-закрытый ключ. К нему добавляется знак вопроса.

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

Чтобы получить полный закрытый ключ. Пользователь просто берет один хэш SHA256 исходного мини-закрытого ключа. Этот процесс односторонний: трудно вычислить формат мини-закрытого ключа из производного ключа.

Многие реализации запрещают символ ‘1’ в мини-закрытом ключе из — за его визуального сходства с

Ресурс: распространенным инструментом для создания и выкупа этих ключей является утилита Casascius Bitcoin Address Utility.

Форматы Открытых Ключей

Открытые ключи Bitcoin ECDSA представляют собой точку на определенной эллиптической кривой (EC). Определенной в secp256k1. В своей традиционной несжатой форме открытые ключи содержат идентификационный байт, 32-байтовую координату X и 32-байтовую координату Y. Чрезвычайно упрощенная иллюстрация ниже показывает такую точку на эллиптической кривой, используемой Биткойном, y2 = x3 + 7, над полем смежных чисел.

Точка на кривой ECDSA

(Secp256k1 фактически модулирует координаты большим простым числом. Что создает поле несмежных целых чисел и значительно менее четкий график. Хотя принципы те же.)

Почти 50% — ное уменьшение размера открытого ключа может быть реализовано без изменения каких-либо фундаментальных принципов путем уменьшения координаты Y. Это возможно. Потому что только две точки вдоль кривой имеют общую координату X. Поэтому 32-байтовая координата Y может быть заменена одним битом. Указывающим. Находится ли точка на том. Что показано на рисунке как “верхняя” сторона или “нижняя” сторона.

При создании этих сжатых открытых ключей данные не теряются—для восстановления координаты Y и доступа к несжатому открытому ключу требуется лишь небольшое количество процессора. Как несжатые. Так и сжатые открытые ключи описаны в официальной документации secp256k1 и поддерживаются по умолчанию в широко используемой библиотеке OpenSSL.

Читайте также:  Как стать валидатором криптовалюты mina

Поскольку они просты в использовании и сокращают почти вдвое пространство блокчейна. Используемое для хранения открытых ключей для каждого потраченного вывода. Сжатые открытые ключи используются по умолчанию в Bitcoin Core и рекомендуются по умолчанию для всех программ Bitcoin.

Однако Bitcoin Core до 0.6 использовал несжатые ключи. Это создает несколько осложнений. Так как хэшированная форма несжатого ключа отличается от хэшированной формы сжатого ключа. Поэтому один и тот же ключ работает с двумя разными адресами P2PKH. Это также означает. Что ключ должен быть представлен в правильном формате в скрипте подписи. Чтобы он соответствовал хэшу в предыдущем выходном скрипте pubkey.

По этой причине Bitcoin Core использует несколько различных байтов идентификаторов. Чтобы помочь программам определить. Как следует использовать ключи:

Закрытые ключи, предназначенные для использования со сжатыми открытыми ключами, имеют 0x01, добавленный к ним перед кодировкой Base-58. (См. раздел кодирования закрытого ключа выше.)

Несжатые открытые ключи начинаются с 0x04; сжатые открытые ключи начинаются с 0x03 или 0x02 в зависимости от того. Больше они или меньше середины кривой. Все эти префиксные байты используются в официальной документации secp256k1.

Создание Иерархического Детерминированного Ключа

Иерархический детерминированный создание ключа и протокола передачи данных ( в HD протокола ) значительно упрощает резервные копии кошелька. Исключает необходимость повторного связи между несколькими приложениями. Используя тот же кошелек. Разрешений на создание детского счетов. Которые могут работать независимо. Дает каждому из родителей внимание возможность проверять и контролировать своих детей. Даже если ребенок учетная запись была взломана. И делит каждую счета в полный доступ и ограниченный доступ к части так. Ненадежные пользователи или программы могут быть позволено принимать и контролировать выплаты. Не будучи в состоянии их потратить.

Протокол HD использует функцию создания открытого ключа ECDSA “point ()” , которая берет большое целое число (закрытый ключ) и превращает его в точку графика (открытый ключ):

Благодаря тому , как работает “point ()” , можно создать дочерний открытый ключ , объединив существующий (Родительский) открытый ключ с другим открытым ключом. Созданным из любого целочисленного значения (i). Этот дочерний открытый ключ-это тот же самый открытый ключ. Который был бы создан функцией “point ()” , если бы вы добавили значение i к исходному (родительскому) закрытому ключу. А затем нашли остаток этой суммы. Деленный на глобальную константу. Используемую всем программным обеспечением биткойна (p):

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

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

Будь то создание дочерних открытых ключей или более поздних открытых ключей. Предсказуемая последовательность целочисленных значений будет не лучше. Чем использование одного открытого ключа для всех транзакций. Поскольку любой. Кто знает один дочерний открытый ключ. Может найти все другие дочерние открытые ключи. Созданные из того же родительского открытого ключа. Вместо этого случайное семя может быть использовано для детерминированной генерации последовательности целочисленных значений. Так что связь между дочерними открытыми ключами невидима для всех. Кто не имеет этого семени.

Читайте также:  Биржи криптовалют рейтинг 2019

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

Обзор Иерархического Детерминированного Вывода Ключей

Как показано выше. Вывод ключа HD занимает четыре входа:

В обычной форме. Показанной на приведенном выше рисунке. Код Родительской Цепочки. Родительский открытый ключ и индексный номер подаются в односторонний криптографический хэш (HMAC-SHA512) для получения 512 бит детерминистически сгенерированных. Но кажущихся случайными данных. Кажущиеся случайными 256 бит в правой части хэш-вывода используются в качестве нового дочернего кода цепочки. Кажущиеся случайными 256 бит на левой стороне хэш-вывода используются в качестве целочисленного значения. Которое должно быть объединено либо с родительским закрытым ключом. Либо с родительским открытым ключом, чтобы. Соответственно. Создать либо дочерний закрытый ключ. Либо дочерний открытый ключ:

Указание разных индексных номеров приведет к созданию разных несвязываемых дочерних ключей из одних и тех же родительских ключей. Повторение процедуры для дочерних Ключей с использованием кода Дочерней Цепочки приведет к созданию несвязываемых внучьих ключей.

Поскольку для создания дочерних ключей требуется и ключ. И код цепочки. Ключ и код цепочки вместе называются расширенным ключом . Расширенный закрытый ключ и соответствующий ему расширенный открытый ключ имеют один и тот же цепной код. Главный закрытый ключ (родительский элемент верхнего уровня) и код главной цепочки выводятся из случайных данных. Как показано ниже.

Создание Корневой Расширенной Пары Ключей

Корневое семя создается из 128 бит, 256 бит или 512 бит случайных данных. Это корневое семя размером всего 128 бит-это единственные данные. Которые пользователь должен создать резервную копию. Чтобы получить каждый ключ. Созданный конкретной программой кошелька с использованием определенных настроек.

Предупреждение: на момент написания этой статьи ожидается. Что программы HD wallet не будут полностью совместимы. Поэтому пользователи должны использовать только одну и ту же программу HD wallet с одинаковыми настройками HD для конкретного корневого семени.

Корневое семя хэшируется для создания 512 бит кажущихся случайными данных. Из которых создаются главный закрытый ключ и код главной цепочки (вместе-главный расширенный закрытый ключ). Главный открытый ключ получается из главного закрытого ключа с помощью “point()” , который вместе с кодом главной цепочки является главным расширенным открытым ключом. Основные расширенные ключи функционально эквивалентны другим расширенным ключам; только их расположение на вершине иерархии делает их особенными.

Закаленные Ключи

Закаленные расширенные ключи устраняют потенциальную проблему с обычными расширенными ключами. Если злоумышленник получает обычный код Родительской Цепочки и родительский открытый ключ. Он может перебрать все коды цепочки. Вытекающие из него. Если злоумышленник также получает ребенка. Внука или более поздний закрытый ключ. Он может использовать код цепочки для генерации всех расширенных закрытых ключей. Спускающихся от этого закрытого ключа. Как показано на рисунке ниже.

Кросс-Поколенческий Ключевой Компромисс

Возможно, что еще хуже. Злоумышленник может изменить обычную формулу вывода дочернего закрытого ключа и вычесть код Родительской Цепочки из дочернего закрытого ключа. Чтобы восстановить Родительский закрытый ключ. Как показано в поколениях дочернего и родительского на рисунке выше. Это означает. Что злоумышленник. Который получает расширенный открытый ключ и любой закрытый ключ. Происходящий от него. Может восстановить закрытый ключ этого открытого ключа и все ключи. Происходящие от него.

Читайте также:  Китай фонды прямых инвестиций

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

Это можно исправить. С некоторыми компромиссами. Заменив нормальную формулу вывода ключа на закаленную формулу вывода ключа.

Обычная формула вывода ключа. Описанная в разделе выше. Объединяет индексный номер. Код Родительской Цепочки и родительский открытый ключ для создания кода Дочерней Цепочки и целочисленное значение. Которое объединяется с родительским закрытым ключом для создания дочернего закрытого ключа.

Создание Дочерних Открытых Ключей Из Расширенного Закрытого Ключа

Закаленная формула. Показанная выше. Объединяет индексный номер. Код Родительской Цепочки и родительский закрытый ключ для создания данных. Используемых для генерации кода Дочерней Цепочки и дочернего закрытого ключа. Эта формула делает невозможным создание дочерних открытых ключей без знания родительского закрытого ключа. Другими словами. Родительские расширенные открытые ключи не могут создавать защищенные дочерние открытые ключи.

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

Протокол HD использует различные индексные номера. Чтобы указать. Должен ли быть сгенерирован обычный или закаленный ключ. Индексные числа от 0x00 до 0x7fffffff (от 0 до 231-1) генерируют нормальный ключ; индексные числа от 0x80000000 до 0xffffffff генерируют закаленный ключ. Чтобы упростить описание, многие разработчики используют простой символ для обозначения закаленных ключей, поэтому первый нормальный ключ (0x00) равен 0, а первый закаленный ключ (0x80000000) равен 0.

(Разработчики биткойнов обычно используют ASCII-Апостроф, а не простой символ Юникода, условность. Которой мы отныне будем следовать.)

Это компактное описание далее сочетается с косыми чертами. Предваряемыми m или M, чтобы указать иерархию и тип ключа. Причем m является закрытым ключом, а M-открытым ключом. Например, m/0’/0/122’ относится к 123-му закаленному частному дочернему элементу (по индексному номеру) первого нормального дочернего элемента (по индексу) первого закаленного дочернего элемента (по индексу) главного закрытого ключа. Следующая иерархия иллюстрирует простую нотацию и закаленные ключевые брандмауэры.

Пример HD Wallet Tree с использованием простой нотации

Кошельки, следующие протоколу BIP32 HD, создают только защищенные дочерние элементы главного закрытого ключа (m), чтобы предотвратить компрометацию главного ключа скомпрометированным дочерним ключом. Поскольку для мастер-ключей нет нормальных дочерних элементов. Мастер-открытый ключ не используется в HD-кошельках. Все остальные ключи могут иметь обычные дочерние элементы. Поэтому вместо них могут использоваться соответствующие расширенные открытые ключи.

Протокол HD также описывает формат сериализации для расширенных открытых ключей и расширенных закрытых ключей. Для получения более подробной информации, пожалуйста, обратитесь к разделу кошелька в справочнике разработчика или BIP32 для спецификации протокола full HD.

Хранение Семян Корнеплодов

Корневые семена в протоколе HD-это 128, 256 или 512 бит случайных данных. Которые должны быть точно скопированы. Чтобы было удобнее использовать нецифровые методы резервного копирования. Такие как запоминание или ручное копирование, BIP39 определяет метод создания 512-битного корневого семени из псевдосочетания (мнемоники) общих слов естественного языка. Которое само было создано из 128 — 256 бит энтропии и опционально защищено паролем.

Количество генерируемых слов коррелирует с количеством используемой энтропии:

Источник

Оцените статью