Crittografia basata sull'identità SM9 (IBC)

SM9 è il membro basato sull'identità della suite SM cinese: qualsiasi stringa — un indirizzo e-mail, un numero di telefono, un numero di serie di un dispositivo — funziona direttamente come chiave pubblica, e un Key Generation Centre emette le chiavi private corrispondenti. Questa è una pagina di sola lettura: spiega come funzionano IBE e IBS passo dopo passo, come si confronta la crittografia basata sull'identità con i certificati PKI, e riporta i parametri ufficiali della curva.
Calcolatore previsto. Un calcolatore SM9 lato browser è nella tabella di marcia della famiglia crittografica — il meccanismo di accoppiamento (torre di estensione di campo Fp12, ciclo di Miller, esponenziazione finale) è un nucleo a sé. Nel frattempo le pagine gemelle calcolano nel browser SM2, SM3 e SM4 per intero.
Che cos'è SM9?
In una frase: SM9 è lo standard nazionale cinese per la crittografia basata sull'identità (GB/T 38635.1/.2-2020, successore della serie GM/T 0044-2016): la chiave pubblica è una stringa di identità come bob@example.com, la chiave privata corrispondente è emessa da un Key Generation Centre (KGC) di fiducia, e la matematica che rende possibile tutto ciò è un accoppiamento bilineare su una curva BN a 256 bit.

La crittografia a chiave pubblica tradizionale (RSA, SM2, ECC) risponde alla domanda «questa è davvero la chiave di Bob?» con i certificati: una gerarchia di CA garantisce che una certa chiave dall'aspetto casuale appartenga a Bob. La crittografia basata sull'identità ribalta il problema: il nome stesso è il materiale della chiave. Chiunque conosca l'indirizzo e-mail di Bob può cifrargli o verificarne le firme senza recuperare nulla — nessuna directory di certificati, nessuna validazione di catena di fiducia. Il prezzo è una terza parte fidata che può derivare ogni chiave privata, e una matematica molto più pesante. SM9 è l'istanziazione cinese standardizzata di questo compromesso.

I protagonisti: chi detiene cosa
RuoloChe cos'è
Identità (ID)Qualsiasi stringa di byte, per esempio bob@example.com, usata direttamente come chiave pubblica. Deve essere canonica: esatta al byte, nessuna doppia grafia della stessa persona.
KGCKey Generation Centre: detiene la chiave privata master, verifica a chi appartiene un'identità ed emette la chiave privata utente corrispondente.
Coppie di chiavi masterDue coppie indipendenti: firma (segreto ks, pubblico Ppub-s = [ks]P2) e cifratura (segreto ke, pubblico Ppub-e = [ke]P1). Si noti la asimmetria voluta: una chiave master pubblica vive in G2, l'altra in G1.
Chiave privata utenteUn punto sulla curva, derivato dall'ID dal KGC. La chiave di firma dsA vive in G1; la chiave di decifratura deB vive in G2.
hidUn identificatore di funzione di un byte mescolato in ogni derivazione di chiave, così che una stessa identità produce chiavi crittograficamente indipendenti per firma, cifratura e scambio di chiavi.
H1, H2, KDFFunzioni ausiliarie basate su SM3 (GB/T 32905): mappature hash-to-integer e la funzione di derivazione delle chiavi.
Accoppiamento eL'accoppiamento bilineare R-ate e: G1 × G2 → GT sulla curva BN a 256 bit definita sotto. Il motore algebrico dell'intero schema.
Come funziona la cifratura basata sull'identità SM9 (IBE)

Alice vuole inviare un segreto a bob@example.com — magari prima che Bob si sia mai registrato presso il KGC:

1. Alice deriva da sola la chiave pubblica di Bob: QB = [H1(IDB ‖ hid, N)]P1 + Ppub-e. Nessuna ricerca in directory, nessun recupero di certificato — le servono solo la stringa di identità e la chiave master pubblica.
2. Effimero: un r casuale; calcola il punto C1 = [r]QB.
3. Accoppiamento: g = e(Ppub-e, P2), poi w = gr.
4. Chiavi: K = KDF(C1 ‖ w ‖ IDB, klen) (basata su SM3), divisa in K1 (chiave di incapsulamento) e K2 (chiave MAC).
5. Maschera: C2 = il messaggio messo in XOR con (oppure cifrato con) K1; C3 = MAC(K2, C2). Il ciphertext raccoglie C1, C3 e C2.
6. Bob, ogni volta che si registra: il KGC verifica che sia davvero bob@example.com ed emette deB = [ke·(H1(IDB ‖ hid, N) + ke)-1]P2. Poi calcola w′ = e(C1, deB), ricostruisce la stessa K, verifica il MAC e smaschera il messaggio.

Perché funziona: per bilinearità, e(C1, deB) = e([r(H1+ke)]P1, [ke/(H1+ke)]P2) = e(P1, P2)r·ke = w — esattamente il valore che Alice ha inserito nella KDF. La parte elegante è il passo 6: la cifratura non richiede una registrazione preventiva. Alice può sigillare un messaggio oggi; Bob può aprirlo solo dopo aver dimostrato l'identità al KGC. La generazione differita della chiave è la caratteristica distintiva dell'IBE.

Come funzionano le firme basate sull'identità SM9 (IBS)

Alice firma un messaggio M con la sua chiave di firma dsA:

1. g = e(P1, Ppub-s); r casuale; w = gr.
2. h = H2(M ‖ w, N); l = (r − h) mod N (riprova con un r nuovo se l = 0).
3. S = [l]dsA. La firma è la coppia (h, S).

Chiunque conosca l'identità di Alice la verifica senza alcun certificato:

4. P = [H1(IDA ‖ hid, N)]P2 + Ppub-s; u = e(S, P); w′ = u · gh.
5. La firma è valida esattamente quando H2(M ‖ w′, N) = h.

Ancora una volta la bilinearità chiude il cerchio: u = e(P1,P2)l·ks e gh = e(P1,P2)ks·h, quindi w′ = e(P1,P2)ks·(l+h) = e(P1,P2)ks·r = w.

Basata sull'identità contro basata su certificati (IBE contro PKI)

Questa è la decisione che conta davvero nella scelta di SM9. Entrambi i mondi offrono cifratura e firme a chiave pubblica; differiscono per dove risiede la fiducia:

AspettoPKI / certificati (mondo SM2, RSA)Basata sull'identità (SM9)
Chiave pubblica di bob@…Un blocco di 65+ byte dentro un certificato, recuperato da una directory o dal destinatario stessoLa stringa bob@example.com stessa; il verificatore ne calcola la chiave
Radice di fiduciaUna gerarchia di CA; ogni catena deve validarsi fino a una radiceUna sola chiave master pubblica del KGC per l'intero dominio
Cifrare prima che il destinatario abbia una chiave?No — le serve prima il suo certificato validoSì — cifri ora; lui si registra e decifra dopo
Chiave privata generata daLa macchina o il dispositivo dell'utente (spesso non esce mai da lì)Il KGC, centralmente, a partire dall'identità
Key escrowNessuno per progettoIntrinseco: il KGC può derivare la chiave privata di ogni utente
RevocaCRL / OCSP per certificatoNessun equivalente; la prassi comune incorpora le finestre di validità nell'ID (es. bob@example.com|2026) così che le chiavi scadano per costruzione
Costo per operazioneAritmetica ECC semplice — veloceUn accoppiamento bilineare — ordini di grandezza più lento di una moltiplicazione scalare
StandardX.509 / RFC 5280; SM2 sotto GB/T 32918GB/T 38635.1/.2-2020 (in precedenza GM/T 0044-2016)
Ambiente naturaleInternet aperta: TLS, firma del codice, PKI generaleEcosistemi chiusi: la messaggistica di una banca, la posta di un ente, l'identità di flotte e dispositivi — dove un'autorità centrale è accettabile e la cifratura senza registrazione ripaga

Regola pratica: SM9 offre gestione delle chiavi senza certificati al prezzo di un key escrow e di una matematica più lenta. Se non può accettare una terza parte che possa leggere tutto o impersonare chiunque, resti con i certificati SM2; se l'obiettivo è la cifratura senza registrazione all'interno di un'organizzazione, SM9 è esattamente lo strumento giusto.

Parametri di sistema SM9 (curva BN ufficiale a 256 bit)

Il set di parametri della GB/T 38635.1-2020 (anche nella GM/T 0044.5-2017). Sono valori di riferimento di sola lettura — l'autotest qui sotto ricontrolla ogni costante di questa pagina rispetto a valori verificati in modo indipendente:

ElementoValore
CurvaCurva di Barreto–Naehrig (BN) E: y2 = x3 + b su Fp, b = 05
Parametro della curva t60000000 0058F98A
Primo del campo pB6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457D
Ordine del gruppo NB6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25
Parametrizzazionep = 36t4 + 36t3 + 24t2 + 6t + 1; N = 36t4 + 36t3 + 18t2 + 6t + 1
Cofattore1
Grado di immersione k12 (torre di campi Fp → Fp2 → Fp4 → Fp12)
AccoppiamentoAccoppiamento R-ate e: G1 × G2 → GT, tutti e tre i gruppi di ordine N
Generatore G1 P1 (su E)x = 93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
y = 21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616
Generatore G2 P2 (sulla torsione E′: y2 = x3 + 5·u su 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
(elementi di Fp2 scritti c0 + c1·u)
Hash / KDFH1, H2 e la KDF sono costruite su SM3 (GB/T 32905-2016); hid è un identificatore di funzione di un byte scelto dal KGC
Dove si colloca SM9 all'interno della suite SM
  • SM9 (questa pagina) — il sovvertitore della gestione delle chiavi: identità al posto dei certificati, KGC al posto della gerarchia di CA.
  • SM3 — l'hash; le H1/H2/KDF di SM9 sono costruite su di esso. Calcoli i digest nella pagina SM3.
  • SM4 — il cifrario a blocchi che di solito cifra i dati di massa con la chiave prodotta dalla KDF di SM9. Lo provi nella pagina SM4.
  • SM2 — la controparte del mondo dei certificati: stessi compiti (firmare, cifrare) con una normale ECC e una PKI alle spalle. Calcolatore completo nella pagina SM2.
Nota sulla conformità: SM9 è una scelta di indipendenza dalla suite e di gestione delle chiavi per impieghi cinesi regolamentati, paragonabile in robustezza ad altri sistemi da circa 128 bit. Le implementazioni in produzione devono trattare la chiave master del KGC come il bene più prezioso — di solito custodita in un HSM, suddivisa tra più fiduciari, o entrambe le cose.
Idee sbagliate comuni
  • «L'identità è la chiave pubblica, quindi chiunque può decifrare la mia posta.» No — chiunque può cifrare verso l'identità e verificare le firme da essa; solo il detentore della chiave privata emessa dal KGC può decifrare o firmare. Il KGC verifica chi sia davvero Bob prima di consegnare deB.
  • Ignorare il key escrow. Una chiave master del KGC compromessa significa che l'attaccante può derivare silenziosamente ogni chiave privata utente — decifratura totale e impersonificazione totale per il dominio. È così per progetto (è così che funziona la crittografia basata sull'identità), non un difetto da correggere con una patch. Si mitiga operativamente: HSM, KGC a soglia diviso tra più entità, registri di audit rigorosi sull'emissione.
  • Presumere che la stringa di identità sia tollerante. Viene sottoposta ad hash esatto al byte: Bob@Example.COM, bob@example.com e " bob@example.com" sono tre chiavi pubbliche diverse con tre chiavi private diverse. Fissi un formato canonico prima del rilascio — e valuti di aggiungere una finestra di validità per la revoca.
  • «Curva a 256 bit, quindi sicurezza a 256 bit.» La crittografia basata sugli accoppiamenti non scala come la ECC semplice: gli attacchi funzionano nei grandi campi Fp12/Fp6, dove si applicano gli algoritmi di index-calculus (subesponenziali). Le analisi pubblicate collocano le curve BN a 256 bit intorno alla classe di sicurezza di circa 100–128 bit, e i ricercatori hanno proposto parametri BN più grandi per SM9 (per esempio «Searching BN Curves for SM9», 2019). Consideri SM9 approssimativamente di classe AES-128 — solido, ma non una fortezza a 256 bit.
  • Aspettarsi di trovarlo in OpenSSL. OpenSSL implementa SM2/SM3/SM4 ma non ha SM9. Stack open source funzionanti includono GmSSL e Bouncy Castle.
FAQ

SM9 è un'invenzione cinese? Il concetto no: Shamir ha proposto la crittografia basata sull'identità nel 1984, e Boneh–Franklin (2001) ha costruito la prima IBE pratica basata su accoppiamenti. SM9 (GM/T 0044-2016, poi GB/T 38635.1/.2-2020) è l'istanziazione a standard nazionale cinese di quella discendenza.

Perché in questa pagina non c'è un calcolatore SM9? Diversamente da SM2/SM3/SM4, SM9 richiede un accoppiamento bilineare: una torre di campi di estensione Fp12, un ciclo di Miller e un'esponenziazione finale — diverse migliaia di righe di codice accurato per grandi numeri. È nella tabella di marcia della famiglia; fino ad allora questa pagina documenta l'algoritmo, e le pagine gemelle calcolano il resto della suite nel browser.

SM9 può sostituire SM2, SM3 e SM4? No — risolvono problemi diversi. SM9 sostituisce l'infrastruttura dei certificati, non le primitive: internamente si appoggia a SM3 per l'hash e la derivazione delle chiavi, e la chiave di massa incapsulata di solito alimenta SM4. SM2 resta la risposta quando serve una responsabilità in stile certificato senza key escrow.

Che cos'è esattamente hid? Un identificatore di funzione di un byte (scelto e pubblicato dal KGC) che viene mescolato in ogni hash H1. Poiché le chiavi di firma, quelle di cifratura e quelle di scambio hashano l'identità insieme a valori hid diversi, una chiave utente trapelata compromette solo quella funzione.

Come si revocano le identità? In SM9 non esiste un meccanismo di CRL. La prassi standard: incorporare la scadenza nell'identità stessa (bob@example.com|2026-Q4) così che le chiavi debbano essere riemesse periodicamente, e lasciare che il KGC smetta semplicemente di emettere per le identità revocate.

Dove viene usato davvero SM9? Nei settori cinesi regolamentati — banche, pubblica amministrazione e messaggistica industriale — di solito dentro ecosistemi chiusi dove un'unica autorità è accettabile e «cifrare oggi verso un indirizzo e-mail, registrare l'utente domani» vale il costo dell'accoppiamento.

Autotest
Questa è una pagina di sola lettura, quindi l'autotest verifica la pagina stessa: ogni costante della curva mostrata sopra viene ricontrollata rispetto a valori verificati in modo indipendente (il primo p e l'ordine N ricalcolati dalla parametrizzazione BN, entrambi i generatori verificati sulla curva con ordine N), i numeri dello standard, gli invarianti del template (nessun DOCTYPE, marcatore di build), i collegamenti incrociati e la presenza delle FAQ.