ELI5: в чем разница между дочерним ключом и усиленным дочерним ключом в BIP32

Я читал BIP32 и более или менее понимаю его.

Может кто-нибудь объяснить мне, как будто мне 5 лет, в чем разница между дочерним ключом и закаленным дочерним ключом?

Я пытаюсь добавить генерацию HD-кошелька в сервис, который я создаю. Я должен быть полностью проинформирован об этом, прежде чем заниматься этим. Не волнуйтесь , я буду использовать Bitcore , поэтому не буду напрямую заниматься криптографией.

Ответы (1)

По сути, усиленный дочерний ключ вычисляется с помощью hash(parent private key + index), тогда как незащищенный дочерний ключ вычисляется с помощью hash(parent public key + index).

Итак, какие практические последствия это имеет?

С помощью расширенного открытого ключа вы можете получить незащищенные дочерние открытые ключи. Это полезно в ситуациях, когда вы хотите принимать платежи, не имея возможности сразу их потратить. Например, если у вас есть веб-сайт, продающий носки из альпаки, ваш сервер может использовать расширенный открытый ключ для приема платежей без потери всех ваших денег в случае взлома. Так что это причина, по которой вы можете использовать незащищенную деривацию.

С помощью расширенного закрытого ключа вы также можете получить защищенные ключи.

Однако незащищенные открытые ключи слабее, когда у злоумышленника есть 1) расширенный открытый ключ и 2) один из незащищенных закрытых ключей, который был получен из него. В этом случае злоумышленник может разработать закрытый ключ расширенного открытого ключа и, следовательно, получить все ключи, которые могут быть получены из него, защищенные и незащищенные.

Итак, что ваше приложение должно использовать по умолчанию?

Вам следует использовать незащищенные ключи и отключить возможность экспорта закрытых ключей, если это позволит злоумышленнику скомпрометировать другие ключи в кошельке. Даже если злоумышленник завладеет одним из закрытых ключей, в ситуациях, когда у злоумышленника нет доступа к расширенному открытому ключу, незащищенный эквивалентен усиленной безопасности. На мой взгляд, возможности незащищенных ключей перевешивают дополнительную безопасность защищенных ключей.

Однако, если вам не нужны функции незащищенных ключей, вам следует использовать защищенные ключи, поскольку они более безопасны.

Для чего можно использовать закаленные ключи? Каковы их ограничения.
Защищенные ключи полезны, когда вам не нужна возможность дать кому-то главный открытый ключ и сообщить им все адреса. Для этих случаев они обладают гораздо лучшими свойствами безопасности, чем незащищенные.
@PieterWuille как так? Я не думаю, что понимаю. Я хочу создать сервис, который генерирует биткойн-адреса, по которым люди могут платить, и с которых, как я знаю, я могу тратить. С защищенными адресами мне нужен закрытый ключ на этом сервисе, поэтому, если меня взломают, я потеряю все деньги. С незащищенными адресами на моем сервисе нет конфиденциальной информации, поэтому его можно взломать без ущерба. Мне просто нужно безопасно хранить закрытый ключ в любом месте.
Да, это то, что вы можете сделать только с незащищенными ключами.
Как изменение закрытого ключа на открытый в хеш-функции делает вывод незащищенным? Или это просто условность? Вероятно, перед ним стоит 0x00, чтобы он выглядел как открытый ключ?