Esquema de assinatura
Ed25519 explicado matematicamente
A assinatura que acompanha cada avaliação da McGesund — da curva à chave, até à equação que o navegador do leitor recalcula.
Atualizado: 2026-09-07
1. Do que se trata aqui
Uma avaliação na McGesund não é um campo de texto numa base de dados em que seja preciso acreditar. Ao ser enviada, é assinada digitalmente, e qualquer visitante pode mais tarde recalcular essa assinatura no seu próprio navegador.
Para esta assinatura utilizamos Ed25519. Ao contrário de FALCON e ML-DSA, que podem ser acrescentados ao lado como carimbos adicionais, o Ed25519 não é uma opção: todas as avaliações assinadas o incluem, independentemente do plano e da via de submissão.
Uma nota prévia importante:
Ed25519 não é cifragem. O texto da avaliação destina-se justamente a ser lido. A assinatura não prova sigilo, mas sim origem e integridade.
2. O que é exatamente assinado
O que se assina não é o texto corrido, mas um objeto de dados compacto que fixa de forma inequívoca o texto e tudo o resto:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID da empresa>",
"c": "<ID da avaliação>",
"h": "<SHA-256 do texto da avaliação>",
"rh": "<SHA-256 de todo o registo de submissão>",
"rv": 1,
"qh": "<SHA-256 do envelope QR, apenas em avaliações por QR>",
"kid": "<ID da chave>",
"iat": 1757203200
}
Este objeto é codificado em CBOR. Essa sequência de bytes — e não a sua representação legível acima — é a nossa mensagem . Assinatura e mensagem seguem juntas num envelope:
O é a versão do formato. Não há mais nada lá dentro — em particular, nenhuma assinatura pós-quântica: essa, quando existe, fica junto ao registo de dados e não dentro do envelope.
3. O que a assinatura deve garantir
Um leitor que chega ao perfil de uma empresa tem duas perguntas à sua frente:
- Esta avaliação vem realmente do sistema da McGesund?
- Foi alterada posteriormente?
Para isso existe um par de chaves:
- uma chave privada — permanece no serviço de assinatura
- uma chave pública — pode estar em poder de qualquer pessoa e é endereçada pelo ID da chave (
kid) no payload
Assina-se com a chave privada. Verifica-se com a pública — e isso acontece no navegador do leitor, não no nosso servidor. É esse o ponto: uma verificação que nós próprios executássemos e cujo resultado comunicássemos não seria uma verificação, seria uma afirmação.
4. Porquê uma curva elíptica?
Toda a assinatura precisa de um cálculo que seja fácil num sentido e praticamente impossível no outro. No Ed25519 esse cálculo é a multiplicação escalar numa curva elíptica:
Calcular o ponto público a partir do número secreto custa microssegundos. Deduzir a partir de é o problema do logaritmo discreto — e para ele não se conhece nenhum método que, com esta dimensão, termine em prazos humanos.
O ganho prático face a esquemas mais antigos como o RSA está no tamanho:
| chave pública | assinatura | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Com um nível de segurança comparável. Mesmo com milhões de avaliações, 64 bytes por avaliação não são uma grandeza que obrigue a pensar duas vezes.
5. A curva edwards25519
Calcula-se módulo um número primo:
Daí o nome. A curva é uma curva de Edwards torcida:
Um «ponto» é um par de números de que satisfaz esta equação. Não há nenhuma curva para ver — o desenho da secção seguinte é um auxílio visual sobre os números reais, não uma imagem do espaço de cálculo verdadeiro.
Há ainda duas grandezas a acrescentar:
- um ponto base fixado por convenção,
- a ordem do subgrupo gerado por :
é primo. Isso significa: somando repetidamente a si próprio, percorrem-se exatamente pontos diferentes e regressa-se depois ao início. Por isso, todos os cálculos com escalares correm módulo e todos os cálculos com coordenadas módulo . Confundir estes dois números é o erro clássico de principiante.
6. Somar pontos
Dois pontos são combinados num terceiro segundo uma fórmula fixa:
O elemento neutro é — o ponto onde o cálculo começa.
Esta fórmula tem uma propriedade que não se vê à primeira vista e que é mais importante para a segurança do que qualquer constante: é completa. Funciona para todas as entradas, sem casos especiais para «os dois pontos são iguais» ou «o resultado é o elemento neutro». Nas curvas de Weierstrass mais antigas esses casos especiais existem, e cada um deles é um ramo no programa — um ramo cujo tempo de execução é mensurável. Quem mede quanto tempo demora uma assinatura fica a saber, nesses esquemas, algo sobre a chave secreta.
Fórmulas completas significam: sempre o mesmo percurso de cálculo, sempre o mesmo tempo, nada para medir.
7. Multiplicação escalar — a via de sentido único
significa: somar exatamente vezes a si próprio. Com um de 253 bits isso seria uma quantidade de trabalho absurda — por isso duplica-se:
e a partir destes resultados intermédios compõe-se o pretendido. Cerca de 253 duplicações bastam para qualquer . Este é o caminho para a frente.
Para trás não existe este atalho. Determinar o número a partir do ponto significa resolver o problema do logaritmo discreto.
No esquema real calcula-se módulo . Aí não há «esquerda», não há «direita» e não há proximidade: de e resultam dois pares de números sem qualquer parentesco reconhecível.
8. O par de chaves do serviço de assinatura
No início estão 32 bytes aleatórios, a seed. Tudo o resto é derivado a partir daí:
Da primeira metade nasce o escalar secreto , mas não sem alterações. Três bits são fixados ou apagados — o chamado clamping:
- os três bits inferiores são postos a zero: passa assim a ser múltiplo de 8. A razão é o cofator 8 da curva — o grupo completo de pontos é oito vezes maior do que o subgrupo de ordem . Um divisível por 8 cai garantidamente no subgrupo certo e nada revela através de pontos de ordem pequena.
- o bit mais alto é apagado e o segundo mais alto é fixado: tem assim sempre o mesmo comprimento em bits. Um mais curto exigiria menos duplicações — e, de novo, o tempo de execução deixaria algo a descoberto.
A chave pública é então simplesmente
guardada como 32 bytes: a coordenada e, no bit mais alto, o sinal de . O é reconstruído pelo próprio verificador a partir da equação da curva — as duas soluções diferem apenas no sinal, e esse único bit diz qual delas se pretende.
A segunda metade do valor de hash, o prefixo, não é necessária para a chave. Entra em cena na secção seguinte.
9. Porque é que o acaso, aqui, não é acaso nenhum
Toda a assinatura deste tipo precisa de um valor irrepetível , muitas vezes chamado nonce. Nunca se pode repetir: quem tiver duas assinaturas com o mesmo consegue extrair a chave secreta com álgebra elementar.
Foi exatamente aí que falharam sistemas reais. O caso mais conhecido é a verificação de assinaturas de uma consola de jogos cujo fabricante, em 2010, usava sempre o mesmo nonce — a chave privada tornou-se assim reconstruível publicamente.
O Ed25519 resolve isto não usando acaso nenhum:
O nonce depende do prefixo secreto e da mensagem. Daí decorrem duas coisas:
- Duas avaliações diferentes produzem, com probabilidade esmagadora, valores de diferentes — o caso de repetição não ocorre.
- A mesma avaliação produz sempre a mesma assinatura. Um processo de assinatura torna-se assim reproduzível, e um gerador de números aleatórios deficiente no servidor não pode estragar nada, porque nenhum é necessário.
Para um portal de avaliações com muitas assinaturas por dia, isto não é uma vantagem académica. É a diferença entre «uma falha na fonte de aleatoriedade seria fatal» e «não há fonte de aleatoriedade que possa falhar».
10. Assinar
Três linhas, nada mais:
A assinatura é o par
32 bytes para o ponto , 32 bytes para o número — 64 bytes no total.
Vale a pena reparar na segunda linha: em entram , a chave pública e a mensagem. O facto de ser incluída no hash não é acessório — impede ataques em que uma assinatura é reinterpretada como pertencendo a outra chave.
11. Verificar
O navegador do leitor conhece: a avaliação , a assinatura e a chave pública . Recalcula e verifica uma única equação:
Se ela se confirmar, a assinatura é válida. A RFC 8032 permite ainda a versão multiplicada pelo cofator, , que trata alguns casos-limite de forma mais generosa.
Não se consulta nenhum servidor, não é preciso que nenhum serviço esteja disponível. A chave pública basta.
12. Porque é que a equação fecha
Basta substituir:
Todo o truque está na transformação do meio: a multiplicação escalar é compatível com a adição. Quem conhece consegue calcular um que satisfaz a equação. Quem não conhece teria de encontrar, para um escolhido por si, um adequado — e isso significa resolver o logaritmo discreto.
13. Um pequeno exemplo integralmente calculado
Com os números reais não há nada para verificar à mão — valores de 253 bits não se controlam de cabeça. Por isso, o mesmo esquema num grupo minúsculo, em que cada passo se acompanha com uma calculadora.
Passo 1: O grupo
Calculamos com os restos módulo e tomamos . Tem-se
ou seja, gera um subgrupo de ordem . As potências são:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
assume o papel do ponto base e a multiplicação o da adição de pontos. Os escalares contam-se módulo , os valores módulo .
Passo 2: O par de chaves
Seja secreto . Então
pode ser do conhecimento de todos.
Passo 3: Nonce e compromisso
Do prefixo e da avaliação resulte . Daí:
Passo 4: O desafio
O hash sobre , e a avaliação forneça
Passo 5: A assinatura
A assinatura é o par .
Passo 6: O navegador verifica
Calcula os dois lados. À esquerda:
À direita, com :
Os dois lados dão :
Passo 7: Alguém altera o texto da avaliação
O texto entra no hash, logo o desafio muda — digamos, para . A assinatura mantém-se em , mas o lado direito não. Com :
Podemos apagar uma avaliação. Alterá-la sem que isso se note, não.
Nota de honestidade sobre o exemplo
O cálculo foi feito aqui no grupo multiplicativo módulo , não numa curva: representa , e o produto representa a adição de pontos . A estrutura é a mesma, e é disso que se trata. O que difere são as ordens de grandeza: contra , e aí a chave não se descobre experimentando as onze possibilidades.
14. O que acontece se alguém alterar a avaliação
Suponhamos que alguém com acesso à base de dados — incluindo alguém da nossa equipa — altera o texto da avaliação ou um dos corações. Então o registo muda e, com ele, pelo menos um dos dois valores de hash h e rh no payload. Com isso muda , com isso o desafio , com isso o lado direito da equação de verificação. A assinatura antiga deixa de encaixar.
A frase decisiva é esta: podemos apagar uma avaliação, mas não podemos alterá-la sem que se note. Na McGesund, a mesma verificação corre ainda todas as noites do lado do servidor sobre o acervo — uma avaliação que não a passe deixa de contar para a média da empresa.
15. Porque é que um atacante fracassa
Ele conhece a chave pública , o ponto base , a curva e todas as assinaturas emitidas até hoje. O que lhe falta é .
O melhor ataque clássico conhecido ao problema do logaritmo discreto num grupo de ordem precisa de cerca de passos. Com , isso corresponde a cerca de
operações. Para comparar: mesmo uma máquina capaz de mil milhões de milhares de milhões () de passos por segundo precisaria de um múltiplo da idade do universo.
Falsificar sem a chave significaria encontrar, para um escolhido pelo próprio, um adequado — a mesma tarefa noutro disfarce.
16. Porquê Ed25519 e não ECDSA
Ambos assentam no mesmo problema. A diferença está em tudo o que acontece à volta:
| ECDSA (curvas NIST) | Ed25519 | |
|---|---|---|
| Nonce | é preciso acaso fresco | determinístico a partir do prefixo e da mensagem |
| Fórmulas | casos especiais, ramos dependentes dos dados | completas, um único percurso de cálculo |
| Parâmetros da curva | origem das constantes nunca explicada por completo | escolhidos a partir de critérios verificáveis |
| Tamanho da assinatura | 64–72 B, codificação variável | fixo em 64 B |
| No navegador | disponível há muito tempo | nativo desde 2023/2024, caso contrário como biblioteca JS |
Para nós, o nonce foi o argumento decisivo. Um portal de avaliações assina com frequência e de forma automatizada; um esquema em que um único valor aleatório fraco entrega a chave é, para isso, a escolha errada.
17. O que o Ed25519 não faz
O Ed25519 assenta no logaritmo discreto — e é exatamente esse problema que um computador quântico suficientemente grande resolve de forma eficiente com o algoritmo de Shor. Se e quando existirão tais máquinas é uma questão em aberto. Para uma avaliação que ainda deve ser verificável daqui a dez anos, é mesmo assim uma pergunta a que é preciso responder hoje.
Por isso, ao lado da assinatura Ed25519 pode surgir um carimbo resistente a computadores quânticos:
- FALCON (FN-DSA) — assinaturas compactas a partir de reticulados NTRU
- ML-DSA-87 (FIPS 204) — a norma NIST concluída
Nenhum dos dois substitui o Ed25519, colocam-se ao seu lado. Se um dos esquemas cair, o outro continua a sustentar.
18. O processo em imagem
19. O que a McGesund faz concretamente com isto
O envelope. Cada avaliação assinada leva um envelope MCG1: com versão de formato, payload e assinatura Ed25519. O kid no payload indica de que chave se trata; a chave pública correspondente é fornecida pelo servidor a pedido — é pública, não há nada a proteger nela.
A verificação no navegador. O Chrome e o Firefox suportam Ed25519 nativamente desde 2023/2024 através da interface WebCrypto. O Safari não — aí a chamada lança um erro em vez de verificar. Por isso, o nosso código de verificação recorre a uma implementação puramente em JavaScript, carregada apenas onde é necessária. A verificação da assinatura conclui-se assim em qualquer navegador, e no aparelho do leitor.
A âncora temporal. A impressão digital da chave de assinatura é ancorada num bloco da Bitcoin através do OpenTimestamps. Com isso, não se demonstra apenas que a assinatura é autêntica, mas também que a chave já existia num determinado momento — sem que ninguém tenha de acreditar no nosso carimbo temporal.
A ligação ao conteúdo. O payload transporta rh, o hash sobre todo o registo de submissão: texto, corações, estado de geolocalização, dados sobre o motivo e proveniência. A assinatura Ed25519 liga assim não só o texto, mas tudo o que é exibido junto à avaliação.
20. Uma frase para levar
Quem possui o escalar secreto assina em microssegundos. Quem não o possui teria de resolver um logaritmo discreto num grupo com cerca de elementos.
Para o leitor de uma avaliação, isso significa simplesmente: não tem de acreditar em nós. Pode verificar por si.