A imagem que todo mundo já viu — aquela curva lisa e simétrica, subindo suave para a direita — não é a curva do Bitcoin. Ela é o desenho da mesma equação sobre os números reais, e serve para explicar. Sobre o corpo finito da aula anterior, o que existe é uma nuvem de pontos espalhados, sem curva nenhuma, e ainda assim todas as regras continuam valendo.
A equação é y² = x³ + 7. Nos termos gerais em que essas curvas se escrevem, o coeficiente a vale zero e o b vale sete — e esse zero não é detalhe: ele encurta as fórmulas que vêm a seguir e é uma das razões de a secp256k1 ser rápida.
Um par de números é um ponto da curva se, feita a conta módulo p, os dois lados da equação derem o mesmo resto. Como cada x que funciona produz duas raízes de y, uma par e outra ímpar, a nuvem é simétrica: para cada ponto existe o seu espelho, que é o que se chama de negativo dele.
A soma de dois pontos tem uma definição geométrica que veio dos números reais e sobreviveu à mudança de terreno. Passe uma reta pelos dois pontos, ache onde ela corta a curva pela terceira vez, espelhe esse cruzamento. O resultado é a soma. No corpo finito não há reta para desenhar, mas há a fórmula que a reta produz, e ela funciona igual.

Vale escrever a fórmula, porque ela é curta. Para dois pontos diferentes, calcule a inclinação s como a diferença dos y dividida pela diferença dos x — e lembre que dividir, aqui, é multiplicar pelo inverso, exatamente como a aula anterior mostrou. Então o x do resultado é s ao quadrado menos os dois x originais, e o y do resultado é s vezes a diferença entre o x antigo e o novo, menos o y original. Três linhas, e nenhuma delas sai do corpo.
Somar um ponto a ele mesmo é um caso à parte, porque não existe reta que passe por um ponto só. Usa-se a tangente, e a inclinação vira três vezes o x ao quadrado dividido por duas vezes o y. É aqui que o a igual a zero aparece: na fórmula geral haveria um termo a mais, que na secp256k1 simplesmente não existe.
Falta um caso, e ele obriga a inventar alguma coisa. Some um ponto ao seu espelho. A reta que passa pelos dois é vertical, e uma reta vertical não corta a curva uma terceira vez. Não há resposta dentro da nuvem. A saída foi declarar que existe um ponto ali, no lugar para onde a vertical aponta: o ponto no infinito.

Não é remendo. Com esse elemento a mais, o conjunto passa a satisfazer as quatro propriedades que definem um grupo: somar dois pontos dá sempre um ponto do conjunto, a ordem dos parênteses não importa, existe um elemento neutro que somado a qualquer ponto o devolve intacto, e todo ponto tem um oposto que o anula. O ponto no infinito é esse neutro — o zero desta aritmética. É por ele existir que faz sentido falar em multiplicar um ponto por um número.
Os parâmetros exatos da secp256k1 estão publicados desde 2000 e não mudam: o primo p, o zero, o sete, as duas coordenadas do gerador G escritas com sessenta e quatro caracteres cada, e o número n, que é quantos pontos G alcança antes de voltar ao ponto no infinito.

Sobre o n cabe uma observação que tem consequência prática. Ele é primo, e o total de pontos da curva é exatamente n — o que os matemáticos escrevem dizendo que o cofator é um. Em curvas onde isso não acontece existem subgrupos pequenos escondidos, e com eles uma família inteira de ataques em que se engana uma implementação para trabalhar num pedaço minúsculo do espaço. Na secp256k1 esse tipo de ataque não tem onde começar.
Você já sabe somar pontos e dobrar pontos. Multiplicar um ponto por um número de 256 bits é repetir essas duas operações, e a próxima aula mostra como isso se faz em menos de trezentos passos — e por que desfazer continua custando 2^128.