Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
20 сентября 2013, 3:28:43 AM   # 1
 
 
Сообщений: 31
Цитировать по имени
цитировать ответ
по умолчанию Re: Проблемы подписывания сообщений

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Эй, ребята. Я использую сообщение для подписи / проверки в проекте я работаю. Сервер (PHP) будет проверить подпись сообщения санкционировать действия от клиента (теоретически на любом языке, но сейчас как JS и питон).

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

Вот как проверка PHP скрипт сиг (из https://github.com/scintill/php-bitcoin-signature-routines) Ожидает, что длина сообщения должны быть закодированы:

Код:
Функция numToVarIntString ($ я) {
если ($ я < 0xfd) {
вернуться Chr ($ я);
} Еще если ($ я <= 0xffff) {
вернуть пакет ( 'Cv', 0xfd, $ я);
} Еще если ($ я <= 0xffffffff) {
вернуть пакет ( 'CV', 0xfe, $ я);
} Еще {
певд InvalidArgumentException ( 'INT слишком большой');
}
}

Этот код согласуется только с помощью метода brainwallet.org в, опять же, если длина сообщения меньше 253.

Вот как библиотека подписания JS (от https://github.com/bitcoinjs/bitcoinjs-lib) Кодирует длину до подписания:

Код:
numToVarInt: функция (я)
  {
    Если я < 0xfd) {
      // символ без знака
      вернуться [I];
    } Еще если (я <= 1<<16) {
      // беззнаковое короткое (LE)
      вернуться [0xfd, я >>> 8, я & 255];
    } Еще если (я <= 1<<32) {
      // неподписанных Int (LE)
      вернуться [0xfe] .concat (Crypto.util.wordsToBytes ([I]));
    } Еще {
      // без знака долго долго (LE)
      вернуться [0xFF] .concat (Crypto.util.wordsToBytes ([я >>> 32, я]));
    }
  }

Я уже знаю об одной ошибки в коде JS: я<<32 оценивает значение 0. Я не слишком беспокоиться о том, что на данный момент, хотя, потому что я все еще пытаюсь получить, что второй случай на работу.

Библиотека питона подписи (от https://github.com/vbuterin/pybitcointools) Просто использует CHR (Len (сообщение)), которое, очевидно, работает только тогда, когда LEN (сообщение) < 253.

Я предполагаю, что реализация brainwallet.org является правильным, но прежде, чем я пытаюсь переделать все другие инструменты, в соответствии с тем, как ведет себя этот инструмент, я полагал, что я пришел к вам, ребята, и убедиться, что я на правильном пути.

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

С другой стороны, если есть лучше испытанные библиотеки там для этих языков (или других!) Для подписания / проверки Bitcoin сообщений, я хотел бы услышать о них.

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


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


20 сентября 2013, 4:39:38 AM   # 2
kjj
 
 
Сообщения: 1302
Цитировать по имени
цитировать ответ
по умолчанию Re: Проблемы подписывания сообщений

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





Ваш порядок байт неправильно в битовых словах 16 и 32. Попробуйте Cn и CN.
kjj сейчас офлайн Пожаловаться на kjj   Ответить с цитированием Мультицитирование сообщения от kjj Быстрый ответ на сообщение kjj

20 сентября 2013, 5:00:03 AM   # 3
 
 
Сообщения: 560
Цитировать по имени
цитировать ответ
по умолчанию Re: Проблемы подписывания сообщений

котировка
Я пытался фиксируя вещи сам, но я даже не уверен, что использовать в качестве ссылки больше.
Вы можете выбрать, что использовать в качестве ссылки. По моему личному мнению, протокол Bitcoin и Satoshi клиент должен быть использован в качестве ссылки. Это кажется здравым выбором.

Переменная длина целое определяется здесь: https://en.bitcoin.it/wiki/Protocol_specification#Variable_length_integer

Некоторые расхождения вы нашли обусловлены Endian MIS-матчи. Bitcoin протокол использует мало Endian в его переменной длины целых чисел. Brainwallet получает это неправильно и использует большую кодировку Endian. Идите вперед, подписать длинный (>= 253 байт), используя Brainwallet, а затем попытаться проверить его в Bitcoin-QT.

PHP код размещен выглядит, чтобы он правильно.

котировка
Ваш порядок байт неправильно в битовых словах 16 и 32. Попробуйте Cn и CN.
Если мы используем Bitcoin-QT / д и соответствующий протокол в качестве эталона, то нет, Cv правильно.
fpgaminer сейчас офлайн Пожаловаться на fpgaminer   Ответить с цитированием Мультицитирование сообщения от fpgaminer Быстрый ответ на сообщение fpgaminer

20 сентября 2013, 10:57:06 PM   # 4
 
 
Сообщений: 31
Цитировать по имени
цитировать ответ
по умолчанию Re: Проблемы подписывания сообщений

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW