Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
8 декабря 2011, 11:30:13 PM   # 1
 
 
Сообщения: 317
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Привет,

я ищу в документации, описывающей процесс расчета соответствующий адрес Bitcoin с помощью закрытого ключа.
Кто-нибудь есть ссылка на такой документ?


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


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


8 декабря 2011, 11:41:43 PM   # 2
 
 
Сообщения: 443
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

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





https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses
MelMan2002 сейчас офлайн Пожаловаться на MelMan2002   Ответить с цитированием Мультицитирование сообщения от MelMan2002 Быстрый ответ на сообщение MelMan2002

8 декабря 2011, 11:57:01 PM   # 3
 
 
Сообщения: 317
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

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

9 декабря 2011, 12:21:57 AM   # 4
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

я читал эту статью, но я не понимаю, как получить адрес от секретного ключа, я вижу только процесс генерации адреса Bitcoin.

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

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

9 декабря 2011, 8:17:01 AM   # 5
 
 
Сообщения: 317
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа


Вы задаетесь вопросом, как получить открытый ключ от секретного ключа?

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

9 декабря 2011, 8:32:46 AM   # 6
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа


Вы задаетесь вопросом, как получить открытый ключ от секретного ключа?

да, я пропускаю этот шаг

Вы умножать частный ключ константы G. Вы можете найти G в https://en.bitcoin.it/wiki/Secp256k1.

G является эллиптической кривой точка - не простое число. Таким образом, существует специальная математика, которая переопределяет что "умножения" является. А раз точка А число равно другую точку. Вы можете или не можете понадобиться, чтобы заботиться о сложных деталях этой математики. Если вы просто пытаетесь написать программу и используют криптографический код где-то еще, вы просто вызываете уже определены "точка умножения" функционировать и получить ответ.

Ответ приходит в виде двух чисел - X и Y - потому что это точка на графике рода - и вы можете подключить их к инструкциям, которые вы видите, что объяснить, как перейти от открытого ключа к Bitcoin адрес.
casascius сейчас офлайн Пожаловаться на casascius   Ответить с цитированием Мультицитирование сообщения от casascius Быстрый ответ на сообщение casascius

10 декабря 2011, 1:08:54 AM   # 7
 
 
Сообщения: 317
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

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

это мой код, обратный строки в функции base58-кодирования по-прежнему не хватает:
Код:
#включают
#включают

#включают
#включают
#включают
#включают
#включают
#включают


#включают "hash.h"


неподписанный символ * privkey2addr (неподписанный символ * вход)
{
   неподписанный символ * выход;

   INT RET; / * Возвращает значение знаковой-функции * /
   ECDSA_SIG * сиг; / * Результат процесса подписания, содержащий как г и S * /
   EC_KEY * ЭКЕЙ = EC_KEY_new (); / * Создать новый ключ для процесса подписания * /
   EC_GROUP * ecgroup = EC_GROUP_new_by_curve_name (NID_secp256k1); / * Установить secp256k1 как метод подписи * /

   неподписанный символ * г, * с;

   если (ЭКЕЙ == NULL || ecgroup == NULL) {/ * проверка на наличие ошибок * /
      Е ("Инициализация из ЭКЕЕВ или ecgroup не удались! \ П");
      возвращать NULL;
   }

   если (EC_KEY_set_group (ЭКЕЙ, ecgroup)! = 1) {/ * Установить метод подписания и проверки на наличие ошибок * /
      Е ("Настройка группы для ЭКЕЙ Failed! \ П");
      возвращать NULL;
   }

   если (EC_KEY_generate_key (ЭКЕЙ)! = 1) {/ * generete ключ и проверить на наличие ошибок * /
      Е ("Генерация ЭКЕЙ не удалось! \ П");
      возвращать NULL;
   }

   сиг = ECDSA_do_sign (вход, 32, ЭКЕЙ); / * Знак ввод * /

   если (сиг == NULL) {/ * ошибка? * /
      Е ("Подписание ввода не удалось! \ П");
      возвращать NULL;
   }

   RET = ECDSA_do_verify (вход, 32, сиг, ЭКЕЙ); / * Проверить результат * /

   если (RET == -1 || RET == 0) {/ * ошибка? * /
      Е ("Контроль правильности не удалось! \ П");
      возвращать NULL;
   }

   г = таНос (32); / * Выделить 32 битное пространство как для г и х * /
   s = таНос (32);

   если (BN_bn2bin (SIG->г, г)! = 32) {/ * экспорт BIGNUM в массив символов, проверить на наличие недействительных длины * /
      Е ("Недопустимая длина результат! \ П");
      возвращать NULL;
   }

   если (BN_bn2bin (SIG->s, s)! = 32) {/ * экспорт BIGNUM в массив символов, проверить на наличие недействительных длины * /
      Е ("Недопустимая длина результат! \ П");
      возвращать NULL;
   }

   Int я;

   Е ("ИКС: "); / * Печать как г и s для отладки причин * /
   для (я = 0; я<32; я ++) {
      Е ("% 02x", (Символ без знака) * (г + я));
   }
   putc ( '\ п', стандартный вывод);

   Е ("Y: ");
   для (я = 0; я<32; я ++) {
      Е ("% 02x", (Символ без знака) * (s + I));
   }
   putc ( '\ п', стандартный вывод);


   неподписанные символ * pubkey_raw; / * Сырье открытый ключ «* /

   pubkey_raw = таНос (65); / * Резерв 65 байт пространства для Публичных * /

   * Pubkey_raw = 0x04; / * Объединить 0x04, г и з к Публичных * /

   для (я = 0; я < 32; я ++)
      * (Pubkey_raw + + 1) = * (г + I);

   для (я = 0; я < 32; я ++)
      * (Pubkey_raw + г + 33) = * (s + I);

   бесплатно (г); / * Бесплатно больше не требуется память * /
   бесплатно (ы);
   EC_KEY_free (ЭКЕЙ);
   EC_GROUP_free (ecgroup);
   ECDSA_SIG_free (сиг);

   неподписанные символ * pubkey_stage1; / * Открытый ключ после первого этапа * /

   pubkey_stage1 = таНос (20); / * Резерв 20 байт памяти * /

   pubkey_stage1 = ripemd160 (SHA256 (pubkey_raw, 65, (неподписанные символ *) NULL), 32, (неподписанные символ *) NULL); / * Хэш это! * /

   неподписанные символ * pubkey_stage2; / * Открытый ключ после seconf стадии * /

   pubkey_stage2 = таНос (25); / * Резерв 25 байт памяти * /

   * Pubkey_stage2 = 0x00; / * Поместить 0х00 в начале для основной сети * /

   для (я = 0; я < 20; я ++) / * добавить результат этапа один * /
      * (Pubkey_stage2 + + 1) = * (pubkey_stage1 + I);

   неподписанный символ * результат; / * Двоичный адрес * /

   Результат = таНос (32); / * Резерв 32 байт памяти * /

   Результат = SHA256 (SHA256 (pubkey_stage2, 32, (неподписанные символ *) NULL), 32, (неподписанные символ *) NULL); / * Подсчет контрольной суммы * /


   для (я = 0; я < 4; я ++) / * добавление контрольной суммы в двоичный адрес * /
      * (Pubkey_stage2 + г + 21) = * (результат + I);

   Е ("Binary адрес: "); / * Печать двоичный адрес * /
   для (я = 0; я<25; я ++) {
      Е ("% 02x", (Символ без знака) * (pubkey_stage2 + I));
   }
   putc ( '\ п', стандартный вывод);



   Выход = таНос (35);

   Выход = base58 (pubkey_stage2);

   вернуть выход;
}




неподписанные символ * base58 (неподписанные символ * вход)
{
   неподписанный символ * выход;
   BIGNUM * а;
   BIGNUM * b58;
   BIGNUM * бэр;

   Int я;

   неподписанные символ * bc58;
   bc58 = таНос (1);
   * Bc58 = 58;

   неподписанные символ * остальное;
   Остальные = таНос (1);

   Const символ * алфавит = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";

   BN_CTX * CTX = BN_CTX_new ();
   BN_CTX_init (CTX);


   а = BN_new ();
   BN_init (а);

   b58 = BN_new ();
   BN_init (B58);

   бэр = BN_new ();
   BN_init (бэр);

   BN_bin2bn ((Const символ без знака *) ввод, 25, а);

   BN_bin2bn ((Const символ без знака *) bc58, 1, b58);

   Выход = таНос (35);

   I = 0;

   в то время как (BN_is_zero (а)! = 1) {
      BN_div (а, бэр, а, b58, CTX);
      BN_bn2bin (бэр, отдых);
      * (Выход + I) = алфавит [* остальные];
      я ++;
   }

   Int N = 0, B = 0;

   для (б = 0; б < 25; б ++) {
      если (* (вход + б) == 0)
         п ++;
      если (* (вход + б)! = 0)
         ломать;
   }

   Е ("% Я,% г \ п", П, я);

   для (б = 0; б < п; б ++) {
      * (Выход + г + б) = алфавит [0];
   }




   вернуть выход;
}

