eID 2-cert — бодит орчны баталгаажуулалт (2026-06-18)¶
Smart-ID / eIDAS загварын бүх үндсэн урсгал бодит iPhone + staging backend (rp-api.eidmongolia.mn) дээр end-to-end ажиллаж байгаа нь батлагдсан.
Баталгаажсан урсгалууд¶
| Урсгал | Түлхүүр / PIN | Cert | Нотолгоо |
|---|---|---|---|
| Бүртгэл (DAN KYC → liveness → distributed keygen → 2 cert) | sign + auth | SIGN + AUTH | Бодит утас: users (civil_id), 2 ACTIVE cert, device (has_sign+has_auth) |
| Нэвтрэх (web login, QR) | PIN1 · authentication | clientAuth | Web "Амжилттай нэвтэрлээ" + identity |
| Гэрээ зурах (web sign, QR) | PIN2 · signing · non-repudiation | QUALIFIED | Web "Гэрээнд гарын үсэг зурлаа", COMPLETE/OK |
Архитектурын гол шийдвэрүүд¶
- Dual-key 2-cert. Иргэн бүр ХОЁР тусдаа threshold ECDSA түлхүүртэй: Authentication
(PIN1,
clientAuth, нэвтрэх) ба Signing (PIN2,contentCommitmentnon-repudiation, хуулийн хүчинтэй гарын үсэг). Нэг утас, нэгdocumentNumber, хоёр Keychain slot. Enroll: 2 keygen (prewarm-аар хурдан), 2 cert; signing/auth flow тус тусын түлхүүрийг ачаална (credentialFor(flow)backend,approve(authentication:)iOS). - Identity = civil_id. Cert/etsi нь
PNOMN-<civil_id>(зөвхөн цифр). reg_no (РД, кирилл "МА...") нь cert-д ОРОХГҮЙ — тусдаа attribute. DAN callback civil_id + reg_no + image + identity илгээдэг. SDA extension-д DOB/gender (RFC 3739). - DAN secure binding. dan.gerege.mn callback нь
stateилгээдэггүй (зөвхөн reg_no) тул state-ийг callback_url-д шингээж, callback-ийг яг тухайн session-тэй найдвартай холбоно (reg_no зөвхөн cross-check) — identity-takeover race-аас сэргийлэв. - Liveness. DAN лавлагаа зураг vs selfie-г InsightFace ArcFace (buffalo_l) service-ээр
тулгана (
/v1/compare, cosine ≥ 0.6). iOS бүтэн камер (Vision, DAN framing-аар).
Бүрэлдэхүүн¶
- Backend (Go):
service/dan(KYC + liveness + photo),crypto/ca(Profile + SDA),service/memory/crypto_wired(dual-key enroll, FK-зөв дараалал),domain(User/KYC FSM). - iOS (Swift SDK + SwiftUI): etalon DAN дэлгэцүүд (phone→DAN→liveness→PIN×2→keygen),
dual-key
enroll, FaceVerify (ArcFace, %), RoundTripOverlay, Main Dashboard. - Web (Next.js RP demo): login (auth) + sign (PIN2) флоу.
- Staging deploy + операцийн фактууд:
deploy/,memory/staging-ops-gotchas.
Production-д үлдсэн (TODO)¶
- HSM-backed CA (одоо staging ephemeral self-signed) —
docs/PKI_CA_ONBOARDING.md. - Org / legal-person (NTRMN-) enrollment.
- Postgres: dan_replay_cache, PII purge sweep (одоо in-memory session).
- Dashboard баяжуулах (pending-sign inbox, settings).