Функция получения дочернего закрытого ключа HD Wallet

Я пытался понять спецификации функции CKD как из стандарта bip32 , так и из книги Mastering Bitcoin, я не мог понять, как закрытый ключ получается из левой части расширенного ключа.

В книге просто говорится, что правая сторона становится цепным кодом, а левая сторона становится закрытым ключом. После некоторых исследований в Интернете я прочитал, что кто-то использует такие термины, как настройки и модуль n , G , которые меня сбивают с толку, поскольку они не были упомянуты в книге и не столько в самой спецификации.

Пожалуйста, помогите мне прояснить, как именно секретный ключ получается из левой части вывода , и связь со всеми этими неупомянутыми частями, такими как модуль n (какой n?), настройка (??), умножение на G (что такое G ?), так как все эти термины плохо документированы.

N и G — фиксированные параметры кривой secp256k1. В частности N=115792089237316195423570985008687907852837564279074904382605163141518161494337иG=(55066263022277343669578718895168534326250603453777594175500187360389116729240, 32670510020758816978083085130507043184471273380659243275938904335757337482424)

Ответы (1)

Закрытый ключ — это число, очень большое 256-битное число. Вы можете выполнять обычные арифметические действия с такими числами, например, сложение по модулю n, где n — порядок кривой (кому-то еще придется расширить это, если потребуется). n очень близко, но меньше 2^256.

Вот схема получения дочернего закрытого ключа:

введите описание изображения здесь

Оставшиеся 256 бит 512-битного хэша добавляются по модулю n к родительскому закрытому ключу. Сумма, которая также является 256-битным числом (из-за модуля n), является дочерним закрытым ключом. Сумма родительского закрытого ключа и кажущегося случайным 256-битного числа является кажущимся случайным 256-битным числом, так что эта сумма будет прекрасно функционировать в качестве закрытого ключа.

Все операции выполняются по модулю порядка кривой N, а не по модулю 2^256.
Спасибо, @MikeD. Обновил мой ответ соответственно.
Из этого изображения мы можем сделать вывод, что childPrivateKey=leftSideHash + parentPrivateKey?. Поправьте меня если я ошибаюсь. Из этого отношения, где используется n или G?
@TheOverloadGenius n используется в сложении (сложение по модулю n). На рисунке написано «Нормальное сложение», но на самом деле это «Нормальное сложение по модулю n». Может быть, я должен добавить это к рисунку. G вообще не используется при получении дочернего закрытого ключа. Он используется только при вычислении открытого ключа из закрытого ключа.