SM9 ID 기반 암호(IBC)

SM9은 중국 SM 제품군의 ID 기반 멤버입니다. 임의의 문자열 — 이메일 주소, 전화번호, 장치 일련번호 — 이 그대로 공개 키로 쓰이며, 키 생성 센터(KGC)가 여기에 맞는 개인 키를 발급합니다. 이 페이지는 읽기 전용 설명 페이지입니다: IBE와 IBS가 단계별로 어떻게 동작하는지, ID 기반 암호가 PKI 인증서와 어떻게 다른지, 그리고 공식 곡선 매개변수를 다룹니다.
계산기 준비 중. 브라우저에서 동작하는 SM9 계산기는 암호화 제품군 로드맵에 올라 있습니다 — 페어링 장치(Fp12 확장체 탑, 밀러 루프, 최종 지수 연산)는 그 자체로 하나의 커널입니다. 그동안 형제 페이지에서 SM2, SM3, SM4를 브라우저 안에서 완전히 계산할 수 있습니다.
SM9이란 무엇인가?
한 문장으로: SM9은 ID 기반 암호의 중국 국가 표준입니다(GB/T 38635.1/.2-2020, GM/T 0044-2016 시리즈의 후속). 공개 키가 곧 bob@example.com 같은 신원 문자열이며, 여기에 맞는 개인 키는 신뢰하는 키 생성 센터(KGC)가 발급하고, 이를 가능하게 하는 수학은 256비트 BN 곡선 위의 쌍선형 페어링입니다.

기존 공개 키 암호(RSA, SM2, ECC)는 "이 키가 정말 Bob의 것인가?"라는 질문에 인증서로 답합니다: CA 계층이 무작위로 보이는 특정 키 blob이 Bob의 것임을 보증합니다. ID 기반 암호는 이를 뒤집습니다: 이름 자체가 키 재료입니다. Bob의 이메일 주소를 아는 사람은 무엇도 가져올 필요 없이 그에게 암호화하거나 그의 서명을 검증할 수 있습니다 — 인증서 디렉터리도, 신뢰 체인 검증도 없습니다. 대가는 모든 개인 키를 유도할 수 있는 신뢰 제3자와 훨씬 무거운 수학입니다. SM9은 그 거래를 표준화한 중국식 구현입니다.

등장 인물: 누가 무엇을 가지는가
역할정체
신원(ID)임의의 바이트 문자열, 예: bob@example.com, 공개 키로 직접 사용됩니다. 반드시 정규화되어야 합니다: 바이트 단위로 정확해야 하며, 같은 사람을 두 가지 표기로 쓸 수 없습니다.
KGC키 생성 센터: 마스터 개인 키를 보유하고, 신원이 누구에게 속하는지 검증하며, 그에 맞는 사용자 개인 키를 발급합니다.
마스터 키 쌍독립적인 두 쌍: 서명용(비밀 ks, 공개 Ppub-s = [ks]P2)과 암호화용(비밀 ke, 공개 Ppub-e = [ke]P1). 의도된 비대칭성에 주목하세요: 마스터 공개 키 하나는 G2에, 다른 하나는 G1에 놓입니다.
사용자 개인 키곡선 위의 점으로, KGC가 ID로부터 유도합니다. 서명 키 dsA는 G1에, 복호화 키 deB는 G2에 놓입니다.
hid모든 키 유도에 섞여 들어가는 1바이트 함수 식별자입니다. 하나의 신원이 서명·암호화·키 교환 각각에 대해 암호학적으로 독립적인 키를 만들어냅니다.
H1, H2, KDFSM3 기반 보조 함수들(GB/T 32905): 해시→정수 매핑과 키 유도 함수입니다.
페어링 e아래에 정의된 256비트 BN 곡선 위의 R-ate 쌍선형 페어링 e: G1 × G2 → GT. 전체 방식의 대수적 엔진입니다.
SM9 ID 기반 암호화(IBE)의 동작 방식

Alice가 bob@example.com에게 비밀을 보내려 합니다 — Bob이 아직 KGC에 등록하지 않았더라도 가능합니다:

