Стандартный биткойн-клиент версии 0.6, по-видимому, использует сжатые ключи.
Кто они такие? Есть ли недостатки в их использовании? Любая несовместимость со старым программным обеспечением? Снижение криптографической стойкости?
Сжатый ключ — это просто способ хранения открытого ключа в меньшем количестве байтов (33 вместо 65). Нет никаких проблем с совместимостью или безопасностью, потому что это точно такие же ключи, просто хранящиеся по-другому. Первоначальное программное обеспечение Биткойн не использовало сжатые ключи только потому, что их использование было плохо задокументировано в OpenSSL. У них нет недостатков, кроме того, что требуется немного дополнительных вычислений, прежде чем их можно будет использовать для проверки подписи.
Если вы думаете об открытом ключе как о точке где-то вдоль гигантской буквы U, то несжатый ключ — это координаты x и y этой точки. Сжатый ключ — это то, как высоко на U находится точка, а также один бит, указывающий, находится ли она слева или справа. Как вы можете себе представить, они оба кодируют одно и то же, но сжатая форма требует вдвое меньше места плюс один бит. (Конечно, на самом деле это точки на эллиптической кривой secp256k1 , но принцип тот же.)
Формат (закрытые ключи):
Случай 1:
Получено из списка рассылки разработчиков биткойнов:
Hash()
соответствует, цитата верна. Я не знаю, какая функция используется, так что, может быть, напримерHash(x) = SHA256(SHA256(x))
Это может помочь разделить поля.
04 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa 385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1 03 [может быть 02] 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa [отброшенное значение может быть вычислено из приведенного выше значения]
Более подробная информация опущена выше. 03 может быть 02, потому что отброшенное значение должно быть получено из сохраненного значения, и требуется один дополнительный бит информации. Это потому, что есть два корня [плюс и минус] при извлечении квадратного корня.
хорошее объяснение доступно в разделе Как я могу проверить, сжат биткойн-адрес или нет?
В частности, открытый ключ в биткойне представляет собой пару целых чисел (x, y). Для несжатых открытых ключей эти целые числа кодируются как 256-битные целые числа без знака с обратным порядком байтов, объединяются вместе, а затем добавляются к одному байту 0x04. Результат имеет длину 65 байт.
Для сжатых открытых ключей кодируется только координата x (как и выше, как 256-битное целое число без знака с обратным порядком байтов). Оказывается, координата y может принимать только одно из двух значений: одно четное и одно нечетное. Вместо одного байта 0x04 добавляется один байт 0x02 или 0x03 в зависимости от значения y (0x02 для четных, 0x03 для нечетных). Результат имеет длину 33 байта.
Тило
Дэвид Шварц
wallet.dat
файл с помощью более ранней версии программного обеспечения. Это разрешенный перерыв. (Вы все еще можете вручную извлечь дело, распаковать их и поместить в более раннюю форму, если вам нужно. Но такая совместимость не поддерживается. Вы не можете вернуться с более новым файлом кошелька, если не переведете данные. )Дэвид Шварц
wallet.dat
. Сжатые ключи еще нигде не поддерживаются, потому что это было бы нарушением протокола.Тило
онимос
Питер Уилле
Дэниел Х
Передовой
Дэвид Шварц
Qqwy
Дэвид Шварц