Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
3 июля 2016, 12:04:04 PM   # 1
 
 
Сообщения: 101
Цитировать по имени
цитировать ответ
по умолчанию Re: Re: Coldstorage и вручную подписания TRX от CLI (с помощью OpenSSL) - решена

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я хочу, чтобы в дальнейшем понять процесс подписания, особенно когда речь идет о холодильниках, поэтому я построил набор скриптов, для OpenBSD / OSX / Linux.
Я знаю о Оружейной, JavaScript библиотеки, ciyam или других веб-страниц для холодного хранения и подписания ... не цель здесь.

На основании какого-то старого сообщения Питера Wuille (29 сентября 2012 года, "почему OpenSSL?") Вот:

--> "Мы используем его для подписания ECDSA и проверки ..."
Я думал, что я хотел бы использовать OpenSSL, чтобы подписать и проверить свой код. (Это еще действующий подход?)

Я создал сырой TRX, следуя за первые 13 шагов здесь:
http://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx
и, конечно, при поддержке
https://en.bitcoin.it/wiki/Protocol_specification#tx
Исследование с различными инструментами в автономном режиме показывает сырой TRX "выглядит хорошо", Необработанные TRX производит один и тот же хэш SHA256, как на веб-странице.
Тогда я хотел бы использовать "мои собственные ключи" построить сырой TRX, и получить его подписал с OpenSSL. Мой беззнаковое сырой TRX будет выглядеть следующим образом:

010000000167cc10a3b7c5c52435770b6a1cb34a6a783803f028c42e95f9364d21e64b43c301000 0001976A9147A8911A06EF9A75A6CB6AF47D72A99A9B6ECB77988ACffffffff01EC8A0100000000 001976A9140DE4457D577BB45DEE513BB695BDFDC3B34D467D88AC00000000

Для того, чтобы подписать его, OpenSSL требует ключ DER / PEM для этого в командной строке. Как их получить?
Я использовал (выбросить) бумажник, и сбрасывал Priv ключа. Я преобразовал WIF-с privkey с помощью преобразования base58 в шестнадцатеричный формат.
На открытом ключе:
в сценарии оболочки, я не хочу, чтобы заново создать математику ЕС, чтобы получить Публичные от privkey (возможно позже, используя Ьс и постоянный ток). Так что я посмотрел предыдущую TRX (5a62b8697e33b59255ddab10b8f66ece0d5efec91c72134d07d90e03db61e051), что шестнадцатеричный код для Публичного был ... Я приложил эту шестигранную строку со всеми ASN1 пухом, а затем создается с помощью преобразования base64 в формате OpenSSL PEM. Я проверил файл PEM с "OpenSSL asn1parse", И испытание "OpenSSL знак" с файлом примера sha256.txt. После подписания, я "OpenSSL проверить"«D это. Результат от OpenSSL является "Подпись проверена успешно", Так внутренне OpenSSL "работает" правильно, собств / паб матч пара ключей (см код ниже).
Когда я затем собрать TRX и подписать с OpenSSL, я получаю это:

010000000167cc10a3b7c5c52435770b6a1cb34a6a783803f028c42e95f9364d21e64b43c301000 0006A47304402206548cb4429b40f314711d46aa2e582b71041091f70064b276f2cbb800bb73d43 022011b6fe802a4f25dfe73a0c764add96011e43a02c41d2dd65164e2a4f0177ca8b01210293ccb 70fee4d33179c93bade0a9fefd62fde5ac53adc017649f513eec599509cffffffff01EC8A010000 0000001976A9140DE4457D577BB45DEE513BB695BDFDC3B34D467D88AC00000000

И когда я пытаюсь транслировать через blockchain.info/de/pushtx, я получаю сообщение "Сценарий привел к не-истинного стека: []",
Очевидно OP_EQUALVERIFY, а затем OP_CHECKSIG не получают ожидаемого результата.
Таким образом, я предполагаю, что мой ключ преобразования OpenSSL является "как-то" неправильно.  

Я дважды проверил точно такой же неподписанный сырец TRX в Bitcoin-QT, и пытался подписать его вручную в Bitcoin-QT, и транслируются успешно:

signrawtransaction «010000000167cc10a3b7c5c52435770b6a1cb34a6a783803f028c42e95f9364d21e64b43c301000 0001976A9147A8911A06EF9A75A6CB6AF47D72A99A9B6ECB77988ACffffffff01EC8A0100000000 001976A9140DE4457D577BB45DEE513BB695BDFDC3B34D467D88AC00000000' «[{"TXID":"c3434be6214d36f9952ec428f00338786a4ab31c6a0b773524c5c5b7a310cc67","Vout": 1,"scriptPubKey":"76A9147A8911A06EF9A75A6CB6AF47D72A99A9B6ECB77988AC"}], [ „$ My_privkey“]

{
  "наговор": "010000000167cc10a3b7c5c52435770b6a1cb34a6a783803f028c42e95f9364d21e64b43c301000 0006a47304402203d15e12271521adb6e42c3f6a5eb5020883dd2042f23783e11385fb895fa1890 02200a84ba8e8055123abb22400b5dd90dbe670a1fa1cbbc206d5da59e54f4cc9c3501210293ccb 70fee4d33179c93bade0a9fefd62fde5ac53adc017649f513eec599509cffffffff01ec8a010000 0000001976a9140de4457d577bb45dee513bb695bdfdc3b34d467d88ac00000000",
  "полный": правда
}

