1 апреля 2013, 12:56:54 AM   # 1
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Здравствуй,
Я хотел бы знать, если есть формула для расчета два возможных значений Y от X
Я использую библиотеку, которая нуждается в них, и я не хочу, чтобы изменить его
jackjack сейчас офлайн Пожаловаться на jackjack   Ответить с цитированием Мультицитирование сообщения от jackjack Быстрый ответ на сообщение jackjack


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


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)));

    по умолчанию: // не поддерживается
        возвращать нуль;
    }
};
Zeilap сейчас офлайн Пожаловаться на Zeilap   Ответить с цитированием Мультицитирование сообщения от Zeilap Быстрый ответ на сообщение Zeilap

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)
jackjack сейчас офлайн Пожаловаться на jackjack   Ответить с цитированием Мультицитирование сообщения от jackjack Быстрый ответ на сообщение jackjack

1 апреля 2013, 2:52:53 AM   # 4
 
 
Сообщения: 154
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

Спасибо, что очень помогает!
Я до сих пор есть проблемы, хотя, уравнение не соответствует моим данным (я хотел проверить на примере первого)
Давайте считать, что пример:
котировка
Секрет: 0123456789012345678901234567890123456789012345678901234567890123
открытый ключ: 046655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515217e88dd05e93 8efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e
->
X: 6655feed4d214c261e0a6b554395596f1f1476a77d999560e5a8df9b8a1a3515
Y: 217e88dd05e938efdd71b2cce322bf01da96cd42087b236e8f5043157a9c068e

Я получил:
Y2= 7f65351d4485d7656f60f8a4e5c802cc5ba6a1eae5d0e94b63357ab43d18b53e
Икс3= 368e518c43bee254854b3c43aa9893e65a3d19282468bae274e93e5cb93d0946
В то время как я должен иметь у2 = х3 + 7 (secp256k1)
Я не получаю эти значения для х3 и у2. я получил
Икс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"
Zeilap сейчас офлайн Пожаловаться на Zeilap   Ответить с цитированием Мультицитирование сообщения от Zeilap Быстрый ответ на сообщение Zeilap

1 апреля 2013, 12:41:17 PM   # 5
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

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

1 апреля 2013, 1:48:31 PM   # 6
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

Да, это работает, спасибо!

РЕДАКТИРОВАТЬ:
У меня еще есть вопрос: как вы знаете, что SQRT (а) =(Д + 1) / 4 ?
jackjack сейчас офлайн Пожаловаться на jackjack   Ответить с цитированием Мультицитирование сообщения от jackjack Быстрый ответ на сообщение jackjack

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. Однако для нашего д, они уникальны.
Zeilap сейчас офлайн Пожаловаться на Zeilap   Ответить с цитированием Мультицитирование сообщения от Zeilap Быстрый ответ на сообщение Zeilap

1 мая 2013, 6:15:04 PM   # 8
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

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

Итак, как же я решить, следует ли установить 02 или 03 в передней части X?
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

1 мая 2013, 9:49:20 PM   # 9
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

02, если Y является даже 03, если нечетным
jackjack сейчас офлайн Пожаловаться на jackjack   Ответить с цитированием Мультицитирование сообщения от jackjack Быстрый ответ на сообщение jackjack

2 мая 2013, 8:23:16 AM   # 10
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

02, если Y является даже 03, если нечетным
благодаря
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

2 мая 2013, 12:24:56 PM   # 11
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

Вы также можете думать о нем, как 0x02 + мод (Y, 2)
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

2 мая 2013, 2:10:47 PM   # 12
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

Я предпочитаю 2 + Y.Bit (0)
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

11 мая 2013, 1:30:49 PM   # 13
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

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

Мне нужно написать функцию, которая восстанавливает открытый ключ от ECDSA подписи.
Это алгоритм, описанный в разделе 4.6.1 из SEC1 спецификации - это кажется простым, но я думаю, я просто слишком глуп, чтобы получить его

Допустим, что у нас есть подпись:
Код:
R = E1D48751A24F0DB604C86A4706D2113FF869808522E8AF4A04F253F03EA87EF1
S = 669E60CFAD73A7FFD63054DBA4D0DB88C628633EE90FCF0D620FF40DE91C3296
Первый байт этой подписи 0x1F, но я не думаю, что это важно на данном этапе. На самом деле это делает немного, так как он говорит, что бит (0) из Y 0.

Таким образом, операция мне нужно сделать, во-первых, является эквивалентом OpenSSL, ec_GFp_simple_set_compressed_coordinates().
Он принимает X и четность Y, и возвращает некоторую точку R - право?
Из того, что я вижу, фактический результат, для примера входов, должны быть:
Код:
Rx: 7E677C42747BBDEF47AFAA51001D55A82D8C2B643EF74D6E014F64DCFD31BBA0
Ry: 0D1081A16E20A8839D892ACC384529CA4547D007B58559483991C3EB77DC71BC

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

Кроме того, если вы можете, пожалуйста, объясните мне, что такое "октет строка" и как она отличается от большого целого числа, выраженное в MSB закодированные строки байтов?
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

11 мая 2013, 1:38:43 PM   # 14
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

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

11 мая 2013, 1:39:52 PM   # 15
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

Я о том, чтобы выпустить код для подписания в Оружейной
Если я правильно понял, то это должно решить вашу проблему
OK - Я буду с нетерпением жду этого ..
ура
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

11 мая 2013, 2:05:58 PM   # 16
 
 
Сообщения: 1134
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

В то же время, не могли бы вы опубликовать сообщение и адрес, которые дают эту подпись?
Это кажется странным, потому что Rx = г + {0, 1} * ^ и это не соответствует вашему примеру на всех (первые биты должны быть такими же, как д = 0xFFFFFFFFFFFFFFFF ...)

Для Exemple, подписание 'Bitcoin' с закрытым ключом '\ x01' * 32 дает
Код:
Флаг: 1c -> несжатый ключ и Rx = г + 0 * д
г: b6392b8e0250550a0a068e8ba68891d555a34eb48fe6266ae042b3c689265586
s: b220ecbbe88b379812fbc920afcb15a4bd17a73f7555a5fea92b3b4c6a187523
Таким образом, Rx = b6392b8e0250550a0a068e8ba68891d555a34eb48fe6266ae042b3c689265586

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

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 часов сегодня, пытаясь понять это, прежде чем окончательно решить, чтобы искать помощь на форуме.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

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)
jackjack сейчас офлайн Пожаловаться на jackjack   Ответить с цитированием Мультицитирование сообщения от jackjack Быстрый ответ на сообщение jackjack

11 мая 2013, 3:48:47 PM   # 19
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Сжатые ключи, Y из X

Я заканчиваю код, он приходит в следующие часы
Вот что я для теста:
Код:
фб: 1б
RECID: 0
г: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1
s: 669e60cfad73a7ffd63054dba4d0db88c628633ee90fcf0d620ff40de91c3296
Rx: e1d48751a24f0db604c86a4706d2113ff869808522e8af4a04f253f03ea87ef1
Ry: 8f875bbc497b680cfe288eeda4bfb1da78af6703afdfaaf580e9e656ad62531c
Да - это было на самом деле моя первая догадка, что "Rx" должны быть такими же, как "р", В то время как Ry должны быть рассчитаны таким же образом, как мы известково Y от 02 || X, для сжатого открытого ключа.
Но после того, как я поставил несколько отладочных в key.cpp Bitcoin, это кажется, что EC_POINT_set_compressed_coordinates_GFp, что называется оттуда возвращается совершенно другой X.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

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
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW