Neste artigo, falaremos sobre carteiras determinísticas, geração hierárquica de chaves e como ela funciona matematicamente e em quais casos é conveniente colocar em prática. Este material será útil para especialistas cujas atividades estão relacionadas a gateways de pagamento, carteiras de Bitcoin e outras lojas de moedas. Além disso, o material será de interesse para quem estiver interessado em criptografia elíptica e esquemas de implantação de chaves de assinatura eletrônica.
Carteira determinística
Primeiro de tudo, vamos definir o que é uma carteira determinística. Quando falamos sobre geração de chaves, geralmente usamos a palavra "carteira", porque no contexto de moedas criptografadas, possuir uma chave privada é prova de propriedade de moedas e, nesse caso, carteira e chave têm um significado semelhante.
Carteira determinística é uma carteira na qual todas as chaves privadas usadas foram geradas a partir de um segredo compartilhado por todas as chaves. A peculiaridade é que é possível, a partir de um segredo, gerar qualquer número de pares de chaves para assinatura eletrônica. Você pode usar novos endereços para cada pagamento recebido e alteração.
Convenientemente, as chaves dessa carteira podem ser facilmente transferidas para outro dispositivo, feitas uma cópia de backup e depois restauradas, porque na verdade você precisa reservar apenas um segredo principal. Além disso, todas as chaves privadas geradas a partir do segredo principal não são conectadas umas às outras. É impossível rastrear a conexão entre os endereços gerados (para determinar que todos pertencem a um usuário) e, com a chave privada gerada, não é possível restaurar o segredo compartilhado.
Codificação secreta básica
Agora vamos falar sobre a codificação do segredo principal. Há alguma abordagem padronizada que foi definida no BIP39. Essa é a chamada codificação de verificação de codificação do segredo principal em uma frase mnemônica - um conjunto de palavras fáceis de escrever no papel e, se necessário, lembrar. Ao entrar, é possível verificar a soma de verificação, ou seja, identificar um erro, se houver, com uma probabilidade bastante alta.

Como isso funciona? Na verdade, você tem o segredo principal (Entropia) - os dados a partir dos quais todas as chaves pessoais da carteira são expandidas. Esse segredo pode ter comprimentos diferentes. Quanto à soma de verificação: para cada 32 bits de Entropia, há 1 bit da soma de verificação, ou seja, Checksum é calculado pela fórmula como o comprimento da Entropia em bits dividido por 32.
A entropia concatena com uma soma de verificação, que é calculada como um hash SHA-256 duplo (SHA-2 com um comprimento de 256 bits), após o qual o número necessário de bits é cortado. Os dados concatenados são transferidos para outro sistema numérico: do binário para o sistema numérico na base de 2048 (como você pode ver, 2048 é
) E se você adicionar o comprimento dos bits da Entropia e a soma de verificação, obterá um múltiplo de 11. Assim, obtemos o número de palavras na frase mnemônica de saída.
De fato, os dados são "fatiados" em partes de 11 bits. Há um dicionário de 2048 palavras (
) aos quais se aplicam certos requisitos. O idioma padrão do dicionário é o inglês, mas qualquer pessoa pode ser usada. As palavras não devem exceder um determinado comprimento (geralmente um limite de até 7 caracteres). Todos eles devem ser codificados em UTF-8 com uma certa normalização de todos os caracteres. Obrigatório é a exclusividade de cada palavra nos quatro primeiros caracteres.
Os quatro primeiros caracteres identificam exclusivamente a palavra no dicionário, e os caracteres restantes são usados para completar essa palavra em uma forma conveniente para leitura, memorização etc. Assim, cada parte de dados composta por 11 bits recebe uma correspondência inequívoca na forma de uma palavra. dicionário. Se a entropia do seu segredo for 256 bits, os dados para codificação serão 264 bits e sua frase mnemônica conterá 24 palavras. Essa é a principal abordagem para criptografar segredos de carteira no BIP39, mais usada na prática.
Para fazer uma cópia de backup no futuro e usá-la, você está convidado a escrever esta frase em uma mídia externa. O papel que você armazenará em um local seguro é o melhor. Assim, você pode restaurar o acesso total a todas as suas chaves.
Tipos de carteiras determinísticas
As carteiras determinísticas vêm em dois tipos. Considere suas principais diferenças.
O primeiro é o mais simples. O principal segredo aqui é concatenado com o índice da chave filho que queremos obter, após o qual os dados concatenados são hash. Na maioria das vezes, isso acontece usando a função de hash SHA-256.
O segundo tipo inclui carteiras determinísticas hierárquicas (carteiras HD), cujos princípios são definidos no BIP32 e são uma abordagem muito comum para a geração de chaves hierárquicas.
Geração determinininista
Considere as diferenças entre esses tipos de carteiras no diagrama.

Uma carteira determinística comum possui alguma semente, da qual um grande número de chaves privadas é gerado diretamente. Seu número pode ser limitado apenas pela dimensão do índice, que concatena com o segredo antes do hash. Normalmente, são 4 bytes, ou seja, o espaço de opções possíveis permite cerca de 4 bilhões de chaves determinísticas exclusivas da carteira. Na prática, isso deve ser suficiente para qualquer situação.
Geração determinística hierárquica
Vamos seguir para uma carteira determinística hierárquica, cujo principal esquema de implantação é apresentado de uma forma simplificada até o momento. Há sementes, das quais é obtido diretamente um par de chaves mestras. Se em uma carteira determinística comum obtemos uma chave privada, então aqui temos um par de chaves. Além disso, existem níveis de hierarquia, em cada um dos quais calculamos o índice para gerar a chave filha. Também podemos criar ramificações de chave pública e ramificação de chave privada.
Níveis de hierarquia
Em relação às carteiras HD, é importante notar que, de acordo com as regras do BIP32 em cada nível da hierarquia, o nó de geração possui três objetos: uma chave privada, uma chave pública e um código de cadeia que é usado para gerar o próximo nível de hierarquia.
Esquema de geração hierárquica
Vamos considerar com mais detalhes o esquema de geração de chaves para o BIP32.

Tudo começa com a semente, também é chamado de semente principal, a partir da qual é calculado o nível zero da hierarquia - um par de chaves mestras e código de cadeia.
Um grande número de pares de chaves com índices específicos pode ser gerado a partir de um par de chaves mestras. Um novo nível de hierarquia está sendo formado, usado para gerar contas. Suponha que um usuário tenha semente e queira criar vários endereços que serão diferentes um do outro. As moedas desses endereços não serão misturadas, não serão publicadas juntas e, nas transações concluídas entre eles, não será possível encontrar uma conexão. Essas teclas serão usadas completamente separadamente uma da outra. Em uma das contas, o grupo-chave será usado para o orçamento de trabalho, na outra para o orçamento pessoal e em outra conta para a escrituração em preto. As moedas não se misturam.
O próximo nível de hierarquia define diferentes cadeias de geração de chaves. Na maioria das vezes, são usadas cadeias com os índices 0 e 1. Uma cadeia com o índice 0 gerará chaves finais para formar um endereço para pagamentos recebidos, e uma cadeia com o índice 1 gerará carteiras de moedas enviadas pelo usuário a eles mesmos, ou seja, alterações. Isso é necessário para que a carteira no nível do programa distinga os pagamentos enviados de fora da alteração, calcule as alterações no saldo de cada transação e compile uma lista visual com o histórico de todos os pagamentos. Isso simplifica o desenvolvimento da carteira e seu uso para pagamentos diários.
Código de autenticação de mensagem com base em hash
Agora vamos para o componente matemático dos processos hierárquicos de geração de chaves. Para começar, considere o código de autenticação de mensagens com base em hash. Esta é uma classe diferente para calcular funções de hash. Difere na medida em que leva dois valores na entrada, e não um. O primeiro valor é a chave privada e o segundo é a própria mensagem.
K é a chave
m - mensagem
opad, ipad - alguns valores constantes necessários para gerar chaves diferentes umas das outras em diferentes estágios do hash.
Como uma função hash, o SHA-512 é usado.
A peculiaridade é que, para usar o HMAC, você precisa possuir uma chave secreta para obter o valor correto de hash da mensagem.
Portanto, para calcular o valor do hash HMAC, o valor da chave XOR está com o valor constante do ipad, após o qual o resultado é hash. Uma mensagem é concatenada para esse valor, após o qual a chave XOR é calculada com um valor constante, concatenada com um valor de hash e, em seguida, hash novamente. Como resultado, obtemos 512 bits do valor do hash.
Funções de derivação
Vejamos algumas funções usadas no cálculo de chaves hierárquicas.