1. Alice가 Bob의 공개 키를 직접 유도합니다: QB = [H1(IDB ‖ hid, N)]P1 + Ppub-e. 디렉터리 조회도, 인증서 가져오기도 없습니다 — 신원 문자열과 마스터 공개 키만 있으면 됩니다.
2. 임시값: 무작위 r; 점 C1 = [r]QB을 계산합니다.
3. 페어링: g = e(Ppub-e, P2), 그리고 w = gr.
4. 키: K = KDF(C1 ‖ w ‖ IDB, klen)(SM3 기반). K1(래핑 키)과 K2(MAC 키)로 나눕니다.
5. 마스크: C2 = 메시지를 K1과 XOR(또는 그 아래에서 암호화)한 값; C3 = MAC(K2, C2). 암호문은 C1, C3, C2를 묶습니다.
6. Bob은 등록할 때: KGC가 그가 정말 bob@example.com인지 검증하고 deB = [ke·(H1(IDB ‖ hid, N) + ke)-1]P2를 발급합니다. 그런 뒤 Bob은 w′ = e(C1, deB)를 계산해 같은 K를 재구성하고, MAC을 확인한 뒤 메시지의 마스크를 벗깁니다.

동작 원리: 쌍선형성에 의해 e(C1, deB) = e([r(H1+ke)]P1, [ke/(H1+ke)]P2) = e(P1, P2)r·ke = w — Alice가 KDF에 접어 넣은 바로 그 값입니다. 우아한 부분은 6단계입니다: 암호화에는 사전 등록이 필요 없습니다. Alice는 오늘 메시지를 봉인할 수 있고, Bob은 KGC에 신원을 증명한 뒤에만 열 수 있습니다. 지연된 키 생성이 IBE의 시그니처 기능입니다.

SM9 ID 기반 서명(IBS)의 동작 방식

Alice가 서명 키 dsA로 메시지 M에 서명합니다:

1. g = e(P1, Ppub-s); 무작위 r; w = gr.
2. h = H2(M ‖ w, N); l = (r − h) mod N(l = 0이면 새 r로 재시도).
3. S = [l]dsA. 서명은 쌍 (h, S)입니다.

Alice의 신원을 아는 누구든 인증서 없이 서명을 검증할 수 있습니다:

4. P = [H1(IDA ‖ hid, N)]P2 + Ppub-s; u = e(S, P); w′ = u · gh.
5. H2(M ‖ w′, N) = h일 때, 그리고 그때에만 서명이 유효합니다.

다시 쌍선형성이 고리를 닫습니다: u = e(P1,P2)l·ks이고 gh = e(P1,P2)ks·h이므로 w′ = e(P1,P2)ks·(l+h) = e(P1,P2)ks·r = w입니다.

ID 기반 vs 인증서 기반 (IBE vs PKI)

이것이 SM9을 선택할 때 실제로 중요한 결정입니다. 두 세계 모두 공개 키 암호화와 서명을 제공하지만, 신뢰가 어디에 있는가가 다릅니다:

항목PKI / 인증서 (SM2, RSA 세계)ID 기반 (SM9)
bob@…의 공개 키인증서 안에 든 65바이트 이상의 blob으로, 디렉터리나 수신자 본인으로부터 가져옵니다문자열 bob@example.com 그 자체입니다. 검증자가 이 문자열로부터 키를 계산합니다
신뢰 루트CA 계층입니다. 모든 체인이 루트까지 검증되어야 합니다도메인 전체가 하나의 KGC 마스터 공개 키를 씁니다
수신자에게 키가 생기기 전에 암호화?아니요 — 먼저 그의 유효한 인증서가 필요합니다예 — 지금 암호화하고, 그는 나중에 등록해 복호화합니다
개인 키 생성 주체사용자 자신의 컴퓨터나 장치입니다(종종 밖으로 나가지 않음)KGC가 신원으로부터 중앙에서 생성합니다
키 에스크로설계상 없습니다내재되어 있습니다: KGC는 모든 사용자의 개인 키를 유도할 수 있습니다
해지인증서별 CRL / OCSP대응물이 없습니다. 일반적 관행은 ID에 유효기간을 포함시키는 것입니다(예: bob@example.com|2026). 이렇게 하면 키가 구조적으로 만료됩니다
연산당 비용일반 ECC 연산 — 빠름쌍선형 페어링 — 스칼라 곱보다 자릿수가 다를 만큼 느립니다
표준X.509 / RFC 5280; SM2는 GB/T 32918 기반GB/T 38635.1/.2-2020 (구 GM/T 0044-2016)
주요 활동 영역개방형 인터넷: TLS, 코드 서명, 일반 PKI폐쇄형 생태계: 한 은행의 메시징, 한 기관의 이메일, 차량/장치 군 식별 — 중앙 기관이 수용 가능하고 등록 없는 암호화가 이득인 환경

경험칙: SM9은 키 에스크로와 느린 수학을 대가로 인증서 없는 키 관리를 얻게 해 줍니다. 모든 것을 읽거나 누구나 흉내 낼 수 있는 제3자를 받아들일 수 없다면 SM2 인증서에 머무세요. 한 조직 안에서 등록 없는 암호화가 목표라면 SM9이 정확히 그 도구입니다.

SM9 시스템 매개변수(공식 256비트 BN 곡선)

GB/T 38635.1-2020의 매개변수 세트입니다(GM/T 0044.5-2017에도 수록). 읽기 전용 참조값입니다 — 아래 자체 테스트가 이 페이지의 모든 상수를 독립적으로 검증된 값과 대조하여 재확인합니다:

항목값
곡선Barreto–Naehrig(BN) 곡선 E: y2 = x3 + b, Fp 위, b = 05
곡선 매개변수 t60000000 0058F98A
유한체 소수 pB6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457D
군의 위수 NB6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25
매개변수화p = 36t4 + 36t3 + 24t2 + 6t + 1; N = 36t4 + 36t3 + 18t2 + 6t + 1
여인수1
임베딩 차수 k12 (확장체 탑 Fp → Fp2 → Fp4 → Fp12)
페어링R-ate 페어링 e: G1 × G2 → GT, 세 군 모두 위수 N
G1 생성원 P1 (E 위)x = 93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
y = 21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616
G2 생성원 P2 (트위스트 E′: y2 = x3 + 5·u, 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 원소는 c0 + c1·u로 표기)
해시 / KDFH1, H2, KDF는 SM3(GB/T 32905-2016) 위에 구축됩니다. hid는 KGC가 선택하는 1바이트 함수 식별자입니다
SM 제품군 안에서 SM9의 위치
  • SM9(이 페이지) — 키 관리의 파괴자: 인증서 대신 신원, CA 계층 대신 KGC.
  • SM3 — 해시입니다. SM9의 H1/H2/KDF가 그 위에 구축됩니다. SM3 페이지에서 다이제스트를 계산해 보세요.
  • SM4 — 블록 암호입니다. SM9의 KDF가 만든 키로 대량 데이터를 보통 암호화합니다. SM4 페이지에서 사용해 보세요.
  • SM2 — 인증서 세계의 짝입니다. 같은 작업(서명, 암호화)을 일반 ECC와 그 뒤의 PKI로 수행합니다. SM2 페이지에 완전한 계산기가 있습니다.
컴플라이언스 참고: SM9은 규제 대상 중국 배포 환경을 위한 제품군 독립적 키 관리 선택이며, 강도는 다른 약 128비트급 시스템과 대등합니다. 프로덕션 롤아웃에서는 KGC 마스터 키를 최상위 자산으로 다뤄야 합니다 — 보통 HSM에 보관하거나, 여러 수탁자에게 분할하거나, 둘 다 입니다.
흔한 오해
  • "신원이 공개 키이니 누구나 내 메일을 복호화할 수 있다." 아닙니다 — 누구나 그 신원에 암호화하고 그 신원의 서명을 검증할 수 있을 뿐, 복호화와 서명은 KGC 발급 개인 키의 보유자만 가능합니다. KGC는 deB를 건네기 전에 Bob이 실제로 누구인지 확인합니다.
  • 키 에스크로를 무시하는 것. KGC 마스터 키가 침해되면 공격자는 모든 사용자의 개인 키를 조용히 유도할 수 있습니다 — 도메인 전체의 완전한 복호화와 완전한 사칭입니다. 이것은 설계상 그런 것(ID 기반 암호가 그렇게 동작함)이지 고칠 결함이 아닙니다. 운영으로 완화하세요: HSM, 여러 주체로 나눈 분산 KGC, 엄격한 발급 감사 로그.
  • 신원 문자열이 관대하다고 가정하는 것. 해시는 바이트 단위로 정확하게 이루어집니다: Bob@Example.COM, bob@example.com, " bob@example.com"은 서로 다른 공개 키 세 개이고 개인 키도 세 개입니다. 배포 전에 하나의 정규 형식을 고정하세요 — 해지를 위해 유효기간을 덧붙이는 것도 고려하세요.
  • "256비트 곡선이니 256비트 보안이겠지." 페어링 기반 암호는 일반 ECC처럼 확장되지 않습니다: 공격이 Fp12/Fp6라는 거대한 체에서 일어나며 인덱스 칼큘러스(준지수시간) 알고리즘이 적용됩니다. 발표된 분석들은 256비트 BN 곡선을 대략 100~128비트 보안 급으로 봅니다. 연구자들은 SM9용으로 더 큰 BN 매개변수도 제안했습니다(예: "Searching BN Curves for SM9", 2019). SM9은 대략 AES-128급으로 여기세요 — 견고하지만 256비트 요새는 아닙니다.
  • OpenSSL에서 찾기를 기대하는 것. OpenSSL은 SM2/SM3/SM4를 구현하지만 SM9은 없습니다. 쓸 만한 오픈소스 스택으로는 GmSSL과 Bouncy Castle이 있습니다.
FAQ

SM9은 중국 발명입니까? 개념은 아닙니다: Shamir가 1984년에 ID 기반 암호를 제안했고 Boneh–Franklin(2001)이 최초의 실용적인 페어링 기반 IBE를 만들었습니다. SM9(GM/T 0044-2016, 이후 GB/T 38635.1/.2-2020)은 그 계보의 중국 국가 표준 구현입니다.

이 페이지에 SM9 계산기가 없는 이유는? SM2/SM3/SM4와 달리 SM9은 쌍선형 페어링이 필요합니다: Fp12 확장체 탑, 밀러 루프, 최종 지수 연산 — 수천 줄에 이르는 정교한 큰 수 코드입니다. 제품군 로드맵에 올라 있습니다. 그때까지 이 페이지가 알고리즘을 문서화하고, 형제 페이지들이 제품군의 나머지를 브라우저 안에서 계산합니다.

SM9이 SM2, SM3, SM4를 대체할 수 있습니까? 아니요 — 푸는 문제가 다릅니다. SM9은 인증서 인프라를 대체하지 원시 요소를 대체하지 않습니다: 내부적으로 해시와 키 유도에 SM3을 쓰고, 래핑된 대량 키가 보통 SM4를 구동합니다. 키 에스크로 없는 인증서식 책임 소재가 필요한 경우에는 SM2가 여전히 답입니다.

hid란 정확히 무엇입니까? 모든 H1 해시에 섞여 들어가는 1바이트 함수 식별자입니다(KGC가 선택해 공개). 서명 키, 암호화 키, 키 교환 키가 서로 다른 hid 값과 함께 신원을 해시하기 때문에, 사용자 키 하나가 유출되어도 그 기능 하나만 침해됩니다.

신원은 어떻게 해지합니까? SM9 안에는 CRL 메커니즘이 없습니다. 표준 관행은 신원 자체에 만료를 포함시키는 것입니다(bob@example.com|2026-Q4). 이렇게 하면 키를 주기적으로 재발급해야 하고, KGC는 해지된 신원에 대해서는 발급을 중단합니다.

SM9은 실제로 어디서 쓰입니까? 규제 대상 중국 부문 — 은행, 정부, 산업 메시징 — 주로 하나의 중앙 기관이 수용 가능하고 "오늘 이메일 주소로 암호화하고 내일 사용자를 등록"하는 것이 페어링 비용을 치를 만한 폐쇄형 생태계 안에서입니다.

자체 테스트
이 페이지는 읽기 전용이므로 자체 테스트는 페이지 자체를 검증합니다: 위에 표시된 모든 곡선 상수를 독립적으로 검증된 값과 대조하여 재확인합니다(소수 p와 위수 N은 BN 매개변수화에서 재계산, 두 생성원은 위수 N으로 곡선 위 검증). 또한 표준 번호, 템플릿 불변량(DOCTYPE 없음, 빌드 마커), 교차 링크와 FAQ 존재를 확인합니다.