Ну, действительно, есть только один открытый ключ для данного секретного ключа. Эти две формы просто разные выражения для одного и того же.
Мы начинаем с выбора секретного ключа
К который является только 256-битным целым. Умножим (EC умножение, а не регулярные) определенную базовую точку на кривой
К. Это дает нам точку на плоскости, два 256 битных целых чисел,
Икс а также
Y.
(Х, у) наш открытый ключ. Оказывается, что если мы знаем,
Икс, мы можем вычислить почти
Y довольно легко. Я говорю почти вычислить, потому что есть квадратный корень, поэтому мы находим два возможных значения
Y, один положительный и один отрицательный. Значит мы можем "компресс" открытый ключ, давая
Икс, и
знак у, 257 бит вместо 512. (На практике это 272 против 520, но независимо от того.)
Легко вычислить полный открытый ключ, используя либо сжатый ключ, или закрытый ключ. Закрытые ключи скаляры, а не точки, поэтому они не могут быть "сжатый",
Для вычисления открытого ключа из закрытого ключа, это просто
г*
К.
г является базовой точка определена в
сек2 для secp256k1 (кривых мы используем).
Для того, чтобы вычислить его из сжатого ключа, величина
Y является SQRT (
Икс3+7). У тебя уже есть
Икс потому что она хранится обычно в сжатом ключе, наряду с
Z который говорит вам знак
Y.
Адрес Bitcoin рассчитывается путем хеширования открытого ключа. Я думаю, что хэш всегда осуществляется с полной точкой, и я знаю, что, используя полный пункт работаешь, потому что я вычисленный адрес, используя несжатый ключ, посланные монеты к ним, и провел их с помощью соответствующего секретного ключа. Я не
думать что, начиная процесс хеширования, используя сжатый ключ будет работать, но уже поздно, и я не чувствую, что копаться в коде, чтобы узнать наверняка. Надеюсь, кто-то будет звонить в.