Здравствуй,
Я хотел бы знать, если есть формула для расчета два возможных значений Y от X
Я использую библиотеку, которая нуждается в них, и я не хочу, чтобы изменить его
|
1 апреля 2013, 12:56:54 AM | # 1 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome" Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e подробнее... Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru Здравствуй,
Я хотел бы знать, если есть формула для расчета два возможных значений Y от X Я использую библиотеку, которая нуждается в них, и я не хочу, чтобы изменить его |
1 апреля 2013, 1:12:55 AM | # 2 |
Сообщения: 154
цитировать ответ |
Re: Сжатые ключи, Y из X
Получил 1806 Биткоинов
Реальная история. Здравствуй, На самом деле это очень просто. Я хотел бы знать, если есть формула для расчета два возможных значений Y от X Я использую библиотеку, которая нуждается в них, и я не хочу, чтобы изменить его Y2 = х3+ топор2 + б поэтому мы должны выполнить квадратный корень, чтобы восстановить у от й. И получается, что SQRT (а) = а(Д + 1) / 4 Теперь вы просто должны выбрать либо положительное или отрицательное решение. Если у вас что вычисленный даже и первые байты ключа даже, а затем использовать это значение, в противном случае, используйте отрицательное значение, которое д-у. EDIT: соответствующий код я написал как патч для bitaddress.org Код: ec.CurveFp.prototype.decompressPoint = функция (yOdd, X), { если (this.q.mod (BigInteger.valueOf (4)). равен (BigInteger.valueOf (3))) { // у ^ 2 = х ^ 3 + ах ^ 2 + Ь, так что нам нужно выполнить SQRT для восстановления у вар ySquared = X.multiply (X.square () добавить (this.a).) добавить (this.b). // SQRT (а) = а ^ ((д + 1) / 4), если д = 3 по модулю 4 переменная Y = ySquared.x.modPow (this.q.add (BigInteger.ONE) .divide (BigInteger.valueOf (4)), this.q); если (Y.testBit (0)! == yOdd) { Y = this.q.subtract (Y); } вернуть новый ec.PointFp (это, X, this.fromBigInteger (Y)); } еще { // только реализовать SQRT для д = 3 мод 4 возвращать нуль; } }; // сейчас, работать с шестигранной строками, потому что они легче в JS ec.CurveFp.prototype.decodePointHex = функция (ы) { Переключатель (ParseInt (s.substr (0, 2), 16)) {// Первый байт Случай 0: вернуться this.infinity; Случай 2: вернуть this.decompressPoint (ложный, this.fromBigInteger (новый BigInteger (s.substr (2), 16))); Случай 3: вернуть this.decompressPoint (правда, this.fromBigInteger (новый BigInteger (s.substr (2), 16))); Случай 4: Случай 6: Случай 7: вар = Len (s.length - 2) / 2; вар xHex = s.substr (2, длина); вар yHex = s.substr (Len + 2, длина); вернуть новый ec.PointFp (это, this.fromBigInteger (новый BigInteger (xHex, 16)), this.fromBigInteger (новый BigInteger (yHex, 16))); по умолчанию: // не поддерживается возвращать нуль; } }; |
1 апреля 2013, 2:06:38 AM | # 3 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
Спасибо, что очень помогает!
Я до сих пор есть проблемы, хотя, уравнение не соответствует моим данным (я хотел проверить на примере первого) Давайте считать, что пример: котировка Секрет: 0123456789012345678901234567890123456789012345678901234567890123 открытый ключ: 046655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515217e88dd05e93 8efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e -> X: 6655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515 Y: 217e88dd05e938efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e Я получил: Y2= 7f65351d4485d7656f60f8a4e5c802cc5ba6a1eae5d0e94b63357ab43d18b53e Икс3= 368e518c43bee254854b3c43aa9893e65a3d19282468bae274e93e5cb93d0946 В то время как я должен иметь у2 = х3 + 7 (secp256k1) |
1 апреля 2013, 2:52:53 AM | # 4 |
Сообщения: 154
цитировать ответ |
Re: Сжатые ключи, Y из X
Спасибо, что очень помогает! Я не получаю эти значения для х3 и у2. я получилЯ до сих пор есть проблемы, хотя, уравнение не соответствует моим данным (я хотел проверить на примере первого) Давайте считать, что пример: котировка Секрет: 0123456789012345678901234567890123456789012345678901234567890123 открытый ключ: 046655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515217e88dd05e93 8efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e -> X: 6655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515 Y: 217e88dd05e938efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e Я получил: Y2= 7f65351d4485d7656f60f8a4e5c802cc5ba6a1eae5d0e94b63357ab43d18b53e Икс3= 368e518c43bee254854b3c43aa9893e65a3d19282468bae274e93e5cb93d0946 В то время как я должен иметь у2 = х3 + 7 (secp256k1) Икс3 = ec4081ea3487eadbad1ec86b4fca367185932b0a435c30a4b570b5535e37b17c Y2 = ec4081ea3487eadbad1ec86b4fca367185932b0a435c30a4b570b5535e37b183 Если вы загрузите bitaddress.org, а затем использовать «веб-консоль» в Firefox или «Консоль JavaScript» в Chrome вы можете попробовать его, как это Код: > Кривая вар = EllipticCurve.getSECCurveByName ( 'secp256k1'). getCurve () > вар ключ = новый Bitcoin.ECKey (новый BigInteger ( '0123456789012345678901234567890123456789012345678901234567890123', 16)) > key.getPubKeyHex () "046655FEED4D214C261E0A6B554395596F1F1476A77D999560E5A8DF9B8A1A3515217E88DD05E938EFDD71B2CCE322BF01DA96CD42087B236E8F5043157A9C068E" > х = новый BigInteger (key.getPubKeyHex (). зиЬзЬг (2,64), 16) > x.toString (16) "6655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515" > у = новый BigInteger (key.getPubKeyHex (). зиЬзЬг (66), 16) > y.toString (16) "217e88dd05e938efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e" > x.modPow (BigInteger.valueOf (3), curve.q) .ToString (16) "ec4081ea3487eadbad1ec86b4fca367185932b0a435c30a4b570b5535e37b17c" > y.modPow (BigInteger.valueOf (2), curve.q) .ToString (16) "ec4081ea3487eadbad1ec86b4fca367185932b0a435c30a4b570b5535e37b183" |
1 апреля 2013, 12:41:17 PM | # 5 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
Ничего себе, я даже не могу правильно использовать мою библиотеку ...
Я буду смотреть на это, чтобы получить его сортируют и мы надеемся сообщить успех в ближайшее время |
1 апреля 2013, 1:48:31 PM | # 6 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
Да, это работает, спасибо!
РЕДАКТИРОВАТЬ: У меня еще есть вопрос: как вы знаете, что SQRT (а) =(Д + 1) / 4 ? |
1 апреля 2013, 8:26:57 PM | # 7 |
Сообщения: 154
цитировать ответ |
Re: Сжатые ключи, Y из X
Да, это работает, спасибо! Вот эскиз почему:РЕДАКТИРОВАТЬ: У меня еще есть вопрос: как вы знаете, что SQRT (а) =(Д + 1) / 4 ? малая теорема Ферма говорит нам о том, чтоQ-1 = 1 (по модулю д), поэтому перестановка, Q-1 - 1 = 0 (по модулю д) которые мы можем факторизовать в (а(Q-1) / 2 - 1) (а(Q-1) / 2 + 1) = 0 (по модулю д) Эти факторы умножать на ноль, так что один из факторов сам по себе должен быть равен нулю. В частности, мы должны иметь (Q-1) / 2 = -1 или +1 (по модулю д). Каждый случай соответствует действительности, существует ли квадратный корень или нет (1 для существует, -1, не существует). Теперь, скажем, = х2, так что SQRT (а) = х. Затем, (Д + 1) / 4 = х(Д + 1) / 2 = х(Q-1) / 2 + 1 = Х * Икс(Q-1) / 2 = + X или -X (по модулю д) Там немного больше работы, чтобы показать, что квадратный корень уникален, что не соответствует действительности в целом, например, 3 * 3 = 1 (по модулю 8) и 1 * 1 = 1 (по модулю 8) Так что в этом случае 1 имеет несколько квадратных корней по модулю 8. Однако для нашего д, они уникальны. |
1 мая 2013, 6:15:04 PM | # 8 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
Извините за возможно глупый вопрос, но у меня есть необходимость сделать обратную операцию; сжать ключ.
Итак, как же я решить, следует ли установить 02 или 03 в передней части X? |
1 мая 2013, 9:49:20 PM | # 9 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
02, если Y является даже 03, если нечетным
|
2 мая 2013, 8:23:16 AM | # 10 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
02, если Y является даже 03, если нечетным благодаря |
2 мая 2013, 12:24:56 PM | # 11 |
Сообщения: 1302
цитировать ответ |
Re: Сжатые ключи, Y из X
Вы также можете думать о нем, как 0x02 + мод (Y, 2)
|
2 мая 2013, 2:10:47 PM | # 12 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
Я предпочитаю 2 + Y.Bit (0)
|
11 мая 2013, 1:30:49 PM | # 13 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
У меня немного другой вопрос, но так как есть некоторые реальные математические эксперты в уже этой теме, пожалуйста, дайте мне задать его здесь.
Мне нужно написать функцию, которая восстанавливает открытый ключ от ECDSA подписи. Это алгоритм, описанный в разделе 4.6.1 из SEC1 спецификации - это кажется простым, но я думаю, я просто слишком глуп, чтобы получить его Допустим, что у нас есть подпись: Код: R = E1D48751A24F0DB604C86A4706D2113FF869808522E8AF4A04F253F03EA87EF1 Первый байт этой подписи 0x1F, но я не думаю, что это важно на данном этапе. На самом деле это делает немного, так как он говорит, что бит (0) из Y 0.S = 669E60CFAD73A7FFD63054DBA4D0DB88C628633EE90FCF0D620FF40DE91C3296 Таким образом, операция мне нужно сделать, во-первых, является эквивалентом OpenSSL, ec_GFp_simple_set_compressed_coordinates(). Он принимает X и четность Y, и возвращает некоторую точку R - право? Из того, что я вижу, фактический результат, для примера входов, должны быть: Код: Rx: 7E677C42747BBDEF47AFAA51001D55A82D8C2B643EF74D6E014F64DCFD31BBA0 Ry: 0D1081A16E20A8839D892ACC384529CA4547D007B58559483991C3EB77DC71BC Может кто-нибудь пожалуйста, скажите мне, как вычислить это R, предпочтительно с некоторым, например, в питона или любой другой ..? Я пытался осуществить реинжиниринг как OpenSSL делает это, но анализируя этот код не заставил меня слишком далеко, до сих пор ... Кроме того, если вы можете, пожалуйста, объясните мне, что такое "октет строка" и как она отличается от большого целого числа, выраженное в MSB закодированные строки байтов? |
11 мая 2013, 1:38:43 PM | # 14 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
Я о том, чтобы выпустить код для подписания в Оружейной
Если я правильно понял, то это должно решить вашу проблему |
11 мая 2013, 1:39:52 PM | # 15 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
Я о том, чтобы выпустить код для подписания в Оружейной OK - Я буду с нетерпением жду этого ..Если я правильно понял, то это должно решить вашу проблему ура |
11 мая 2013, 2:05:58 PM | # 16 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
В то же время, не могли бы вы опубликовать сообщение и адрес, которые дают эту подпись?
Это кажется странным, потому что Rx = г + {0, 1} * ^ и это не соответствует вашему примеру на всех (первые биты должны быть такими же, как д = 0xFFFFFFFFFFFFFFFF ...) Для Exemple, подписание 'Bitcoin' с закрытым ключом '\ x01' * 32 дает Код: Флаг: 1c -> несжатый ключ и Rx = г + 0 * д Таким образом, Rx = b6392b8e0250550a0a068e8ba68891d555a34eb48fe6266ae042b3c689265586г: b6392b8e0250550a0a068e8ba68891d555a34eb48fe6266ae042b3c689265586 s: b220ecbbe88b379812fbc920afcb15a4bd17a73f7555a5fea92b3b4c6a187523 Это из верхней части моей головы, я выложу код, когда у меня есть доступ к моему компьютеру Dev |
11 мая 2013, 3:27:42 PM | # 17 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
Может быть, потому что подпись от адреса testnet?
Код: bitcoind -testnet verifymessage mqMmY5Uc6AgWoemdbRsvkpTes5hF6p5d8w "Н + HUh1GiTw22BMhqRwbSET / 4aYCFIuivSgTyU / А + qH7xZp5gz61zp // WMFTbpNDbiMYoYz7pD88NYg / 0DekcMpY =" контрольная работа И это сжатый ключ.правда Кроме того, я давал промежуточный R - не Q, что приходит в конце. Как известково добротность - это должен был быть мой следующий вопрос, потому что есть, кажется, еще более прищурил А потом, в самом конце, они берут на себя X и Y из Q (уже называется "открытый ключ"): Код: Q.X: 6130AE7913286EC4D8296AEB7361420C259CD11478FB24FEDA77F81E256059AA Q.Y: B3A6E7A704FCC0A59AC40BD364336A629483453CF39BB060F92354434B44F636 .. и превратить его в реальную Bitcoin открытого ключа, где: Код: X: 05eb0c4f42ecf74ab8789f2855ef33cad6ac0ec1ba6b7179578cb9f218e7793d Так как гораздо более сумасшедший это может быть? Я провел около 6 часов сегодня, пытаясь понять это, прежде чем окончательно решить, чтобы искать помощь на форуме. |
11 мая 2013, 3:43:11 PM | # 18 |
Сообщения: 1134
цитировать ответ |
Re: Сжатые ключи, Y из X
Я заканчиваю код, он приходит в следующие часы
Вот что я для теста: Код: фб: 1б RECID: 0 г: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1 s: 669e60cfad73a7ffd63054dba4d0db88c628633ee90fcf0d620ff40de91c3296 Rx: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1 Ry: 8f875bbc497b680cfe288eeda4bfb1da78af6703afdfaaf580e9e656ad62531c Что касается Q: Q = inv_r * (R * с + G * minus_e) |
11 мая 2013, 3:48:47 PM | # 19 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
Я заканчиваю код, он приходит в следующие часы Да - это было на самом деле моя первая догадка, что "Rx" должны быть такими же, как "р", В то время как Ry должны быть рассчитаны таким же образом, как мы известково Y от 02 || X, для сжатого открытого ключа.Вот что я для теста: Код: фб: 1б RECID: 0 г: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1 s: 669e60cfad73a7ffd63054dba4d0db88c628633ee90fcf0d620ff40de91c3296 Rx: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1 Ry: 8f875bbc497b680cfe288eeda4bfb1da78af6703afdfaaf580e9e656ad62531c Но после того, как я поставил несколько отладочных в key.cpp Bitcoin, это кажется, что EC_POINT_set_compressed_coordinates_GFp, что называется оттуда возвращается совершенно другой X. |
11 мая 2013, 4:03:01 PM | # 20 |
Сообщения: 1778
цитировать ответ |
Re: Сжатые ключи, Y из X
В какой-то момент (в функции ec_GFp_simple_set_compressed_coordinates) У меня есть:
Код: х: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1 у: 8f875bbc497b680cfe288eeda4bfb1da78af6703afdfaaf580e9e656ad62531c ... но затем, функция вызывает EC_POINT_set_affine_coordinates_GFp к "назначать" эти х, у значения в R - и после этого в R, в х и у: Код: Rx: 7E677C42747BBDEF47AFAA51001D55A82D8C2B643EF74D6E014F64DCFD31BBA0 Ry: 0D1081A16E20A8839D892ACC384529CA4547D007B58559483991C3EB77DC71BC |