Что такое сжатый биткойн?
Стандартный клиент Bitcoin версии 0.6 явно вводит сжатые ключи.
Что это? Есть ли недостатки в их использовании? Какие-либо несовместимости со старым программным обеспечением? Сокращения криптографической силы?
4 ответа
Сжатый ключ - это всего лишь способ хранения открытого ключа в меньшем количестве байтов (33 вместо 65). Нет проблем с совместимостью или безопасностью, поскольку они являются точно такими же ключами, которые просто хранятся по-другому. Исходное программное обеспечение Bitcoin не использовало сжатые ключи только потому, что их использование было плохо документировано в OpenSSL. У них нет недостатков, кроме того, что требуется немного дополнительных вычислений, прежде чем их можно будет использовать для проверки подписи.
Если вы считаете, что открытый ключ является точкой где-то вдоль гигантской буквы U, несжатым ключом являются координаты точки x и y . Сжатый ключ - это то, насколько высоко на U точка вместе с одним битом, указывающим, находится ли она с левой или с правой стороны. Как вы можете визуализировать, они оба кодируют точно одно и то же, но сжатая форма требует в два раза меньше места плюс один бит. (Конечно, они действительно являются точками на эллиптической кривой secp256k1 , но концепция одинаков.)
Формат (закрытые ключи):
- несжатый: 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:
Это может помочь разбить поля.
04 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa 385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1 03 [может быть 02] 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa [отброшенное значение может быть вычислено из значения выше)
Более подробно описано выше. 03 может быть 02, потому что отброшенное значение должно быть получено из сохраненного значения и необходим один дополнительный бит информации. Это потому, что есть два корней [плюс и минус] при использовании квадратного корня.
хорошее объяснение доступно в Как проверить, сжат ли биткойн-адрес или нет?
Более конкретно, открытый ключ в биткойне - это целые пары (x, y). Для несжатых открытых ключей эти целые числа кодируются как 256-битные беззнаковые big-endian ints, объединенные вместе, а затем добавленные с одним байтом 0x04. Результат составляет 65 байтов.
Для сжатых открытых ключей кодируется только координата x (например, выше, как 256-битный без знака big-endian int). Оказывается, что y координата может быть только одним из двух значений, один четный и один нечетный. Вместо добавления одиночного 0x04 байта, один 0x02 или 0x03 байт добавляется в зависимости от значения y (0x02 для четного, 0x03 для нечетного). результат составляет 33 байта.