Шифрование в блокчейне: зачем нужна цифровая подпись

Создание открытого ключа с помощью ECDSA

Первое, что вам нужно сделать, это применить к вашему секретному ключу ECDSA, также известный как алгоритм цифровой подписи эллиптической кривой . Эллиптическая кривая определяется уравнением y² = x³ + ax + b с выбранным значением для a и b. Существует целое семейство этих кривых, которые можно применять. Биткоин использует кривую secp256k1.

Применение ECDSA к закрытому ключу приведет к получению 64-байтового целого числа, состоящего из двух 32-байтовых целых чисел, которые вместе представляют X и Y точки на эллиптической кривой.

Ниже приведен код, который вам потребуется на языке Python:

private_key_bytes = codecs.decode (private_key, ‘hex’)

# Получить открытый ключ ECDSA

key = ecdsa.SigningKey.from_string (private_key_bytes, curve = ecdsa.SECP256k1) .verifying_key

key_bytes = key.to_string ()

key_hex = codecs.encode (key_bytes, ‘hex’)

В представленном выше коде закрытые ключи были декодированы с помощью кодеков. Как и в Python, есть как минимум два класса, которые могут хранить закрытый и открытый ключи, «str», строковый массив и «bytes» — байтовый массив, все может немного запутаться.

Это потому, что массив строк X не равен массиву байтов X, но он равен массиву байтов с двумя элементами, O <. Метод codecs.decode преобразует строку в байтовый массив.

После применения ECDSA нам нужно будет добавить байты 0x04 (04 в качестве префикса) к полученному общедоступному ключу. Это сгенерирует полный открытый ключ Биткоин.

Как получить приватные ключи?

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

Вот пошаговая инструкция по экспорту ключей из кошелька Exodus:

1. Включите Меню Разработчика (Developer Menu), для Windows и Linux открывается нажатием CNTR+SHIFT+D.

2. В появившемся меню выбираем криптовалюту, приватный ключ к которой нужно извлечь. Переходим Developer – Assets – Криптовалюта (Биткоин, например) – Export Private Keys.

3. Появится окно с предупреждением (Вы уверены, что хотите извлечь приватный ключ? Помните, что ключ нужно хранить в безопасном месте. Любой, кто получит ваши ключ, может украсть ваши криптовалюты).

Выбираем I’m sure (уверен).

4. После чего папка exodus-exports с приватным ключом будет создана на рабочем столе. Скопируйте из неё ключ, а саму папку сразу же удалите.

Выше показан файл с приватным ключом после экспорта.

Вот как он выглядит, если его открыть в редакторе Libre Office (всегда скрывайте ваш баланс и приватный ключ, когда публикуете конфиденциальные данные):

Как правильно хранить приватные ключи?

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

  • на бумаге (металле),
  • на электронных носителях,
  • в памяти.

При этом какой бы способ вы не выбрали, важно помнить, что доступ приватному ключу должен быть только у вас. А теперь расскажем, какие есть варианты хранения:

А теперь расскажем, какие есть варианты хранения:

  • На бумаге или металле. Этот способ больше всего актуален для бумажных кошельков, однако так можно хранить приватный ключ, созданный любым методом — нужно просто переписать его. Однако такое хранение не безопасно: вы можете потерять лист, он может сгореть или размокнуть. Для большей прочности его можно заламинировать или сделать копию из металла.
  • На флешке. Это один из самых надежных способов. Нужно использовать отдельную флешку (желательно новую и проверенную на отсутствие вирусов) и выполнять все операции в оффлайн-режиме. Есть несколько вариантов хранения: в виде текстового документа, скриншота или оригинального файла в формате wallet.dat. Также обязательно нужно поставить на флешку пароль.
  • На компьютере. Это также достаточно надежный вариант хранения, если устройство не подключено к интернету и исправно работает. В противном случае он или может стать жертвой злоумышленников, или «полететь». Также рекомендуется поставить надежный пароль на сам файл с ключом и на компьютер.
  • В памяти. Это, пожалуй, самый безопасный способ хранения приватного ключа. Однако он подойдет только в том случае, если вы использовали мнемоническую фразу в качестве приватного ключа. Потому что запомнить набор из рандомных чисел и букв просто нереально.

Безопасность приватных ключей.

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

Правильный вариант – установить ОС Linux (лёгкая в управлении – Mint) на виртуальную машину, на её базе открыть кошелек EXODUS и проводить все операции в этой среде.

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

Если для вас слишком сложно установить виртуальную машину с Linux Mint и обеспечить должный уровень безопасности криптовалютных кошельков, настоятельно рекомендую купить Ledger Nano S или X.
Заказывайте его самостоятельно, только с официального сайта. Не стоит покупать LEDGER Nano в Москве с рук (или на Авито!). Совершенно очевидно, что такие приборы нельзя брать б/у или в уже вскрытой упаковке.

Приватный ключ. Импорт

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

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


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

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

What is a private key?

A private key is a randomly generated number.

But to be more exact, because bitcoin uses 256-bit numbers, a randomly generated private key starts out looking like this:

Yes, this is still a number. It’s just in binary, which is a elemental way of storing numbers in a computer. Because you know, Bitcoin is a computer program after all.

Anyway, we can easily convert this private key from binary to decimal:

Or to hexadecimal:

It doesn’t make a difference. They’re all the same number, and they’re all the same private key.

Because after all, a private key is just a number.

A raw private key is commonly shown in hexadecimal format.

Summary

Any Bitcoins sent to the address 1CC3X2gu58d6wXUW_SAMPLE_ADDRESS_DO_NOT_SEND_MffpuzN9JAfTUWu4Kj can be spent by anybody who knows the private key implementing it in any of the three formats, regardless of when the bitcoins were sent, unless the wallet receiving them has since made use of the coins generated.
The private key is only needed to spend the bitcoins, not necessarily to see the value of them.

If a private key controlling unspent bitcoins is compromised or stolen, the value can only be protected if it is immediately spent to a different output which is secure.
Because bitcoins can only be spent once, when they are spent using a private key, the private key becomes worthless.
It is often possible, but inadvisable and insecure, to use the address implemented by the private key again, in which case the same private key would be reused.

Эффект критической ошибки

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

Снижение стоимости Биткоина как следствие появление серьезного бага в системе станет фатальным. Инвесторов не интересуют трудности, которые преподносят им акции или цифровые деньги. Если ошибка случилась однажды, сможет повториться и потом. Потерять вложенные финансы не хочет никто.

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

Как переустановить кошелек Exodus.

Вот пошаговая инструкция, будьте с ней предельно внимательны.

1. Экспортируйте все приватные ключи из вашего старого кошелька.

Здесь описан процесс. Последовательно достаньте private key для биткоина и альткоинов, затем – через вкладку Ethereum Tokens экспортируйте ключи к токенам.

Обратите внимание: у токенов ERC20 будет один общий private key. С его помощью можно открыть кошелек MyEtherWallet, и уже дальше решить: оставить токены в новом Exodus или перевести на другой кошелек.. Так как все токены сидят на одном private key, то и перевод самого Ethereum в вашем кошельке следует выполнять в последнюю очередь (он понадобится для оплаты Gas Limit)

Если вы сразу выведете весь эфир, а токены оставите, то придется заново пополнять кошелек

Так как все токены сидят на одном private key, то и перевод самого Ethereum в вашем кошельке следует выполнять в последнюю очередь (он понадобится для оплаты Gas Limit). Если вы сразу выведете весь эфир, а токены оставите, то придется заново пополнять кошелек.

  • Exodus экспортирует приватные ключи на рабочий стол.
  • Сохраните ключи в архив с паролем (на всякий случай, дайте архиву название, не связанное с Exodus и Key).
  • Перенесите архив на флешку, которую предварительно отформатировали.

Хранить приватные ключи и seed фразу на флешках не следует, это небезопасно. Помните об этом. Сразу после переустановки кошелька – удаляйте все копии (кроме той, которую спрячете в надёжном месте).

2. Удалите кошелек Exodus.

Как и любую другую программу с вашего компьютера. Затем удалите папку с кошельком (если вы работаете в Linux) и файлы Exodus из пользовательских директорий.

  • В Widows: C: > Users > YOUR-USERNAME > AppData > Roaming > Exodus.
  • В Mac: Hard Drive > Users > YOUR-USERNAME > Library > Application Support > Exodus.

Мне помогает поиск по ключевой фразе exodus – нашли папки с таким названием, удаляем.

Перезагрузите компьютер.

3. Скачайте новую версию Exodus.

Затем загрузите последнюю доступную версию кошелька под вашу операционную систему. Проверьте hash сумму файла-установщика.

Установите криптовалютный кошелек. Но не восстанавливайте его!

Вам нужно сначала импортировать приватные ключи (те, из архива, от предыдущего кошелька).

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

Так вы получите новые private keys, а затем – и seed фразу для них.

Сначала включите меню разработчика: Ctrl+Shift+D в любом месте в окне кошелька. Далее выберите Developer > Assets > Bitcoin > Move Funds (WIF).

И в открывшееся окно вставьте приватный ключ, соответствующей криптовалюты.

Текст private key содержится в файле, который вы экспортировали ранее из старой версии кошелька. Откройте его любым текстовым редактором, найдите графу private key.

Вот как выглядит приватный ключ (выделен жёлтым) к кошельку с Bitcoin Cash после экспорта, открыт в Notepad++:

Cкопируйте его значение и вставьте в форму:

Это для импорта баланса биткоина с вашего старого кошелька.

Аналогично импортируйте баланс для каждого актива. В последнюю очередь импортируйте ключи для Ethereum (именно он будет оплачивать комиссии за перевод токенов, если они были у вас на кошельке).

О каких токенах идёт речь?

OmiseGo, EOS, QTUM, SALT, Civic и другие. Для их перевода на другой кошелек потребуется Gas, который и списывается с вашего баланса ETH.

Поэтому сначала импортируем все токены, и в конце – вставляем приватный ключ для Ethereum. Сделаете наоборот – и придётся управлять токенам с кошелька MyEtherWallet (пополнить его эфиром и дальше делать переводы).

Сколько нужно ETH, чтобы перевести все ваши токены? Здесь описана последовательность расчётов и ссылка на удобный калькулятор Gas Limit и Gwei.

4. Генерируем новую seed фразу.

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

Заходим в меню Backup и следуем инструкциям в помощнике (придумываем пароль, обязательно сложный, записываем ручкой все 12 слов для seed, соблюдая их последовательность).

Тщательно сохраняем оффлайн пароль и seed фразу. Теперь ваш новый криптовалютный кошелек готов к работе.

Теперь можно спокойно участвовать в хардфорках и Airdrop со старого кошелька. На нём больше нет биткоинов, альткоинов и токенов, так что потеря seed фразы не будет опасной для вашего портфеля.

А ваш новый кошелек Exodus может и дальше хранить криптовалюты так же надёжно и безопасно, как и до форка.

Вывод: перед тем, как использовать seed фразу для переноса кошелька, обязательно выведите все криптовалюты на новый безопасный вариант.

Как работает приватный ключ с адресами?

Каждый приватный ключ биткоина также связан с адресом. Адрес или открытый ключ помогают вам указать других пользователей в сети, с которыми вы хотите заключить сделку (т.е. адрес вашего кошелька — это и есть открытый ключ). Подумайте об этом таким образом, вы могли бы отправлять платежи кому-то, если бы у вас не было номера их счета? Определенно! Но вы пошлете его не тому человеку. Это был сложный вопрос, но теперь вы поняли, к чему это приведет.

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

Как выглядит приватный ключ Bitcoin

Приватный ключ представляет собой 256-битное число, которое может быть записано в двоичной и шестнадцатеричной системе.

В двоичной системе комбинация из 256 символов нуля и единицы формирует приватный ключ биткоин. Например, 011001111010111… Но оперирование такими длинными ключами не слишком практично, поэтому приватный ключ сокращают до байтов и записывают в виде 32-байтного числа, где на каждый символ понадобится два числа из шестнадцатеричной системы, то есть 64 символа в диапазоне от 0 до 9 и от А до F. Например, F4453213303DA61F20BD67FC233AA37262. Диапазон комбинаций настолько велик, что если бы удавалось подбирать триллионы комбинаций в секунды, то для подбора потребовалось бы больше времени, чем существует наша планета.

Холодный или горячий

Все вышеперечисленные кошельки — горячие. Т.е. они имеют доступ к интернету, чисто теоретически, ваш приватный ключ кто-то может украсть, например, если вы будете ходить на всякие нехорошие сайты и кликать по нехорошим ссылкам.

Холодный кошелек установлен на компьютере без доступа к интернету. Можно ли так работать? Да, вполне. Вы можете на оффлайн компьютере подписать транзакцию о переводе Маше 1 BTC, скопировать текст транзакции на флешку, перенести на компьютер с доступом к интернету и отправить транзакцию в сеть. Звучит сложно (на самом деле это делается просто), но безопасность стоит того. Инструкция на английском как создать кошелек Electrum на двух компьютерах, один — оффлайн с приватным ключом, другой — онлайн, без приватного ключа.

Чем отличается публичный и приватный ключ биткоин

Параметр сравнения Публичный ключ Приватный ключ
Основная функция Публичный ключ используется в качестве адреса для кошелька. Приватный ключ биткоин кошелькаслужит для обеспечения доступа к хранилищу криптомонет владельца. На его основе составляется валидная цифровая подпись, обеспечивающая безопасность транзакций.
Вид Публичный ключ состоит из максимум 34 символов цифр и букв латинского алфавита, за исключением «о», «О», «l», “i”. Адрес может быть и короче, в случае если он начинается с нулей, которые автоматически упускаются. Секретный ключ состоит из 64 символов – из цифр от 0 до 9 и букв латинского алфавита от A до F.
Метод хранения Публичные ключи хранятся в открытом доступе и могут быть предоставлены третьим лицам в качестве адреса для транзакции. Цифровое значение приватного ключа знает только владелец. Закрытые ключи следует хранить в полной конфиденциальности и ни в коем случае не передавать третьим лицам.
Метод получения Генерируется при помощи хэширования приватного ключа. Генератор приватных ключей создает индивидуальный номер при регистрации кошелька.
Безопасность Публичный ключ можно узнать из реестра блокчейн-цепи или при помощи приватного ключа. Секретный ключ невозможно узнать при помощи математического вычисления из публичного ключа или цифровой подписи. Ключ сохраняется только пользователем и никогда не транспортируется при операциях.

Для чего нужен приватный ключ?

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

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

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

Эффект критической ошибки

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

Снижение стоимости Биткоина как следствие появление серьезного бага в системе станет фатальным. Инвесторов не интересуют трудности, которые преподносят им акции или цифровые деньги. Если ошибка случилась однажды, сможет повториться и потом. Потерять вложенные финансы не хочет никто.

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

Encryption

Encryption has been around for centuries. Encryption is the process of transforming information into a form that is unreadable by anyone other than those the information is intended for.  It has long been used by the military and governments to protect communications.

In today’s world, we use encryption to protect a variety of data, both in transit and at rest. It is used to protect home Wi-Fi networks, mobile telephones, ATM machines, secure websites and a slew of other devices and services.

Secure your calls and messages with encryption! Find out how.

Encryption makes use of an algorithm (also called a cipher) to transform information into an unreadable format and requiring a “key” to decrypt the data into its original, readable format.  A key for electronic/digitally encrypted information is really just bits of code that use an algorithm to lock and unlock information.

Exporting private keys

Private keys are long strings of letters and numbers that are literally the key to spending your dogecoin. Each wallet
has a number of private keys (one for each address). You can back up your private keys for a MultiDoge wallet into a
text file called a ‘private key export file’. You can password protect this text file to prevent other people reading
this data.

How to export the private keys in a wallet

  1. In the ‘ Wallets’
    side panel choose the wallet you want to export the private keys for.
  2. Select the menu option ‘Tools |  Export Private Keys’. The ‘ Export
    Private Keys’ screen appears.
  3. By default, the private keys file is called the same as your wallet file, only with an extension ‘key’ rather than
    wallet. You can see this in the following screenshot:
  4. If you want to output the private key file to a different directory or filename click on the ‘Export to. . .’
    button. A file chooser opens and you can select the file to save to.
  5. It is strongly recommended that you password protect your private key export files. To do this, click on
    the ‘Password protect export file’ radio button. Enter the password you want to use in the ‘Password’ field and then
    repeat the same password in the ‘Repeat password’ field. If they match you get a little green tick on the right hand
    side.
  6. To output the private keys to the output file specified, click on the button ‘ Export
    private keys’. The private key file is written and a success message appears. If the export of the private key file
    fails for any reason the error message is given on screen.
  7. After the export file is written, it is then verified by reading the file back in again and checking the keys in
    the file match the keys in the wallet. A verification message is given if this is successful.

Export file format (no password)

Below is an example of a private key export file containing demonstration private keys. You typically use Notepad or similar when working with this file.

# KEEP YOUR PRIVATE KEYS SAFE !
# Anyone who can read this file can spend your dogecoin.
#
# Format:
#   <Base58 encoded private key>]
#
#   The Base58 encoded private keys are the same format as
#   produced by the Satoshi client/ sipa dumpprivkey utility.
#
#   Key createdAt is in UTC format as specified by ISO 8601
#   e.g: 2011-12-31T16:42:00Z . The century, 'T' and 'Z' are mandatory
#
Labc123abc123abc123abc123abc123abc123abc123abc123abc 2013-01-01T12:00:00Z
Kdef456def456def456def456def456def456def456def456def 2013-01-01T12:00:00Z
# End of private keys

The key (shown in bold) begins with either «L» or «K». The date is there to allow import software to know when the key was created to avoid looking further back in history
than is necessary. Don’t change the date to be more recent as doing so will very likely cause a failed import and an incorrect balance.

Export file format (password protected)

Below is an example of a password protected private key export file containing demonstration private keys. You typically use MultiDoge or OpenSSL when working with this file.

U2FsdGVkX1+YqTr9vabcfVlfKlCVTjR7kEg/xD4rEUB1tBBQm6chWSOSIUyJKK/9yjxFSHkge/xI
UCFq3MfFKqUbRnYcmOhNLBabcGRrbvsx3AawNvzp1sdHFXNvH3I+INMtYaoTjMEJVkQM8KnaUwZI
GE5PYKtMHncv+2pYA1/3Lg09hPA++jbvwL7L+NH6ZcljvYZxseu+3M45YNK1CJ/4xQJ+Yvo6OVqJ
nL7xIR0=

The content is encrypted (AES256, password-based key derivation) so can only be decrypted by special software and the provision of a password.

The MultiDoge wiki provides
detailed technical information about the file format.

If you are intending to store exported keys for a very long time and are concerned about code existing to open them far in the future then we recommend the following:

  • Make a copy of the MultiDoge source code (fork on GitHub)
  • Decompile a binary of the MultiDoge JAR (standard tools exist for this)

Back to help contents