Что такое сжатый биткойн?

Стандартный клиент Bitcoin версии 0.6 явно вводит сжатые ключи.

Что это? Есть ли недостатки в их использовании? Какие-либо несовместимости со старым программным обеспечением? Сокращения криптографической силы?

57 голосов | спросил Thilo 3 MarpmSat, 03 Mar 2012 12:25:39 +04002012-03-03T12:25:39+04:0012 2012, 12:25:39

4 ответа


48

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

Если вы считаете, что открытый ключ является точкой где-то вдоль гигантской буквы U, несжатым ключом являются координаты точки x и y . Сжатый ключ - это то, насколько высоко на U точка вместе с одним битом, указывающим, находится ли она с левой или с правой стороны. Как вы можете визуализировать, они оба кодируют точно одно и то же, но сжатая форма требует в два раза меньше места плюс один бит. (Конечно, они действительно являются точками на эллиптической кривой secp256k1 , но концепция одинаков.)

ответил David Schwartz 3 MarpmSat, 03 Mar 2012 14:36:45 +04002012-03-03T14:36:45+04:0002 2012, 14:36:45
15

Формат (закрытые ключи):

  • несжатый: 0x80 + [32-байтовый секрет] + [4 байта Hash () предыдущие 33 байта], base58 закодировано
  • сжато: 0x80 + [32-байтовый секрет] + 0x01 + [4 байта Hash () предыдущие 34 байта], base58 закодирован

случай 1:

  • секрет (шестнадцатеричный): 1111111111111111111111111111111111111111111111111111111111111111
  • несжатых
    • секрет (base58): 5HwoXVkHoRM8sL2KmNRS217n1g8mPPBomrY7yehCuXC1115WWsh
    • pubkey (hex): 044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
    • адрес (base58): 1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a
  • сжат:
    • secret (base58): KwntMbt59tTsj8xqpqYqRRWufyjGunvhSyeMo3NTYpFYzZbXJ5Hp
    • pubkey (hex): 034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
    • адрес (base58): 1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9

Получено из списка рассылки разработчиков Bitcoin:

ответил user479 25 Mayam12 2012, 05:27:31
4

Это может помочь разбить поля.

04
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1

03 [может быть 02]
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
[отброшенное значение может быть вычислено из значения выше)

Более подробно описано выше. 03 может быть 02, потому что отброшенное значение должно быть получено из сохраненного значения и необходим один дополнительный бит информации. Это потому, что есть два корней [плюс и минус] при использовании квадратного корня.

ответил Techno CAT 29 SunEurope/Moscow2013-12-29T08:52:18+04:00Europe/Moscow12bEurope/MoscowSun, 29 Dec 2013 08:52:18 +0400 2013, 08:52:18
0

хорошее объяснение доступно в Как проверить, сжат ли биткойн-адрес или нет?

  

Более конкретно, открытый ключ в биткойне - это целые пары (x, y).   Для несжатых открытых ключей эти целые числа кодируются как 256-битные   беззнаковые big-endian ints, объединенные вместе, а затем добавленные   с одним байтом 0x04. Результат составляет 65 байтов.

     

Для сжатых открытых ключей кодируется только координата x (например,   выше, как 256-битный без знака big-endian int). Оказывается, что y   координата может быть только одним из двух значений, один четный и один нечетный.   Вместо добавления одиночного 0x04 байта, один 0x02 или 0x03 байт   добавляется в зависимости от значения y (0x02 для четного, 0x03 для нечетного).   результат составляет 33 байта.

ответил Badr Bellaj 6 +03002016-10-06T14:29:57+03:00312016bEurope/MoscowThu, 06 Oct 2016 14:29:57 +0300 2016, 14:29:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132