17 мая 2014, 7:43:57 PM   # 1
 
 
Сообщения: 1064
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о кодировке base58

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я медленно работаю мой путь через технические детали Bitcoin путем написания кода Mathematica (только для учебных целей). Прошлой ночью я написал свой собственный код, чтобы преобразовать открытый ключ ECDSA в Bitcoin адрес. Я (думаю я) все понимаю за исключением ведущих "1"ы в адрес Bitcoin. Вот моя функция Mathematica для вычисления адреса Bitcoin из открытого ключа:

Код:
bitcoinaddress [publicKey_Integer]: = Модуль [{h1, h2, адр},
   h1 = ripemd160 [sha256 [PublicKey, 65], 32];
   h2 = sha256 [sha256 [h1, 21], 32];
   ADDR = 2 ^ 32 H1 + Факторпространство [h2, 2 ^ 224];
   Возвращение [ToBase58 [адр]]];

(* Обратите внимание, что второй аргумент в хэш-функции является число байтов сообщения предположить, поскольку Mathematica использует целые числа произвольной точности *)

И вот недостатки код, я использую для ToBase58 []. Изъян в конце, когда я предварять "1" для того, чтобы получить "правильный ответ," но я понимаю, что это хак и не всегда будет работать, если есть ведущие нули в пабе ключа хэша:

Код:
ToBase58 [y_Integer]: =
 Модуль [{codestring = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", OutputString = "", Х = у},
 
    В то время как [х > 0, outputString = outputString <> StringTake [codestring, {Mod [х, 58] + 1}]; х = Факторпространства [х, 58]];

    Вернуть["1" <> StringReverse [outputString]]]; (* Предваряя "1" как это неправильно *)



На Bitcoin вики, он говорит:




То, что я не понимаю, эти вещи в красном цвете:

   address_byte_string (состоящий из 0x01 + Хэш + 4-byte_check_code)

Если я предварять 0х01 до преобразования в base58 я получаю неправильный адрес, в то время как, если я игнорирую эти байты я получаю правильный адрес.

   повтор (number_of_leading_zero_bytes_in_hash)

^^ Это кажется странным и произвольности мне. Добавить дополнительный "1" для каждого ведущего байт то есть 0?



ПРИМЕЧАНИЕ ДЛЯ ЧИТАТЕЛЕЙ: Не используйте этот код для чего-то важного. Используйте реальную библиотеку Bitcoin.  
Peter R сейчас офлайн Пожаловаться на Peter R   Ответить с цитированием Мультицитирование сообщения от Peter R Быстрый ответ на сообщение Peter R


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


17 мая 2014, 8:54:47 PM   # 2
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о кодировке base58

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





Вы добавляете 0х01 на входе в то время как вы должны добавлять «1» на выходе

Да, в base58 кодировщика Bitcoin там есть странная вещь.
В конце всей этой математики, для каждого байта значения 0 от начала ввода данных, вы добавляете один символ 1 в выходной строку.
Так что если есть один нулевой байт, вы добавляете один символ. Если бы было два, добавить два и так далее ...
Это, вероятно, что вы пропали без вести.
Это на самом деле не так много странно, если учесть, что это дополнительные 1s позволяют сохранить длину байта исходных данных, хотя, когда вы знаете, что адреса версии 0 имеют фиксированную длину и 4 байта контрольной суммы, то вы также понять, что это на самом деле довольно бесполезный.

редактировать:
Вики немного вводит в заблуждение с 0x01, так как большинство адреса имеют 0x00, но это все-таки все это правда, что он говорит.

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

17 мая 2014, 9:39:56 PM   # 3
 
 
Сообщения: 1064
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о кодировке base58

Вы добавляете 0х01 на входе в то время как вы должны добавлять «1» на выходе

Да, в base58 кодировщика Bitcoin там есть странная вещь.
В конце всей этой математики, для каждого байта значения 0 от начала ввода данных, вы добавляете один символ 1 в выходной строку.
Так что если есть один нулевой байт, вы добавляете один символ. Если бы было два, добавить два и так далее ...
Это, вероятно, что вы пропали без вести.
Это на самом деле не так много странно, если учесть, что это дополнительные 1s позволяют сохранить длину байта исходных данных, хотя, когда вы знаете, что адреса версии 0 имеют фиксированную длину и 4 байта контрольной суммы, то вы также понять, что это на самом деле довольно бесполезный.

редактировать:
Вики немного вводит в заблуждение с 0x01, так как большинство адреса имеют 0x00, но это все-таки все это правда, что он говорит.

edit2:
ftfy: https://en.bitcoin.it/wiki/Base58Check_encoding#Base58_symbol_chart

Благодаря Piotr! Если 0x01 на самом деле не должно быть там, то все это имеет смысл для меня. Я все еще нахожу это странным использовать base58 цифру для представления байта, но я предполагаю, что это, вероятно, на самом деле самый разумный способ это сделали.  
Peter R сейчас офлайн Пожаловаться на Peter R   Ответить с цитированием Мультицитирование сообщения от Peter R Быстрый ответ на сообщение Peter R

17 мая 2014, 9:45:29 PM   # 4
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о кодировке base58

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

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

17 мая 2014, 10:06:16 PM   # 5
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о кодировке base58

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

В точку. Это еще "Satoshism", Это делает вещи более сложным для каких-либо очевидных выгод / причин. Каждый из них сам по себе не так уж трудно workthrough, но все вместе они складываются для уменьшения прозрачности кода.

Это означает, что некоторые Bitcoin адреса короче, однако каждая цифра короче все менее вероятным. Большинство (99,7%) адреса имеют длину 34 или 35 цифр. Я не могу видеть, что быть хорошим поводом для всей сложности. Это на самом деле делает его немного более запутанным, потому что вы не можете сказать, "Все адреса Bitcoin являются X цифрами длинными", Вы не можете даже сказать, 34 или 35 цифр, поскольку в теории они могут быть как 20 цифр (версия 0x0 + полезная нагрузка / хэш всех нулей + контрольная сумма). Не знаю, почему Satoshi не просто делать что-то вроде предварять версии байт (где действует версия байт любое значение, отличное от 0x00), а затем преобразовать в base58. Нет необходимости в странном ведущих 0х00 = "1" проверить. При использовании версии байт 0x01 или больше ведущих нулей хэша будет сохранено.

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

18 мая 2014, 7:41:51 AM   # 6
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: Вопрос о кодировке base58

FWIW, я думаю, что текущий bignum свободный код, который мы имеем в опорном клиента, теперь умеренно более ясно, чем что там в вики. https://github.com/bitcoin/bitcoin/blob/master/src/base58.cpp#L66
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW