Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
24 апреля 2011, 2:24:06 PM   # 1
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

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


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

Недавно я прочитал в файле сек PDF (см http://www.secg.org/download/aid-780/sec1-v2.pdf, страницы 47-48, раздел 4.1.6), что можно восстановить открытый ключ, используемый в подписи ECDSA. После IRC разговора, это был реализован и протестирован на roconnor, и это, кажется, возможно, на самом деле.

В настоящее время Bitcoin txin для израсходует-на-адрес операций используют DER-закодированной подпись + открытый ключ DER-закодированный, в результате чего в 139-байтных сценариях. Предполагая, что мы опускаем DER-кодировке (для версии байта, за исключением), мы могли бы уменьшить это до 65 байт.
Pieter Wuille сейчас офлайн Пожаловаться на Pieter Wuille   Ответить с цитированием Мультицитирование сообщения от Pieter Wuille Быстрый ответ на сообщение Pieter Wuille


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


24 апреля 2011, 11:05:05 PM   # 2
 
 
Сообщения: 416
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

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





... можно восстановить открытый ключ, используемый в подписи ECDSA.
...
... в результате 139-байтовых сценариев.
... мы могли бы уменьшить это до 65 байт.

Большой улов! Ваше решение будет очень элегантным способом подписания сделки и неявно показывая открытый ключ.

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

24 апреля 2011, 11:20:09 PM   # 3
 
 
Сообщения: 1652
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Что дополнительные затраты CPU для восстановления открытого ключа? Текущее узкое место для обработки транзакций Bitcoin является стоимость CPU проверки подписи ECDSA, а не дискового пространства или пропускной способности, поэтому сохранение байтов за счет более CPU не является правильным, что нужно сделать.
Гэвин Андресен сейчас офлайн Пожаловаться на Гэвин Андресен   Ответить с цитированием Мультицитирование сообщения от Gavin Andresen Быстрый ответ на сообщение Гэвин Андресен

24 апреля 2011, 11:47:33 PM   # 4
 
 
Сообщения: 235
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Классная вещь!

Существуют ли какие-либо патенты, покрывающие извлечение Публичного из подписи? Я вспоминаю ECDSA точки сжатия, которое сделало бы открытые ключи половины размера, но я считаю, что причина Bitcoin не использовать его в том, что она защищена патентами. (Так же как дополнительную нагрузку на центральный процессор.)

Стоимость процессора, как представляется, в основном на этапе 1.6.1 .: два ECPoint скалярных умножений. Я считаю, что шаг выполняется 1-4 раза (по внешнему контуру J от 0 до 1, внутренней петли к от 1 до 2) в зависимости от того, какого кандидата ключевых матчей. Шаг проверки 1.6.2. в нашем случае был бы SHA256 + ripemd160, чтобы сравнить его с Публичным хэшем? Так что, если я прав, восстановление Публичного будет 1-4 раза дороже, как проверка подписи (которая также в основном два ECPoint скалярных умножений.)

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

25 апреля 2011, 12:14:56 AM   # 5
 
 
Сообщения: 416
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Что дополнительные затраты CPU для восстановления открытого ключа? Текущее узкое место для обработки транзакций Bitcoin является стоимость CPU проверки подписи ECDSA, а не дискового пространства или пропускной способности, поэтому сохранение байтов за счет более CPU не является правильным, что нужно сделать.

Существует несколько дополнительных затрат CPU, конечно. Если цель состоит в том, чтобы снизить стоимость процессора обработки транзакций, то есть и другие низко висящие фрукты заранее выбрать.

  • Изменение программного обеспечения, так что не все клиенты должны проверить все подписи. Это был поднят в http://bitcointalk.org/index.php?topic=6373.msg94314#msg94314 в контексте распространения превышение скорости транзакций.
  • Используйте меньшую кривой - 256 бит очень консервативно
  • Используйте другую группу с более быстрыми операциями, как curve25519
  • Удалить стимул для создания много сделок

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

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

25 апреля 2011, 3:01:29 AM   # 6
 
 
Сообщений: 70
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

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

25 апреля 2011, 9:45:28 AM   # 7
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Предложение: ввести дополнительный OP_GENPUBKEY, который выскакивает подпись и 2-разрядное число из стека (в котором говорится, какой из 4 возможных сгенерированных ключей является правильной), и толкает сгенерированный открытый ключ (для этой сделки и подписи) сам по себе в стек. С тех пор, он может быть обработан с помощью существующей инфраструктуры, таких как проверка его против известного значения, или первого хэширования его с помощью OP_HASH160 перед сравнением его с адресом.

Типичная scriptPubKey для потребления адреса израсходует-к-бы тогда:

  OP_GENPUBKEY OP_HASH160 <адрес> OP_EQUALVERIFY

При соответствующих scriptSig:

  <подпись>

Если мы опускаем DER-кодирование подписи и просто дать 2 256-битовые числа, начинающиеся с версии байта, может быть, это 24-байтовое scriptPubKey, и 67 байт scriptSig (по сравнению с 25-байтовой scriptPubKey и 139 байт scriptSig сейчас)

Как было предложено [микрофон], мы могли бы пойти на еще меньшую, но немного менее гибкую OP_CHECKSPEND, который делает все:

  <адрес> OP_CHECKSPEND

Что только 22 байт. Мы могли бы обойтись без generatedId (с учетом 66-байт scriptSig) в этом случае, но в потенциально повышенной стоимости проверки (от 2 до 4 возможной pubkeys должна быть проверена).
Pieter Wuille сейчас офлайн Пожаловаться на Pieter Wuille   Ответить с цитированием Мультицитирование сообщения от Pieter Wuille Быстрый ответ на сообщение Pieter Wuille

26 апреля 2011, 3:52:23 PM   # 8
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

ArtForz отмечает некоторые, возможно, низко висящие плоды: мы проверим те же TX несколько раз.

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

26 апреля 2011, 4:08:46 PM   # 9
 
 
Сообщения: 416
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

ArtForz отмечает некоторые, возможно, низко висящие плоды: мы проверим те же TX несколько раз.

Вы можете уточнить?

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

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

30 апреля 2011, 10:06:15 AM   # 10
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Что дополнительные затраты CPU для восстановления открытого ключа? Текущее узкое место для обработки транзакций Bitcoin является стоимость CPU проверки подписи ECDSA, а не дискового пространства или пропускной способности, поэтому сохранение байтов за счет более CPU не является правильным, что нужно сделать.

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

Я протестированные как проверку подписи и восстановление ключей. В моей системе, проверка подписи занимает около 650us, ключ восстановления занимает около 685us, так что есть 5% штраф CPU. Обратите внимание, что подписание действительно имеет большую нагрузку (около 150%)
Pieter Wuille сейчас офлайн Пожаловаться на Pieter Wuille   Ответить с цитированием Мультицитирование сообщения от Pieter Wuille Быстрый ответ на сообщение Pieter Wuille

30 апреля 2011, 4:10:20 PM   # 11
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Патч здесь: https://github.com/sipa/bitcoin/commit/6e223c405988a1002eeeee69db88a1128a38b0a3
Pieter Wuille сейчас офлайн Пожаловаться на Pieter Wuille   Ответить с цитированием Мультицитирование сообщения от Pieter Wuille Быстрый ответ на сообщение Pieter Wuille

15 января 2012, 12:39:14 PM   # 12
 
 
Сообщения: 952
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Я протестированные как проверку подписи и восстановление ключей. В моей системе, проверка подписи занимает около 650us, ключ восстановления занимает около 685us, так что есть 5% штраф CPU. Обратите внимание, что подписание действительно имеет большую нагрузку (около 150%)
Я сделал некоторые статистические данные по проверке подписи, а также, и я отправляю их в этой теме, так что я знаю, где искать следующий раз, когда я забыть номера, и для других, а также ссылок.
Это было измерено с помощью gettimeofday. была проведена около 4500 подписей верификации.
Среднее значение было 1029 мкс, а срединная 1152 мкс. Самая быстрая проверка взяла 797 мкс и медленные 11,224 мкс.
С помощью clock_gettime вместо (хотя только с 110 образцов) вернулись некоторые красивее значения. Минимум: 807 мкс, максимум: 1372 мкс, средние: 1084 мкс, средний: 1172 мкс. Так, более или менее то же самое.
Это было сделано с использованием Quad (Q9550) процессор Core 2 с тактовой частотой 2 ГГц (downclocked от 2,83 ГГц).

Кроме того, в соответствии с моей статистикой, блок цепь в настоящее время содержит около 5,1 миллионов операций OP_CHECKSIG. Так процессорное время просто делать подписи проверки для проверки текущего блока цепи будет около 1 часа и 30 минут.
runeks сейчас офлайн Пожаловаться на runeks   Ответить с цитированием Мультицитирование сообщения от runeks Быстрый ответ на сообщение runeks

12 апреля 2014, 3:19:37 PM   # 13
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Revisting эту тему. При изменении протокола, чтобы позволить операции с неявным восстановлением открытого ключа является целесообразным было бы критическое изменение, поэтому я понимаю, не двигаясь по этому вопросу. Однако нет абсолютно никаких оснований для клиента Bitcoin-ядро требуют адресов при проверке подписи. Публичное может быть извлечены из подписи PubKeyHash, полученной из этого, а затем адреса генерируется из этого.  

Можно ли думать о какой-либо причине, почему клиент Bitcoin требует пользователю предоставить адрес (что-то он может и уже делает вычисление)?

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

Пример, который ставит все это вместе.

вход
Код:
-----НАЧАТЬ Bitcoin помеченное сообщение -----
Это пример подписанного сообщения.
-----НАЧАТЬ Bitcoin ПОДПИСИ -----
HHfUi9n72BxXottUu + AbU4iS0QQLxPtAtuydgRcjc + XoY9Hzw8u6Z + wbzDV + owVLiQR85OwioPcUVJcT + LHjqCE =
-----END Bitcoin SIGNATURE -----

и клиент отвечает либо
Сообщение проверяется, чтобы быть подписаны 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T

или

Сообщение не проверено. Пожалуйста, проверьте подписанное сообщение копируется в ней цельность, включая начальные и конечные строки.


Brainwallet.org есть что-то подобное и более интуитивный, чем клиент Bitcoin Core. Тем не менее, даже сайт brainwallet добавляет "предупреждение" что не имеет смысла и расплывчатым.

Сообщение проверяется, чтобы быть от 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T (но адрес не был найден в подписи!)
Код:
-----НАЧАТЬ Bitcoin помеченное сообщение -----
Это пример подписанного сообщения.
-----НАЧАТЬ Bitcoin ПОДПИСИ -----
HHfUi9n72BxXottUu + AbU4iS0QQLxPtAtuydgRcjc + XoY9Hzw8u6Z + wbzDV + owVLiQR85OwioPcUVJcT + LHjqCE =
-----END Bitcoin SIGNATURE -----

Адрес не найден в подписи?  Это плохо? Я должен беспокоиться? Могу ли я быть мошенническим? Для большинства пользователей, желтый цвет осторожности. Ожидаемый результат будет окончательным "УСПЕХ" (И зеленый), но вместо того, чтобы есть это неоднозначный частичный успех. "желтый" ответ бессмысленно, поскольку каждый может добавить адрес после подписи создается, чтобы удалить предупреждение. Так что предупреждает о. Добавление адреса 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T чуть выше подписи выглядит следующим образом и обеспечивает ожидаемый "хорошо" ответ.

Сообщение проверяется, чтобы быть от 1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T
Код:
-----НАЧАТЬ Bitcoin помеченное сообщение -----
Это пример подписанного сообщения.
-----НАЧАТЬ Bitcoin ПОДПИСИ -----
1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T
HHfUi9n72BxXottUu + AbU4iS0QQLxPtAtuydgRcjc + XoY9Hzw8u6Z + wbzDV + owVLiQR85OwioPcUVJcT + LHjqCE =
-----END Bitcoin SIGNATURE -----

"осторожность" Ответ только подрывает точку, даже позволяя подписи, которые не включают в себя (ненужный) адрес. Представьте, что вы компания, которая отправляет подписанные сообщения клиентов. Позволяет использовать правило 80/20. Если исключить адрес 80% ваших пользователей поймут "предупреждение" не имеет смысла, однако это означает, что вы собираетесь запутать 20% ваших клиентов, а это означает дополнительные расходы и работы. Так почему бы не просто включить (бессмысленный) адрес, он показывает, как зеленый.

Тем не менее поведение не так плохо, как основной клиент, который отказывается проверять подписи и выдает сообщение об ошибке.



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

12 апреля 2014, 3:41:10 PM   # 14
 
 
Сообщения: 1050
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа


Можно ли думать о какой-либо причине, почему клиент Bitcoin требует пользователю предоставить адрес (что-то он может и уже делает вычисление)?


Это сделано, чтобы заставить людей проверить открытый ключ.

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

12 апреля 2014, 4:27:41 PM   # 15
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа


Можно ли думать о какой-либо причине, почему клиент Bitcoin требует пользователю предоставить адрес (что-то он может и уже делает вычисление)?


Это сделано, чтобы заставить людей проверить открытый ключ.

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

Я могу видеть, что в качестве действительной точки, мне просто интересно, сколько безопасности это действительно добавляет. Если пользователь уже не имеет адреса в бумажнике загодя или получает адрес из группы весьма вероятно, они скопировав и вставив подпись, как это предусмотрено подписавшим (потенциально злоумышленник). В таком случае, как о том, что злоумышленник может предоставить пользователю "подделать" (Технически подобные) адрес и большинство пользователей будут копировать и вставить его вместе с другими компонентами и получить "хорошо" ответ. Я думаю, показывая вычисленный адрес и объяснение (возможно, "что это значит? ссылка) будет делать больше, чтобы предотвратить атаки социальной инженерии типа. Предпочтение контролируемых пользователем было бы хорошо, Bitcoin-Core ориентирован на опытных пользователей.

Тем не менее позволяет положить, что в сторону, единый блок подписал сообщение, содержащее сообщение и подпись ("стиль PGP") Должно быть довольно просто. Это поможет уменьшить проблемы с конечными пробелами и ошибок при копировании. Есть ли причина, по которой Base64 используется более Base58? Одной из причин Satoshi Намечены использования Bas58 над Base64 является то, что он может быть легко скопированы, попробуйте двойной щелчок, чтобы скопировать каждый из этих двух подписей.

Код:
HHfUi9n72BxXottUu + AbU4iS0QQLxPtAtuydgRcjc + XoY9Hzw8u6Z + wbzDV + owVLiQR85OwioPcUVJcT + LHjqCE =

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

12 апреля 2014, 5:49:52 PM   # 16
 
 
Сообщения: 1582
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа


Можно ли думать о какой-либо причине, почему клиент Bitcoin требует пользователю предоставить адрес (что-то он может и уже делает вычисление)?


Это сделано, чтобы заставить людей проверить открытый ключ.

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

Я могу видеть, что в качестве действительной точки, мне просто интересно, сколько безопасности это действительно добавляет. Если пользователь уже не имеет адреса в бумажнике загодя или получает адрес из группы весьма вероятно, они скопировав и вставив подпись, как это предусмотрено подписавшим (потенциально злоумышленник). В таком случае, как о том, что злоумышленник может предоставить пользователю "подделать" (Технически подобные) адрес и большинство пользователей будут копировать и вставить его вместе с другими компонентами и получить "хорошо" ответ. 

Скажем, этот человек, вы имеете дело с хочет доказать, что они послали вам биткойны. Вы копируете вставить адрес из блока исследователя как blockchain.info или истории транзакций вашего кошельков. Сиг вы получите от него. Если они совпадают, вы знаете, это хорошо.

Если вы просто сиг, а пользовательский интерфейс не заставит вас ввести адрес, то вы должны проверить адрес в сиг с одним из bc.i вручную. Таким образом, если злоумышленник использовал подобный адрес, с говорят одни и те же первые несколько символов, вы можете быть обмануты.

котировка
Есть ли причина, по которой Base64 используется более Base58? Одной из причин Satoshi Намечены использования Bas58 над Base64 является то, что он может быть легко скопированы, попробуйте двойной щелчок, чтобы скопировать каждый из этих двух подписей.

Двойной щелчок выбирает этот, который я считаю base64:
HHfUi9n72BxXottUu + AbU4iS0QQLxPtAtuydgRcjc + XoY9Hzw8u6Z + wbzDV + owVLiQR85OwioPcUVJcT + LHjqCE =

Это требует тройного щелчка:
26pGMkiBRMqfZL1ELka3Nd6CSsJWUBdRioWnrvQ4hCejYw9d6ac9oPf6Q7GXfbRnWro7TVysuZeZQf2 qgcnhBxhM2
Abdussamad сейчас офлайн Пожаловаться на Abdussamad   Ответить с цитированием Мультицитирование сообщения от Abdussamad Быстрый ответ на сообщение Abdussamad

12 апреля 2014, 10:09:53 PM   # 17
 
 
Сообщения: 1218
Цитировать по имени
цитировать ответ
по умолчанию Re: ECDSA Подпись позволяет восстановление открытого ключа

Двойной щелчок выбирает этот, который я считаю base64 ...

Это требует тройного щелчка ...

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW