Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
24 января 2011, 9:31:58 PM   # 1
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Это одна из моих заключительных основных контрольно-пропускных пунктов, мне нужно пройти для моей реализации Bitcoin, и я с трудом понимая все, что происходит в коде Satoshi, и не нашло какие-либо другие реализации Bitcoin сценариев, однако. Пару недель назад на IRC, ArtForz объяснил некоторые из сценариев, но мы не получили в подробности о OP_CHECKSIG. Было отмечено, однако, что он создает новую транзакцию, содержащую подмножество входов / выходов, и что новая транзакция затем хэшированного.

Может / будет кто-нибудь, пожалуйста, объясните это более подробно?

Я создал ссылку на страницу исключительно о OP_CHECKSIG на вики, если кто-то хочет добавить объяснение есть: https://en.bitcoin.it/w/index.php?title=OP_CHECKSIG&Действие = редактировать&redlink = 1

Благодаря!
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение


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


24 января 2011, 11:28:39 PM   # 2
 
 
Сообщений: 75
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

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





https://en.bitcoin.it/wiki/OP_CHECKSIG

Надеюсь, что это помогает, удачи в реализации, с нетерпением ждем его.
dirtyfilthy сейчас офлайн Пожаловаться на dirtyfilthy   Ответить с цитированием Мультицитирование сообщения от dirtyfilthy Быстрый ответ на сообщение dirtyfilthy

25 января 2011, 12:40:31 AM   # 3
 
 
Сообщения: 314
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Я сделал некоторые изменения. Это может быть хорошо, чтобы объяснить, что различные значения SIGHASH предназначены для использования, и будут ли они работать в это время.
Hal сейчас офлайн Пожаловаться на Hal   Ответить с цитированием Мультицитирование сообщения от Hal Быстрый ответ на сообщение Hal

26 января 2011, 5:20:05 AM   # 4
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Благодаря dirtyfilthy и Hal! Я считаю, что теперь у меня есть это в основном разобрался. В опкоды, в том числе OP_CHECKSIG, работают, как и ожидалось, но моя функция проверки подписи возвращает ложь, в результате чего OP_CHECKSIG возвращает 0.

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

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

Еще раз спасибо!
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

26 января 2011, 10:53:57 AM   # 5
 
 
Сообщений: 75
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

общественный класс KeyTools {
   
   // кодирует открытый ключ в виде [0x04] [значение 32 байт «х»] [ «у» значение 32 байт]
   
   публичный статический байт [] encodePublicKey (ключ ECPublicKey) {
      net.dirtyfilthy.bouncycastle.math.ec.ECPoint р = EC5Util.convertPoint (key.getParams (), key.getW (), ложные);
      вернуть p.getEncoded ();
   }
   
   // декодирует сырой открытый ключ в виде [0x04] [значение 32 байт «х»] [ «у» значения 32 байт]
   
   общественности статической ECPublicKey decodePublicKey (байт [] кодируется) {
      ECNamedCurveParameterSpec PARAMS = ECNamedCurveTable.getParameterSpec ("secp256k1");
      KeyFactory факт;
      пытаться {
         Факт = KeyFactory.getInstance ("ECDSA", "DFBC");
      } Задвижка (NoSuchAlgorithmException е) {
         проливают новый RuntimeException (е);
      } Задвижка (NoSuchProviderException е) {
         проливают новый RuntimeException (е);
      }
      ECCurve кривой = params.getCurve ();
      java.security.spec.EllipticCurve ellipticCurve = EC5Util.convertCurve (кривая, params.getSeed ());
       java.security.spec.ECPoint точка = ECPointUtil.decodePoint (ellipticCurve, кодируются);
       java.security.spec.ECParameterSpec params2 = EC5Util.convertSpec (ellipticCurve, PARAMS);
       java.security.spec.ECPublicKeySpec KeySpec = новый java.security.spec.ECPublicKeySpec (точка, params2);
       пытаться {
         возврата (ECPublicKey) fact.generatePublic (KeySpec);
      } Задвижка (InvalidKeySpecException е) {
         проливают новый RuntimeException (е);
      }
      
   }
   

   государственный статические байты [] signData (ключ ECPrivateKey, байты данные []) {
      Подпись с;
      пытаться {
         s = Signature.getInstance ("ECDSA", "DFBC");
         s.initSign (ключ);
         s.update (данные);
         вернуть s.sign ();
      } Задвижка (NoSuchAlgorithmException е) {
         проливают новый RuntimeException (е);
      } Задвижка (NoSuchProviderException е) {
         проливают новый RuntimeException (е);
      } Задвижка (InvalidKeyException е) {
         проливают новый RuntimeException (е);
      } Задвижка (SignatureException е) {
         проливают новый RuntimeException (е);
      }
      
   }
   

   общественности статической KeyPair generateKeyPair () {
      ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec ("secp256k1");
      KeyPairGenerator генератора;
      пытаться {
         Генератор = KeyPairGenerator.getInstance ("ECDSA", "DFBC");
         generator.initialize (ecSpec, новый SecureRandom ());
         KeyPair пара = generator.generateKeyPair ();
         ContentValues ​​initialValues ​​= новые ContentValues ​​();
         вернуть пару;
      } Задвижка (NoSuchAlgorithmException е) {
         проливают новый RuntimeException (е);
      } Задвижка (NoSuchProviderException е) {
         проливают новый RuntimeException (е);
      } Задвижка (InvalidAlgorithmParameterException е) {
         проливают новый RuntimeException (е);
      }
      
   }

   общественности статический булево verifySignedData (ключ ECPublicKey, байты данные [], байты сиг []) {
      Подпись с;
      пытаться {
      s = Signature.getInstance ("ECDSA", "DFBC");
      s.initVerify (ключ);
      s.update (данные);
      вернуть s.verify (Sig);
      } Задвижка (NoSuchAlgorithmException е) {
         проливают новый RuntimeException (е);
      } Задвижка (NoSuchProviderException е) {
         проливают новый RuntimeException (е);
      } Задвижка (InvalidKeyException е) {
         проливают новый RuntimeException (е);
      } Задвижка (SignatureException е) {
         проливают новый RuntimeException (е);
      }
   }

}


Я переименовал пакеты из org.bouncycastle в net.dirtyfilthy.bouncycastle, чтобы не вступать в противоречие с (неполных) андроида библиотек BouncyCastle. Также переименована в строке поставщика из "До нашей эры" в "DFBC" по той же причине. Не уверен, что если ваш развивается андроид или только для стандартных JavaVM, в этом случае вы должны переименовать их в свои обычные имена.
dirtyfilthy сейчас офлайн Пожаловаться на dirtyfilthy   Ответить с цитированием Мультицитирование сообщения от dirtyfilthy Быстрый ответ на сообщение dirtyfilthy

26 января 2011, 2:05:37 PM   # 6
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Еще раз спасибо dirtyfilthy! Удивительно, но оказывается, я генерации ключей, подписания и проверки данных точно так же, как и вы.

Таким образом, это означает, что я что-то недоразумение при создании копии транзакции или суб-скрипт, который будет использоваться в копии транзакции.

Я работаю с сделкой 0f898c5494eaa468d12cf0630a0c0b238cc1149c1c53bbc592d16497094e95ff:
http://blk.bitcoinwatch.com/b?h=103958
http://blockexplorer.com/t/AgktCstTqJ

Код:
Вот разобрано версия этой сделки (обычная версия шестнадцатеричной ниже):

Tx:
01 00 00 00 - версия
03 - TxIn счетчик

TxIn:
  минус:
    30 f3 70 1f 9b c4 64 55 2f 70 49 57 91 04 08 17
    с 77 7a d5 изд e1 6e 52 9f кд 0c 0e 94 91 56 94 - предыдущий ТЙ хэш
    00 00 00 00 - индекс пред TxOut

  8в - длина scriptSig
  49 30 46 02 21 00 74 f5 6b 0b 25 4f 5а 37 е7 52
  51 45 9са 7 23 b6 DF CB 86 8а с7 46 7e дд 9а 6f
  дд 1d 96 98 71 02 21 будет 00 88 94 29 8а еа b6 91
  61 ч 34 1c 49 с0 26 86 а8 1d 8c бб 73 94 0f 91
  7f а0-е изд 71 54 68 6d 3e 5b 01 41 04 47 90 56 d4
  1f 39 6c 8а 9e FC 14 48 6б с1 98 88 4b 83 79 A1
  Ьс ас 2e 0b е2 D8 52 51 34 74 AB 2f 30 1a 9а ча
  36 60 6e 5d 29 аа 23 8а 9e 29 93 00 31 50 42 3d
  f6 92 45 63 64 2d 4а Fe 9b f4 Fe 28 - scriptSig
  FF FF FF FF - последовательность

TxIn:
  минус:
    72 14 2b f7 68 6c E9 2c 6d е5 b7 33 65 Б.Ф. B9 d5
    9b b6 0c 2с 80 98 59 58 2d с1 е6 а3 b0 8e а6 89 - предыдущая ТХ хэш
    00 00 00 00 - индекс пред TxOut
  4a - длина scriptSig
  49 30 46 02 21 00 Ьс е4 3а d3, ас Ьс 79 b0 24 7e
  54 с8 с9 1e переменного тока 1c f9 03 75 05 00 01 0e d1 FD 81
  18 54 D8 5b с2 1a 02 21 00 99 2a 6f 6f 6f 2f Е.Б.
  62 d3 70 6f 3b 9а аа b8 8d 9f 11 32 95 6a 1d сл
  a9 26 кд 55 6e d5 53 60 DF 01 - scriptSig
  FF FF FF FF - последовательность

TxIn:
  минус:
    d2 81 28 бб b6 20 7c 1c 3d 0a 63 0c с6 19 постоянного тока 7e
    7b еа 56 переменного тока 19 a1 да b1 27 с6 2с 78 фа 1b 63 2c - пред ТХ хэш
    00 00 00 00 - индекс пред TxOut
  49 - длина scriptSig
  48 30 45 02 20 20 97 57 36 81 61 53 77 08 29 FD
  d8 9b b1 E9 d 6 48 00 79 49 ес FD 78 изд 9b 51 A9
  63 24 65 18 CB 02 21 00 кд 0f 7c 30 21 39 16 48
  2b 6e 16 6d 8а 4f 2b 98 1f 77 7e b1 84 кд 8 49
  5f 1b 3d 36 90 FB Б.Ф. 2d 01 - scriptSig
  FF FF FF FF - последовательность

01 - TxOut счетчик

TxOut:
  00 a6 f7 5F 02 00 00 00 - значение
  19 - длина scriptPubKey
  76 а9 14 9e 35 D9 3с 77 92 шд ча объявления 56 97 дд Е.Б.
  f0 43 53 d9 a5 e1 96 88 ас - scriptPubKey
00 00 00 00 - время блокировки


Обычные шестнадцатеричный:
01 00 00 00 03 30 f3 70 1f 9b c4 64 55 2F 70 49 ..... 0.p ... dU / ИЭТ
57 91 04 08 17 77 в.п. 7а d5 изд e1 6e 52 9е кд 0с W ..... WZ ... NR ...
94 91 0e 56 94 00 00 00 00 49 30 8c 46 02 21 00 ... V ...... I0F.!.
f5 74 6b 0b 25 4f 5а 37 е7 52 51 45 23 9с 7а b6 .tk.% OZ7.RQE.z #.
DF CB 86 8а с7 46 7e дд 9а 6f дд 1d 96 98 71 будет ..... Р ~ ..o .... кв.
02 21 00 88 94 8 еы 29 b6 91 61 ч 34 1c 49 c0.! .....) .. a.4.I.
26 86 а8 1d 8c бб 73 94 0f 91 7f а0 ред 71 54 68   &..... s ...... QTH
6d 3e 5b 01 41 04 47 90 56 d4 1f 39 6c 8а 9e FC м>[.A.G..V.9l ...
14 48 6б с1 98 88 4b 83 79 а1 Ьс ас 2e 0b e2 d8 .HK ... K..y ......
52 51 34 74 AB 2f 30 1a 9а ча 36 60 6e 5d 29 аа RQ4.t / 0 ... 6`n]).
23 8а 9e 29 93 00 31 50 42 92 3d f6 45 63 64 2d # ..) .. 1PB = .. Ecd-
4а Fe 9b f4 Fe 28 FF FF FF FF 72 14 2b f7 68 6c J .... (.... г. +. HL
E9 2c 6d е5 b7 33 65 Б.Ф. B9 d5 9b b6 0c 2с 80 98., m..3e ......, ..
2d 59 58 с1 е6 а3 b0 8e а6 89 00 00 00 00 49 4a -YX ........... СО
30 46 02 21 00 Ьс e4 3a d3 ас Ьс 79 b0 24 7e 54 0F ...:.!. ... у $ ~ T
с8 с9 1e переменного тока 1c f9 03 75 05 00 01 0e d1 FD 81 18 ....... у ........
54 d8 5b c2 1a 02 21 00 99 2a 6f 6f 2f еь 6f 62 T. [...! .. * оо / .ob
d3 70 6f 3b 9а аа b8 8d 9f 11 32 95 6а 1d и далее а9 .po; ...... 2.j ...
26 кд 55 6e d5 53 60 DF 01 FF FF FF FF 81 28 d2   &.Un.S` ........ (
бб b6 20 7c 1c 3d 0a 63 0c с6 19 постоянного тока 7e 7b еа 56 .. |.. = с .... ~ {.V
переменный ток 19 a1 да b1 27 c6 2с 78 метрономов 1б 63 2в 00 00 00 ......, x..c, ...
00 49 48 30 45 02 20 20 97 57 36 81 61 53 77 08 .IH0E. .W6.aSw.
FD 29 d8 9b b1 e9 d6 48 00 79 49 ек FD эд 78 9b.) ..... H.yI ... х.
51 a9 63 24 центибар 65 18 02 21 00 кд 0f 7с 30 21 39 Q.c $ .e .. ... |! 0 9
16 48 2b 6e 16 6d 8а 4f 2b 98 1f 77 7e б1 84 кд .H + n.m.O + .. ш ~ ...
8 49 5f 1b 3d 36 90 FB Б.Ф. 2d 01 FF FF FF FF 01 .I _. = 6 ...-......
00 a6 f7 5F 00 00 02 00 19 76 a9 14 9e 35 d9 3в ..._..... v ... 5.<
77 92 шд ча объявления 56 97 дд ЕВ f0 43 53 D9 а5 e1 96 мас .... В .... CS ....
88 AC 00 00 00 00 ......


Я пытаюсь проверить ввод транзакций, который указывает на единственный выход сделки 30f3701f9bc464552f70495791040817ce777ad5ede16e529fcd0c0e94915694:
http://blk.bitcoinwatch.com/b?h=103640
http://blockexplorer.com/t/6d3E7ZWBDe

Код:
Проанализированная версия копии транзакции при попытке проверки ввода (простой варианта HexDump ниже):

Tx:
01 00 00 00 - версия
03 - TxIn счетчик

TxIn:
  минус:
    30 f3 70 1f 9b c4 64 55 2f 70 49 57 91 04 08 17
    с 77 7a d5 изд e1 6e 52 9f кд 0c 0e 94 91 56 94 - предыдущая TxOut хэш
    00 00 00 00 - индекс

  5b - длина scriptSig
  41 04 47 90 56 d4 1f 39 6c 8а 9e FC 14 48 6б с1
  98 88 4b 83 79 а1 Ьс ас 2e 0b е2 D8 52 51 34 AB
  74 2f 30 1a 9а ча 36 60 6e 5d 29 аа 23 8а 9e 29
  93 00 31 50 42 92 3d f6 45 63 64 2d 4а Fe 9b f4
  Fe 28 76 14 02 а9 Б.Ф. 4b 28 89 с6 объявления а8 19 0c 25
  2e 70 шд е1 а1 90 9f 96 17 88 переменного тока - scriptSig (включает в себя scriptPubkey
                                                                  из Prev TxOut)
  FF FF FF FF - последовательность

TxIn:
  минус:
    72 14 2b f7 68 6c E9 2c 6d е5 b7 33 65 Б.Ф. B9 d5
    9b b6 0c 2с 80 98 59 58 2d с1 е6 а3 b0 8e а6 89 - предыдущая TxOut хэш
    00 00 00 00 - индекс
  00 - длина scriptSig
  FF FF FF FF - последовательность

TxIn:
  минус:
    d2 81 28 бб b6 20 7c 1c 3d 0a 63 0c с6 19 постоянного тока 7e
    7b еа 56 переменного тока 19 a1 да b1 27 с6 2с 78 фа 1b 63 2c - предыдущая TxOut хэш
    00 00 00 00 - индекс
  00 - длина scriptSig
  FF FF FF FF - последовательность

TxOut граф
  01 - TxOut счетчик
  00 a6 f7 5F 02 00 00 00 - Сделка Значение
  19 - длина scriptPubKey
  76 а9 14 9e 35 D9 3с 77 92 шд ча объявления 56 97 дд Е.Б.
  f0 43 53 d9 a5 e1 96 88 ас - scriptPubKey

00 00 00 00 - последовательность


Обычные шестнадцатеричный:
01 00 00 00 03 30 f3 70 1f 9b c4 64 55 2F 70 49 ..... 0.p ... dU / ИЭТ
57 91 04 08 17 77 в.п. 7а d5 изд e1 6e 52 9е кд 0с W ..... WZ ... NR ...
94 91 0e 56 94 00 00 00 00 41 04 5б 47 d4 90 56 ... V ..... [A.G..V
1f 39 6c 8а 9e FC 14 48 6б с1 98 88 4b 83 79 a1 .9l .... Hk ... K..y
Ьс ас 2e 0b е2 D8 52 51 34 74 AB 2f 30 1a 9а ча ...... RQ4.t / 0 ...
36 60 6e 5d 29 аа 23 8а 9e 29 93 00 31 50 42 3d 6`n]). # ..) .. 1PB =
f6 92 45 63 64 2d 4а Fe 9b f4 Fe 28 76 14 02 а9 ..Ecd-J .... (V ...
Б.Ф. 4b 28 89 с6 объявления а8 19 0c 25 2e 70 шд е1 а1 90 .К (......%. п ....
9f 96 17 88 переменного тока FF FF FF FF 72 14 68 2b f7 6c E9 ......... т. +. Гл.
2c 6d е5 b7 33 65 Б.Ф. B9 d5 9b b6 0c 2с 80 98 2d, m..3e ......, ..-
59 58 с1 е6 а3 b0 8e a6 89 00 00 00 00 00 FF FF YX ..............
FF FF d2 81 28 бб b6 20 7c 1c 3d 0a 63 0c с6 19 .... (.. |.. = с ...
постоянный ток 7e 7b еа 56 переменный ток 19 a1 да b1 27 с6 2с 78 фа 1b. ~ {.V ..... '., х ..
63 2в 00 00 00 00 00 FF FF FF FF 01 00 a6 f7 5f с, ............._
02 00 00 00 19 76 a9 14 9e 35 d9 3в 77 92 шд са ..... v ... 5.<ш ...
Объявление 56 97 дд Е.Б. f0 43 53 d9 a5 e1 96 88 00 00 переменного .V .... CS ........
00 00 ..


Это просто обычный клиент JVM на основе написаны на Clojure (http://clojure.org), Не предназначены для использования Android в этой точке.

Постскриптум dirtyfilthy, похоже, у вас есть ненужные строки кода в generateKeyPair функции ():
Код:
ContentValues ​​initialValues ​​= новые ContentValues ​​();


EDIT: Измененный байт-порядок транзакций хешей.
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

26 января 2011, 4:30:54 PM   # 7
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Да, это заняло какое-то время для меня, чтобы получить право, а также.

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

В конце концов, я сделал это инструментирование официального клиента и сделать его дамп, что это было хэширования. После исправления некоторых ошибок, которые я получил их, чтобы соответствовать и был в состоянии успешно отправить / получить монеты с моим собственным кодом Java.

Я действительно хотел бы выпустить этот код, чтобы помочь Вам! К сожалению, по причинам, я не буду углубляться в здесь, я не могу сделать это (на данный момент). Удачи!
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

26 января 2011, 7:08:47 PM   # 8
 
 
Сообщения: 314
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Я не понимаю, как это шестнадцатеричный дамп соответствует сделке. У Вас есть минус хеши, начиная с 30 f3, 72, 14 и d2 81, ни один из которых в сделке.
Hal сейчас офлайн Пожаловаться на Hal   Ответить с цитированием Мультицитирование сообщения от Hal Быстрый ответ на сообщение Hal

26 января 2011, 7:34:08 PM   # 9
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Я не понимаю, как это шестнадцатеричный дамп соответствует сделке. У Вас есть минус хеши, начиная с 30 f3, 72, 14 и d2 81, ни один из которых в сделке.

Это разница между порядком байтов, как вытащил из blk0001.dat и, как показано на сайтах, как blockexplorer и blk.bitcoinwatch.com. Я знаю, когда я подстановки блока или транзакция хэша в blkindex.dat файла, я для поиска наоборот, что показано на этих сайтах, и я, хотя я устанавливаю мои ChannelBuffer, чтобы маленькие обратный порядок байт, при чтении байта, а не числа , она должна быть читать их слева направо. В довершении, однако, мой пакета нюхать имеет также показали, что эти хэш, чтобы быть в обратном порядке, от того, что находится на blockexplorer и blk.bitcoinwatch.com.

Код:
Это обратный порядок байт из --------------------------------> Эта
945691940e0ccd9f526ee1edd57a77ce170804915749702f5564c49b1f70f330 - 30f3701f9bc464552f70495791040817ce777ad5ede16e529fcd0c0e94915694

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

EDIT: Я изменил байтовый порядок этих хэшей.
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

26 января 2011, 8:24:30 PM   # 10
 
 
Сообщения: 314
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Ничего себе, это странно, что порядок байт хэш восстанавливаются на проводе, как это. Вы пробовали воспроизвести опубликованный хэш транзакционных хэширования необработанной сделки? Это работает? Что вы получите, 0f89 ... как это на проводе, или наоборот, ff95 ... в blockexplorer есть это? И вам нужны байты обратной внедренных хэш в ОМ, чтобы получить правильный ответ?
Hal сейчас офлайн Пожаловаться на Hal   Ответить с цитированием Мультицитирование сообщения от Hal Быстрый ответ на сообщение Hal

26 января 2011, 8:37:34 PM   # 11
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Ничего себе, это странно, что порядок байт хэш восстанавливаются на проводе, как это. Вы пробовали воспроизвести опубликованный хэш транзакционных хэширования необработанной сделки? Это работает? Что вы получите, 0f89 ... как это на проводе, или наоборот, ff95 ... в blockexplorer есть это? И вам нужны байты обратной внедренных хэш в ОМ, чтобы получить правильный ответ?

Да, я могу взять сырую сделку от blk0001.dat или из проволоки и хэш его, и я получаю те же байты, которые показаны на этих веб-сайтах, но в обратном порядке. Из того, что я только что узнал в IRC, Bitcoin внутренне обрабатывает эти хэши, как Little Endian BigNumbers, а затем, когда их шестнадцатеричный код печатается, это в обратном порядке от фактических данных.
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

26 января 2011, 9:17:16 PM   # 12
 
 
Сообщения: 314
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Хорошо, я подтвердил, что хэши OK с помощью sha256sum и получает ваше значение, 0f898c5494eaa468d12cf0630a0c0b238cc1149c1c53bbc592d16497094e95ff. Таким образом, вопрос остается проверить сиговых.

Вы должны добавить 01 00 00 00 до конца, прежде чем хэш, для HashType.

Я не уверен, что ты scriptsig укорочения. Вы удалили знач нормально, но там, кажется, больше материала добавляется в конце, после Публичной.
Hal сейчас офлайн Пожаловаться на Hal   Ответить с цитированием Мультицитирование сообщения от Hal Быстрый ответ на сообщение Hal

26 января 2011, 9:36:29 PM   # 13
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Хорошо, я подтвердил, что хэши OK с помощью sha256sum и получает ваше значение, 0f898c5494eaa468d12cf0630a0c0b238cc1149c1c53bbc592d16497094e95ff. Таким образом, вопрос остается проверить сиговых.

Вы должны добавить 01 00 00 00 до конца, прежде чем хэш, для HashType.

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

Да, я добавляю эти 4 байта, прежде чем хэширования.

Что касается дополнительного материала после Публичных, что я (возможно, ошибочно) делать там, используя объединенные сценарии scriptSig (от TxIn) и scriptPubKey (от ПРЕД TxOut), с последующим удалением подписи и OP_CODESEPARATOR (которой нет ни в любые примеры, которые я пробовал до сих пор). Так что дополнительный материал является scriptPubKey ... это возможно, это не должно быть там, но даже если я удалю, что она до сих пор не проверяет, в любом случае, так что я пока не знаю, если это проблема, тоже.

Вот оригинальный scriptSig из TxIn:
Код:
49 30 46 02 21 00 74 f5 6b 0b 25 4f 5а 37 е7 52
51 45 9са 7 23 b6 DF CB 86 8а с7 46 7e дд 9а 6f
дд 1d 96 98 71 02 21 будет 00 88 94 29 8а еа b6 91
61 ч 34 1c 49 с0 26 86 а8 1d 8c бб 73 94 0f 91
7f а0-е изд 71 54 68 6d 3e 5b 01 41 04 47 90 56 d4
1f 39 6c 8а 9e FC 14 48 6б с1 98 88 4b 83 79 A1
Ьс ас 2e 0b е2 D8 52 51 34 74 AB 2f 30 1a 9а ча
36 60 6e 5d 29 аа 23 8а 9e 29 93 00 31 50 42 3d
f6 92 45 63 64 2d 4а Fe 9b f4 Fe 28


Размер подписи:
 49
Подпись:
 30 46 02 21 00 74 f5 6b 0b 25 4f 5 37 е7 52 51
 45 9са 7 23 b6 DF CB 86 8а с7 46 7e дд 9а 6f дд
 1d 96 98 71 02 21 будет 00 88 94 29 8а еа b6 91 61
 ча 34 1c 49 с0 26 86 а8 1d 8c бб 73 94 0f 91 7f
 а0 изд 71 54 68 6d 3e 5b 01


Сломался дальше:

Размер открытого ключа:
 41
Открытый ключ:
 04
 ИКС:
  47 d4 90 56 39 1f 6c 8а 9e FC 14 48 6б с1 98 88
  4b a1 83 79 Ьс ас 2e 0b е2 D8 52 51 34 74 AB 2f
 Y:
  30 1a 9а ча 36 60 6e 5d 29 аа 23 8а 9e 29 93 00
  31 50 42 92 3d f6 45 63 64 2d 4а Fe 9b f4 Fe 28

и вот объединенные сценарии с подписью удалено:
Код:
41 04 47 90 56 d4 1f 39 6c 8а 9e FC 14 48 6б с1
98 88 4b 83 79 а1 Ьс ас 2e 0b е2 D8 52 51 34 AB
74 2f 30 1a 9а ча 36 60 6e 5d 29 аа 23 8а 9e 29
93 00 31 50 42 92 3d f6 45 63 64 2d 4а Fe 9b f4
Fe 28 76 14 02 а9 Б.Ф. 4b 28 89 с6 объявления а8 19 0c 25
2e 70 шда е1 а1 90 9f 96 17 88 переменный ток


Сломался дальше:

Размер открытого ключа:
41
Открытый ключ:
04
 ИКС:
  47 d4 90 56 39 1f 6c 8а 9e FC 14 48 6б с1 98 88
  4b a1 83 79 Ьс ас 2e 0b е2 D8 52 51 34 74 AB 2f
 Y:
  30 1a 9а ча 36 60 6e 5d 29 аа 23 8а 9e 29 93 00
  31 50 42 92 3d f6 45 63 64 2d 4а Fe 9b f4 Fe 28
scriptPubKey:
 76 - OP_DUP
 a9 - OP_HASH160
 14 - число байтов, чтобы подтолкнуть
 02 БФ 4b 28 89 с6 объявления а8 19 0c 25 2e 70 шд е1 а1 90 9f 96 17 - нажать эти байты в стек
 88 - OP_EQUALVERIFY
 ас - OP_CHECKSIG

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

26 января 2011, 10:53:28 PM   # 14
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

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

Ниже в качестве примера.

Код:
общественный недействительный signInputs (@NotNull SigHash HashType, @NotNull бумажник бумажник) бросает ScriptException {
        утверждают inputs.size () > 0;
        утверждают outputs.size () > 0;

        // Я в настоящее время не имеют легкий способ проверить другие режимы работы, как официальный клиент не использует их.
        утверждают HashType == SigHash.ALL;

        // Сделка подписывается с входными скриптах пустыми для ввода мы подписания, за исключением. В случае
        // где addInput был использован для создания новой транзакции, они уже пусты. Входной подписываются
        // должен иметь подключенную программу OUTPUT в нем, когда хэш вычисляется!
        //
        // Обратите внимание, что каждый вход может быть утверждая, что вывод отправляется в другую тональность. Таким образом, мы должны смотреть на выходах
        // чтобы выяснить, какой ключ подписи с.

        байт [] [] сигнатуры = новый байт [inputs.size ()] [];
        ЭКЕЙ [] signingKeys = новый ЭКЕЙ [inputs.size ()];
        для (INT I = 0; я < inputs.size (); я ++) {
            TransactionInput вход = inputs.get (я);
            утверждать input.scriptBytes.length == 0: "Попытка подписать без свежей сделки";
            // Установите вход в сценарий своей продукции.
            input.scriptBytes = input.outpoint.getConnectedPubKeyScript ();
            // Найти ключ подписи мы должны использовать.
            байт [] connectedPubKeyHash = input.outpoint.getConnectedPubKeyHash ();
            Ключ ЭКЕЙ = wallet.findKeyFromPubHash (connectedPubKeyHash);
            // Это утверждают никогда не должны стрелять. Если это произойдет, это означает, что бумажник противоречива.
            утверждать ключ = NULL: "Сделка существует в бумажнике, что мы не можем выкупить: " + Utils.bytesToHexString (connectedPubKeyHash);
            // Держите ключ вокруг на стадии создания сценария ниже.
            signingKeys [I] = ключ;
            // Функция anyoneCanPay не используется в данный момент.
            булево anyoneCanPay = ложь;
            байт [] хэш = hashTransactionForSignature (HashType, anyoneCanPay);
            Utils.LOG ("  signInputs хэш =" + Utils.bytesToHexString (хэш));
            // Установить скрипт снова опустошить для следующего входа.
            input.scriptBytes = TransactionInput.EMPTY_ARRAY;

            // Теперь знак для выхода, чтобы мы могли выкупить его. Мы используем пару ключей подписать хэш,
            // а затем поместить полученную подпись в сценарии вместе с открытым ключом (ниже).
            пытаться
                ByteArrayOutputStream BOS = новый ByteArrayOutputStream ();
                bos.write (key.sign (хэш));
                bos.write ((hashType.ordinal () + 1) поймать (IOException е) {
                проливают новый RuntimeException (е); // не может произойти.
            }
        }

        // Теперь мы рассчитали каждую подпись, пройти и создание сценариев. Напоминание: сценарий состоит из
        // подпись (за хэш сделки) и полный открытый ключ необходимо подписать для подсоединенного
        // вывод.
        для (INT I = 0; я < inputs.size (); я ++) {
            TransactionInput вход = inputs.get (я);
            утверждают input.scriptBytes.length == 0;
            ЭКЕЙ ключ = signingKeys [I];
            input.scriptBytes = Script.createInputScript (сигнатуры [I], key.getPubKey ());
        }

        // Каждый вход завершен.
    }
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

27 января 2011, 12:16:08 AM   # 15
 
 
Сообщения: 314
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

То, что вы делаете сейчас выглядит довольно хорошо для меня, что я понимаю его лучше. Я попытался хешированием своих данных и получил 90377525e05bd71ce8ba413a84fdaea299766732f165fab28a69d30c83337f9b, не знаю, если это соответствует вашему. Единственное, что я могу думать о том, чтобы попытаться обратить вспять хеш на входе к функциям ECDSA.
Hal сейчас офлайн Пожаловаться на Hal   Ответить с цитированием Мультицитирование сообщения от Hal Быстрый ответ на сообщение Hal

27 января 2011, 2:24:41 AM   # 16
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

То, что вы делаете сейчас выглядит довольно хорошо для меня, что я понимаю его лучше. Я попытался хешированием своих данных и получил 90377525e05bd71ce8ba413a84fdaea299766732f165fab28a69d30c83337f9b, не знаю, если это соответствует вашему. Единственное, что я могу думать о том, чтобы попытаться обратить вспять хеш на входе к функциям ECDSA.

Это тот же хэш-я получаю ... Я пытаюсь разные вещи, но не получить это проверить. Я все еще должен выглядеть немного ближе на 'ы кода [микрофон] написал выше ...
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

27 января 2011, 3:39:09 AM   # 17
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Я посмотрел на [микрофон] s примера, но я не мог найти ничего, что я делаю неправильно, но.

Я начинаю задаваться вопросом, если возможно, мы (разработчики JVM основе) должны использовать org.bouncycastle.crypto.signers.ECDSASigner для подписания и проверки вместо java.security.Signature. Я хотел бы попробовать, но мне нужно, чтобы выяснить, какие параметры мне нужно дать ему ...
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

27 января 2011, 5:07:02 AM   # 18
 
 
Сообщения:
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Сейчас я собираюсь взять [микрофон] s подход на создание официального клиента печати сделок, которые собираются хэширования в лог-файл.

Это в функции SignatureHash () в script.cpp вокруг линии 930, прямо в самом конце функции. Я добавил строку PrintHex, которая печатает шестнадцатеричную версию сс к файлу debug.log в ~ / .bitcoin /
Код:
uint256 SignatureHash (CScript scriptCode, Const CTransaction& txTo, неподписанный INT NIN, Int nHashType)

    // другой код здесь
    ...

    // Сериализация и хэш
    CDataStream сс (SER_GETHASH);
    ss.reserve (10000);
    сс << txTmp << nHashType;
    PrintHex (ss.begin (), ss.end (), "сс:% s \ п"); // Я добавил эту строку здесь
    Возвращение Хэш (ss.begin (), ss.end ());
}

Как только он получил следующий блок, я получил несколько примеров для работы. Я собираюсь копаться тех, когда-то, и я выложу сюда (возможно завтра) с тем, что я узнаю.
сейчас офлайн пожаловаться на   Ответить с цитированием Мультицитирование сообщение от Быстрый ответ на сообщение

27 января 2011, 6:42:06 AM   # 19
 
 
Сообщения: 314
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

Хорошо, я сделал это тоже, а секрет в том, что scriptSig полностью удаляются и заменяются scriptPubKey из исходной (старой) сделки. Я еще немного запутался о том, как это работает в источнике.

VerifyScript () фактически не сцепить два сценария. Она работает scriptSig, и что оставляет вещи в стеке, то он запускает старый scriptPubKey с стеком оставленного scriptSig. Единственное соединение стека. Поэтому, когда мы запустим scriptPubKey, который держит OP_CHECKSIG, то "текущий сценарий" только что, старый scriptPubKey. Это скрипт, который получает OP_CODESEPARATOR раздел, а затем положить на месте scriptSig, для хеширования.

То, что я не понимаю, эта строка из кода OP_CHECKSIG:

                    // Отбросьте подпись, так как нет никакого способа для подписи, чтобы подписать себя
                    scriptCode.FindAndDelete (CScript (vchSig));

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

27 января 2011, 7:28:13 AM   # 20
 
 
Сообщения: 2870
Цитировать по имени
цитировать ответ
по умолчанию Re: [решено] Может кто-нибудь объяснить детали того, как OP_CHECKSIG работает?

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

Это законно поставить подпись в scriptPubKey - Bitcoin просто не делает этого.
theymos сейчас офлайн Пожаловаться на theymos   Ответить с цитированием Мультицитирование сообщения от theymos Быстрый ответ на сообщение theymos



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW