Criptografia baseada em identidade SM9 (IBC)

O SM9 é o membro baseado em identidade do conjunto SM chinês: qualquer cadeia — um endereço de e-mail, um número de telefone, o número de série de um dispositivo — funciona diretamente como chave pública, e um Centro Gerador de Chaves emite as chaves privadas correspondentes. Esta é uma página só de leitura: como funcionam a IBE e a IBS passo a passo, como a criptografia baseada em identidade se compara com os certificados PKI, e os parâmetros oficiais da curva.
Calculadora prevista. Uma calculadora SM9 no navegador está no roteiro da família criptográfica — a maquinaria de emparelhamento (torre de corpos de extensão Fp12, ciclo de Miller, exponenciação final) é um núcleo próprio. Entretanto, as páginas irmãs calculam totalmente no seu navegador o SM2, o SM3 e o SM4.
O que é o SM9?
Em resumo: o SM9 é a norma nacional chinesa para criptografia baseada em identidade (GB/T 38635.1/.2-2020, sucessora da série GM/T 0044-2016): a chave pública é uma cadeia de identidade, como bob@example.com, a chave privada correspondente é emitida por um Centro Gerador de Chaves (KGC) de confiança, e a matemática que o torna possível é um emparelhamento bilinear numa curva BN de 256 bits.

A criptografia de chave pública convencional (RSA, SM2, ECC) responde à pergunta « esta é mesmo a chave do Bob? » com certificados: uma hierarquia de CA garante que determinado bloco de chave com aspeto aleatório pertence ao Bob. A criptografia baseada em identidade inverte isto: o próprio nome é o material da chave. Quem conhecer o endereço de e-mail do Bob pode cifrar-lhe ou verificar as assinaturas dele sem buscar nada — sem diretório de certificados, sem validação de cadeia de confiança. O preço é um terceiro de confiança que pode derivar todas as chaves privadas, e matemática bem mais pesada. O SM9 é a instanciação chinesa normalizada dessa troca.

Os intervenientes: quem detém o quê
FunçãoO que é
Identidade (ID)Qualquer cadeia de bytes, por exemplo bob@example.com, usada diretamente como chave pública. Tem de ser canónica: byte a byte, sem duas grafias da mesma pessoa.
KGCCentro Gerador de Chaves: detém a chave privada mestra, verifica a quem pertence uma identidade e emite a chave privada do utilizador correspondente.
Pares de chaves mestrasDois pares independentes: assinatura (segredo ks, pública Ppub-s = [ks]P2) e cifragem (segredo ke, pública Ppub-e = [ke]P1). Note a assimetria deliberada: uma chave mestra pública vive em G2, a outra em G1.
Chave privada do utilizadorUm ponto na curva, derivado da ID pelo KGC. A chave de assinatura dsA vive em G1; a chave de decifragem deB vive em G2.
hidUm identificador de função de um byte misturado em cada derivação de chave, de modo que uma só identidade gera chaves criptograficamente independentes para assinatura, cifragem e troca de chaves.
H1, H2, KDFFunções auxiliares baseadas em SM3 (GB/T 32905): mapeamentos de hash para inteiro e a função de derivação de chaves.
Emparelhamento eO emparelhamento bilinear R-ate e: G1 × G2 → GT sobre a curva BN de 256 bits definida abaixo. É o motor algébrico de todo o esquema.
Como funciona a cifragem baseada em identidade (IBE) do SM9

A Alice quer enviar um segredo a bob@example.com — possivelmente antes de o Bob se ter alguma vez inscrito no KGC:

1. A Alice deriva ela própria a chave pública do Bob: QB = [H1(IDB ‖ hid, N)]P1 + Ppub-e. Sem consulta a diretório, sem obtenção de certificado — basta-lhe a cadeia de identidade e a chave pública mestra.
2. Efémero: r aleatório; calcula o ponto C1 = [r]QB.
3. Emparelhamento: g = e(Ppub-e, P2), depois w = gr.
4. Chaves: K = KDF(C1 ‖ w ‖ IDB, klen) (baseada em SM3), dividida em K1 (chave de encapsulamento) e K2 (chave MAC).
5. Máscara: C2 = a mensagem com XOR (ou cifrada) com K1; C3 = MAC(K2, C2). O texto cifrado agrupa C1, C3 e C2.
6. O Bob, sempre que se inscreve: o KGC verifica que é mesmo o bob@example.com e emite deB = [ke·(H1(IDB ‖ hid, N) + ke)-1]P2. Depois calcula w′ = e(C1, deB), reconstrói o mesmo K, verifica o MAC e desmascara a mensagem.

Porque funciona: pela bilinearidade, e(C1, deB) = e([r(H1+ke)]P1, [ke/(H1+ke)]P2) = e(P1, P2)r·ke = w — exatamente o valor que a Alice introduziu na KDF. A parte elegante é o passo 6: a cifragem não exige inscrição prévia. A Alice pode selar uma mensagem hoje; o Bob só a consegue abrir depois de provar a identidade ao KGC. A geração diferida de chaves é a característica distintiva da IBE.

Como funcionam as assinaturas baseadas em identidade (IBS) do SM9

A Alice assina uma mensagem M com a sua chave de assinatura dsA:

1. g = e(P1, Ppub-s); r aleatório; w = gr.
2. h = H2(M ‖ w, N); l = (r − h) mod N (repete com um novo r se l = 0).
3. S = [l]dsA. A assinatura é o par (h, S).

Quem conhecer a identidade da Alice verifica-a sem qualquer certificado:

4. P = [H1(IDA ‖ hid, N)]P2 + Ppub-s; u = e(S, P); w′ = u · gh.
5. A assinatura é válida exatamente quando H2(M ‖ w′, N) = h.

Mais uma vez, a bilinearidade fecha o ciclo: u = e(P1,P2)l·ks e gh = e(P1,P2)ks·h, logo w′ = e(P1,P2)ks·(l+h) = e(P1,P2)ks·r = w.

Baseada em identidade vs baseada em certificado (IBE vs PKI)

Esta é a decisão que realmente importa ao escolher o SM9. Ambos os mundos lhe dão cifragem de chave pública e assinaturas; diferem em onde reside a confiança:

AspetoPKI / certificados (mundo SM2, RSA)Baseada em identidade (SM9)
Chave pública de bob@…Um bloco de 65 ou mais bytes dentro de um certificado, obtido de um diretório ou do próprio destinatárioA própria cadeia bob@example.com; o verificador calcula a chave a partir dela
Raiz de confiançaUma hierarquia de CA; cada cadeia tem de validar até uma raizUma chave pública mestra do KGC para todo o domínio
Cifrar antes de o destinatário ter uma chave?Não — primeiro precisa do certificado válido deleSim — cifre agora; ele inscreve-se e decifra mais tarde
Chave privada gerada porA máquina ou dispositivo do próprio utilizador (muitas vezes nunca sai dele)O KGC, centralmente, a partir da identidade
Depósito de chavesNenhuma por conceçãoInerente: o KGC consegue derivar a chave privada de todos os utilizadores
RevogaçãoCRL / OCSP por certificadoSem equivalente; a prática habitual incorpora janelas de validade na ID (por exemplo bob@example.com|2026) para que as chaves expirem por construção
Custo por operaçãoAritmética ECC simples — rápidaUm emparelhamento bilinear — ordens de grandeza mais lento do que uma multiplicação escalar
NormasX.509 / RFC 5280; SM2 segundo a GB/T 32918GB/T 38635.1/.2-2020 (anteriormente GM/T 0044-2016)
Habitat naturalInternet aberta: TLS, assinatura de código, PKI geralEcossistemas fechados: a mensagem de um banco, o correio de uma agência, a identidade de frotas e dispositivos — onde uma autoridade central é aceitável e a cifragem sem inscrição compensa

Regra prática: o SM9 dá-lhe gestão de chaves sem certificados, ao preço de depósito de chaves e de matemática mais lenta. Se não aceitar um terceiro que possa ler tudo ou falsificar qualquer identidade, fique com certificados SM2; se o objetivo for a cifragem sem inscrição prévia dentro de uma organização, o SM9 é exatamente essa ferramenta.

Parâmetros do sistema SM9 (curva BN oficial de 256 bits)

O conjunto de parâmetros da GB/T 38635.1-2020 (também na GM/T 0044.5-2017). São valores de referência só de leitura — o autoteste abaixo volta a verificar cada constante desta página contra valores verificados de forma independente:

ItemValor
CurvaCurva de Barreto–Naehrig (BN) E: y2 = x3 + b sobre Fp, b = 05
Parâmetro t da curva60000000 0058F98A
Primo do corpo pB6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457D
Ordem do grupo NB6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25
Parametrizaçãop = 36t4 + 36t3 + 24t2 + 6t + 1; N = 36t4 + 36t3 + 18t2 + 6t + 1
Cofator1
Grau de imersão k12 (torre de corpos Fp → Fp2 → Fp4 → Fp12)
EmparelhamentoEmparelhamento R-ate e: G1 × G2 → GT, os três grupos de ordem N
Gerador de G1 P1 (em E)x = 93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
y = 21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616
Gerador de G2 P2 (na torção E′: y2 = x3 + 5·u sobre Fp2, u2 = −2)xc0 = 37227552 92130B08 D2AAB97F D34EC120 EE265948 D19C17AB F9B7213B AF82D65B
xc1 = 85AEF3D0 78640C98 597B6027 B441A01F F1DD2C19 0F5E93C4 54806C11 D8806141
yc0 = A7CF28D5 19BE3DA6 5F317015 3D278FF2 47EFBA98 A71A0811 6215BBA5 C999A7C7
yc1 = 17509B09 2E845C12 66BA0D26 2CBEE6ED 0736A96F A347C8BD 856DC76B 84EBEB96
(elementos de Fp2 escritos c0 + c1·u)
Hash / KDFH1, H2 e a KDF assentam no SM3 (GB/T 32905-2016); hid é um identificador de função de um byte escolhido pelo KGC
Onde o SM9 se encaixa no conjunto SM
  • SM9 (esta página) — o elemento disruptivo na gestão de chaves: identidades em vez de certificados, KGC em vez da hierarquia de CA.
  • SM3 — a função de hash; o H1/H2/KDF do SM9 assentam nela. Calcule os resumos na página do SM3.
  • SM4 — a cifra de blocos que normalmente cifra os dados em massa com a chave que a KDF do SM9 produz. Experimente na página do SM4.
  • SM2 — a contraparte do mundo dos certificados: as mesmas funções (assinar, cifrar) com ECC corrente e uma PKI por trás. Calculadora completa na página do SM2.
Nota de conformidade: o SM9 é uma escolha de independência de conjunto e de gestão de chaves para implementações chinesas reguladas, comparável em força a outros sistemas de ~128 bits. As implementações em produção devem tratar a chave mestra do KGC como a joia da coroa — normalmente guardada num HSM, repartida por vários fiduciários, ou ambos.
Ideias erradas comuns
  • « A identidade é a chave pública, logo qualquer pessoa pode decifrar o meu correio. » Não — qualquer pessoa pode cifrar para a identidade e verificar as assinaturas dela; só quem detém a chave privada emitida pelo KGC pode decifrar ou assinar. O KGC verifica quem é realmente o Bob antes de entregar deB.
  • Ignorar o depósito de chaves. Uma chave mestra do KGC comprometida significa que o atacante pode derivar em silêncio a chave privada de todos os utilizadores — desencriptação total e personificação total do domínio. Isto é intencional (é assim que a criptografia baseada em identidade funciona), não uma falha a corrigir. Mitigue operacionalmente: HSM, KGC com limiar repartido por várias entidades, registos de auditoria rigorosos da emissão.
  • Presumir que a cadeia de identidade é tolerante. É calculada em hash byte a byte: Bob@Example.COM, bob@example.com e " bob@example.com" são três chaves públicas diferentes, com três chaves privadas diferentes. Fixe um formato canónico antes da implementação — e considere acrescentar uma janela de validade para a revogação.
  • « Curva de 256 bits, logo segurança de 256 bits. » A criptografia baseada em emparelhamentos não escala como a ECC simples: os ataques atuam nos enormes corpos Fp12/Fp6, onde se aplicam algoritmos de cálculo de índices (subexponenciais). As análises publicadas colocam as curvas BN de 256 bits na classe de ~100–128 bits de segurança, e há investigadores que propuseram parâmetros BN maiores para o SM9 (por exemplo, « Searching BN Curves for SM9 », 2019). Trate o SM9 como aproximadamente da classe do AES-128 — sólido, mas não uma fortaleza de 256 bits.
  • À espera de encontrar no OpenSSL. O OpenSSL implementa SM2/SM3/SM4, mas não tem SM9. Pilhas de código aberto que o suportam incluem o GmSSL e o Bouncy Castle.
FAQ

O SM9 é uma invenção chinesa? O conceito não é: Shamir propôs a criptografia baseada em identidade em 1984, e Boneh–Franklin (2001) construíram o primeiro IBE prático baseado em emparelhamentos. O SM9 (GM/T 0044-2016, depois GB/T 38635.1/.2-2020) é a instanciação chinesa, como norma nacional, dessa linhagem.

Porque não há calculadora SM9 nesta página? Ao contrário do SM2/SM3/SM4, o SM9 precisa de um emparelhamento bilinear: uma torre de corpos de extensão Fp12, um ciclo de Miller e uma exponenciação final — várias milhares de linhas de código cuidadoso com números grandes. Está no roteiro da família; até lá, esta página documenta o algoritmo, e as páginas irmãs calculam o resto do conjunto no navegador.

O SM9 pode substituir o SM2, o SM3 e o SM4? Não — resolvem problemas diferentes. O SM9 substitui a infraestrutura de certificados, não as primitivas: internamente apoia-se no SM3 para o hash e a derivação de chaves, e a chave em massa encapsulada conduz normalmente ao SM4. O SM2 continua a ser a resposta quando se exige responsabilização em estilo certificado sem depósito de chaves.

O que é exatamente o hid? Um identificador de função de um byte (escolhido e publicado pelo KGC) que é misturado em cada hash H1. Como as chaves de assinatura, de cifragem e de troca de chaves fazem hash da identidade com valores de hid diferentes, uma chave de utilizador exposta compromete apenas essa função.

Como são revogadas as identidades? Não existe um mecanismo de CRL dentro do SM9. Prática habitual: incorporar a validade na própria identidade (bob@example.com|2026-Q4) para que as chaves sejam reemitidas periodicamente, e o KGC simplesmente deixa de emitir para as identidades revogadas.

Onde é o SM9 efetivamente usado? Em setores chineses regulados — banca, administração pública e mensagens industriais — tipicamente dentro de ecossistemas fechados onde uma única autoridade é aceitável e « cifrar hoje para um endereço de e-mail, inscrever o utilizador amanhã » compensa o custo do emparelhamento.

Autoteste
Esta é uma página só de leitura, por isso o autoteste verifica a própria página: cada constante da curva apresentada acima é recalculada contra valores verificados de forma independente (o primo p e a ordem N recalculados a partir da parametrização BN, ambos os geradores verificados como pertencentes à curva com ordem N), os números das normas, os invariantes do modelo (sem DOCTYPE, marcador de compilação), as ligações cruzadas e a presença das FAQ.