Esquema de assinatura
FALCON explicado matematicamente
Como uma avaliação da McGesund é assinada com FN-DSA (FALCON) — e porque é que um único caráter alterado quebra a assinatura.
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 uma parte destas assinaturas utilizamos FALCON — mais precisamente FN-DSA-512 e FN-DSA-1024. Este artigo explica o que acontece matematicamente.
Uma nota prévia importante:
FALCON não é cifragem. O texto da avaliação destina-se justamente a ser lido. O FALCON 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 o texto de forma inequívoca:
{
"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>",
"iat": 1757203200
}
Esta é a nossa mensagem . Ela liga entre si:
- a que empresa pertence a avaliação (
f), - de que avaliação se trata (
c), - que texto estava por trás — sob a forma de hash (
h), - que registo foi submetido no seu conjunto (
rh): texto, corações, estado de geolocalização e dados sobre o motivo, serializados canonicamente e reduzidos a hash, na versão de esquemarv, - de que código QR provém a avaliação (
qh) — numa avaliação sem QR o campo não existe, - quando foi assinada (
iat).
Um único caráter alterado no texto da avaliação quebra esta cadeia. É precisamente esse o objetivo — e, desde a introdução de rh, o mesmo vale para um coração deslocado a posteriori ou para um estado de geolocalização alterado.
3. O problema de base
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
Assina-se com a chave privada e verifica-se com a pública. E isso acontece no aparelho do leitor, não no nosso servidor.
4. Porquê FALCON?
Muitos dos esquemas de assinatura atuais assentam em problemas difíceis para computadores clássicos, mas que poderiam tornar-se bastante mais fáceis para computadores quânticos suficientemente grandes.
No caso de uma avaliação, isso é mais relevante do que numa mensagem efémera: uma avaliação deve continuar verificável daqui a cinco ou dez anos. Quem assina hoje, assina para todo o tempo de vida do registo.
Por isso, o FALCON assenta em criptografia de reticulados:
Constrói-se um reticulado de descrição matemática simples, no qual uma determinada tarefa de procura é extremamente difícil.
5. O que é um reticulado matemático?
Dois vetores:
Todas as combinações com coeficientes inteiros
formam um reticulado de pontos. Por exemplo:
O decisivo é isto:
O reticulado em si é fácil de descrever. Encontrar nele determinadas propriedades é muito difícil.
6. O segredo são os vetores curtos
A tarefa difícil clássica é:
Este é o Shortest Vector Problem. Em duas dimensões pode resolver-se por tentativa. O FALCON trabalha em dimensão 512 ou 1024 — e aí não há hipótese.
O FALCON não precisa, porém, do vetor mais curto em absoluto, mas de algo aparentado: encontrar um ponto do reticulado próximo de um ponto-alvo dado. Também isso é difícil sem a informação adicional certa.
7. Polinómios em vez de números
O FALCON utiliza um reticulado NTRU e calcula com polinómios. Ou seja, em vez de números isolados, com listas de coeficientes:
Calcula-se no anel
Isso significa:
- : calcular módulo . Com , por exemplo, , pois .
- : mantém os polinómios com comprimento fixo.
Em concreto, o FALCON usa:
8. O truque central
A chave privada é constituída por quatro polinómios pequenos
com a equação NTRU
Estes quatro formam em conjunto uma base secreta e bem comportada do reticulado — uma descrição do reticulado feita de vetores curtos.
A chave pública é, no essencial, um único polinómio:
De resulta o mesmo reticulado, mas numa base pouco manejável, feita de vetores longos:
É este o núcleo inteiro do FALCON. Ambas as bases descrevem o mesmo reticulado. Só que uma serve para calcular e a outra não.
Pode imaginar-se como uma planta da cidade: público é o mapa completo. Secreto é o conhecimento dos atalhos.
9. A avaliação transforma-se num ponto
Antes de se assinar, o objeto do payload passa por uma função de hash. O FALCON usa para isso hash-to-point: da mensagem não resulta um valor numérico, mas diretamente um ponto no anel.
Além disso, o serviço de assinatura sorteia um salt aleatório (320 bits) e inclui-o no hash:
O salt não é acessório. Sem ele, a mesma avaliação daria sempre a mesma assinatura, e a partir de muitas assinaturas seria possível reconstruir a base secreta. Por isso segue também dentro da assinatura.
10. O que é uma assinatura válida
Procura-se um par
com duas propriedades:
A primeira condição, isolada, é trivial de satisfazer — basta pôr e . É a segunda condição que torna a tarefa difícil.
11. Um pequeno exemplo integralmente calculado
Encolhemos tudo para tamanho de brinquedo: polinómios com um único coeficiente, ou seja, números vulgares, e
A chave secreta. Dois números pequenos:
A chave pública. Tem-se , pois . Logo:
O reticulado. .
A base pública resulta diretamente de :
Ambos pertencem a — e ambos são longos.
A base secreta só o serviço de assinatura conhece:
pois e . O determinante é
logo a equação NTRU verifica-se. Ambos os vetores são curtos.
Passo 1: Reduzir a avaliação a hash
Admitamos que o objeto do payload da avaliação dá
Passo 2: Uma primeira solução, má
satisfaz . Mas o comprimento é — demasiado longo.
Passo 3: Encurtar com a base secreta
O serviço de assinatura exprime o ponto-alvo na sua base curta:
Isso conduz a e . Arredondando para , , obtém-se o ponto do reticulado
Controlo: , portanto pertence de facto a . Subtraindo:
Comprimento:
Esta é a assinatura.
Passo 4: O mesmo procedimento com a base pública
Quem conhece apenas tem a base . O mesmo cálculo de arredondamento dá aí o ponto do reticulado e, com ele,
Também é uma solução válida da equação — mas sete vezes mais longa. Se o limiar de aceitação for definido abaixo de 26, ela não vale nada.
É este o alçapão do FALCON numa linha.
Passo 5: O navegador verifica
O navegador recebe a avaliação, o salt e . Recalcula o hash, obtém , reconstrói
e verifica o comprimento:
Passo 6: Alguém altera o texto da avaliação
Se o texto for alterado a posteriori, muda o hash do conteúdo e, com ele, o ponto — digamos
A assinatura antiga continua a ser , mas
Podemos apagar uma avaliação. Alterá-la sem que isso se note, não.
Nota de honestidade sobre o exemplo
Em duas dimensões, um atacante pode simplesmente experimentar soluções curtas — para , por exemplo, . O exemplo não é seguro; mostra apenas o mecanismo. No FALCON-1024 o vetor tem 2048 coeficientes, e aí a tentativa exaustiva não leva a lado nenhum.
12. Porque é que não se arredonda simplesmente?
O método do passo 3 chama-se arredondamento de Babai. Para um exemplo didático chega — para um esquema de assinatura real, não.
A razão: as assinaturas arredondadas não se distribuem uniformemente. A sua forma depende da geometria da base secreta. A partir de um número suficiente de assinaturas, seria possível reconstruir essa geometria — e, com ela, a chave privada. Foi exatamente aí que falharam esquemas de assinatura baseados em reticulados anteriores.
Por isso, o FALCON extrai os vetores curtos de uma distribuição gaussiana discreta sobre o reticulado:
Valores próximos do ponto-alvo são mais prováveis, mas qual deles é escolhido em concreto é aleatório. O resultado é uma distribuição que nada revela sobre a base utilizada — matematicamente: não é distinguível de uma distribuição que dependa apenas do próprio reticulado.
Este amostrador é a parte mais exigente do FALCON. Corre recursivamente sobre uma estrutura em árvore e trabalha com números de vírgula flutuante — o que torna a implementação delicada e é a principal razão pela qual o FALCON é mais difícil de implementar corretamente do que o ML-DSA.
13. O que é efetivamente transmitido
A assinatura consiste em
Apenas — não o par. O é calculado pelo próprio verificador:
Como os coeficientes de são pequenos e se dispersam à volta de zero, podem ser fortemente comprimidos. É essa a razão para as assinaturas notoriamente compactas do FALCON:
| chave pública | assinatura | |
|---|---|---|
| FALCON-512 | 897 B | ~666 B |
| FALCON-1024 | 1 793 B | ~1 280 B |
Para comparar: o ML-DSA-87 precisa de 4 627 bytes. Na McGesund, porém, nenhuma destas assinaturas está no próprio código QR — o autocolante transporta apenas o envelope Ed25519; os carimbos pós-quânticos ficam junto ao registo e são carregados no momento da verificação. Aqui, o tamanho não decide sobre a possibilidade de impressão, mas sobre armazenamento e transmissão: um carimbo FALCON tem cerca de um quarto do tamanho de um carimbo ML-DSA.
14. Porque é que o FALCON verifica depressa
A multiplicação ingénua de polinómios custa
Com a transformada rápida de Fourier, isso desce para aproximadamente
Com , essa é a diferença entre um milhão e cerca de dez mil operações. É por isso que a verificação no navegador de um visitante corre em milissegundos — e é por isso que o F está no nome:
FAst Fourier Lattice-based COmpact signatures over NTRU.
15. O processo em imagem
16. Porque é que um atacante fracassa
Ele conhece e, com isso, todo o reticulado. Conhece também o ponto-alvo , assim que a avaliação é pública. O que lhe falta é a base curta.
Para falsificar uma avaliação, teria de encontrar um vetor curto para um escolhido por si — apenas a partir da descrição pública. É essa a tarefa que o passo 4 do exemplo ilustrou: sem os bons vetores, o mesmo cálculo desemboca numa solução demasiado longa.
Em dimensão 1024, os melhores métodos conhecidos — tanto clássicos como quânticos — estão muito longe disso.
17. O que a McGesund faz concretamente com isto
O envelope. Cada avaliação assinada leva uma assinatura Ed25519. Essa é a variante obrigatória — clássica, muito pequena, verificável nativamente em qualquer navegador.
Os carimbos pós-quânticos. Ao lado ficam uma ou duas assinaturas resistentes a computadores quânticos. Quais, depende do plano:
| Plano | níveis de assinatura disponíveis |
|---|---|
| Basis | Ed25519, FN-DSA-512 |
| Klassik | Ed25519, FN-DSA-512, FN-DSA-1024 |
| Pro | Ed25519, FN-DSA-1024, ML-DSA-87 |
| Premium | Ed25519, FN-DSA-1024, ML-DSA-87, ambas em paralelo |
A variante paralela é deliberadamente redundante. O FALCON assenta em reticulados NTRU, o ML-DSA em reticulados de módulo. Se uma das duas famílias vier a revelar-se mais fraca do que hoje se admite, a outra continua a sustentar.
A âncora temporal. A impressão digital da chave de assinatura é ancorada num bloco da Bitcoin através do OpenTimestamps. Fica assim demonstrado não só que a assinatura é autêntica, mas também que já existia num determinado momento — sem que ninguém tenha de acreditar no nosso carimbo temporal.
Tudo isto é calculado no navegador do leitor, através de um módulo WASM. Nós fornecemos os dados; a verificação corre no aparelho do visitante. Se amanhã saíssemos da rede, uma avaliação já carregada continuaria verificável.
Sobre os nomes: o FALCON está a ser normalizado atualmente como FN-DSA; o projeto está previsto como FIPS 206, mas ainda não está concluído. Por isso, no código da McGesund os níveis chamam-se FN-DSA-512 e FN-DSA-1024, mesmo que na linguagem corrente se continue a falar de FALCON.
18. A intuição mais importante
A chave pública é a descrição completa de um labirinto. Qualquer pessoa a pode consultar.
A assinatura é a prova: «Encontrei um caminho muito curto para exatamente esta avaliação.»
A chave privada é o conhecimento dos atalhos.
O leitor não precisa de conhecer os atalhos. Limita-se a medir se o caminho apresentado é de facto curto e se pertence de facto a esta avaliação. Ambas as coisas as pode fazer sem nós.
Quem altera o texto desloca o ponto — e o caminho antigo passa a não levar a lado nenhum.