Saltar a contenido

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, contentCommitment non-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).