мой вывод выглядит следующий, я также распечатать информацию отладки:
Код:
Private Key: 1809c5d482b97ec84dd7e94cc4cbed460fd878025b52b1011970a3626e64eda8
X: c2429880bd9be5ebe72f00cc34a878cc6e5060f749b7b37957a2f087817e36c0
Y: 4117f999affb005828fd957cfaccc60530c871a05b7d205746d2ca68082d2d7d
Binary адрес: 0075c5672c37a9140631a0bf915c0e6aa356a832b04bd05648
1, 33
Адрес: 5ZL8VhHCBiePTgdNn4uQYanWMMgHFYijB1
355a4c3856684843426965505467644e6e34755159616e574d4d67484659696a423100


все выходы в HEX-формате, закодированный адрес, за исключением, что вы должны обратить в ваших умах
когда я использую bitcointools.appspot.com чтобы получить адрес из моего секретного ключа, результат отличается от моего ...

какие-либо предложения?
gimme_bottles сейчас офлайн Пожаловаться на gimme_bottles   Ответить с цитированием Мультицитирование сообщения от gimme_bottles Быстрый ответ на сообщение gimme_bottles

10 декабря 2011, 1:55:44 AM   # 8
 
 
Сообщения: 1372
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

Я не смотрел на свой код, но ваши номера.

Расчет от секретного ключа к открытому ключу неправильно. Почему, я не знаю.

Секретный ключ 1809c5d482b97ec84dd7e94cc4cbed460fd878025b52b1011970a3626e64eda8 (я предполагаю, что это большой обратный порядок байт, как это обычно бывает)

shoudl есть открытый ключ 04 AE 64 14 8F В6 68 4D 51 CF 03 С5 60 D7 36 28 2E 86 54 FB 54 D2 21 0D 67 4A F1 32 В1 Е.Д. 2D 2E 87 D0 B1 05 Д0 97 5D C7-5C 31 91 CF-7E 64 ED FB 06 98 AF 85 7A 4A 0A BF 45 D0 06 01 00 9C 9E В8 8A

который
04

Х = АЕ 64 14 8F В6 68 4D 51 CF-03 С5 60 D7 36 28 2E 86 54 FB 54 D2 21 0D 67 4A F1 32 В1 ЭД 2D 2E 87
Y = D0 В1 05 Д0 97 5D C7-5C 31 91 CF-7E 64 ЕД FB 06 98 AF 85 7A 4A 0A BF 45 D0 06 01 00 9C 9E В8 8A

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

10 декабря 2011, 2:16:07 AM   # 9
 
 
Сообщения: 317
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа

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

10 декабря 2011, 4:58:54 AM   # 10
 
 
Сообщения: 416
Цитировать по имени
цитировать ответ
по умолчанию Re: получить адрес от секретного ключа


Код:
   Е ("ИКС: "); / * Печать как г и s для отладки причин * /
   для (я = 0; я<32; я ++) {
      Е ("% 02x", (Символ без знака) * (г + я));
   }

   Е ("Y: ");
   для (я = 0; я<32; я ++) {
      Е ("% 02x", (Символ без знака) * (s + I));
   }

Там причина, почему вещи вы печатаете, и называя X и Y действительно называется г и с. Это потому, что г и s не имеют ничего общего с эллиптическими координатами кривой. Прочитайте статью Википедии для ECDSA для деталей. Создание адреса из открытого ключа не требует ECDSA_do_sign или do_verify, так что вы можете избавиться от этого кода. Координаты могут быть сохранено в ключевой структуре общественной в некотором роде.

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW