SM9 identiteitsgebaseerde cryptografie (IBC)

SM9 is het identiteitsgebaseerde lid van de Chinese SM-suite: elke tekenreeks — een e-mailadres, een telefoonnummer, een apparaatserienummer — werkt rechtstreeks als publieke sleutel, en een Key Generation Centre geeft de bijbehorende privésleutels uit. Dit is een pagina met alleen uitleg: hoe IBE en IBS stap voor stap werken, hoe identiteitsgebaseerde cryptografie zich verhoudt tot PKI-certificaten, en de officiële kromme-parameters.
Rekenmachine gepland. Een SM9-rekenmachine aan de browserkant staat op de routekaart van de cryptofamilie — de pairing-machinerie (Fp12-uitbreidingsveldtoren, Miller-lus, eindexponentiatie) is een eigen kern. Ondertussen berekenen de zusterpagina's SM2, SM3 en SM4 volledig in uw browser.
Wat is SM9?
In één zin: SM9 is de Chinese nationale standaard voor identiteitsgebaseerde cryptografie (GB/T 38635.1/.2-2020, opvolger van de GM/T 0044-2016-reeks): de publieke sleutel is een identiteitstekst zoals bob@example.com, de bijbehorende privésleutel wordt uitgegeven door een vertrouwd Key Generation Centre (KGC), en de wiskunde die dit mogelijk maakt is een bilineaire pairing op een BN-kromme van 256 bits.

Conventionele publieke-sleutelcryptografie (RSA, SM2, ECC) beantwoordt de vraag "is dit werkelijk Bobs sleutel?" met certificaten: een CA-hiërarchie bevestigt dat een bepaald willekeurig ogend sleutelblok bij Bob hoort. Identiteitsgebaseerde cryptografie keert dat om: de naam zelf is het sleutelmateriaal. Iedereen die Bobs e-mailadres kent, kan naar hem coderen of zijn handtekeningen verifiëren zonder iets op te halen — geen certificaatdirectory, geen validatie van de vertrouwensketen. De prijs is een vertrouwde derde partij die elke privésleutel kan afleiden, en veel zwaardere wiskunde. SM9 is de gestandaardiseerde Chinese invulling van die afweging.

De rolverdeling: wie wat bezit
RolWat het is
Identiteit (ID)Elke bytereeks, bijvoorbeeld bob@example.com, direct gebruikt als publieke sleutel. Ze moet canoniek zijn: byte voor byte, geen twee schrijfwijzen van dezelfde persoon.
KGCKey Generation Centre: bewaart de hoofdprivésleutel, verifieert van wie een identiteit is, en geeft de bijbehorende privésleutel van de gebruiker uit.
HoofdsleutelparenTwee onafhankelijke paren: ondertekenen (geheim ks, publiek Ppub-s = [ks]P2) en coderen (geheim ke, publiek Ppub-e = [ke]P1). Let op de bewuste asymmetrie: de ene publieke hoofdsleutel leeft in G2, de andere in G1.
Privésleutel van de gebruikerEen punt op de kromme, door de KGC uit de ID afgeleid. De ondertekensleutel dsA leeft in G1; de decodeersleutel deB leeft in G2.
hidEen functie-identificatie van één byte die in elke sleutelafleiding wordt gemengd, zodat één identiteit cryptografisch onafhankelijke sleutels oplevert voor ondertekenen, coderen en sleuteluitwisseling.
H1, H2, KDFOp SM3 gebaseerde hulpfuncties (GB/T 32905): hash-naar-geheel-getal-afbeeldingen en de sleutelafleidingsfunctie.
Pairing eDe R-ate-bilineaire pairing e: G1 × G2 → GT over de BN-kromme van 256 bits hieronder gedefinieerd. De algebraïsche motor van het hele schema.
Hoe SM9-identiteitsgebaseerde codering (IBE) werkt

Alice wil een geheim sturen naar bob@example.com — mogelijk voordat Bob zich ooit bij de KGC heeft ingeschreven:

1. Alice leidt Bobs publieke sleutel zelf af: QB = [H1(IDB ‖ hid, N)]P1 + Ppub-e. Geen directoryopzoeking, geen certificaatophaling — de identiteitstekst en de publieke hoofdsleutel zijn alles wat zij nodig heeft.
2. Vluchtig: willekeurige r; bereken het punt C1 = [r]QB.
3. Koppeling: g = e(Ppub-e, P2), daarna w = gr.
4. Sleutels: K = KDF(C1 ‖ w ‖ IDB, klen) (op SM3 gebaseerd), gesplitst in K1 (omhullingssleutel) en K2 (MAC-sleutel).
5. Masker: C2 = het bericht geXOR'd met (of gecodeerd onder) K1; C3 = MAC(K2, C2). De cijfertekst bundelt C1, C3 en C2.
6. Bob, op het moment dat hij zich inschrijft: de KGC verifieert dat hij werkelijk bob@example.com is en geeft deB = [ke·(H1(IDB ‖ hid, N) + ke)-1]P2 uit. Daarna berekent hij w′ = e(C1, deB), bouwt dezelfde K, controleert de MAC en ontmaskert het bericht.

Waarom het werkt: door bilineariteit geldt e(C1, deB) = e([r(H1+ke)]P1, [ke/(H1+ke)]P2) = e(P1, P2)r·ke = w — precies de waarde die Alice in de KDF heeft gevouwen. Het elegante deel is stap 6: coderen vereist geen voorafgaande inschrijving. Alice kan vandaag een bericht versturen; Bob kan het pas openen nadat hij zijn identiteit tegenover de KGC heeft bewezen. Uitgestelde sleutelgeneratie is het kenmerk van IBE.

Hoe SM9-identiteitsgebaseerde handtekeningen (IBS) werken

Alice ondertekent een bericht M met haar ondertekensleutel dsA:

1. g = e(P1, Ppub-s); willekeurige r; w = gr.
2. h = H2(M ‖ w, N); l = (r − h) mod N (opnieuw met een nieuwe r als l = 0).
3. S = [l]dsA. De handtekening is het paar (h, S).

Iedereen die Alice's identiteit kent, verifieert de handtekening zonder enig certificaat:

4. P = [H1(IDA ‖ hid, N)]P2 + Ppub-s; u = e(S, P); w′ = u · gh.
5. De handtekening is precies geldig wanneer H2(M ‖ w′, N) = h.

Opnieuw sluit bilineariteit de lus: u = e(P1,P2)l·ks en gh = e(P1,P2)ks·h, dus w′ = e(P1,P2)ks·(l+h) = e(P1,P2)ks·r = w.

Identiteitsgebaseerd versus certificaatgebaseerd (IBE versus PKI)

Dit is de beslissing die er bij het kiezen van SM9 echt toe doet. Beide werelden bieden publieke-sleutelcodering en handtekeningen; ze verschillen in waar het vertrouwen zit:

KenmerkPKI / certificaten (SM2, RSA-wereld)Identiteitsgebaseerd (SM9)
Publieke sleutel van bob@…Een blob van 65+ bytes in een certificaat, opgehaald uit een directory of van de ontvanger zelfDe tekenreeks bob@example.com zelf; de verifier berekent de sleutel eruit
VertrouwensbasisEen CA-hiërarchie; elke keten moet tot een root worden gevalideerdEén publieke hoofdsleutel van de KGC voor het hele domein
Coderen voordat de ontvanger een sleutel heeft?Nee — u hebt eerst zijn geldige certificaat nodigJa — codeer nu; hij schrijft zich later in en decodeert dan
Privésleutel gegenereerd doorDe eigen machine of het apparaat van de gebruiker (verlaat die vaak nooit)De KGC, centraal, vanuit de identiteit
Sleutel-escrowOntworpen zonderInherent: de KGC kan de privésleutel van elke gebruiker afleiden
IntrekkingCRL's / OCSP per certificaatGeen equivalent; gebruikelijke praktijk bouwt geldigheidsvensters in de ID (bijv. bob@example.com|2026), zodat sleutels per constructie verlopen
Kosten per bewerkingGewone ECC-rekenkunde — snelEen bilineaire pairing — ordes van grootte trager dan een scalaire vermenigvuldiging
StandaardenX.509 / RFC 5280; SM2 onder GB/T 32918GB/T 38635.1/.2-2020 (voorheen GM/T 0044-2016)
Natuurlijke habitatOpen internet: TLS, codeondertekening, algemene PKIGesloten ecosystemen: de berichtendienst van één bank, de e-mail van één instantie, apparaat-/vlootidentiteit — waar een centrale autoriteit acceptabel is en registratieloze codering loont

Vuistregel: SM9 levert certificaatloos sleutelbeheer, tegen de prijs van sleutel-escrow en trager rekenwerk. Kunt u geen derde partij accepteren die alles kan lezen of iedereen kan vervalsen, blijf dan bij SM2-certificaten; als registratieloze codering binnen één organisatie het doel is, is SM9 precies het juiste hulpmiddel.

SM9-systeemparameters (officiële BN-kromme van 256 bits)

De parameterset uit GB/T 38635.1-2020 (ook in GM/T 0044.5-2017). Dit zijn alleen-lezen referentiewaarden — de zelftest hieronder controleert elke constante op deze pagina opnieuw tegen onafhankelijk geverifieerde waarden:

OnderdeelWaarde
KrommeBarreto–Naehrig (BN)-kromme E: y2 = x3 + b over Fp, b = 05
Kromme-parameter t60000000 0058F98A
Veldpriemgetal pB6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457D
Groepsorde NB6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25
Parametriseringp = 36t4 + 36t3 + 24t2 + 6t + 1; N = 36t4 + 36t3 + 18t2 + 6t + 1
Cofactor1
Inbeddingsgraad k12 (veldtoren Fp → Fp2 → Fp4 → Fp12)
PairingR-ate-pairing e: G1 × G2 → GT, alle drie groepen van orde N
G1-generator P1 (op E)x = 93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
y = 21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616
G2-generator P2 (op de twist E′: y2 = x3 + 5·u over 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
(Fp2-elementen geschreven als c0 + c1·u)
Hash / KDFH1, H2 en de KDF zijn gebouwd op SM3 (GB/T 32905-2016); hid is een functie-identificatie van één byte, gekozen door de KGC
Waar SM9 past in de SM-suite
  • SM9 (deze pagina) — de verstoorder van sleutelbeheer: identiteiten in plaats van certificaten, KGC in plaats van een CA-hiërarchie.
  • SM3 — de hash; de H1/H2/KDF van SM9 zijn erop gebouwd. Bereken digests op de SM3-pagina.
  • SM4 — het blokcijfer dat doorgaans de bulkgegevens versleutelt onder de sleutel die de KDF van SM9 oplevert. Probeer het op de SM4-pagina.
  • SM2 — de tegenhanger in de certificatenwereld: dezelfde taken (ondertekenen, coderen) met gewone ECC en een PKI erachter. Volledige rekenmachine op de SM2-pagina.
Nalevingsnotitie: SM9 is een keuze voor suite-onafhankelijkheid en sleutelbeheer voor gereguleerde Chinese toepassingen, qua sterkte vergelijkbaar met andere systemen van ~128 bits. Productie-uitrollen moeten de hoofdsleutel van de KGC behandelen als het kroonjuweel — doorgaans bewaard in een HSM, verdeeld over meerdere beheerders, of beide.
Veelvoorkomende misverstanden
  • "De identiteit is de publieke sleutel, dus iedereen kan mijn e-mail ontsleutelen." Nee — iedereen kan naar de identiteit coderen en handtekeningen ervan verifiëren; alleen de houder van de door de KGC uitgegeven privésleutel kan decoderen of ondertekenen. De KGC controleert wie Bob werkelijk is voordat hij deB uitgeeft.
  • Sleutel-escrow negeren. Als de hoofdsleutel van de KGC gecompromitteerd is, kan de aanvaller stilzwijgend de privésleutel van elke gebruiker afleiden — totale decodering en totale nabootsing voor het domein. Dit is by design (zo werkt identiteitsgebaseerde cryptografie), geen fout om te patchen. Beperk het operationeel: HSM, een drempel-KGC verdeeld over entiteiten, strikte auditlogboeken van uitgiften.
  • Aannemen dat de identiteitstekst vergevingsgezind is. Hij wordt byte voor byte gehasht: Bob@Example.COM, bob@example.com en " bob@example.com" zijn drie verschillende publieke sleutels met drie verschillende privésleutels. Leg vóór de uitrol één canonieke vorm vast — en overweeg een geldigheidsvenster toe te voegen voor intrekking.
  • "Kromme van 256 bits, dus 256 bits beveiliging." Cryptografie op basis van pairings schaalt niet zoals gewone ECC: aanvallen werken in de enorme velden Fp12/Fp6, waar index-calculus-algoritmen (subexponentieel) gelden. Gepubliceerde analyses plaatsen BN-kromme van 256 bits rond de ~100–128-bits beveiligingsklasse, en onderzoekers hebben grotere BN-parameters voor SM9 voorgesteld (bijv. "Searching BN Curves for SM9", 2019). Beschouw SM9 als ongeveer AES-128-klasse — solide, maar geen vesting van 256 bits.
  • Verwachten dat het in OpenSSL zit. OpenSSL implementeert SM2/SM3/SM4, maar heeft geen SM9. Werkende open-sourcestacks zijn onder meer GmSSL en Bouncy Castle.
Veelgestelde vragen

Is SM9 een Chinese uitvinding? Het concept niet: Shamir stelde identiteitsgebaseerde cryptografie in 1984 voor, en Boneh–Franklin (2001) bouwde de eerste praktische IBE op basis van pairings. SM9 (GM/T 0044-2016, daarna GB/T 38635.1/.2-2020) is de nationale-standaardinvulling van die lijn in China.

Waarom is er geen SM9-rekenmachine op deze pagina? Anders dan SM2/SM3/SM4 heeft SM9 een bilineaire pairing nodig: een Fp12-uitbreidingsveldtoren, een Miller-lus en een eindexponentiatie — enkele duizenden regels zorgvuldige grote-getallencode. Het staat op de routekaart van de familie; tot die tijd documenteert deze pagina het algoritme, en de zusterpagina's berekenen de rest van de suite in de browser.

Kan SM9 SM2, SM3 en SM4 vervangen? Nee — ze lossen verschillende problemen op. SM9 vervangt de certificaatinfrastructuur, niet de primitieven: intern vertrouwt het op SM3 voor hashing en sleutelafleiding, en de omhulde bulksleutel stuurt doorgaans SM4 aan. SM2 blijft het antwoord wanneer certificaatachtige verantwoording zonder sleutel-escrow vereist is.

Wat is hid precies? Een functie-identificatie van één byte (gekozen en gepubliceerd door de KGC) die in elke H1-hash wordt gemengd. Omdat ondertekensleutels, coderingssleutels en sleuteluitwisselingssleutels de identiteit met verschillende hid-waarden hashen, compromitteert één gelekte gebruikerssleutel alleen die ene functie.

Hoe worden identiteiten ingetrokken? Er is geen CRL-mechanisme in SM9. De gebruikelijke praktijk: bouw de vervaldatum in de identiteit zelf (bob@example.com|2026-Q4) zodat sleutels periodiek opnieuw moeten worden uitgegeven, en laat de KGC simpelweg stoppen met uitgeven voor ingetrokken identiteiten.

Waar wordt SM9 eigenlijk gebruikt? In gereguleerde Chinese sectoren — bankieren, overheid en industriële berichtenuitwisseling — doorgaans binnen gesloten ecosystemen waarin één autoriteit acceptabel is en "vandaag coderen naar een e-mailadres, morgen de gebruiker inschrijven" de pairing-kosten waard is.

Zelftest
Dit is een pagina met alleen-lezen inhoud, dus de zelftest controleert de pagina zelf: elke kromme-constante die hierboven staat, wordt opnieuw gecontroleerd tegen onafhankelijk geverifieerde waarden (het priemgetal p en de orde N worden opnieuw berekend uit de BN-parametrisering, beide generatoren worden op de kromme en met orde N gecontroleerd), de standaardnummers, de sjabloon-invarianten (geen DOCTYPE, buildmarkering), kruislinks en de aanwezigheid van de FAQ.