Antes de tudo, estamos interessados em converter a semente principal em um par de chaves principais. Depois disso, você precisa obter a chave privada filho e a chave pública filho da chave pai pessoal. No segundo caso, a mesma função exata é usada como no primeiro, mas a multiplicação do número pelo ponto base é adicionada, portanto, não será considerada separadamente. A próxima etapa é obter o público filho da chave pai pública. Vale ressaltar que não é possível obter um filho pessoal da chave pública pai. Essa limitação se deve a certas propriedades inerentes às carteiras HD, que consideraremos mais adiante.
Então, vamos analisar cada uma das funções de geração separadamente.

Para obter a chave mestra do master sid, é usada a função HMAC, onde a cadeia constante "Bitcoin seed" é transmitida como a chave e os principais dados secretos em si como uma mensagem. Assim, é obtido um valor de hash de 512 bits, que consideramos como duas partes: esquerda e direita. O lado esquerdo é a chave privada mestra e o lado direito será o código da cadeia. Além disso, esses valores serão usados para gerar níveis subsequentes de chaves filho.
Para tornar o mestre público, basta multiplicar o valor do ponto base pelo valor da chave privada mestre. Como você pode ver, isso acontece por analogia com chaves comuns em um grupo de pontos em uma curva elíptica.
Agora vamos ver como a chave privada filho vem do pai particular.

Usaremos a função HMAC novamente. Como chave, passamos o código da cadeia do nível atual da hierarquia e, como mensagem, concatenação, onde a primeira parte será a chave pai pessoal multiplicada pelo ponto base. De fato, isso é feito para um ponto e a serialização desse ponto. A concatenação ocorre com o índice da chave filha que queremos receber, serializado em 32 bits, ou seja, 4 bytes.
Com base no resultado da função HMAC, obtemos o valor I e, novamente, o consideramos separadamente: as partes esquerda e direita dos valores de saída são 256 bits. Em seguida, a chave privada filho
calculamos adicionando ao valor de saída esquerdo
valores da chave privada pai. A adição é feita no módulo n, onde n é a ordem do ponto base da curva elíptica, para não exceder o valor máximo da chave privada. Assim, recebemos uma chave privada filho.
Por conseguinte, o código da cadeia filho será igual ao valor de saída correto da função HMAC, ou seja,
. Se quisermos encontrar a chave pública filha da chave pai pessoal, multiplicamos o valor
pelo valor do ponto base na curva elíptica. Então, nós obtemos a chave pública
.
Como calculamos a chave pública filha da chave pai pública?

Aqui o cálculo será um pouco diferente. Passamos a hierarquia da cadeia do nível atual da hierarquia como uma chave para a função HMAC, após a qual serializamos a chave pública pai e a concatenamos com o índice desejado serializado em 32 bits. Os dados de entrada são obtidos exatamente da mesma maneira que no caso anterior. Para calcular a chave pública, pegamos o lado esquerdo do valor de saída da função HMAC e consideramos como 256 bits modulados a ordem do ponto de base, levamos-o a um ponto na curva elíptica, ou seja, multiplique pelo ponto de base e depois adicione o resultado com a chave pública pai . O resultado da adição também será um ponto, e será uma chave filho pública. O código da cadeia para essa chave será o lado direito do valor de saída da função HMAC.
Correspondência de teclas entre si
Isso pode levantar uma questão lógica sobre como as chaves públicas e privadas obtidas de maneiras diferentes corresponderão uma à outra. É realmente possível obter exatamente o mesmo valor de uma chave pública gerada por uma maneira pública, pegando uma chave privada obtida de outra maneira e multiplicando-a por um ponto base? Isso é fácil de verificar.

Se lembrarmos de como calculamos a chave filho pessoal e a multiplicarmos pelo ponto base, ou seja, trazê-lo para a função de ponto, e depois recordar o cálculo da chave pública filho e comparar esses cálculos, veremos que se considerarmos a chave pública pai como um produto do pai pessoal chave para o ponto base, veremos que os mesmos cálculos foram realizados, apenas em uma ordem diferente.
Em um caso, adicionamos as chaves privadas e multiplicamos pelo ponto base, e no segundo caso, primeiro multiplicamos os valores pelo ponto base e depois os adicionamos e obtivemos o resultado. Com base no fato de que a operação de adição de pontos em uma curva elíptica é aditiva, podemos dizer que esses dois valores são iguais - obteremos a mesma chave pública calculada de duas maneiras.
Exemplo de chave pública
Por uma questão de interesse, podemos ver um exemplo de uma chave pública que foi obtida para valores de teste e cálculos BIP32. Se nossa Entropia consistir em 128 bits, no sistema numérico hexadecimal será semelhante à imagem abaixo.

O mesmo valor codificado na frase mnemônica do BIP39 será semelhante às 12 palavras mostradas. Se você usar esta frase mnemônica como uma semente principal para a geração hierárquica de chaves, obterá uma chave privada principal com o código de cadeia de 256 bits correspondente.
Chaves estendidas
Também existem conceitos como chave pública estendida e chave privada estendida. Como é usado? Para entender melhor, descrevemos a situação visual.
Digamos que temos um usuário específico e algum serviço. Um serviço transfere pagamentos, por exemplo em bitcoins, para um usuário com uma certa frequência. Tanto o usuário quanto o serviço estão interessados em usar um novo endereço para cada pagamento, a fim de dificultar para um observador externo estabelecer um fato e confundir o histórico de interação entre si.
No caso mais simples, seria assim: o usuário para cada pagamento recebido gera um novo par de chaves, calcula o endereço que ele passa para o serviço, após o qual o serviço pode gerar uma transação e concluir o pagamento. No entanto, isso é inconveniente para qualquer uma das partes se a intensidade desses pagamentos for alta.
Chave pública estendida
Em uma situação semelhante, a chave pública estendida (xPubKey) ajuda a se livrar do inconveniente. O usuário pode permitir que um serviço de terceiros gere endereços, em vez de si mesmos, que serão conhecidos pelo serviço, mas apenas o usuário terá chaves privadas. O serviço pode gerar qualquer número de endereços sem o conhecimento do usuário e enviar fundos para ele, e o usuário pode, conforme sua conveniência, implantar chaves privadas e obter acesso a qualquer um desses endereços.
Como isso funciona? O usuário precisa gerar uma nova conta no segundo nível da hierarquia de chaves, calcular para ele a chave pública e o código da cadeia para o nível atual. Depois disso, você precisa transferir a chave pública e o código da cadeia para o serviço. Por conveniência, foi introduzida a codificação Base58Check, sobre a qual falamos (há uma versão especial aqui). Em seguida, a chave pública, o código da cadeia e a soma de verificação são concatenados. Tudo isso é codificado no sistema de números base 58 e obtemos uma chave pública estendida já codificada de acordo com um determinado padrão. Começa com os caracteres "xpub", que são facilmente reconhecidos. Aparecerá como mostrado na imagem.

Um serviço pode aceitar essa chave e implantar chaves públicas para o usuário via BIP32, receber endereços deles e pagar por eles. No entanto, apenas o usuário pode calcular as chaves privadas correspondentes.
Derivação endurecida
Na geração hierárquica de chaves, existe uma derivação endurecida. Essa é uma abordagem que não permite o cálculo de chaves públicas filho da chave pública pai correspondente. Isso difere da geração normal, pois usamos a concatenação do ponto serializado como chave pública pai como uma mensagem para a função HMAC, e na derivação reforçada usamos a serialização da chave privada pai.
Além disso, o cálculo do índice é diferente. O índice na geração normal é serializado diretamente em 32 bits e na derivação endurecida é ligeiramente convertido: um valor constante é adicionado a ele
que define o bit mais significativo como 1 (torna-se fácil distinguir entre tipos de derivação). Consequentemente, o espaço de variantes de chaves possíveis é o mesmo para geração normal e derivação endurecida, e é igual a
.
Assim, tendo uma chave pública pai e derivação reforçada, não é possível calcular chaves públicas filho. Se o invasor receber a chave pública pai, ele não poderá calcular as chaves filho. Portanto, não será possível calcular os endereços e seus relacionamentos com a chave pai recebida. No caso de derivação normal, ou seja, no habitual, essa função pode ser usada e rastrear a relação de endereços entre si.Caminhos de geração
Vamos falar sobre as maneiras pelas quais as chaves podem ser geradas.
Em cada nível da hierarquia, há um índice específico que define aspectos da geração de chaves. O caminho da chave mestra até a chave final pode ser escrito através de barras como índices. Se estamos falando de uma chave privada, a gravação começa com um pequeno "m" e, se estamos falando de gerar uma chave pública, então com um grande "M". Se o índice for indicado por um apóstrofo, deve-se entender que estamos falando de derivação endurecida, sem uma derivação apóstrofe - normal.Considere um dos caminhos populares de geração de chaves usados no BIP32, onde chaves hierárquicas foram definidas.
Ele usa um caminho em que a chave mestra é o nível zero da hierarquia. A seguir, estão os índices de contas que designam o mesmo usuário, seguidos por cadeias nas quais pode haver cadeias de endereços publicadas fora para aceitar pagamentos recebidos e, com o índice 1, essas cadeias serão criadas para as quais o usuário envia pagamentos para si mesmo (com mais frequência tudo isso é rendição). O índice final será usado para gerar as chaves a partir das quais os endereços serão calculados.Para calcular a primeira chave com o índice 0 de acordo com o padrão BIP32, teremos m, 0 com a geração de cadeia endurecida - 0, índice - 0 (m / 0 '/ 0/0). Portanto, obtemos o caminho para a primeira chave gerada hierarquicamente.Há uma sugestão para melhorar o Bitcoin, chamado BIP43, que envolve escrever para o primeiro nível da hierarquia o número de melhoria, que oferece um novo caminho de desova (m / bip_number '/ *).
Assim, apareceu o BIP44, que utilizava o recurso da sentença anterior, ou seja, o índice 44 é escrito para o primeiro nível hierárquico e propunha as seguintes melhorias: no índice do segundo nível hierárquico, registre um determinado valor que corresponda ao tipo de moeda que usamos para esta carteira. Agora, chaves para diferentes moedas podem ser implantadas e usadas em uma carteira.
Para Bitcoin, o caminho será semelhante a "m / 44 '/ 0' / 0 '/ 0/0", para Bitcoin testnet - "m / 44' / 1 '/ 0' / 0/0", para Litecoin - "m / 44 '/ 2' / 0 '/ 0/0 ”, para Dash -“ m / 44' / 5 '/ 0' / 0/0 ”. Curiosamente, o Ethereum usa exatamente a mesma curva elíptica para calcular chaves e assinar digitalmente e, para a carteira, o caminho será semelhante a “m / 44 '/ 60' / 0 '/ 0/0”.Há outra melhoria - BIP45. A melhoria visa determinar as regras para a geração de chaves no caso de seu uso em carteiras com várias assinaturas e a formação de endereços usando o BIP16, isto é, P2SH. Ele inclui a sentença BIP43 e indica o índice 45 no primeiro nível da hierarquia; no segundo nível da hierarquia, requer uma indicação de um assinante (co-signatário).
Por exemplo, há uma regra de 3 de 5 assinaturas múltiplas. Portanto, existem 5 signatários, mas para gastar moedas, você precisa de pelo menos 3 assinaturas. Assim, cada um dos signatários terá uma carteira HD com sua própria semente principal e indicará seu número de série em seu caminho. Pode ser calculado como um índice ao classificar as chaves geradas no primeiro nível da hierarquia de cada usuário. Suponha que, no primeiro nível, cada usuário gere chaves, eles troquem entre si, classifiquem e descubram quem possui qual índice para o segundo nível da hierarquia. Isso é necessário para eliminar ainda mais a necessidade de interagir dessa maneira, e imediatamente gerar corretamente endereços e saber seu número de série.Ou seja, você pode trocar a chave pública estendida uma vez para poder independentemente, independentemente de outros membros do grupo, formar endereços com várias assinaturas e aceitar pagamentos por eles.Perguntas
Vamos passar para as perguntas mais frequentes.- Como as sementes mestras diferem em moedas diferentes?Seed é um número gerado aleatoriamente, uma sequência de bits, ou é uma frase mnemônica gerada, por exemplo, de acordo com o BIP39, que é usado para gerar chaves. Pode ser usado para uma moeda e para qualquer outra - não é necessário usar frases mnemônicas diferentes para moedas diferentes. Além disso, existe o BIP44, que define as regras para gerar chaves para diferentes moedas a partir da mesma frase mnemônica. Essas chaves privadas não se cruzam, mas serão usadas para diferentes endereços de diferentes moedas.- Dicionário do BIP39, onde são padronizadas 2048 palavras para uma frase mnemônica? Posso usá-lo em todas as carteiras e aplicativos?O fato é que esse padrão é descrito para o BIP39. É para o BIP39 que existem dicionários: inglês, dois japoneses, chineses, italianos, russos, ucranianos etc. Ou seja, se algum aplicativo afirma que usa o BIP39 e possibilita importar e exportar uma frase mnemônica, significa que ele também usa um conjunto de palavras o mesmo. No entanto, existem carteiras que não usam o BIP39, mas suas próprias modificações. Você precisa examinar a descrição da carteira e usar o desenvolvimento padronizado ou próprio, ou o desenvolvimento do serviço que a carteira oferece.- Em trocas e armazenamentos centralizados como o Coinbase, as chaves da carteira de todos os usuários são geradas a partir da mesma frase comum para todos ou não?É difícil dizer porque eles não abrem sua estrutura interna, mas esses novos serviços que aparecem podem gerar chaves separadamente, usar o padrão BIP32 ou usar sua versão modificada. Os serviços que existiam antes dos padrões para geração de chave hierárquica pareciam, provavelmente, continuam gerando apenas chaves privadas separadas. Talvez seja assim que eles são mais fáceis de gerenciar, se houver uma grande rotatividade de todas as chaves."A chave é um ponto na curva elíptica, ou seja, dois números muito grandes X e Y?"A chave pública - sim, este é um ponto na curva elíptica, e a chave privada é um número natural que mostra quantas vezes você precisa adicionar o ponto base consigo mesmo. A chave pública em si consiste em dois valores - essas são as coordenadas X e Y, cada uma com um tamanho de 256 bits.- O que é "convertido em ponto" e serialização de ponto e índice?Reduzir a um ponto significa que existe um número natural, que consideramos uma chave privada. Adicionamos o ponto base conosco tantas vezes, ou seja, no grupo de pontos na curva elíptica, apenas a operação de adição é definida, e podemos multiplicar o ponto por um número natural. Serialização de um ponto significa gravar de uma certa maneira duas coordenadas. Este pode ser um registro compactado, mas não necessário. Comprimido no sentido de que uma das coordenadas, ou seja, Y, é convertida em um sinal, os dados são substituídos na equação e examinam onde está o ponto: acima ou abaixo. No caso de serialização de índice, você precisa entender que um número regular, que, dependendo do tamanho, pode ser escrito em bytes ou bits. Quanto maior o número, mais dados serão necessários. No caso dos cálculos que examinamos,é necessário um número de um determinado comprimento. Você precisa serializá-lo para um comprimento específico - 4 bytes. Como resultado, isso se refere à conversão do índice para um número de 4 bytes. Se os valores sênior permanecerem vazios lá, eles serão zero.- Quem apresentou esses cálculos para as funções de derivação das carteiras HD? Por que essas fórmulas onde existem justificativas e onde você pode ler mais sobre isso?Você pode ler mais no BIP32, se estiver interessado em uma frase mnemônica, depois no BIP39, etc. Você pode abrir o GitHub e encontrar um usuário sob o apelido Bitcoin. Ele tem um repositório Bitcoin onde o código fonte do Bitcoin está armazenado e um repositório BIPs (fonte primária), onde todas as sugestões para melhorar o Bitcoin são registradas.Eles tiveram a idéia de fazer cálculos dessa maneira, porque estão ligados a um grupo de pontos de uma curva elíptica. Quando você desejava obter essa funcionalidade que permite calcular separadamente as ramificações das chaves públicas e privadas, mantendo a correspondência entre si, essa era a opção de implementação mais fácil. De fato, os desenvolvedores usaram a opção mais simples, que permite obter propriedades interessantes usando a criptografia que foi testada pelo tempo. Os autores das melhorias propostas são muitos. A comunidade Bitcoin, cujos participantes oferecem algum tipo de desenvolvimento de melhorias e transformações matemáticas, é bastante grande.- A derivação endurecida é sempre apenas no segundo nível da hierarquia?Tudo depende da situação. No caso de gerar chaves para várias assinaturas, faz sentido fazer derivações protegidas apenas no primeiro nível da hierarquia. No BIP44, a derivação endurecida é aplicada aos três primeiros níveis: no primeiro nível é o número do BIP em si, no segundo é o número da conta em que é relevante, no terceiro é o número da moeda em que também faz sentido. Suponha que você provavelmente não goste se publicar a chave pública e, através dela, as pessoas poderão rastrear todos os seus endereços no Bitcoin. Se você usar uma conta para receber pagamentos de determinados serviços, poderá divulgar essa chave e não precisará de derivação reforçada aqui.- Onde é possível aplicar a geração hierárquica de chaves?Você pode aplicá-lo ao trabalhar com a central para que a central sempre o pague em endereços diferentes. Embora, nesse caso, seja melhor organizar tudo isso manualmente. Isso é mais relevante para as carteiras digitais diárias, porque aqui é um processo muito simples criar um backup de chaves privadas e restaurar uma carteira. A geração de chaves para diferentes moedas também é suportada, e o próprio padrão já é usado em diferentes implementações de carteiras digitais. As chaves entre essas carteiras são convenientes para transferir usando a mesma frase mnemônica.Este tópico é abordado em uma das palestras do curso online de blockchain " Geração de chaves hierárquicas ".