В настоящее время Bitcoin частные и открытые ключи имеют следующие типы данных:
* Несжатого закрытый ключ: 64 шестнадцатеричных байт, например:
a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
* Несжатый открытый ключ: 04 + координата х + у координат
04be686ed7f0539affbaf634f3bcc2b235e8e220e7be57e9397ab1c14c39137eb43705125aac75a 865268ef33c53897c141bd092cf4d1a306b2a57e37e1386826d
* Сжатый открытый ключ: 02 или 03 (в зависимости от того, у четным или нечетным) + координаты х
03be686ed7f0539affbaf634f3bcc2b235e8e220e7be57e9397ab1c14c39137eb4
* Секретный ключ предназначен стать сжимаются ключ: ключ + «01»
a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae301
* BIP32 внутренний формат закрытого ключа, предназначенного стать сжатым ключом: «00» + ключ
00a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
Существует очевидная проблема: сжатое кодирование открытого ключа и секретный ключ кодирование неоднозначны. Например, рассмотрим строку:
02d20bbd7e394ad5999a4cebabac9619732c343a4cac99470c03e23ba2bdc2bc01
Это можно увидеть в одном из двух способов:
1. В качестве сжатого открытого ключа с й координатами d20bbd7e394ad5999a4cebabac9619732c343a4cac99470c03e23ba2bdc2bc01
2. Как частный ключ предназначен, чтобы стать сжатым ключом, с оригинальным ключом существа 02d20bbd7e394ad5999a4cebabac9619732c343a4cac99470c03e23ba2bdc2bc
Возникает вопрос: почему это дело, что любая другая кодировка мы используем помещает данные типа в начале (02/03 для несжатого, 04 для сжатого, 00 для BIP32 privkeys), а чтобы быть сжаты закрытые ключи вместо помечены с «01» в конце?
Решение, которое я предлагаю, чтобы сделать внутренний частный формат ключа BIP32, что в «00» + ключ является стандартным способом кодирования секретного ключа, предназначенного стать открытым ключом, стандарт. Таким образом, будет тривиальный алгоритм для определения типа данных чего-либо:
* Является ли это base58? Затем, декодировать его и запустить алгоритм на результат.
* Является ли это 20 байт? Это адрес
* Является ли это 32 байта? Это стандартный старый стиль privkey
* Является ли это 33 байта? Посмотрите на первые байтах, если это 00 это privkey будет использоваться при сжатии, если это 02 или 03, это сжатый Публичное, если это 04 это несжатый Публичных.
Формат WIF из нового стиля privkey будет начинаться с Kw (точнее, было бы между "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73NUBByJr" а также "KwFevqMbSXhGxNWuVc6vuERwdXq7aDQtiLNkjPVokF87Rs4LmqrN").