Любая помощь приветствуется ...  


Код я использую, чтобы собрать PEM ключ подписать с OpenSSL:

Код:
#! / Bin / ш
# Пример ключи от веб-страницы:
hex_privkey = 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
hex_pubkey = 0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6
sha256_string = 9302bda273a887cb40c13e02a50b4071a31fd3aae3ae04021b0b843dd61ad18e

# ASN1 структуры заправки:
pre_string = $ (эхо "30740201010420" )
mid_string = $ (эхо "a00706052b8104000aa144034200" )

эхо "использовать предварительно определенные строки ASN.1 для конкатенации PEM файл_ключа:"
эхо "  pre_string: $ pre_string"
эхо "  privkey: $ hex_privkey"
эхо "  mid_string: $ mid_string"
результат = $ (эхо $ hex_pubkey | вырезать -b 1-66)
эхо "  Публичных: $ результат"
результат = $ (эхо $ hex_pubkey | вырезать -b 67-)
эхо "                   $ результат"

# Собрать шестигранный ключ
результат = $ (эхо $ pre_string $ hex_privkey $ mid_string $ hex_pubkey | СЭД «s / [[: xdigit:]] \ {2 \} / \\ х&/г' )
Printf "$ результат" > tmpfile

эхо " "
эхо "и base64 этот файл. PEM также хотят ключевые файлы, некоторые интересные окрестности: "
Результат = $ (base64 tmpfile)
эхо "----- НАЧАТЬ EC PRIVATE KEY -----" > privkey.pem
Эхо $ результат | сократить -b 1-64   >> privkey.pem
Эхо $ результат | сократить -b 65-128 >> privkey.pem
Эхо $ результат | сократить -b 129-   >> privkey.pem
эхо "----- END EC PRIVATE KEY -----" >> privkey.pem
кот privkey.pem

эхо " "
эхо "соответствующий pubkey.pem (OpenSSL ес -в privkey.pem -pubout отъезда pubkey.pem)"
OpenSSL ес -in privkey.pem -pubout отъезда pubkey.pem > / DEV / нуль 2>&1
кот pubkey.pem

эхо " "
эхо "проверки подписи процесса с данными испытаний (OpenSSL asn1parse -в privkey.pem)"
Эхо $ sha256_string > sha256.txt
OpenSSL asn1parse -в privkey.pem
эхо "->OpenSSL pkeyutl -знак -в sha256.txt -inkey privkey.pem -keyform PEM > privkey_pem.sig"
OpenSSL pkeyutl -знак -в sha256.txt -inkey privkey.pem -keyform PEM > privkey_pem.sig
эхо "->OpenSSL pkeyutl -verify -в sha256.txt -inkey privkey.pem -sigfile privkey_pem.sig"
OpenSSL pkeyutl -verify -в sha256.txt -inkey privkey.pem -sigfile privkey_pem.sig
эхо " "
pebwindkraft сейчас офлайн Пожаловаться на pebwindkraft   Ответить с цитированием Мультицитирование сообщения от pebwindkraft Быстрый ответ на сообщение pebwindkraft


Как заработать Биткоины?
Без вложений. Не майнинг.


12 июля 2016, 2:08:25 PM   # 2
 
 
Сообщения: 101
Цитировать по имени
цитировать ответ
по умолчанию Re: Re: Coldstorage и вручную подписания TRX от CLI (с помощью OpenSSL) - решена

Получил 1806 Биткоинов
Реальная история.





Здравствуй,

Основная проблема является понимание того, как выйти из гекса ключей PEM, чтобы иметь возможность войти в автономном режиме с OpenSSL из оболочки. С некоторой поддержкой над здесь я получил это работает:

http://bitcoin.stackexchange.com/questions/46455/verifying-a-bitcoin-trx-on-the-unix-cmd-line-with-openssl

Второе, что нужно помнить, чтобы всегда работать на бинарных / исходных данных, а не шестнадцатиричное представление данных. А может быть, третий, понимая двойное хеширование с SHA256.

Я тогда создал сырую сделку, следуя логике 19 шагов отсюда:

http://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx

Тогда я использовал OpenSSL, как это описано выше, для проверки TRX. Это, наконец, дал мне сделку, что я мог бы скопировать и вставить в https://blockchain.info/de/pushtx.

У меня не было какой-либо проверки ошибок кода, реализованного (пока), так что каждый сейчас и потом я получил «S-значение высокой погрешности». За спецификации, втор значение больше, чем N / 2 не допускается (N является порядок кривой). Кроме того, я не добавил строгую проверку МЭД. Эта работа в процессе.

Счастливый пользователь холодного кошелька прямо сейчас 
pebwindkraft сейчас офлайн Пожаловаться на pebwindkraft   Ответить с цитированием Мультицитирование сообщения от pebwindkraft Быстрый ответ на сообщение pebwindkraft



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW