Могу ли я проверить, что дополнительный открытый ключ получен из его родительского открытого ключа в HD-кошельке без использования каких-либо закрытых ключей?

Я знаю, что могу подписать фрагмент текста с помощью закрытого ключа биткойн, чтобы подтвердить контроль над общедоступным адресом, но есть ли какие-либо операции, которые я могу выполнить, чтобы узнать, был ли представленный мне открытый ключ получен из родительского открытого ключа, если у меня нет какие-нибудь приватные ключи в моем распоряжении?

Я просмотрел: https://github.com/richardkiss/pycoin и https://github.com/jmcorgan/bip32utils , но еще не нашел способ сделать это.

Спасибо за любой вклад :)

Вы спрашиваете о BIP32 или детерминированных кошельках типа 2? Смотрите также: meta.bitcoin.stackexchange.com/questions/661/…
Да, я всего лишь один конкретный вариант использования, в частности, связанный с проверкой открытого ключа, как описано выше, я надеюсь, что @Pieter Wuille (sipa) увидит этот вопрос. Спасибо за ссылку, посмотрю :)
Верно, но о каком из них вы спрашиваете?
Я только спрашиваю, можно ли узнать, что дочерний закрытый ключ исходит от его родителя в отсутствие каких-либо секретных ключей, и как это сделать. Если это детерминированный кошелек BIP32, то да, я полагаю, это то, о чем я спрашиваю :)

Ответы (1)

Да, можете, при условии, что дочерний ключ не защищен, и вы знаете код цепочки родительского открытого ключа и индекс дочернего. (Также известен как расширенный открытый ключ.)

Просто вычислить

CKDpub((K пар , c пар ), i) → (K i , c i )

K par — родительский открытый ключ, c par — код цепочки, i — индекс, K i — дочерний открытый ключ.

как определено здесь, и сравните его с дочерним ключом, который вам дали.

Woohoo, большое спасибо :) Необходимость знать индекс - это немного облом, потому что, если бы я этого не знал, мне пришлось бы генерировать каждый дочерний ключ из индекса 0, пока я не нашел соответствующий, я прав. в предположении этого или может ли номер индекса быть каким-то образом встроен в ключ?
@derrend Ты прав. Однако вам нужно всего лишь попробовать 2 ^ 31 ключ, так что это не так уж плохо.
еще раз перечитав ссылку, которую вы мне дали ранее, есть ли способ добиться этого с помощью «предложения gmaxwell» и будет ли он более эффективным?
@derrend 1) Да 2) Вероятно, это примерно то же самое с точки зрения скорости и сложности.
Можете ли вы связать меня с некоторой информацией, если это возможно, мне было бы интересно посмотреть, как это делается :)
@derrend Это лучший ресурс, который я знаю: bitcointalk.org/index.php?topic=19137.0