ECDSA

O sistema de assinatura digital que controla a posse dos bitcoins

O Bitcoin usa um sistema de assinatura digital chamado ECDSA para controlar a posse dos bitcoins.

Em resumo, um sistema de assinatura digital permite gerar o seu próprio par de chaves privada/pública. Você pode então usar a chave privada para gerar assinaturas que provam que você é o dono da chave pública, sem ter que revelar a chave privada.

Qualquer um pode gerar seu par de chaves, e qualquer um pode "travar" uma saída à sua chave pública. Ninguém pode roubar esses bitcoins, porque só a pessoa com a chave privada correta consegue gerar assinaturas válidas para destravá-los.

Curvas Elípticas

A espinha dorsal matemática do ECDSA

O ECDSA usa a curva elíptica secp256k1 como base. As três operações relevantes são a soma, a duplicação e a multiplicação de pontos. A mais importante é a multiplicação, que cria a chave pública a partir da chave privada:

Ícone Ferramenta Multiplicação na Curva
Ícone Ferramenta

EC Multiply

Multiplique um ponto na curva elíptica secp256k1 por um número.

x:
y:
x:
y:

Uso

Como o ECDSA é usado no Bitcoin?

O processo envolve três etapas:

1. Gerar as chaves

Gere uma chave privada (número aleatório) e calcule a chave pública (chave privada × G).

Ícone Ferramenta Chave Privada
Ícone Ferramenta

Chave Privada

Gere um número aleatório de 256 bits.

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0b
0 bits
0d
0x
0 bytes

Nunca use uma chave privada gerada por um site, nem insira sua chave privada em um site. Sites podem facilmente salvar a chave privada e usá-la para roubar seus bitcoins.

Ícone Ferramenta Chave Pública
Ícone Ferramenta

Chave Pública

Calcule a chave pública a partir de uma chave privada.

0 bytes
Coordenadas
0d
0d

Uma chave pública é só um ponto numa curva elíptica. A chave pública final são essas coordenadas em hexadecimal.

Compressão

A curva é simétrica no eixo x, então a chave comprimida guarda só a coordenada x e se a y é par ou ímpar. A x-only é usada em saídas Taproot.

0 bytes

Nunca insira sua chave privada em um site, nem use uma chave privada gerada por um site. Sites podem facilmente salvar a chave privada e usá-la para roubar seus bitcoins.

2. Assinar

Para assinar uma mensagem (um hash de 32 bytes), você combina a chave privada, o hash da mensagem e um número aleatório (nonce) usando a aritmética da curva. O resultado são dois números: r e s — a assinatura.

Ícone Ferramenta ECDSA (assinar/verificar)
Ícone Ferramenta

ECDSA

Assine um hash de mensagem de 32 bytes com uma chave privada (secp256k1) e veja a assinatura (r, s) e a codificação DER.

Nota: o ECDSA é aleatório por natureza, então a assinatura muda a cada execução. Uma assinatura recém-gerada é sempre verificada como válida.

O nonce precisa ser único e secreto a cada assinatura. Se o mesmo nonce for reutilizado em duas assinaturas diferentes, é possível calcular a chave privada a partir das duas assinaturas. Isso já causou perda de fundos no passado.

3. Verificar

Qualquer um pode verificar a assinatura usando a chave pública, o hash da mensagem e a assinatura (r, s). A aritmética da curva confirma se a assinatura foi criada pela chave privada correspondente — sem revelar a chave privada.

No Bitcoin, a assinatura ECDSA é serializada no formato DER antes de ser colocada na transação.