From b39f609821064702ee5a6ab6070ac33dccfac7dd Mon Sep 17 00:00:00 2001 From: Robroo Somkiadcharoen Date: Tue, 6 Oct 2026 14:42:03 +0700 Subject: [PATCH] Add Thai VC ARF 2.0 DRAFT 0 documentation Thai chapters 1-16 (flat docs/thai-vc-arf) and an English summary, replacing the old trust-guide content. Includes Docusaurus MDX format conversion, the missing p41-0 figure, and CI validation (typecheck, build, static checks for docs/locale/mermaid-syntax/image-integrity, and Playwright E2E). --- .agents/skills/vcdoc-arf-sync/SKILL.md | 150 ++++ .github/workflows/ci.yml | 89 ++ .gitignore | 4 + README.md | 28 +- docs/en/_category_.json | 4 + .../00-minimal-interoperability-reference.md | 163 ++++ docs/en/thai-vc-arf/_category_.json | 8 + .../00-minimal-interoperability-reference.md | 190 +++++ docs/thai-vc-arf/01-scope.md | 24 + docs/thai-vc-arf/02-definitions.md | 236 ++++++ docs/thai-vc-arf/03-usage-overview.md | 117 +++ .../04-interoperability-concepts.md | 34 + .../05-standards-and-compliance.md | 706 ++++++++++++++++ docs/thai-vc-arf/06-did-methodologies.md | 113 +++ .../06.5-trust-building-mechanism.md | 223 +++++ .../07-cross-ecosystem-interoperability.md | 196 +++++ .../08-implementation-guidelines.md | 404 +++++++++ .../08.1-issuance-full-flow-detail.md | 653 +++++++++++++++ .../08.2-oid4vp-full-flow-detail.md | 403 +++++++++ docs/thai-vc-arf/09-trust-model-3.md | 325 +++++++ .../thai-vc-arf/10-wallet-unit-attestation.md | 302 +++++++ docs/thai-vc-arf/11-cryptographic-suites.md | 127 +++ ...key-management-and-trustlist-deployment.md | 272 ++++++ .../12.1-trust-list-publication-profile.md | 150 ++++ .../13-vc-status-and-revocation.md | 529 ++++++++++++ ...4-security-threat-model-and-conformance.md | 217 +++++ docs/thai-vc-arf/15-appendix.md | 220 +++++ docs/thai-vc-arf/16-bibliography.md | 55 ++ docs/thai-vc-arf/README.md | 63 ++ docs/thai-vc-arf/_category_.json | 10 + docs/thai-vc-arf/images/p10-0.png | Bin 0 -> 291605 bytes docs/thai-vc-arf/images/p12-0.png | Bin 0 -> 90819 bytes docs/thai-vc-arf/images/p15-0.png | Bin 0 -> 21462 bytes docs/thai-vc-arf/images/p15-1.png | Bin 0 -> 194715 bytes docs/thai-vc-arf/images/p16-0.png | Bin 0 -> 275629 bytes docs/thai-vc-arf/images/p19-0.png | Bin 0 -> 26212 bytes docs/thai-vc-arf/images/p22-0.png | Bin 0 -> 121886 bytes docs/thai-vc-arf/images/p22-1.png | Bin 0 -> 82813 bytes docs/thai-vc-arf/images/p29-0.png | Bin 0 -> 30641 bytes docs/thai-vc-arf/images/p31-0.png | Bin 0 -> 36411 bytes docs/thai-vc-arf/images/p34-0.png | Bin 0 -> 125277 bytes docs/thai-vc-arf/images/p35-0.png | Bin 0 -> 85618 bytes docs/thai-vc-arf/images/p36-0.png | Bin 0 -> 31727 bytes docs/thai-vc-arf/images/p38-0.png | Bin 0 -> 30049 bytes docs/thai-vc-arf/images/p39-0.png | Bin 0 -> 27968 bytes docs/thai-vc-arf/images/p41-0.png | Bin 0 -> 146311 bytes docs/thai-vc-arf/images/p44-0.png | Bin 0 -> 88850 bytes docs/thai-vc-arf/images/p44-1.png | Bin 0 -> 29611 bytes docs/thai-vc-arf/images/p45-0.png | Bin 0 -> 20333 bytes docs/thai-vc-arf/images/p45-1.png | Bin 0 -> 83931 bytes docs/thai-vc-arf/images/p46-0.png | Bin 0 -> 90196 bytes docs/thai-vc-arf/images/p47-0.png | Bin 0 -> 71646 bytes docs/thai-vc-arf/images/p47-1.png | Bin 0 -> 34585 bytes docs/thai-vc-arf/images/p48-0.png | Bin 0 -> 113126 bytes docs/thai-vc-arf/images/p48-1.png | Bin 0 -> 458196 bytes docs/thai-vc-arf/images/p49-0.png | Bin 0 -> 128204 bytes docs/thai-vc-arf/images/p53-0.png | Bin 0 -> 82123 bytes docs/thai-vc-arf/images/p9-0.png | Bin 0 -> 224194 bytes .../01-concepts-and-roles/01-glossary.md | 33 - .../02-roles-and-trust-model.md | 154 ---- .../03-common-verification-pattern.md | 17 - .../01-concepts-and-roles/_category_.json | 4 - .../02-architecture/01-overview.md | 126 --- .../02-architecture/_category_.json | 4 - .../03-issuance-flow/01-minimal-flow.md | 209 ----- .../02b-full-flow-technical-detail.md | 276 ------ .../03-setup-and-credential-offer.md | 259 ------ .../04-token-and-credential-request.md | 323 ------- .../02-full-flow/05-issue-and-notify.md | 309 ------- .../02-full-flow/06-verification-details.md | 192 ----- .../02-full-flow/07-data-flow-and-policy.md | 397 --------- .../02-full-flow/_category_.json | 4 - .../03-issuance-flow/02-full-flow/index.md | 20 - .../03-issuance-flow/_category_.json | 4 - .../01-overview/02-setup-and-request.md | 50 -- .../01-overview/_category_.json | 4 - .../04-presentation-flow/01-overview/index.md | 150 ---- .../02b-full-flow-technical-detail.md | 428 ---------- .../02-full-flow/_category_.json | 4 - .../04-presentation-flow/_category_.json | 4 - .../01-technical-requirements-and-schema.md | 105 --- .../02-tl-json-examples.md | 179 ---- .../05-trust-infrastructure/03-registries.md | 22 - .../05-trust-infrastructure/_category_.json | 4 - ...01-verifier-confidence-and-registration.md | 128 --- .../02-security-requirements.md | 103 --- .../03-privacy-and-data-protection.md | 30 - .../06-security-and-privacy/_category_.json | 4 - .../01-conformance-governance-versioning.md | 185 ---- .../_category_.json | 4 - docs/trust-guide/08-faq/01-framework-faq.md | 41 - docs/trust-guide/08-faq/_category_.json | 4 - .../09-appendix/01-core-security-rules.md | 280 ------- docs/trust-guide/09-appendix/_category_.json | 4 - docs/trust-guide/_category_.json | 10 - docusaurus.config.ts | 41 +- package-lock.json | 792 ++++++++++++++++-- package.json | 8 +- playwright.config.mjs | 26 + scripts/validate-build.mjs | 259 ++++++ tests/e2e/site.spec.js | 64 ++ 101 files changed, 7087 insertions(+), 4192 deletions(-) create mode 100644 .agents/skills/vcdoc-arf-sync/SKILL.md create mode 100644 .github/workflows/ci.yml create mode 100644 docs/en/_category_.json create mode 100644 docs/en/thai-vc-arf/00-minimal-interoperability-reference.md create mode 100644 docs/en/thai-vc-arf/_category_.json create mode 100644 docs/thai-vc-arf/00-minimal-interoperability-reference.md create mode 100644 docs/thai-vc-arf/01-scope.md create mode 100644 docs/thai-vc-arf/02-definitions.md create mode 100644 docs/thai-vc-arf/03-usage-overview.md create mode 100644 docs/thai-vc-arf/04-interoperability-concepts.md create mode 100644 docs/thai-vc-arf/05-standards-and-compliance.md create mode 100644 docs/thai-vc-arf/06-did-methodologies.md create mode 100644 docs/thai-vc-arf/06.5-trust-building-mechanism.md create mode 100644 docs/thai-vc-arf/07-cross-ecosystem-interoperability.md create mode 100644 docs/thai-vc-arf/08-implementation-guidelines.md create mode 100644 docs/thai-vc-arf/08.1-issuance-full-flow-detail.md create mode 100644 docs/thai-vc-arf/08.2-oid4vp-full-flow-detail.md create mode 100644 docs/thai-vc-arf/09-trust-model-3.md create mode 100644 docs/thai-vc-arf/10-wallet-unit-attestation.md create mode 100644 docs/thai-vc-arf/11-cryptographic-suites.md create mode 100644 docs/thai-vc-arf/12-key-management-and-trustlist-deployment.md create mode 100644 docs/thai-vc-arf/12.1-trust-list-publication-profile.md create mode 100644 docs/thai-vc-arf/13-vc-status-and-revocation.md create mode 100644 docs/thai-vc-arf/14-security-threat-model-and-conformance.md create mode 100644 docs/thai-vc-arf/15-appendix.md create mode 100644 docs/thai-vc-arf/16-bibliography.md create mode 100644 docs/thai-vc-arf/README.md create mode 100644 docs/thai-vc-arf/_category_.json create mode 100644 docs/thai-vc-arf/images/p10-0.png create mode 100644 docs/thai-vc-arf/images/p12-0.png create mode 100644 docs/thai-vc-arf/images/p15-0.png create mode 100644 docs/thai-vc-arf/images/p15-1.png create mode 100644 docs/thai-vc-arf/images/p16-0.png create mode 100644 docs/thai-vc-arf/images/p19-0.png create mode 100644 docs/thai-vc-arf/images/p22-0.png create mode 100644 docs/thai-vc-arf/images/p22-1.png create mode 100644 docs/thai-vc-arf/images/p29-0.png create mode 100644 docs/thai-vc-arf/images/p31-0.png create mode 100644 docs/thai-vc-arf/images/p34-0.png create mode 100644 docs/thai-vc-arf/images/p35-0.png create mode 100644 docs/thai-vc-arf/images/p36-0.png create mode 100644 docs/thai-vc-arf/images/p38-0.png create mode 100644 docs/thai-vc-arf/images/p39-0.png create mode 100644 docs/thai-vc-arf/images/p41-0.png create mode 100644 docs/thai-vc-arf/images/p44-0.png create mode 100644 docs/thai-vc-arf/images/p44-1.png create mode 100644 docs/thai-vc-arf/images/p45-0.png create mode 100644 docs/thai-vc-arf/images/p45-1.png create mode 100644 docs/thai-vc-arf/images/p46-0.png create mode 100644 docs/thai-vc-arf/images/p47-0.png create mode 100644 docs/thai-vc-arf/images/p47-1.png create mode 100644 docs/thai-vc-arf/images/p48-0.png create mode 100644 docs/thai-vc-arf/images/p48-1.png create mode 100644 docs/thai-vc-arf/images/p49-0.png create mode 100644 docs/thai-vc-arf/images/p53-0.png create mode 100644 docs/thai-vc-arf/images/p9-0.png delete mode 100644 docs/trust-guide/01-concepts-and-roles/01-glossary.md delete mode 100644 docs/trust-guide/01-concepts-and-roles/02-roles-and-trust-model.md delete mode 100644 docs/trust-guide/01-concepts-and-roles/03-common-verification-pattern.md delete mode 100644 docs/trust-guide/01-concepts-and-roles/_category_.json delete mode 100644 docs/trust-guide/02-architecture/01-overview.md delete mode 100644 docs/trust-guide/02-architecture/_category_.json delete mode 100644 docs/trust-guide/03-issuance-flow/01-minimal-flow.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/02b-full-flow-technical-detail.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/03-setup-and-credential-offer.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/04-token-and-credential-request.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/05-issue-and-notify.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/06-verification-details.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/07-data-flow-and-policy.md delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/_category_.json delete mode 100644 docs/trust-guide/03-issuance-flow/02-full-flow/index.md delete mode 100644 docs/trust-guide/03-issuance-flow/_category_.json delete mode 100644 docs/trust-guide/04-presentation-flow/01-overview/02-setup-and-request.md delete mode 100644 docs/trust-guide/04-presentation-flow/01-overview/_category_.json delete mode 100644 docs/trust-guide/04-presentation-flow/01-overview/index.md delete mode 100644 docs/trust-guide/04-presentation-flow/02-full-flow/02b-full-flow-technical-detail.md delete mode 100644 docs/trust-guide/04-presentation-flow/02-full-flow/_category_.json delete mode 100644 docs/trust-guide/04-presentation-flow/_category_.json delete mode 100644 docs/trust-guide/05-trust-infrastructure/01-technical-requirements-and-schema.md delete mode 100644 docs/trust-guide/05-trust-infrastructure/02-tl-json-examples.md delete mode 100644 docs/trust-guide/05-trust-infrastructure/03-registries.md delete mode 100644 docs/trust-guide/05-trust-infrastructure/_category_.json delete mode 100644 docs/trust-guide/06-security-and-privacy/01-verifier-confidence-and-registration.md delete mode 100644 docs/trust-guide/06-security-and-privacy/02-security-requirements.md delete mode 100644 docs/trust-guide/06-security-and-privacy/03-privacy-and-data-protection.md delete mode 100644 docs/trust-guide/06-security-and-privacy/_category_.json delete mode 100644 docs/trust-guide/07-governance-and-conformance/01-conformance-governance-versioning.md delete mode 100644 docs/trust-guide/07-governance-and-conformance/_category_.json delete mode 100644 docs/trust-guide/08-faq/01-framework-faq.md delete mode 100644 docs/trust-guide/08-faq/_category_.json delete mode 100644 docs/trust-guide/09-appendix/01-core-security-rules.md delete mode 100644 docs/trust-guide/09-appendix/_category_.json delete mode 100644 docs/trust-guide/_category_.json create mode 100644 playwright.config.mjs create mode 100644 scripts/validate-build.mjs create mode 100644 tests/e2e/site.spec.js diff --git a/.agents/skills/vcdoc-arf-sync/SKILL.md b/.agents/skills/vcdoc-arf-sync/SKILL.md new file mode 100644 index 0000000..cd51e19 --- /dev/null +++ b/.agents/skills/vcdoc-arf-sync/SKILL.md @@ -0,0 +1,150 @@ +--- +name: vcdoc-arf-sync +description: > + How to sync Thai VC ARF content from vc-document into the vcdoc Docusaurus + site. Covers the directory layout (docs/thai-vc-arf + docs/en/thai-vc-arf, + which replaced the old docs/trust-guide) and the required HTML->MDX comment + conversion. Use when importing/copying ARF markdown from vc-document, when a + sync reintroduces raw HTML comments or a duplicate docs/th/thai-vc-arf/, or + when the build fails with MDX "Unexpected character `!`" errors. +license: MIT +--- + +# vcdoc ARF sync & format conversion + +The vcdoc site (this repo) publishes the Thai VC ARF. The canonical source of +truth is the `vc-document` repo. Content is copied from vc-document into this +repo, but vc-document's files are NOT Docusaurus-ready as-is: they use a +different directory layout and raw HTML comments. Both must be fixed on import. + +## Directory layout + +vcdoc is a SINGLE-locale site (`defaultLocale: 'th'`, `locales: ['th']`, +`routeBasePath: '/'`). Thai content lives FLAT at the docs root. + +English is still SUPPORTED — but as a literal `docs/en/thai-vc-arf/` folder +served under `/en/`, not as a Docusaurus i18n locale. It holds a one-page +English summary (not a full translation), linked from the navbar +("VC stack (EN)" -> `/en/thai-vc-arf/minimal-interoperability-reference`). +Never delete `docs/en/` when working on the single-locale layout: + +``` +docs/ + thai-vc-arf/ # Thai chapters (22 .md files + images/) + _category_.json # label + link.slug "/" (homepage = Thai index) + 00-minimal-interoperability-reference.md + ... (chapters 1-16) + images/ + en/ + _category_.json + thai-vc-arf/ + _category_.json + 00-minimal-interoperability-reference.md +``` + +vc-document uses a locale-prefixed layout (`docs/th/thai-vc-arf/` and +`docs/en/thai-vc-arf/`). The sync must STRIP the `th/` prefix for Thai content: + +- `vc-document/th/thai-vc-arf/*` -> `docs/thai-vc-arf/*` (drop the `th/`) +- `vc-document/en/thai-vc-arf/*` -> `docs/en/thai-vc-arf/*` (keep the `en/`) + +### Directory rename: trust-guide -> thai-vc-arf + +- The OLD content directory was `docs/trust-guide/` (the original Trust + Framework manual). It is gone — replaced by `thai-vc-arf`. +- vc-document still versions the legacy trust-guide as + `versioned_docs/version-2026-09/trust-guide/`. vcdoc does NOT use Docusaurus + versioning — never copy `versioned_docs/`, `versioned_sidebars/`, + `versions.json`, `i18n/`, or vc-document's `src/theme/` swizzles into vcdoc. + +### Forbidden: the locale-prefixed duplicate + +Do NOT create `docs/th/thai-vc-arf/`. vc-document keeps Thai under a `th/` +locale prefix; vcdoc does not. Copying that path as-is produces a duplicate of +every Thai file (the exact bloat this skill exists to prevent). The canonical +Thai path in THIS repo is `docs/thai-vc-arf/`. + +## Format conversion (required for the build) + +vc-document files use HTML comments; Docusaurus MDX cannot compile them, and +the build fails with: + +``` +MDX compilation failed ... Unexpected character `!` (U+0021) before name +``` + +Two changes are needed on import: + +1. Convert top-level HTML comments `` to MDX comments `{/* ... */}`. +2. Add frontmatter to Thai `.md` files (the English file gets NO frontmatter): + +``` +--- +description: "

— Thai VC ARF 2.0 DRAFT 0" +--- +``` + +The `description` is the file's first `# ` heading plus the suffix +` — Thai VC ARF 2.0 DRAFT 0`. Exception: `README.md` uses the fixed value +`Thai VC ARF — 2.0 DRAFT 0 — Thai VC ARF 2.0 DRAFT 0`. + +### Comment conversion rules (must be exact) + +Convert ONLY top-level comments. Comments do not nest; a `` that +appears INSIDE an outer comment is literal text and must stay as ``. + +Do NOT touch: + +- Mermaid sequence arrows `-->>` (they contain `-->` as a prefix substring). +- Flow text such as `P1 --> P2 --> P3`. +- Literal comment examples inside comments, e.g. the README bullet + `` `` ``. + +Reference implementation (balanced, non-nested): + +```python +def convert_comments(text): + depth = 0 + out, i = [], 0 + while i < len(text): + if text.startswith('', i): + out.append('*/}' if depth == 1 else '-->') + depth = max(0, depth - 1) + i += 3 + else: + out.append(text[i]) + i += 1 + assert depth == 0, 'unbalanced comments' + return ''.join(out) +``` + +Then for Thai files: `'---\ndescription: "{desc}"\n---\n\n' + convert_comments(raw)`. +For the English file: `convert_comments(raw)` only (no frontmatter). + +## Verification + +After any sync or format change, confirm: + +``` +npm run build # must exit 0 +npm run typecheck # must exit 0 +``` + +- Homepage `/` must serve the Thai index titled "Thai VC ARF — 2.0 DRAFT 0". +- Thai docs must be at `/thai-vc-arf/...` (NOT `/th/thai-vc-arf/...`). +- Broken-link/anchors warnings are EXPECTED: the ARF markdown references + vc-document-only files (`../research/*`, `../policy/*`, `../public-site/*`, + `../../00-glossary.md`) that are not present here. The config intentionally + uses `onBrokenLinks: 'warn'`. + +## Known gotchas + +- A prior sync did two things wrong: it copied content to BOTH + `docs/th/thai-vc-arf/` and `docs/thai-vc-arf/`, AND it overwrote converted + files with raw HTML-comment versions. Check for both after every sync. +- `grep -c '-->'` over-counts: mermaid `-->>` arrows contain `-->`. Use the + balanced converter above, not a naive string replace. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..500c5d4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +# Validate the Docusaurus site on every push and pull request. +# +# This is the CI half of the pipeline (separate from deploy.yml, which is CD). +# It typechecks, builds, statically validates the build output, and then runs +# browser-based E2E tests that verify locale rendering and client-side mermaid +# hydration — both of which only happen in a real browser. +# +# Best practices applied: +# - npm ci (not npm install) for reproducible installs from package-lock.json +# - Node version pinned to match "engines.node" (>=20) in package.json +# - npm cache via actions/setup-node, plus a Playwright browser cache +# - concurrency group so a new push cancels the stale in-flight run +# - build/ and Playwright artifacts uploaded for inspection on failure +name: Validate Docusaurus + +on: + push: + branches: + - main + - dev + pull_request: + +# Read-only checkout is all this workflow needs. +permissions: + contents: read + +# Cancel the previous run on the same ref when a newer push arrives. +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Typecheck + run: npm run typecheck + + - name: Build site + run: npm run build + + # Static checks on build/: every doc generated, locale layout, no raw + # HTML comments, mermaid blocks present in source. + - name: Validate build output + run: npm run validate:build + + # Cache the Playwright browser binaries (keyed on the lockfile so a dep + # bump invalidates it). Saves ~150MB download on subsequent runs. + - name: Cache Playwright browsers + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }} + + # --with-deps installs the OS libraries Chromium needs on Ubuntu. + - name: Install Playwright browsers + run: npx playwright install --with-deps chromium + + # Serves build/ and verifies locale rendering + mermaid hydration. + - name: Browser E2E tests + run: npm run test:e2e + + - name: Upload site build + if: always() + uses: actions/upload-artifact@v4 + with: + name: site-build + path: build + retention-days: 7 + + - name: Upload Playwright report on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report/ + retention-days: 7 diff --git a/.gitignore b/.gitignore index b2d6de3..58472f7 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,10 @@ .docusaurus .cache-loader +# Playwright +/test-results/ +/playwright-report/ + # Misc .DS_Store .env.local diff --git a/README.md b/README.md index b2948fd..74ac761 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # VC Document -> เอกสารและมาตรฐาน **Verifiable Credential (VC)** โดย ETDA — คู่มือ Trust Framework ของระบบ VC Ecosystem ประเทศไทย +> **Thai VC ARF — 2.0 DRAFT 0** กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย **🌐 เว็บไซต์ (อ่านเอกสารฉบับเต็ม):** **https://etda.github.io/vcdoc/** @@ -10,25 +10,13 @@ ## เกี่ยวกับโปรเจกต์นี้ -โปรเจกต์นี้คือเว็บไซต์เอกสาร (documentation site) ที่รวบรวม **คู่มือ Trust Framework** ของระบบ Verifiable Credential ในประเทศไทย -อธิบายว่ากรอบความน่าเชื่อถือ (Trust Framework) ของ ETDA ทำให้ทุกฝ่ายในระบบ VC เชื่อใจกันได้อย่างไร -ตั้งแต่การ **ออกเอกสารดิจิทัล (Issuance)** ไปจนถึงการ **แสดงเอกสารให้ผู้ตรวจสอบ (Presentation)** - -เนื้อหาแบ่งเป็น 9 ส่วนหลัก เรียงตามลำดับที่ควรอ่าน: - -| บท | หัวข้อ | เหมาะกับใคร | -|----|--------|-------------| -| 1 | Concepts & Roles — แนวคิดและบทบาท | ผู้เริ่มต้นทุกคน | -| 2 | Architecture — สถาปัตยกรรมภาพรวม | ผู้เริ่มต้น / สถาปนิกระบบ | -| 3 | Issuance Flow — ขั้นตอนการออกเอกสาร | นักพัฒนาฝั่งผู้ออกบัตร (Issuer) | -| 4 | Presentation Flow — ขั้นตอนการแสดงเอกสาร | นักพัฒนาฝั่งผู้ตรวจสอบ (Verifier) | -| 5 | Trust Infrastructure — โครงสร้างความน่าเชื่อถือ | นักพัฒนา / ผู้ดูแลระบบ | -| 6 | Security & Privacy — ความปลอดภัยและความเป็นส่วนตัว | ทุกฝ่าย | -| 7 | Governance & Conformance — การกำกับดูแลและการรับรอง | องค์กรที่ต้องการเข้าร่วมระบบ | -| 8 | FAQ — คำถามที่พบบ่อย | ทุกคน | -| 9 | Appendix — ภาคผนวก (สรุปกฎความปลอดภัย) | อ้างอิงเร็ว | - -> 💡 แนะนำ: ผู้เริ่มต้นอ่านบท 1–2 ก่อน, ผู้ออกบัตรเริ่มบท 3, ผู้ตรวจสอบเริ่มบท 4, องค์กรที่อยากเข้าร่วมดูบท 7 +เว็บไซต์นี้แสดง [Thai VC ARF ฉบับภาษาไทย](docs/thai-vc-arf/README.md) เป็นเนื้อหาหลัก ครอบคลุมบทสรุป บทที่ 1–16 และรูปประกอบ โดยแทนที่คู่มือ Trust Framework เดิมทั้งหมด + +- **เวอร์ชันเว็บไซต์:** `2.0 DRAFT 0` แสดงในเมนูเวอร์ชันของ Docusaurus +- **ต้นทางบทภาษาไทย:** `vc-document/th/thai-vc-arf/` +- [English summary](docs/en/thai-vc-arf/00-minimal-interoperability-reference.md) — คัดลอกจาก `vc-document/en/thai-vc-arf/`; แหล่งต้นทางมีบทสรุปภาษาอังกฤษหนึ่งหน้า ไม่ใช่คำแปลทุกบท + +ไฟล์ Markdown ที่นำเข้าปรับรูปแบบคอมเมนต์จาก HTML เป็น MDX เพื่อให้ Docusaurus สร้างเว็บไซต์ได้ โดยไม่แก้เนื้อหาหลักที่แสดงแก่ผู้อ่าน ## เทคโนโลยีที่ใช้ diff --git a/docs/en/_category_.json b/docs/en/_category_.json new file mode 100644 index 0000000..8171b1d --- /dev/null +++ b/docs/en/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "English", + "position": 2 +} diff --git a/docs/en/thai-vc-arf/00-minimal-interoperability-reference.md b/docs/en/thai-vc-arf/00-minimal-interoperability-reference.md new file mode 100644 index 0000000..e5b0889 --- /dev/null +++ b/docs/en/thai-vc-arf/00-minimal-interoperability-reference.md @@ -0,0 +1,163 @@ +# Thailand's VC stack + +{/* +AGENT NOTES (hidden — not rendered on the site): + +This page summarises the Thai chapters, which are the single +source of truth. Where this page and the Thai text differ, the Thai text is +correct. Each item links to the Thai chapter that defines it. + +Source chapters (paths under th/thai-vc-arf/ unless noted): +- Issuing a credential: 05-standards-and-compliance.md, 08-implementation-guidelines.md, 08.1-issuance-full-flow-detail.md +- Presenting a credential: 05-standards-and-compliance.md, 08-implementation-guidelines.md, 08.2-oid4vp-full-flow-detail.md +- The Trusted Lists: 00-minimal-interoperability-reference.md, 12.1-trust-list-publication-profile.md, th/research/42-trusted-list-lote-jwt-format.md (JWT structure); th/research/41-trustlist-serving-filecdn-etag-binary.md (CDN access) +- Revocation and status: 13-vc-status-and-revocation.md, 12-key-management-and-trustlist-deployment.md, 10-wallet-unit-attestation.md + +Full source of truth (Thai): ARF index (th/thai-vc-arf/README.md). +*/} + +This page describes Thailand's credential stack, in the terms a counterpart system uses to check compatibility. + +## Current PoC stage + +This page describes the planned specification. The current proof of concept implements only: + +1. A single LoTE that holds issuers, verifiers, and wallet providers. The target profile instead uses three separate signed JWTs. +2. A wallet app that trusts entities only through the Trusted List, with no certificates. Entities publish a public key in the Trusted List, either as a `did:web` reference or as a public key string. +3. Wallet Instance Attestation (WIA) is not implemented yet. + +## Short version + +The five building blocks: + +- **Credential format:** The system supports multiple formats. v1.1 used JSON-LD per W3C VC Data Model, which is still supported, and adds IETF SD-JWT VC (`dc+sd-jwt`) as the recommended format for new issuance. +- **Issuance protocol:** OpenID for Verifiable Credential Issuance (OID4VCI) 1.0 Final, pre-authorized code flow. +- **Presentation protocol:** OpenID for Verifiable Presentations (OID4VP) 1.0 Final, with DCQL queries. +- **Trust:** three related Trusted Lists with LoTE-inspired payloads in signed JWTs, served over a CDN. All three trust models use the relevant Trusted List; Trust Model 3 does not require a CA chain. +- **Credential status:** IETF Token Status List, published by each issuer. + +For a counterpart assessing convergence: Thailand uses the OID4VCI, OID4VP, and SD-JWT VC stack. Recognition of a Thai Trusted List entry in the EU requires a trust agreement, role and assurance mapping, a bridge list, and conformance evidence. + +## Issuing a credential + +Issuance runs OID4VCI 1.0 Final, pre-authorized code flow, and issues only SD-JWT VC (`dc+sd-jwt`). + +Before the wallet asks the user for the OTP, it checks the issuer against the Trusted List (TC-3 early). If the issuer is not `active` for that credential type, the flow stops. + +At assurance level IAL2.3 and above, the access token is bound to a wallet key with DPoP (RFC 9449). + +The credential request carries the wallet's attestation, signed by the wallet provider. The issuer checks the provider on the Trusted List (TC-2) and validates the attestation before signing. + +Before storing the VC, the wallet checks the issuer signature, the validity window, and the status bit (TC-3 final and TC-4). + +```mermaid +sequenceDiagram + participant U as User + participant W as Wallet + participant I as Issuer + participant TL as Trusted List + participant WP as Wallet Provider + participant SL as Status List + + Note over U,I: Request and offer + U->>I: requests credential (portal) + I->>U: offer QR + OTP by SMS + + Note over W,TL: Discovery + TC-3 early + W->>I: GET /.well-known/openid-credential-issuer + I-->>W: metadata: dc+sd-jwt configurations + W->>TL: TC-3 early: issuer active + type allowed + W->>U: asks for OTP (tx_code) + + Note over W,I: OTP + token (DPoP) + W->>I: POST /token + OTP + DPoP + I-->>W: access_token (DPoP-bound) + c_nonce + + Note over W,WP: Credential + TC-2 + W->>I: POST /credential + proof + wallet_attestation + I->>WP: TC-2: provider in list + WIA status + + Note over W,SL: Issue + TC-3/TC-4 + I->>W: issues SD-JWT VC (dc+sd-jwt) + W->>TL: TC-3 final: signature + validity + W->>SL: TC-4: read status bit + SL-->>W: bit 0 (valid) +``` + +## Presenting a credential + +Presentation runs OID4VP 1.0 Final with DCQL. + +Before showing a consent screen, the wallet checks the verifier against the Trusted List (TC-1): is the verifier `active`, and are the requested claims and purpose within what it registered? If not, the wallet sends nothing. + +The verifier then checks three things: + +- TC-2: the wallet provider is on the Trusted List and the wallet attestation is valid and fresh. This check is mandatory for Thai government wallets. For a private wallet, it depends on the verifier's confidence level (standard or enhanced). +- TC-3: the issuer is on the Trusted List, and the issuer's DID resolves to the key that signed the credential. +- TC-4: the status bit is read from the issuer's status list. + +The verifier must also check the issuer's status, scope, and the credential's own status before accepting it. + +Identifiers: organisations use `did:web`, holders use `did:jwk`, and Thai identity rails such as NDID resolve as custom methods through the ETDA Trust Gateway (the universal resolver). + +```mermaid +sequenceDiagram + participant U as User + participant W as Wallet + participant V as Verifier + participant TL as Trusted List + participant R as DID Resolver + participant SL as Status List + + Note over U,TL: Request + TC-1 wallet check + U->>W: scans authorization QR (DCQL) + W->>TL: TC-1: verifier role / status / scope + TL-->>W: active / allowed attributes/purposes + + Note over W,V: Consent + presentation + W->>U: consent: purpose + claims + U-->>W: approves (selective disclosure) + W->>V: vp_token (presentation + WIA-PoP) + + Note over V,TL: TC-2 wallet provider + V->>TL: TC-2: wallet provider in list + TL-->>V: provider active / WIA valid + + Note over V,TL: TC-3 issuer + keys (DID) + V->>R: TC-3: resolve issuer DID (kid) + R-->>V: DID document / verification key + V->>TL: TC-3: issuer entry + key match + + Note over V,SL: TC-4 status + result + V->>SL: TC-4: read status bit + SL-->>V: bit 0 (valid) + V->>W: granted / or 400 invalid_request +``` + +## The Trusted List + +ETDA audits organisations that act as issuers, verifiers, or wallet providers. The target profile publishes three related Trusted Lists as signed compact JWTs with LoTE-inspired payloads: `iss.txt`, `ver.txt`, and `wp.txt` on the [ETDA CDN profile](../../th/thai-vc-arf/12.1-trust-list-publication-profile.md). Each `.txt` file contains a compact JWT. Consumers fetch the relevant whole file on demand, without an API key, and validate ETDA's signature before using it. + +The [decoded JWT examples](../../th/research/42-trusted-list-lote-jwt-format.md) use `LoTE.TrustedEntitiesList[]` for organisations and `TrustedEntityServices[]` for services. The issuer example is a three-part compact JWS with one organisation and three issuance services. It shows public keys, a certificate, and identifiers. Organisation and service status and authorised credential types remain to be defined in the Thai profile, along with their validation rules, before a consumer can make an authorisation decision. + +Participants fetch the relevant whole-file Trusted List lazily when a connection needs a trust decision. They use `ETag` for revalidation, without an API key, background polling, or delta API. They fail closed if the file or its signature cannot be verified, or if required status and scope cannot be established. Entity-level revocation reaches each participant at its next lazy pull. + +Consumers determine an entity's authorisation from the Trusted List and obtain signature-verification keys from its linked DID document where applicable. ETDA signs the list from FIPS 140-3 Level 3 HSMs under an M-of-N quorum, with an offline emergency key. + +### Trusted List examples + +The JWTs below illustrate the LoTE structure. Their signatures remain unverified, and the issuer JWT lacks required status and scope fields. They cannot be used as authorisation test vectors. [Source analysis](../../th/research/42-trusted-list-lote-jwt-format.md). + +1. Issuer: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJpYXQiOjE3ODkwMzA2MDIsIng1YyI6WyJNSUlCUGpDQjVxQURBZ0VDQWhRelVlbmtacnB3TGFjVEhqMDd4RXo4bENpOFV6QUtCZ2dxaGtqT1BRUURBakFQTVEwd0N3WURWUVFEREFSRlZFUkJNQjRYRFRJMk1EZ3hNekUxTVRNME4xb1hEVEkzTURneE16RTFNVE0wTjFvd0R6RU5NQXNHQTFVRUF3d0VSVlJFUVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVKNnRGamJVVEJQQnRlcGFsWjVGUktMVDZxVnFrbzFvTk1naUlvdXI4RmFxUHAyQUxPbk90bGpwZnl4NmdoZ3YvV3lVWkgwRlhNdDluTTN2dTdzd25paklEQWVNQTRHQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUc4Z1dWdjZBL2VjU2ZhWFJ2T014Q0kyR0FWYlNlTDk3ZmwyT2R4NCtwU1pBaUIwbXZ5MTB4VzN5dTJDc0ZnSkRqc1BaSTZBV3ZKeGd2VlptQXJMQTlhY1FRPT0iXSwieDV0I1MyNTYiOiJsY1BDaTAxaVFfbkIyQWRZRzVKcEMxTlh3dEVncm9GczhVT2hma21GM2ZzIn0.eyJMb1RFIjp7Ikxpc3RBbmRTY2hlbWVJbmZvcm1hdGlvbiI6eyJMb1RFVmVyc2lvbklkZW50aWZpZXIiOjEsIkxvVEVTZXF1ZW5jZU51bWJlciI6MiwiTG9URVR5cGUiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL0xvVEVUeXBlL0VVUHViRUFBUHJvdmlkZXJzTGlzdCIsIlNjaGVtZU9wZXJhdG9yTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyBEZXZlbG9wbWVudCBBZ2VuY3kgKEVUREEpIn1dLCJTY2hlbWVJbmZvcm1hdGlvblVSSSI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwczovL3d3dy5ldGRhLm9yLnRoIn1dLCJTdGF0dXNEZXRlcm1pbmF0aW9uQXBwcm9hY2giOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvVGhhaUlzc3VlcnNMaXN0L1N0YXR1c0RldG4vRVREQSIsIlNjaGVtZVR5cGVDb21tdW5pdHlSdWxlcyI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvVGhhaUlzc3VlcnMvc2NoZW1lcnVsZXMvRVREQSJ9XSwiU2NoZW1lVGVycml0b3J5IjoiVEgiLCJTY2hlbWVOYW1lIjpbeyJsYW5nIjoiZW4iLCJ2YWx1ZSI6IlRoYWkgSXNzdWVycyBMaXN0In1dLCJIaXN0b3JpY2FsSW5mb3JtYXRpb25QZXJpb2QiOjM2NSwiRGlzdHJpYnV0aW9uUG9pbnRzIjpbXSwiU2NoZW1lRXh0ZW5zaW9ucyI6W10sIkxpc3RJc3N1ZURhdGVUaW1lIjoiMjAyNi0wOS0xMFQwODo1Njo0Mi45NzdaIiwiTmV4dFVwZGF0ZSI6IjIwMjYtMDktMTFUMDg6NTY6NDIuOTc3WiJ9LCJUcnVzdGVkRW50aXRpZXNMaXN0IjpbeyJUcnVzdGVkRW50aXR5SW5mb3JtYXRpb24iOnsiVEVOYW1lIjpbeyJsYW5nIjoiZW4iLCJ2YWx1ZSI6IkVsZWN0cm9uaWMgVHJhbnNhY3Rpb25zIERldmVsb3BtZW50IEFnZW5jeSAoRVREQSkifV19LCJUcnVzdGVkRW50aXR5U2VydmljZXMiOlt7IlNlcnZpY2VJbmZvcm1hdGlvbiI6eyJTZXJ2aWNlVHlwZUlkZW50aWZpZXIiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1N2Y1R5cGUvUHViRUFBL0lzc3VhbmNlIiwiU2VydmljZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiUm9sZSBtb2RlbCBjZXJ0aWZpY2F0ZSJ9XSwiU2VydmljZURpZ2l0YWxJZGVudGl0eSI6eyJQdWJsaWNLZXlWYWx1ZXMiOlt7Imt0eSI6Ik9LUCIsImNydiI6IkVkMjU1MTkiLCJ4IjoiaEZCU0ZTZXJRblBMMVBOVXA5TnZRTDlqUUJPamJmSU1ScGRwUUEyaUFnSSJ9XSwiT3RoZXJJZHMiOlsiZGlkOmtleTp6Nk1rb01rdTFlYVlGRDdyR25oUzlyRDJiR3l5ZHZQbUUzVWlXNTdNUVlkQVlqSlIiXX19fSx7IlNlcnZpY2VJbmZvcm1hdGlvbiI6eyJTZXJ2aWNlVHlwZUlkZW50aWZpZXIiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1N2Y1R5cGUvUHViRUFBL0lzc3VhbmNlIiwiU2VydmljZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiRW1wbG95ZWVJRCBkZW1vIn1dLCJTZXJ2aWNlRGlnaXRhbElkZW50aXR5Ijp7Ik90aGVySWRzIjpbXSwiWDUwOVNLSXMiOltdLCJQdWJsaWNLZXlWYWx1ZXMiOltdLCJYNTA5Q2VydGlmaWNhdGVzIjpbeyJ2YWwiOiJNSUlCbERDQ0FVYWdBd0lCQWdJVWIxYjlLVHdDTEVidHR6Wit2VXdTRGtYS2tOTXdCUVlESzJWd01EWXhGVEFUQmdOVkJBTU1ERUZqYldVZ1VtOXZkQ0JEUVRFTE1Ba0dBMVVFQmd3Q1EwZ3hFREFPQmdOVkJBb01CMEZqYldVZ1EyOHdIaGNOTWpZd09ESTRNREF3TURBd1doY05NamN3T0RNd01EQXdNREF3V2pBMk1SVXdFd1lEVlFRRERBeEJZMjFsSUZKdmIzUWdRMEV4Q3pBSkJnTlZCQVlNQWtOSU1SQXdEZ1lEVlFRS0RBZEJZMjFsSUVOdk1Db3dCUVlESzJWd0F5RUFKY0FXbk91Y0NjMU1FNVhOMjNtSDBlcmpNTnRkWi83YlpJeXdXNmZMZ1dpalpqQmtNQjhHQTFVZEl3UVlNQmFBRk9MTlNYSmZaVncwYklKNDdLY1RyWFdiR1AvZk1BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlZIUTRFRmdRVTRzMUpjbDlsWERSc2duanNweE90ZFpzWS85OHdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFGQmdNclpYQURRUUQvZ3g5a1MzSCt2WVdQcCtCS0I2dmRTMmZMY1hqSDk0dTNrdmgyc3Z4Z2xqMnU4SVY4em5lQTVudjhzNWZyNlNCMTdOclBaMXl6cHZkYU1JRzVqRXdNIiwic3BlY1JlZiI6IiIsImVuY29kaW5nIjoiIn1dLCJYNTA5U3ViamVjdE5hbWVzIjpbXX19fSx7IlNlcnZpY2VJbmZvcm1hdGlvbiI6eyJTZXJ2aWNlVHlwZUlkZW50aWZpZXIiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1N2Y1R5cGUvUHViRUFBL0lzc3VhbmNlIiwiU2VydmljZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiUHJvY2l2aXMgRGVtbyBQSUQgSXNzdWVyIn1dLCJTZXJ2aWNlRGlnaXRhbElkZW50aXR5Ijp7IlB1YmxpY0tleVZhbHVlcyI6W3sia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJwMFk0MVhZU2RxMGljOGV2Wi1tT1RPenllQlhWOE1ZbnRIMGJfSEJqb00wIiwieSI6IlU3ODVFbnZyR3VNSlVnWDNLVGdrUzV6c2RxQjhfVWV0ZW1HM1NIcEJxZjAifV0sIk90aGVySWRzIjpbImRpZDp3ZWI6aXNzdWVyLnRvbnloZXJlLndvcms6c3NpOmRpZC13ZWI6djE6NDdhNzRjMTctZGU1Ny00ODc2LWFkYTUtZDcwNzg2YWU4MDM4Il19fX1dfV19fQ.OGq2Sj4pbb1csy_kOzWa_gbeMPbBaL6MhWv-yQLykWrQ56gabFZaJfM3eZmyhUYJRfYp-7kevUCBxaRpLBvhKQ +2. Verifier: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJpYXQiOjE3ODkwMzUwMzMsIng1YyI6WyJNSUlCUGpDQjVxQURBZ0VDQWhRelVlbmtacnB3TGFjVEhqMDd4RXo4bENpOFV6QUtCZ2dxaGtqT1BRUURBakFQTVEwd0N3WURWUVFEREFSRlZFUkJNQjRYRFRJMk1EZ3hNekUxTVRNME4xb1hEVEkzTURneE16RTFNVE0wTjFvd0R6RU5NQXNHQTFVRUF3d0VSVlJFUVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVKNnRGamJVVEJQQnRlcGFsWjVGUktMVDZxVnFrbzFvTk1naUlvdXI4RmFxUHAyQUxPbk90bGpwZnl4NmdoZ3YvV3lVWkgwRlhNdDluTTN2dTdzd25paklEQWVNQTRHQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUc4Z1dWdjZBL2VjU2ZhWFJ2T014Q0kyR0FWYlNlTDk3ZmwyT2R4NCtwU1pBaUIwbXZ5MTB4VzN5dTJDc0ZnSkRqc1BaSTZBV3ZKeGd2VlptQXJMQTlhY1FRPT0iXSwieDV0I1MyNTYiOiJsY1BDaTAxaVFfbkIyQWRZRzVKcEMxTlh3dEVncm9GczhVT2hma21GM2ZzIn0.eyJMb1RFIjp7Ikxpc3RBbmRTY2hlbWVJbmZvcm1hdGlvbiI6eyJMb1RFVmVyc2lvbklkZW50aWZpZXIiOjEsIkxvVEVTZXF1ZW5jZU51bWJlciI6MiwiTG9URVR5cGUiOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvTG9URVR5cGUvVGhhaVZlcmlmaWVyc0xpc3QiLCJTY2hlbWVPcGVyYXRvck5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiRWxlY3Ryb25pYyBUcmFuc2FjdGlvbnMgRGV2ZWxvcG1lbnQgQWdlbmN5IChFVERBKSJ9XSwiU2NoZW1lSW5mb3JtYXRpb25VUkkiOlt7ImxhbmciOiJlbiIsInVyaVZhbHVlIjoiaHR0cHM6Ly93d3cuZXRkYS5vci50aCJ9XSwiU3RhdHVzRGV0ZXJtaW5hdGlvbkFwcHJvYWNoIjoiaHR0cDovL3VyaS5ldGRhLm9yLnRoLzE5NjAyL1RoYWlWZXJpZmllcnNMaXN0L1N0YXR1c0RldG4vRVREQSIsIlNjaGVtZVR5cGVDb21tdW5pdHlSdWxlcyI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvVGhhaVZlcmlmaWVycy9zY2hlbWVydWxlcy9FVERBIn1dLCJTY2hlbWVUZXJyaXRvcnkiOiJUSCIsIlNjaGVtZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiVGhhaSBWZXJpZmllcnMgTGlzdCJ9XSwiSGlzdG9yaWNhbEluZm9ybWF0aW9uUGVyaW9kIjozNjUsIkRpc3RyaWJ1dGlvblBvaW50cyI6W10sIlNjaGVtZUV4dGVuc2lvbnMiOltdLCJMaXN0SXNzdWVEYXRlVGltZSI6IjIwMjYtMDktMTBUMTA6MTA6MzMuOTI4WiIsIk5leHRVcGRhdGUiOiIyMDI2LTA5LTExVDEwOjEwOjMzLjkyOFoifSwiVHJ1c3RlZEVudGl0aWVzTGlzdCI6W3siVHJ1c3RlZEVudGl0eUluZm9ybWF0aW9uIjp7IlRFTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyBEZXZlbG9wbWVudCBBZ2VuY3kgKEVUREEpIn1dfSwiVHJ1c3RlZEVudGl0eVNlcnZpY2VzIjpbeyJTZXJ2aWNlSW5mb3JtYXRpb24iOnsiU2VydmljZVR5cGVJZGVudGlmaWVyIjoiaHR0cDovL3VyaS5ldGRhLm9yLnRoLzE5NjAyL1N2Y1R5cGUvVmVyaWZpZXIiLCJTZXJ2aWNlTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJQcm9jaXZpcyBEZW1vIEJhbmsgVmVyaWZpZXIifV0sIlNlcnZpY2VEaWdpdGFsSWRlbnRpdHkiOnsiUHVibGljS2V5VmFsdWVzIjpbeyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6IjVYemtpV0s4UWl1Y3N3SENLakk1S3dyM3JXZkZ6SDlBWElhN0FwMXpDeTgiLCJ5IjoidU9XYThGZU5nbTlyc0hiZmpBczZxTVZnb21Fa1JoMHl1QS1JRjhQUXFwRSJ9XSwiT3RoZXJJZHMiOlsiZGlkOndlYjp2ZXJpZmllci50b255aGVyZS53b3JrOnNzaTpkaWQtd2ViOnYxOmU1NDNlYTBlLTBhMTAtNGZmNS1iOGZhLTE0MTRmMGYzYWI5YyJdfX19XX1dfX0.u92cxz56yft9MttrtaOGJ7keqWsV8GX1BLfNQaMHToaQKnyrqcWBgkfrVQ5aRJHtociOro9EwGhWQrbiwHB-ag +3. Wallet Provider: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJpYXQiOjE3ODg3ODExNDgsIng1YyI6WyJNSUlCUGpDQjVxQURBZ0VDQWhRelVlbmtacnB3TGFjVEhqMDd4RXo4bENpOFV6QUtCZ2dxaGtqT1BRUURBakFQTVEwd0N3WURWUVFEREFSRlZFUkJNQjRYRFRJMk1EZ3hNekUxTVRNME4xb1hEVEkzTURneE16RTFNVE0wTjFvd0R6RU5NQXNHQTFVRUF3d0VSVlJFUVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVKNnRGamJVVEJQQnRlcGFsWjVGUktMVDZxVnFrbzFvTk1naUlvdXI4RmFxUHAyQUxPbk90bGpwZnl4NmdoZ3YvV3lVWkgwRlhNdDluTTN2dTdzd25paklEQWVNQTRHQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUc4Z1dWdjZBL2VjU2ZhWFJ2T014Q0kyR0FWYlNlTDk3ZmwyT2R4NCtwU1pBaUIwbXZ5MTB4VzN5dTJDc0ZnSkRqc1BaSTZBV3ZKeGd2VlptQXJMQTlhY1FRPT0iXSwieDV0I1MyNTYiOiJsY1BDaTAxaVFfbkIyQWRZRzVKcEMxTlh3dEVncm9GczhVT2hma21GM2ZzIn0.eyJMb1RFIjp7Ikxpc3RBbmRTY2hlbWVJbmZvcm1hdGlvbiI6eyJMb1RFVmVyc2lvbklkZW50aWZpZXIiOjEsIkxvVEVTZXF1ZW5jZU51bWJlciI6MSwiTG9URVR5cGUiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL0xvVEVUeXBlL0VVV2FsbGV0UHJvdmlkZXJzTGlzdCIsIlNjaGVtZU9wZXJhdG9yTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyBEZXZlbG9wbWVudCBBZ2VuY3kgKEVUREEpIn1dLCJTY2hlbWVJbmZvcm1hdGlvblVSSSI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwczovL3d3dy5ldGRhLm9yLnRoIn1dLCJTdGF0dXNEZXRlcm1pbmF0aW9uQXBwcm9hY2giOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1dhbGxldFByb3ZpZGVyc0xpc3QvU3RhdHVzRGV0bi9FVSIsIlNjaGVtZVR5cGVDb21tdW5pdHlSdWxlcyI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1dhbGxldFByb3ZpZGVyc0xpc3Qvc2NoZW1lcnVsZXMvRVUifV0sIlNjaGVtZVRlcnJpdG9yeSI6IlRIIiwiU2NoZW1lTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJXYWxsZXQgUHJvdmlkZXJzIExpc3QifV0sIkhpc3RvcmljYWxJbmZvcm1hdGlvblBlcmlvZCI6MzY1LCJEaXN0cmlidXRpb25Qb2ludHMiOltdLCJTY2hlbWVFeHRlbnNpb25zIjpbXSwiTGlzdElzc3VlRGF0ZVRpbWUiOiIyMDI2LTA5LTA3VDExOjM5OjA4LjM5NVoiLCJOZXh0VXBkYXRlIjoiMjAyNi0wOS0wOFQxMTozOTowOC4zOTVaIn0sIlRydXN0ZWRFbnRpdGllc0xpc3QiOltdfX0.Izh_JYqPikXvdYGKdYJY6I26VuWuLtWwCX1eKtvqxnVSMRsxxtV_K7Wx6lbp_1C7RemaFT52ZrAOZa5t1SmZ6g + +## Revocation and status + +Each issuer publishes its own Token Status List (`draft-ietf-oauth-status-list-18`). Status bits: 0 valid, 1 revoked, 2 suspended, 3 rotated (key rotation). + +Issuers target publication of a change within 15 minutes; the full process may take longer. Verifiers must validate the status URL against the source defined by the Thai profile, check the credential-supplied URL against that source, and read the status bit on every presentation (TC-4). The current JWT examples do not show a status-URL field. [Source analysis](../../th/research/42-trusted-list-lote-jwt-format.md). + +Revocation also happens above the credential level. If ETDA suspends or withdraws an issuer, all of that issuer's credentials stop verifying without any per-credential write, because the issuer's role record is no longer `active`. If a wallet provider revokes a wallet attestation, issuers that bound credentials to that wallet unit must revoke them in turn. Every credential also dies at `validUntil` without any of the above. + +Emergency revocation reaches each entity at its next lazy pull, with no background polling and no push channel. diff --git a/docs/en/thai-vc-arf/_category_.json b/docs/en/thai-vc-arf/_category_.json new file mode 100644 index 0000000..2c4e134 --- /dev/null +++ b/docs/en/thai-vc-arf/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Thailand's VC stack", + "position": 1, + "link": { + "type": "doc", + "id": "en/thai-vc-arf/minimal-interoperability-reference" + } +} diff --git a/docs/thai-vc-arf/00-minimal-interoperability-reference.md b/docs/thai-vc-arf/00-minimal-interoperability-reference.md new file mode 100644 index 0000000..665bab7 --- /dev/null +++ b/docs/thai-vc-arf/00-minimal-interoperability-reference.md @@ -0,0 +1,190 @@ +--- +description: "ชุด VC ของประเทศไทย — สรุปหนึ่งหน้า — Thai VC ARF 2.0 DRAFT 0" +--- + +# ชุด VC ของประเทศไทย — สรุปหนึ่งหน้า + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — บทสรุปหนึ่งหน้า จัดทำขึ้นเพื่อให้ระบบของคู่ภาคี (counterpart system) ใช้ตรวจสอบความสอดคล้องกัน มิได้เป็นบทในรายงานต้นฉบับของ สพธอ. +> **แหล่งข้อมูล:** [Thai VC ARF](README.md) — รายงานทางเทคนิคของสำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) เวอร์ชัน 1.1 และส่วนขยายเวอร์ชัน 2.0/2.1 ซึ่งเป็นแหล่งข้อมูลอ้างอิงหลักของเอกสารฉบับนี้ +> **เอกสารที่เกี่ยวข้อง:** [§5 มาตรฐานและข้อปฏิบัติ](05-standards-and-compliance.md) · [§8 Implementation Guidelines](08-implementation-guidelines.md) · [§8.1 OID4VCI Full Flow](08.1-issuance-full-flow-detail.md) · [§8.2 OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) · [§6.5 กลไกการสร้างความน่าเชื่อถือ](06.5-trust-building-mechanism.md) · [§7 การทำงานร่วมกันข้ามระบบนิเวศ](07-cross-ecosystem-interoperability.md) · [§9 Trust Model 3](09-trust-model-3.md) · [§12 Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md) · [§13 VC Status และ Revocation](13-vc-status-and-revocation.md) · [research/41 การให้บริการ Trusted List ผ่าน CDN](../research/41-trustlist-serving-filecdn-etag-binary.md) +*/} + +--- + +{/* +บันทึกสำหรับ agent (ซ่อน — ไม่แสดงบนเว็บไซต์): + +บทความนี้สรุปบทภาษาไทยใน th/thai-vc-arf/ ซึ่งเป็นแหล่งข้อมูลอ้างอิงหลัก +กรณีบทความนี้กับบทภาษาไทยขัดกัน ให้ยึดบทภาษาไทย + +บทต้นทาง (path ภายใต้ th/thai-vc-arf/ เว้นแต่ระบุไว้เป็นอย่างอื่น): +- การออก VC: 05-standards-and-compliance.md, 08-implementation-guidelines.md, 08.1-issuance-full-flow-detail.md +- การแสดง VC: 05-standards-and-compliance.md, 08-implementation-guidelines.md, 08.2-oid4vp-full-flow-detail.md +- Trusted List: 06.5-trust-building-mechanism.md, 07-cross-ecosystem-interoperability.md, 09-trust-model-3.md, 12-key-management-and-trustlist-deployment.md, th/research/41-trustlist-serving-filecdn-etag-binary.md +- การเพิกถอนและสถานะ: 13-vc-status-and-revocation.md, 12-key-management-and-trustlist-deployment.md, 10-wallet-unit-attestation.md + +ดัชนีแหล่งข้อมูลอ้างอิงหลัก (ภาษาไทย): th/thai-vc-arf/README.md +ฉบับภาษาอังกฤษของบทสรุปนี้: en/thai-vc-arf/00-minimal-interoperability-reference.md +*/} + +หน้านี้อธิบายชุดมาตรฐาน VC ของประเทศไทย ในมุมที่ระบบคู่ภาคีใช้ตรวจสอบความเข้ากันได้ + +## สถานะ PoC ปัจจุบัน + +หน้านี้กำหนดรูปแบบเป้าหมายสำหรับการพัฒนา ต้นแบบ (PoC) ปัจจุบันมี 3 ส่วน: + +1. LoTE (List of Trusted Entities) รายการเดียวที่บรรจุผู้ออก ผู้ตรวจ และผู้ให้บริการกระเป๋าทั้งหมด +2. แอปกระเป๋าที่เชื่อถือเอนทิตีผ่าน Trusted List เท่านั้น ไม่ใช้ใบรับรอง เอนทิตีแต่ละรายประกาศกุญแจสาธารณะใน Trusted List ในรูป `did:web` หรือสายอักขระกุญแจสาธารณะ +3. Wallet Instance Attestation (WIA) ยังไม่ได้ทำ + +## ฉบับย่อ + +องค์ประกอบหลัก 5 ส่วน คือ + +- **รูปแบบ VC:** ระบบรองรับหลายรูปแบบ โดย v1.1 ใช้ JSON-LD ตาม W3C VC Data Model ซึ่งยังคงรองรับ และเพิ่ม IETF SD-JWT VC (`dc+sd-jwt`) เป็นรูปแบบที่แนะนำสำหรับการออกใหม่ +- **โปรโตคอลการออก:** OpenID for Verifiable Credential Issuance (OID4VCI) 1.0 Final แบบ pre-authorized code flow +- **โปรโตคอลการแสดง:** OpenID for Verifiable Presentations (OID4VP) 1.0 Final พร้อม DCQL +- **ความน่าเชื่อถือ:** Trusted List ตาม ETSI TS 119 602 ซึ่ง สพธอ. เป็นผู้ลงลายมือชื่อและเผยแพร่ผ่าน CDN โดยไม่ใช้สายใบรับรองของ CA +- **สถานะ VC:** IETF Token Status List ซึ่งผู้ออกแต่ละรายเผยแพร่เอง + +สำหรับคู่ภาคีที่ประเมินการลู่เข้าหากัน (convergence): ประเทศไทยใช้ชุด OID4VCI + OID4VP + SD-JWT VC เดียวกับ EU แต่รายการใน Trusted List ของไทยไม่ได้รับการยอมรับใน EU โดยอัตโนมัติ การยอมรับต้องมีข้อตกลงความน่าเชื่อถือ (trust agreement) การเทียบบทบาทและระดับการรับรอง (trust mapping) รายการเชื่อม (bridge list) และหลักฐานการทดสอบความสอดคล้อง (conformance evidence) + +## การออก VC + +การออกใช้ OID4VCI 1.0 Final แบบ pre-authorized code flow ระบบยังคงรองรับ VC เดิมตาม W3C Verifiable Credentials Data Model v1.1 และเพิ่ม SD-JWT VC (`dc+sd-jwt`) สำหรับการออกเอกสารใหม่ + +ก่อนขอรหัส OTP จากผู้ใช้ กระเป๋าจะตรวจผู้ออกกับ Trusted List ก่อน (Trust Check 3 รอบแรก ย่อเป็น TC-3 รอบแรก) ถ้าผู้ออกไม่ได้ `active` สำหรับประเภท VC นั้น กระบวนการจะหยุดทันที + +ที่ระดับ IAL2.3 ขึ้นไป access token จะผูกกับกุญแจของกระเป๋าด้วย DPoP (RFC 9449) + +หากเลือกใช้ Wallet Attestation client authentication ตาม OID4VCI Appendix E, Wallet ส่ง Attestation ใน PAR หรือ Token Request พร้อม Client Attestation PoP ตามมาตรฐานที่อ้างถึง. Authorization Server ตรวจลายมือชื่อ Attestation จาก Issuer ที่เชื่อถือและตรวจ PoP. Credential Request ส่ง `proofs.jwt` เพื่อพิสูจน์การครอบครองกุญแจที่จะผูกกับ VC. Trust source และการตรวจสถานะ Wallet เพิ่มเติมเป็นไปตาม Thai profile. แผนภาพนี้ใช้ Pre-Authorized Code Flow จึงแสดง client authentication ที่ Token Request. + +ก่อนจัดเก็บ VC กระเป๋าจะตรวจลายมือชื่อของผู้ออก ช่วงเวลาที่ใช้ได้ และค่า status ใน Status List (TC-3 รอบที่สอง และ TC-4) + +```mermaid +sequenceDiagram + participant U as ผู้ใช้ + participant W as กระเป๋าเอกสารดิจิทัล + participant I as ผู้ออกเอกสาร + participant TL as Trusted List (สพธอ.) + participant WP as ผู้ให้บริการกระเป๋า + participant SL as รายการสถานะ + + Note over U,I: ขอและรับคำเชิญ (credential offer) + U->>I: ขอ VC (portal) + I->>U: QR ของคำเชิญ + OTP ทาง SMS + + Note over W,TL: ค้นหาข้อมูล + TC-3 รอบแรก + W->>I: GET /.well-known/openid-credential-issuer + I-->>W: metadata: credential configuration ของ dc+sd-jwt + W->>TL: TC-3 รอบแรก: ผู้ออก active + ประเภท VC ที่อนุญาต + W->>U: ขอรหัส OTP (tx_code) + + Note over W,I: OTP + token (TC-2 เมื่อ Thai profile กำหนด) + W->>I: POST /token + OTP, Wallet Attestation/Client Attestation PoP หากใช้กลไกนี้ + I->>I: ตรวจ Attestation จาก Issuer ที่เชื่อถือและ PoP, ตรวจสถานะเพิ่มเติมตาม Thai profile + I-->>W: Token Response: access_token + opt Issuer Metadata ระบุ Nonce Endpoint + W->>I: POST Nonce Endpoint (ไม่ใช้ Access Token) + I-->>W: 2xx + c_nonce และ Cache-Control: no-store + end + + Note over W,SL: ออก VC + TC-3/TC-4 + W->>I: POST /credential + proofs.jwt (nonce เมื่อกำหนด) + I->>W: ออก SD-JWT VC (dc+sd-jwt) + W->>TL: TC-3 รอบที่สอง: ลายมือชื่อ + ช่วงเวลาที่ใช้ได้ + W->>SL: TC-4: อ่านค่า status ที่ idx ตาม bits + SL-->>W: 0x00 (VALID) +``` + +## การแสดง VC + +การแสดงใช้ OID4VP 1.0 Final พร้อม DCQL แทน Presentation Exchange + +ก่อนแสดงหน้าขอความยินยอม กระเป๋าจะตรวจผู้ตรวจกับ Trusted List (Trust Check 1 ย่อเป็น TC-1) ว่า `active` อยู่หรือไม่ และข้อความยืนยัน (claims) กับวัตถุประสงค์ (purpose) ที่ขอ อยู่ในขอบเขตที่ลงทะเบียนไว้หรือไม่ ถ้าไม่ กระเป๋าจะไม่ส่งอะไรออกไปเลย + +จากนั้นผู้ตรวจจะตรวจ 3 ข้อ คือ + +- Trust Check 2 (TC-2): **ใน OID4VP** Wallet รัฐบาลต้องส่ง WIA และ WIA-PoP และ Verifier ต้องตรวจทั้งคู่; Wallet เอกชนเลือกส่งทั้งคู่หรือไม่ส่งทั้งคู่ได้ หากเอกชนไม่ส่งทั้งคู่ Verifier ข้าม TC-2 และตรวจ TC-3/TC-4 ต่อ หากส่งไม่ครบหรือรายการใดตรวจไม่ผ่าน ให้ปฏิเสธ VP Verifier ต้องจำแนกประเภท Wallet โดยใช้ข้อมูล Wallet Provider จากแหล่งที่เชื่อถือได้และเป็นอิสระจาก WIA ตามที่ Thai profile กำหนด; หากไม่มีข้อมูล ตรวจความสดใหม่ไม่ได้ หรือจำแนกประเภทไม่ได้ ให้ปฏิเสธ VP (ดู [§8.4.2](08-implementation-guidelines.md) และ [§12.1.4](12.1-trust-list-publication-profile.md)) กฎนี้เป็นส่วนขยาย OID4VP และไม่เปลี่ยนข้อกำหนด OID4VCI +- Trust Check 3 (TC-3): ผู้ออกอยู่ใน Trusted List และ DID ของผู้ออก resolve ได้เป็นกุญแจที่ใช้ลงลายมือชื่อใน VC +- Trust Check 4 (TC-4): อ่านค่า status ที่ index ของ VC ตามความกว้าง `bits` จาก Status List ของผู้ออก + +ลายมือชื่อถูกต้องอย่างเดียวไม่พอที่จะยอมรับ VC + +ตัวระบุ: หน่วยงานใช้ `did:web` ผู้ถือใช้ `did:jwk` ส่วนระบบตัวตนของไทย เช่น NDID ใช้ custom DID method และ resolve ผ่าน ETDA Trust Gateway ซึ่งทำหน้าที่เป็น Universal Resolver + +```mermaid +sequenceDiagram + participant U as ผู้ใช้ + participant W as กระเป๋าเอกสารดิจิทัล + participant V as ผู้ตรวจสอบเอกสาร + participant TL as Trusted List (สพธอ.) + participant R as Universal Resolver + participant SL as รายการสถานะ + + Note over U,TL: ขอข้อมูล + TC-1 ตรวจผู้ตรวจ + U->>W: สแกน QR คำขอ (DCQL) + W->>TL: TC-1: บทบาท/สถานะ/ขอบเขตของผู้ตรวจ + TL-->>W: active / ข้อความยืนยันและวัตถุประสงค์ที่อนุญาต + + Note over W,V: ความยินยอม + การนำเสนอ + W->>U: ขอความยินยอม: วัตถุประสงค์ + ข้อความยืนยัน + U-->>W: อนุมัติ (เปิดเผยข้อมูลแบบเลือกได้) + W->>V: vp_token + Note over V,TL: จำแนกประเภท Wallet + alt Wallet รัฐบาล หรือ Wallet เอกชนส่งหลักฐานครบคู่ + W->>V: WIA + WIA-PoP (ส่งครบคู่) + Note over V,TL: TC-2 ตรวจ WIA และ WIA-PoP + V->>TL: ตรวจ Wallet Provider ในรายการ + TL-->>V: Provider active / WIA ถูกต้อง + else Wallet เอกชนไม่ส่งทั้งคู่ + Note over V: ข้าม TC-2 ตรวจ TC-3 และ TC-4 ต่อ + else Wallet รัฐบาลขาดหลักฐาน หรือ Wallet เอกชนส่งไม่ครบคู่ + V->>W: ปฏิเสธ VP + end + + Note over V,TL: TC-3 ผู้ออก + กุญแจ (DID) + V->>R: TC-3: resolve DID ของผู้ออก (kid) + R-->>V: DID Document / กุญแจสำหรับตรวจ + V->>TL: TC-3: รายการผู้ออก + เทียบกุญแจ + + Note over V,SL: TC-4 สถานะ + ผลลัพธ์ + V->>SL: TC-4: อ่านค่า status ที่ idx ตาม bits + SL-->>V: 0x00 (VALID) + V->>W: ยอมรับ / หรือ 400 invalid_request +``` + +## Trusted List + +สพธอ. ตรวจรับรอง (audit) ทุกหน่วยงานที่จะเป็นผู้ออก ผู้ตรวจ หรือผู้ให้บริการกระเป๋า แล้วลงลายมือชื่อบันทึกไว้ใน Trusted List ที่เกี่ยวข้องจำนวน 3 รายการ แยกตามบทบาท และจัดทำในรูปแบบ JWT เผยแพร่ผ่าน CDN โดยไม่ต้องใช้ API key ลายมือชื่อของ สพธอ. คือเหตุผลเดียวที่ทำให้เชื่อถือรายการนี้ได้ [research/41] + +payload ของ JWT รูปแบบเป้าหมายใช้ `LoTE.ListAndSchemeInformation` สำหรับชนิดรายการ ลำดับ และเวลา ใช้ `LoTE.TrustedEntitiesList[]` สำหรับองค์กร และใช้ `TrustedEntityServices[].ServiceInformation` สำหรับแต่ละบริการ กุญแจสาธารณะหรือ DID ของบริการอยู่ใน `ServiceDigitalIdentity.PublicKeyValues[]` หรือ `OtherIds[]` ตามลำดับ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +Thai profile ต้องระบุสถานะระดับองค์กรและระดับบริการ ช่วงเวลาที่มีผล และขอบเขตสิทธิ์รายบทบาท โดยผู้ออกต้องระบุประเภท VC ที่ออกได้ และผู้ตรวจต้องระบุ claims กับวัตถุประสงค์ที่ขอได้ สถานะทั้งสองระดับต้องเป็น `active` ก่อนเชื่อถือเอนทิตี ทั้งนี้ JWT ตัวอย่างปัจจุบันยังแสดงฟิลด์เหล่านี้ไม่ครบ จึงใช้เป็น test vector สำหรับตัดสินสิทธิ์ไม่ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +ผู้เข้าร่วมดึง Trusted List ที่เกี่ยวข้องฉบับเต็มเฉพาะตอนต้องตัดสินความน่าเชื่อถือ ไม่มีการ polling อยู่เบื้องหลัง ไม่ใช้ API key, delta หรือไฟล์ CBOR และถ้าดึงหรือตรวจลายมือชื่อไม่ได้ ให้ปฏิเสธการเชื่อมต่อนั้น (fail closed) การเพิกถอนในระดับเอนทิตีจะไปถึงแต่ละเอนทิตีเมื่อดึงครั้งถัดไป [research/41] + +ผู้ตรวจต้องใช้ Trusted List เพื่อตัดสินสิทธิ์ของเอนทิตี และใช้ DID Document เพื่อรับกุญแจสำหรับตรวจลายมือชื่อ สพธอ. ลงลายมือชื่อ Trusted List จาก HSM ระดับ FIPS 140-3 Level 3 ด้วยเกณฑ์ M-of-N เช่น 3-of-5 พร้อมกุญแจฉุกเฉิน (emergency key) ที่เก็บแบบออฟไลน์ + +### ตัวอย่าง Trusted List + +JWT ตัวอย่างต่อไปนี้ใช้ศึกษาโครงสร้าง LoTE ทั้งสามรายการมีสามส่วนของ compact JWS เอกสารนี้ยังไม่ได้ตรวจลายมือชื่อหรือใบรับรอง และฟิลด์สถานะกับขอบเขตสิทธิ์ยังไม่ครบ จึงห้ามใช้เป็น test vector สำหรับตัดสินสิทธิ์ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +1. ผู้ออก: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJpYXQiOjE3ODkwMzA2MDIsIng1YyI6WyJNSUlCUGpDQjVxQURBZ0VDQWhRelVlbmtacnB3TGFjVEhqMDd4RXo4bENpOFV6QUtCZ2dxaGtqT1BRUURBakFQTVEwd0N3WURWUVFEREFSRlZFUkJNQjRYRFRJMk1EZ3hNekUxTVRNME4xb1hEVEkzTURneE16RTFNVE0wTjFvd0R6RU5NQXNHQTFVRUF3d0VSVlJFUVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVKNnRGamJVVEJQQnRlcGFsWjVGUktMVDZxVnFrbzFvTk1naUlvdXI4RmFxUHAyQUxPbk90bGpwZnl4NmdoZ3YvV3lVWkgwRlhNdDluTTN2dTdzd25paklEQWVNQTRHQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUc4Z1dWdjZBL2VjU2ZhWFJ2T014Q0kyR0FWYlNlTDk3ZmwyT2R4NCtwU1pBaUIwbXZ5MTB4VzN5dTJDc0ZnSkRqc1BaSTZBV3ZKeGd2VlptQXJMQTlhY1FRPT0iXSwieDV0I1MyNTYiOiJsY1BDaTAxaVFfbkIyQWRZRzVKcEMxTlh3dEVncm9GczhVT2hma21GM2ZzIn0.eyJMb1RFIjp7Ikxpc3RBbmRTY2hlbWVJbmZvcm1hdGlvbiI6eyJMb1RFVmVyc2lvbklkZW50aWZpZXIiOjEsIkxvVEVTZXF1ZW5jZU51bWJlciI6MiwiTG9URVR5cGUiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL0xvVEVUeXBlL0VVUHViRUFBUHJvdmlkZXJzTGlzdCIsIlNjaGVtZU9wZXJhdG9yTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyBEZXZlbG9wbWVudCBBZ2VuY3kgKEVUREEpIn1dLCJTY2hlbWVJbmZvcm1hdGlvblVSSSI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwczovL3d3dy5ldGRhLm9yLnRoIn1dLCJTdGF0dXNEZXRlcm1pbmF0aW9uQXBwcm9hY2giOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvVGhhaUlzc3VlcnNMaXN0L1N0YXR1c0RldG4vRVREQSIsIlNjaGVtZVR5cGVDb21tdW5pdHlSdWxlcyI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvVGhhaUlzc3VlcnMvc2NoZW1lcnVsZXMvRVREQSJ9XSwiU2NoZW1lVGVycml0b3J5IjoiVEgiLCJTY2hlbWVOYW1lIjpbeyJsYW5nIjoiZW4iLCJ2YWx1ZSI6IlRoYWkgSXNzdWVycyBMaXN0In1dLCJIaXN0b3JpY2FsSW5mb3JtYXRpb25QZXJpb2QiOjM2NSwiRGlzdHJpYnV0aW9uUG9pbnRzIjpbXSwiU2NoZW1lRXh0ZW5zaW9ucyI6W10sIkxpc3RJc3N1ZURhdGVUaW1lIjoiMjAyNi0wOS0xMFQwODo1Njo0Mi45NzdaIiwiTmV4dFVwZGF0ZSI6IjIwMjYtMDktMTFUMDg6NTY6NDIuOTc3WiJ9LCJUcnVzdGVkRW50aXRpZXNMaXN0IjpbeyJUcnVzdGVkRW50aXR5SW5mb3JtYXRpb24iOnsiVEVOYW1lIjpbeyJsYW5nIjoiZW4iLCJ2YWx1ZSI6IkVsZWN0cm9uaWMgVHJhbnNhY3Rpb25zIERldmVsb3BtZW50IEFnZW5jeSAoRVREQSkifV19LCJUcnVzdGVkRW50aXR5U2VydmljZXMiOlt7IlNlcnZpY2VJbmZvcm1hdGlvbiI6eyJTZXJ2aWNlVHlwZUlkZW50aWZpZXIiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1N2Y1R5cGUvUHViRUFBL0lzc3VhbmNlIiwiU2VydmljZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiUm9sZSBtb2RlbCBjZXJ0aWZpY2F0ZSJ9XSwiU2VydmljZURpZ2l0YWxJZGVudGl0eSI6eyJQdWJsaWNLZXlWYWx1ZXMiOlt7Imt0eSI6Ik9LUCIsImNydiI6IkVkMjU1MTkiLCJ4IjoiaEZCU0ZTZXJRblBMMVBOVXA5TnZRTDlqUUJPamJmSU1ScGRwUUEyaUFnSSJ9XSwiT3RoZXJJZHMiOlsiZGlkOmtleTp6Nk1rb01rdTFlYVlGRDdyR25oUzlyRDJiR3l5ZHZQbUUzVWlXNTdNUVlkQVlqSlIiXX19fSx7IlNlcnZpY2VJbmZvcm1hdGlvbiI6eyJTZXJ2aWNlVHlwZUlkZW50aWZpZXIiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1N2Y1R5cGUvUHViRUFBL0lzc3VhbmNlIiwiU2VydmljZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiRW1wbG95ZWVJRCBkZW1vIn1dLCJTZXJ2aWNlRGlnaXRhbElkZW50aXR5Ijp7Ik90aGVySWRzIjpbXSwiWDUwOVNLSXMiOltdLCJQdWJsaWNLZXlWYWx1ZXMiOltdLCJYNTA5Q2VydGlmaWNhdGVzIjpbeyJ2YWwiOiJNSUlCbERDQ0FVYWdBd0lCQWdJVWIxYjlLVHdDTEVidHR6Wit2VXdTRGtYS2tOTXdCUVlESzJWd01EWXhGVEFUQmdOVkJBTU1ERUZqYldVZ1VtOXZkQ0JEUVRFTE1Ba0dBMVVFQmd3Q1EwZ3hFREFPQmdOVkJBb01CMEZqYldVZ1EyOHdIaGNOTWpZd09ESTRNREF3TURBd1doY05NamN3T0RNd01EQXdNREF3V2pBMk1SVXdFd1lEVlFRRERBeEJZMjFsSUZKdmIzUWdRMEV4Q3pBSkJnTlZCQVlNQWtOSU1SQXdEZ1lEVlFRS0RBZEJZMjFsSUVOdk1Db3dCUVlESzJWd0F5RUFKY0FXbk91Y0NjMU1FNVhOMjNtSDBlcmpNTnRkWi83YlpJeXdXNmZMZ1dpalpqQmtNQjhHQTFVZEl3UVlNQmFBRk9MTlNYSmZaVncwYklKNDdLY1RyWFdiR1AvZk1BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlZIUTRFRmdRVTRzMUpjbDlsWERSc2duanNweE90ZFpzWS85OHdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFGQmdNclpYQURRUUQvZ3g5a1MzSCt2WVdQcCtCS0I2dmRTMmZMY1hqSDk0dTNrdmgyc3Z4Z2xqMnU4SVY4em5lQTVudjhzNWZyNlNCMTdOclBaMXl6cHZkYU1JRzVqRXdNIiwic3BlY1JlZiI6IiIsImVuY29kaW5nIjoiIn1dLCJYNTA5U3ViamVjdE5hbWVzIjpbXX19fSx7IlNlcnZpY2VJbmZvcm1hdGlvbiI6eyJTZXJ2aWNlVHlwZUlkZW50aWZpZXIiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1N2Y1R5cGUvUHViRUFBL0lzc3VhbmNlIiwiU2VydmljZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiUHJvY2l2aXMgRGVtbyBQSUQgSXNzdWVyIn1dLCJTZXJ2aWNlRGlnaXRhbElkZW50aXR5Ijp7IlB1YmxpY0tleVZhbHVlcyI6W3sia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJwMFk0MVhZU2RxMGljOGV2Wi1tT1RPenllQlhWOE1ZbnRIMGJfSEJqb00wIiwieSI6IlU3ODVFbnZyR3VNSlVnWDNLVGdrUzV6c2RxQjhfVWV0ZW1HM1NIcEJxZjAifV0sIk90aGVySWRzIjpbImRpZDp3ZWI6aXNzdWVyLnRvbnloZXJlLndvcms6c3NpOmRpZC13ZWI6djE6NDdhNzRjMTctZGU1Ny00ODc2LWFkYTUtZDcwNzg2YWU4MDM4Il19fX1dfV19fQ.OGq2Sj4pbb1csy_kOzWa_gbeMPbBaL6MhWv-yQLykWrQ56gabFZaJfM3eZmyhUYJRfYp-7kevUCBxaRpLBvhKQ +2. ผู้ตรวจ: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJpYXQiOjE3ODkwMzUwMzMsIng1YyI6WyJNSUlCUGpDQjVxQURBZ0VDQWhRelVlbmtacnB3TGFjVEhqMDd4RXo4bENpOFV6QUtCZ2dxaGtqT1BRUURBakFQTVEwd0N3WURWUVFEREFSRlZFUkJNQjRYRFRJMk1EZ3hNekUxTVRNME4xb1hEVEkzTURneE16RTFNVE0wTjFvd0R6RU5NQXNHQTFVRUF3d0VSVlJFUVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVKNnRGamJVVEJQQnRlcGFsWjVGUktMVDZxVnFrbzFvTk1naUlvdXI4RmFxUHAyQUxPbk90bGpwZnl4NmdoZ3YvV3lVWkgwRlhNdDluTTN2dTdzd25paklEQWVNQTRHQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUc4Z1dWdjZBL2VjU2ZhWFJ2T014Q0kyR0FWYlNlTDk3ZmwyT2R4NCtwU1pBaUIwbXZ5MTB4VzN5dTJDc0ZnSkRqc1BaSTZBV3ZKeGd2VlptQXJMQTlhY1FRPT0iXSwieDV0I1MyNTYiOiJsY1BDaTAxaVFfbkIyQWRZRzVKcEMxTlh3dEVncm9GczhVT2hma21GM2ZzIn0.eyJMb1RFIjp7Ikxpc3RBbmRTY2hlbWVJbmZvcm1hdGlvbiI6eyJMb1RFVmVyc2lvbklkZW50aWZpZXIiOjEsIkxvVEVTZXF1ZW5jZU51bWJlciI6MiwiTG9URVR5cGUiOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvTG9URVR5cGUvVGhhaVZlcmlmaWVyc0xpc3QiLCJTY2hlbWVPcGVyYXRvck5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiRWxlY3Ryb25pYyBUcmFuc2FjdGlvbnMgRGV2ZWxvcG1lbnQgQWdlbmN5IChFVERBKSJ9XSwiU2NoZW1lSW5mb3JtYXRpb25VUkkiOlt7ImxhbmciOiJlbiIsInVyaVZhbHVlIjoiaHR0cHM6Ly93d3cuZXRkYS5vci50aCJ9XSwiU3RhdHVzRGV0ZXJtaW5hdGlvbkFwcHJvYWNoIjoiaHR0cDovL3VyaS5ldGRhLm9yLnRoLzE5NjAyL1RoYWlWZXJpZmllcnNMaXN0L1N0YXR1c0RldG4vRVREQSIsIlNjaGVtZVR5cGVDb21tdW5pdHlSdWxlcyI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwOi8vdXJpLmV0ZGEub3IudGgvMTk2MDIvVGhhaVZlcmlmaWVycy9zY2hlbWVydWxlcy9FVERBIn1dLCJTY2hlbWVUZXJyaXRvcnkiOiJUSCIsIlNjaGVtZU5hbWUiOlt7ImxhbmciOiJlbiIsInZhbHVlIjoiVGhhaSBWZXJpZmllcnMgTGlzdCJ9XSwiSGlzdG9yaWNhbEluZm9ybWF0aW9uUGVyaW9kIjozNjUsIkRpc3RyaWJ1dGlvblBvaW50cyI6W10sIlNjaGVtZUV4dGVuc2lvbnMiOltdLCJMaXN0SXNzdWVEYXRlVGltZSI6IjIwMjYtMDktMTBUMTA6MTA6MzMuOTI4WiIsIk5leHRVcGRhdGUiOiIyMDI2LTA5LTExVDEwOjEwOjMzLjkyOFoifSwiVHJ1c3RlZEVudGl0aWVzTGlzdCI6W3siVHJ1c3RlZEVudGl0eUluZm9ybWF0aW9uIjp7IlRFTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyBEZXZlbG9wbWVudCBBZ2VuY3kgKEVUREEpIn1dfSwiVHJ1c3RlZEVudGl0eVNlcnZpY2VzIjpbeyJTZXJ2aWNlSW5mb3JtYXRpb24iOnsiU2VydmljZVR5cGVJZGVudGlmaWVyIjoiaHR0cDovL3VyaS5ldGRhLm9yLnRoLzE5NjAyL1N2Y1R5cGUvVmVyaWZpZXIiLCJTZXJ2aWNlTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJQcm9jaXZpcyBEZW1vIEJhbmsgVmVyaWZpZXIifV0sIlNlcnZpY2VEaWdpdGFsSWRlbnRpdHkiOnsiUHVibGljS2V5VmFsdWVzIjpbeyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6IjVYemtpV0s4UWl1Y3N3SENLakk1S3dyM3JXZkZ6SDlBWElhN0FwMXpDeTgiLCJ5IjoidU9XYThGZU5nbTlyc0hiZmpBczZxTVZnb21Fa1JoMHl1QS1JRjhQUXFwRSJ9XSwiT3RoZXJJZHMiOlsiZGlkOndlYjp2ZXJpZmllci50b255aGVyZS53b3JrOnNzaTpkaWQtd2ViOnYxOmU1NDNlYTBlLTBhMTAtNGZmNS1iOGZhLTE0MTRmMGYzYWI5YyJdfX19XX1dfX0.u92cxz56yft9MttrtaOGJ7keqWsV8GX1BLfNQaMHToaQKnyrqcWBgkfrVQ5aRJHtociOro9EwGhWQrbiwHB-ag +3. ผู้ให้บริการกระเป๋า: eyJhbGciOiJFUzI1NiIsInR5cCI6IkpPU0UiLCJpYXQiOjE3ODg3ODExNDgsIng1YyI6WyJNSUlCUGpDQjVxQURBZ0VDQWhRelVlbmtacnB3TGFjVEhqMDd4RXo4bENpOFV6QUtCZ2dxaGtqT1BRUURBakFQTVEwd0N3WURWUVFEREFSRlZFUkJNQjRYRFRJMk1EZ3hNekUxTVRNME4xb1hEVEkzTURneE16RTFNVE0wTjFvd0R6RU5NQXNHQTFVRUF3d0VSVlJFUVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVKNnRGamJVVEJQQnRlcGFsWjVGUktMVDZxVnFrbzFvTk1naUlvdXI4RmFxUHAyQUxPbk90bGpwZnl4NmdoZ3YvV3lVWkgwRlhNdDluTTN2dTdzd25paklEQWVNQTRHQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUc4Z1dWdjZBL2VjU2ZhWFJ2T014Q0kyR0FWYlNlTDk3ZmwyT2R4NCtwU1pBaUIwbXZ5MTB4VzN5dTJDc0ZnSkRqc1BaSTZBV3ZKeGd2VlptQXJMQTlhY1FRPT0iXSwieDV0I1MyNTYiOiJsY1BDaTAxaVFfbkIyQWRZRzVKcEMxTlh3dEVncm9GczhVT2hma21GM2ZzIn0.eyJMb1RFIjp7Ikxpc3RBbmRTY2hlbWVJbmZvcm1hdGlvbiI6eyJMb1RFVmVyc2lvbklkZW50aWZpZXIiOjEsIkxvVEVTZXF1ZW5jZU51bWJlciI6MSwiTG9URVR5cGUiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL0xvVEVUeXBlL0VVV2FsbGV0UHJvdmlkZXJzTGlzdCIsIlNjaGVtZU9wZXJhdG9yTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJFbGVjdHJvbmljIFRyYW5zYWN0aW9ucyBEZXZlbG9wbWVudCBBZ2VuY3kgKEVUREEpIn1dLCJTY2hlbWVJbmZvcm1hdGlvblVSSSI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwczovL3d3dy5ldGRhLm9yLnRoIn1dLCJTdGF0dXNEZXRlcm1pbmF0aW9uQXBwcm9hY2giOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1dhbGxldFByb3ZpZGVyc0xpc3QvU3RhdHVzRGV0bi9FVSIsIlNjaGVtZVR5cGVDb21tdW5pdHlSdWxlcyI6W3sibGFuZyI6ImVuIiwidXJpVmFsdWUiOiJodHRwOi8vdXJpLmV0c2kub3JnLzE5NjAyL1dhbGxldFByb3ZpZGVyc0xpc3Qvc2NoZW1lcnVsZXMvRVUifV0sIlNjaGVtZVRlcnJpdG9yeSI6IlRIIiwiU2NoZW1lTmFtZSI6W3sibGFuZyI6ImVuIiwidmFsdWUiOiJXYWxsZXQgUHJvdmlkZXJzIExpc3QifV0sIkhpc3RvcmljYWxJbmZvcm1hdGlvblBlcmlvZCI6MzY1LCJEaXN0cmlidXRpb25Qb2ludHMiOltdLCJTY2hlbWVFeHRlbnNpb25zIjpbXSwiTGlzdElzc3VlRGF0ZVRpbWUiOiIyMDI2LTA5LTA3VDExOjM5OjA4LjM5NVoiLCJOZXh0VXBkYXRlIjoiMjAyNi0wOS0wOFQxMTozOTowOC4zOTVaIn0sIlRydXN0ZWRFbnRpdGllc0xpc3QiOltdfX0.Izh_JYqPikXvdYGKdYJY6I26VuWuLtWwCX1eKtvqxnVSMRsxxtV_K7Wx6lbp_1C7RemaFT52ZrAOZa5t1SmZ6g + +## การเพิกถอนและสถานะ + +ผู้ออกแต่ละรายเผยแพร่ Token Status List ของตนเอง (อ้าง revision ในบรรณานุกรม) ค่า status ที่ IETF กำหนดคือ `0x00 = VALID`, `0x01 = INVALID`, `0x02 = SUSPENDED`; `0x03 = rotated` เป็นส่วนขยาย Thai profile ไม่ใช่ความหมายที่ IETF ลงทะเบียน ค่า `bits` ใน Status List คือความกว้างของช่องต่อรายการ: ต้องมีอย่างน้อย `bits: 2` เมื่อใช้ `SUSPENDED` หรือ `rotated` + +ผู้ออกมีเป้าหมายเผยแพร่การเปลี่ยนแปลงภายใน 15 นาที โดยระยะเวลารวมของกระบวนการอาจนานกว่านั้น ผู้ตรวจต้องอ่านตำแหน่ง Status List จากข้อมูลที่ Thai profile กำหนดไว้ใน Trusted List และอ่านค่า status ที่ index ตามความกว้าง `bits` ทุกครั้งที่มีการนำเสนอ (TC-4) โดย JWT ตัวอย่างใน [research/42](../research/42-trusted-list-lote-jwt-format.md) ยังไม่แสดงฟิลด์ตำแหน่งดังกล่าว + +นอกจากระดับ VC รายใบแล้ว การเพิกถอนยังทำได้ที่ระดับที่สูงกว่า ถ้า สพธอ. ระงับหรือเพิกถอนผู้ออก VC ทุกใบของผู้ออกนั้นจะตรวจไม่ผ่านทันที โดยไม่ต้องเปลี่ยนค่า status รายใบ เพราะรายการบทบาทของผู้ออกไม่ได้ `active` อีกต่อไป ถ้าผู้ให้บริการกระเป๋าเพิกถอน wallet attestation ผู้ออกที่ผูก VC ไว้กับหน่วยกระเป๋านั้นต้องเพิกถอน VC เหล่านั้นตามไปด้วย และ VC ทุกใบจะหมดอายุที่ `validUntil` โดยไม่ต้องอาศัยกลไกใดข้างต้น + +การเพิกถอนฉุกเฉินจะไปถึงแต่ละเอนทิตีเมื่อดึงครั้งถัดไป โดยไม่มี message broker หรือการ polling เบื้องหลัง ตาม [§12.8](12-key-management-and-trustlist-deployment.md) + +--- + +**การนำทาง:** [⬆️ สารบัญ ARF](README.md) · [บทที่ 1 — ขอบข่าย ➡️](01-scope.md) diff --git a/docs/thai-vc-arf/01-scope.md b/docs/thai-vc-arf/01-scope.md new file mode 100644 index 0000000..ad45d47 --- /dev/null +++ b/docs/thai-vc-arf/01-scope.md @@ -0,0 +1,24 @@ +--- +description: "1. ขอบข่าย — Thai VC ARF 2.0 DRAFT 0" +--- + +# 1. ขอบข่าย + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + + +รายงานฉบับนี้อธิบายหลักการทำงาน วงจรชีวิต องค์ประกอบของระบบการใช้งานเอกสารรับรองดิจิทัล (verifiable credential: VC) และเอกสารสำแดงดิจิทัล (verifiable presentation: VP) โดยมีวัตถุประสงค์เพื่อเป็นแนวทางอ้างอิงในการดำเนินการ (reference implementation) และช่วยลดความซับซ้อนของการพัฒนาเชิงเทคนิค ที่อาจมีความแตกต่างกัน เพื่อให้ผู้ให้บริการระบบและผู้พัฒนาที่เกี่ยวข้องสามารถนำไปปรับใช้ในการให้บริการและการพัฒนาระบบให้มีความมั่นคงปลอดภัย มีการคุ้มครองข้อมูลส่วนบุคคลและสามารถทำงานร่วมกันได้ระหว่างระบบการใช้งานเอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัลในประเทศไทย + +รายงานฉบับนี้ไม่ครอบคลุมถึงขั้นตอนการพิสูจน์และยืนยันตัวตนของบุคคลธรรมดาและนิติบุคคล การสร้างตัวระบุแบบกระจายศูนย์ (Decentralized Identifiers: DID) สำหรับบุคคลธรรมดาและนิติบุคคล แต่ให้ความสำคัญในส่วนขั้นตอนการทำงานร่วมกัน (Interoperability) ของ ผู้ออกเอกสาร (issuer) ผู้ถือเอกสาร (holder) และผู้ตรวจสอบเอกสาร (verifier) ซึ่งทั้งสามเป็นส่วนประกอบสำคัญ (component) ในระบบนิเวศของเอกสารรับรองดิจิทัล (VC Ecosystem) + +{/* pdf page 7 */} + +--- + +**การนำทาง:** [⬆️ สารบัญ ARF](README.md) · [บทที่ 2 — บทนิยาม ➡️](02-definitions.md) diff --git a/docs/thai-vc-arf/02-definitions.md b/docs/thai-vc-arf/02-definitions.md new file mode 100644 index 0000000..27c8300 --- /dev/null +++ b/docs/thai-vc-arf/02-definitions.md @@ -0,0 +1,236 @@ +--- +description: "2. บทนิยาม — Thai VC ARF 2.0 DRAFT 0" +--- + +# 2. บทนิยาม + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Thai VC ARF v2.0 — คงนิยามเดิมจากเวอร์ชัน 1.1 และเพิ่มนิยามสำหรับ v2.0 +> **เวอร์ชัน:** 2.0-draft (MASA-124) +> **วันที่ปรับปรุง:** 4 สิงหาคม 2569 +> **แหล่งข้อมูลเดิม:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย เวอร์ชัน 1.1 มกราคม 2568 +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) · [อภิธานศัพท์กลาง](../../00-glossary.md) +*/} + +--- + +บทนี้รวบรวมบทนิยามของคำที่ใช้ตลอดรายงานฉบับนี้ เพื่อให้ผู้อ่านตีความคำในบทอื่นได้ตรงกัน + +ความหมายของคำที่ใช้ในรายงานฉบับนี้ มีดังต่อไปนี้ + +2.1 ผู้สมัคร (applicant) หมายถึง เอนทิตีที่ยื่นขอเอกสารรับรองจากผู้ออกเอกสาร (issuer) โดยผู้สมัครอาจจะเป็นเจ้าของข้อความ (subject) ในเอกสารรับรองหรือไม่ก็ได้ + +2.2 กระเป๋าเอกสารดิจิทัล (digital document wallet) หมายถึง โปรแกรมที่จัดเก็บและช่วยให้ผู้ถือเอกสารสามารถเข้าถึงและใช้งาน VC ได้อย่างมั่นคงปลอดภัย [2] + +2.3 ผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet provider) หมายถึง เอนทิตีที่ทำหน้าที่พัฒนาและ/หรือดำเนินการเกี่ยวกับกระเป๋าเอกสารดิจิทัล ให้แก่ผู้ออกเอกสาร ผู้ถือเอกสาร หรือผู้ตรวจสอบเอกสาร + +2.4 เจ้าของข้อความ (subject) หมายถึง เอนทิตีที่ถูกกล่าวอ้างถึงในข้อความยืนยัน (claim) [2] + +2.5 ข้อความยืนยัน (claim) หมายถึง ข้อความเกี่ยวกับเจ้าของข้อความ (subject) ที่จะถูกรับรองโดยผู้ออกเอกสาร (issuer) [2] + +2.6 เอกสารรับรองดิจิทัล (verifiable credential: VC) หมายถึง ชุดของข้อความยืนยันอย่างน้อยหนึ่งรายการที่ถูกรับรองโดยผู้ออกเอกสาร (issuer) ทั้งนี้ VC มีคุณสมบัติที่สามารถตรวจพบการเปลี่ยนแปลงใด ๆ ที่เกิดกับความถูกต้องครบถ้วนของข้อมูลและตรวจสอบลายมือชื่ออิเล็กทรอนิกส์ของผู้ออกเอกสารได้ด้วยกระบวนการเข้ารหัสลับ [2] + +ข้อสังเกต: ข้อความยืนยันใน VC อาจเกี่ยวกับเจ้าของข้อความ (subject) ที่มากกว่าหนึ่งราย เช่น ข้อความยืนยันในทะเบียนสมรส + +2.7 เอกสารสำแดงดิจิทัล (verifiable presentation: VP) หมายถึง VC อย่างน้อยหนึ่งชุด ที่ผู้ถือเอกสาร (holder) ใช้แสดงต่อผู้ตรวจสอบเอกสาร (verifier) ทั้งนี้ VP มีคุณสมบัติที่สามารถตรวจพบการเปลี่ยนแปลงใด ๆ ที่เกิดกับความถูกต้องครบถ้วนของข้อมูล และตรวจสอบลายมือชื่ออิเล็กทรอนิกส์ของผู้ถือเอกสารและตรวจสอบ VC ที่เกี่ยวข้องได้ด้วยกระบวนการเข้ารหัสลับ [2] + +2.8 เอนทิตี (entity) หมายถึง สิ่งที่มีอยู่จริง เช่น บุคคล องค์กร หรืออุปกรณ์ ซึ่งถูกกล่าวอ้างในการใช้งาน VC และ VP [2] + +2.9 ผู้ออกเอกสาร (issuer) หมายถึง เอนทิตีที่ทำหน้าที่รับรองข้อความยืนยันโดยออกเป็น VC ให้แก่ผู้ถือเอกสาร [2] + +2.10 ผู้ถือเอกสาร (holder) หมายถึง เอนทิตีที่เป็นเจ้าของ VC อย่างน้อยหนึ่งชุด โดยจัดเก็บไว้ในกระเป๋าเอกสารดิจิทัล (digital document wallet) และสามารถใช้ VC สร้างเป็น VP [2] ทั้งนี้ ผู้ถือเอกสารมีอีกชื่อเรียกหนึ่งว่า ผู้ใช้งานกระเป๋าเอกสารดิจิทัล + +2.11 ผู้ตรวจสอบเอกสาร (verifier) หมายถึง เอนทิตีที่สามารถตรวจสอบความถูกต้องครบถ้วนของ VC และ VP ด้วยกระบวนการเข้ารหัสลับ รวมถึงตรวจสอบสถานะการใช้งานและความสอดคล้องตามโครงสร้างข้อมูลของ VC และ VP [2] + +2.12 ระบบทะเบียนเอกสารรับรอง (verifiable data registry) หมายถึง ระบบที่ช่วยสนับสนุนการสร้างและการตรวจสอบความถูกต้องครบถ้วนของ VC และ VP โดยข้อมูลที่มีการจัดเก็บในระบบนี้ เช่น ตัวระบุ (identifier) และกุญแจสาธารณะ (public key) ของเอนทิตีที่เกี่ยวข้อง รวมถึงรายการเพิกถอน (revocation list) และเค้าร่าง (schema) ของ VC หรือ VP [2] + +2.13 ลายมือชื่อดิจิทัล (digital signature) หมายถึง ลายมือชื่ออิเล็กทรอนิกส์ ที่ได้จากกระบวนการเข้ารหัสลับข้อมูลอิเล็กทรอนิกส์ซึ่งช่วยให้สามารถยืนยันตัวเจ้าของลายมือชื่อและตรวจพบการเปลี่ยนแปลงของข้อความและลายมือชื่ออิเล็กทรอนิกส์ได้รวมถึงการทำให้เจ้าของลายมือชื่อไม่สามารถปฏิเสธความรับผิดจากข้อความที่ตนเองลงลายมือชื่อได้ [3] + +{/* pdf page 8 */} + +2.14 ตัวระบุ (identifier) หมายถึง Uniform Resource Identifier (URI) ที่ระบุถึงเอนทิตี เอกสารรับรอง หรือ ข้อมูลอื่น ๆ ที่เกี่ยวข้อง [4] + +2.15 ตัวระบุแบบกระจายศูนย์ (decentralized identifier: DID) หมายถึง ตัวระบุ (identifier) ที่มีความคงอยู่ถาวร (persistence) ที่มีเอกลักษณ์เฉพาะในระดับสากล ซึ่งไม่จำเป็นต้องอาศัยหน่วยงานกลางผู้รับผิดชอบในการลงทะเบียน และมักถูกสร้างขึ้นและ/หรือลงทะเบียนโดยใช้วิธีการเข้ารหัสลับ [4] + +2.16 DID subject หมายถึง เอนทิตีที่ถูกระบุโดย DID และถูกอธิบายไว้ใน DID Document [4] + +2.17 DID document หมายถึง ชุดข้อมูลที่ใช้ในการอธิบาย DID subject รวมไปถึงกลไกที่เกี่ยวข้องกับ DID subject นั้น เช่น กุญแจสาธารณะที่ DID subject สามารถใช้ในการยืนยันตัวตนหรือพิสูจน์ความเกี่ยวข้องกับ DID นั้น [4] + +2.18 DID method (Decentralized Identifiers Methodologies) หมายถึง กลไกเฉพาะสำหรับแต่ละ DID ที่ใช้ในการสร้าง ดึงข้อมูล (resolve) อัปเดต และระงับการใช้งาน DID รวมไปถึง DID document ที่เกี่ยวข้องกับ DID นั้น [4] + +2.19 DID resolver หมายถึง ส่วนประกอบที่เป็นซอฟต์แวร์หรือฮาร์ดแวร์ที่ใช้ในกระบวนการ DID resolution ซึ่งทำงานโดยใช้ DID เป็นอินพุต และได้เอาต์พุตเป็น DID document [4] + +2.20 Universal Resolver หมายถึง เครื่องมือหรือบริการที่ใช้สนับสนุนการทำงานร่วมกันระหว่างหลาย DID method ในกระบวนการ DID resolution และการดึงข้อมูล (resolve) DID Document + +2.21 เค้าร่าง (schema) หมายถึง ข้อมูลที่กำหนดโครงสร้าง (structure) และรูปแบบ (format) ของ VC และ/หรือ VP โดยสามารถแบ่งออกเป็น 2 ประเภท ได้แก่ (1) เค้าร่างสำหรับการตรวจสอบข้อมูล (data verification schema) สำหรับตรวจสอบโครงสร้างและเนื้อหาของ VC และ (2) เค้าร่างสำหรับการเข้ารหัสข้อมูล (data encoding schema) สำหรับการแปลงเนื้อของ VC จากรูปแบบ (format) หนึ่งไปยังอีกรูปแบบหนึ่ง [5] + +2.22 การทำงานร่วมกัน (interoperability) หมายถึง ความสามารถ (ทางเทคนิค) ในการแลกเปลี่ยนและใช้ข้อมูลระหว่างระบบ/ส่วนประกอบตั้งแต่สองระบบขึ้นไป ซึ่งทำงานร่วมกันได้โดยผู้ดำเนินการไม่จำเป็นต้องแทรกแซงการดำเนินการในแต่ละครั้ง [IEEE+ eHealth Governance Initiative] + +{/* pdf page 9 */} + +## นิยามเพิ่มเติมสำหรับเวอร์ชัน 2.0 + +นิยามในข้อ 2.1 ถึงข้อ 2.22 คงข้อความและความหมายตาม Thai VC ARF เวอร์ชัน 1.1 ไว้ทุกประการ นิยามต่อไปนี้เป็นส่วนเพิ่มเติมสำหรับเวอร์ชัน 2.0 และต้องตีความร่วมกับอภิธานศัพท์กลาง ทั้งนี้ ในกรณีที่คำในส่วนนี้ต่างจากคำในเอกสารเวอร์ชันก่อน ให้ใช้คำในส่วนนี้เฉพาะเนื้อหาที่เพิ่มในเวอร์ชัน 2.0 + +2.23 หน่วยกระเป๋าเอกสาร (wallet unit) หมายถึง การติดตั้งหรือการทำงานหนึ่งชุดของกระเป๋าเอกสารดิจิทัล ซึ่งอยู่ภายใต้การควบคุมของผู้ใช้งานหนึ่งรายบนอุปกรณ์หรือสภาพแวดล้อมเฉพาะ [D1] + +2.24 หลักฐานรับรองหน่วยกระเป๋าเอกสาร (wallet unit attestation: WUA) หมายถึง หลักฐานอิเล็กทรอนิกส์ที่ผู้ให้บริการกระเป๋าเอกสารดิจิทัลออกให้แก่ wallet unit เพื่อรับรองคุณลักษณะของ wallet unit และผูกกุญแจสาธารณะของ wallet unit กับหลักฐานดังกล่าว ผู้ตรวจสอบต้องตรวจลายมือชื่อ ระยะเวลามีผล และสถานะของ WUA ตามข้อกำหนดที่เกี่ยวข้อง [D1] + +_ข้อสังเกต:_ เนื้อหาใหม่ของรายงานฉบับนี้ต้องใช้คำว่า WUA แทน Wallet Trust Evidence (WTE) เมื่อกล่าวถึงหลักฐานของ wallet unit ตาม EUDI ARF ทั้งนี้ การปรับคำดังกล่าวไม่เปลี่ยนความหมายของนิยามเดิมในข้อ 2.1 ถึงข้อ 2.22 + +_ข้อสังเกต:_ WUA เป็นคำรวม (umbrella term) ประกอบด้วยหลักฐานสองประเภท ได้แก่ Wallet Instance Attestation (WIA) ซึ่งรับรองความเป็นของแท้ของ wallet instance และ Key Attestation (KA) ซึ่งรับรองการจัดเก็บกุญแจใน WSCD รายละเอียดการใช้งาน การเพิกถอน และสถานะของ WIA และ KA อยู่ใน [บทที่ 10 — Wallet Unit Attestation](10-wallet-unit-attestation.md) [D1] + +2.25 รายการที่เชื่อถือได้ (trusted list) หมายถึง ชุดข้อมูลที่หน่วยงานกำกับดูแลเผยแพร่เพื่อระบุเอนทิตี บทบาท สถานะ ขอบเขตสิทธิ์ และข้อมูลอ้างอิงกุญแจหรือ certificate ที่ใช้ประกอบการตัดสินความน่าเชื่อถือ ระบบที่ใช้รายการดังกล่าวต้องตรวจสอบความถูกต้องของลายมือชื่อ แหล่งที่มา เวอร์ชัน และความสดใหม่ของรายการก่อนนำไปใช้ [D2] + +2.26 แบบจำลองความน่าเชื่อถือที่ 3 (Trust Model 3) หมายถึง แบบจำลองที่เอนทิตีจัดการคู่กุญแจของตนเอง และใช้ DID หรือข้อมูลอ้างอิงกุญแจร่วมกับ trusted list เพื่อยืนยันบทบาท สถานะ และขอบเขตสิทธิ์ โดยไม่กำหนดให้ certificate chain ที่ออกโดย CA เป็นกลไกหลักสำหรับความน่าเชื่อถือของเอนทิตี [D2] + +2.27 ชุดวิธีการเข้ารหัสลับ (cryptographic suite) หมายถึง ชุดข้อกำหนดที่ระบุอัลกอริทึม การแทนข้อมูลกุญแจ การสร้าง proof หรือ digital signature และกระบวนการตรวจสอบที่ต้องใช้ร่วมกันเพื่อคุ้มครอง authenticity และ integrity ของข้อมูล [D3] + +2.28 การบริหารจัดการกุญแจ (key management) หมายถึง กระบวนการควบคุมวงจรชีวิตของกุญแจเข้ารหัสลับ ตั้งแต่การสร้าง การจัดเก็บ การใช้งาน การสำรอง การกู้คืน การหมุนเปลี่ยน การระงับ และการทำลายกุญแจ ผู้ดำเนินการต้องกำหนดผู้รับผิดชอบและหลักฐานตรวจสอบย้อนหลังสำหรับแต่ละขั้นตอน + +2.29 การหมุนเปลี่ยนกุญแจ (key rotation) หมายถึง การเปลี่ยนกุญแจเข้ารหัสลับเดิมเป็นกุญแจใหม่ตามกำหนดเวลา เมื่อความเสี่ยงเปลี่ยนแปลง หรือเมื่อสงสัยว่ากุญแจรั่วไหล ระบบต้องรักษาความต่อเนื่องของการตรวจสอบข้อมูลที่ลงลายมือชื่อไว้ก่อนการเปลี่ยนกุญแจตามนโยบายที่กำหนด + +2.30 สถานะเอกสารรับรอง (credential status) หมายถึง ข้อมูลที่ทำให้ผู้ตรวจสอบเอกสารสามารถพิจารณาได้ว่า VC ยังใช้งานได้ ถูกระงับ หรือถูกเพิกถอน โดยไม่เปลี่ยนเนื้อหาของ VC ที่ออกแล้ว [D4] + +2.31 การเพิกถอนเอกสารรับรอง (VC revocation) หมายถึง การเปลี่ยนสถานะของ VC ให้ไม่สามารถใช้เป็นหลักฐานที่เชื่อถือได้ก่อนสิ้นสุดระยะเวลามีผล ผู้ออกเอกสารต้องเผยแพร่สถานะตามวิธีและระยะเวลาที่นโยบายกำหนด + +2.32 การเปิดเผยแบบเลือกได้ (selective disclosure) หมายถึง ความสามารถของผู้ถือเอกสารในการเลือกเปิดเผยเฉพาะข้อมูลที่จำเป็นจาก VC ต่อผู้ตรวจสอบเอกสาร [D5] + +2.33 การผูกผู้ถือเอกสาร (holder binding) หมายถึง กลไกที่ทำให้ผู้ตรวจสอบเอกสารสามารถตรวจสอบได้ว่าผู้แสดง VC หรือ VP เป็นผู้ควบคุมกุญแจหรือปัจจัยที่ผูกไว้กับเอกสารนั้น + +2.34 ข้อมูลอ้างอิงกุญแจ (key reference) หมายถึง ตัวระบุหรือข้อมูลที่ใช้ค้นหา verification method หรือกุญแจสาธารณะสำหรับตรวจสอบ digital signature หรือ proof โดยไม่เปิดเผยกุญแจส่วนตัว + +2.35 รายการสถานะ (status list) หมายถึง ข้อมูลที่เผยแพร่เพื่อแสดงสถานะของ credential หรือหลักฐานรับรองหลายรายการในโครงสร้างเดียว โดยต้องมีกลไกคุ้มครอง integrity และต้องกำหนดนโยบายความสดใหม่ของข้อมูล [D4] + +2.36 อุปกรณ์เข้ารหัสลับของกระเป๋าเอกสาร (wallet secure cryptographic device: WSCD) หมายถึง ส่วนประกอบฮาร์ดแวร์หรือซอฟต์แวร์ที่ทำหน้าที่จัดเก็บและใช้งานกุญแจเข้ารหัสลับของ wallet unit อย่างมั่นคงปลอดภัย ได้แก่ Secure Enclave StrongBox TEE และ HSM ที่ผ่านการรับรองตาม profile ที่ สพธอ. กำหนด [D1] + +2.37 แอปพลิเคชันเข้ารหัสลับของกระเป๋าเอกสาร (wallet secure cryptographic application: WSCA) หมายถึง ส่วนประกอบซอฟต์แวร์ที่ทำหน้าที่เป็นตัวกลางระหว่าง wallet unit กับ WSCD เพื่อเรียกใช้กระบวนการเข้ารหัสลับตามที่ profile กำหนด [D1] + +2.38 ทะเบียนสถานะเอกสารรับรอง (VC status registry) หมายถึง บริการที่ผู้ออกเอกสารเป็นผู้ดำเนินการเอง หรือมอบหมายให้ผู้ดำเนินการภายนอกเป็นผู้ดูแล เพื่อรับการปรับปรุงสถานะจากผู้ออกเอกสารและเผยแพร่ status list ในรูปแบบ `statuslist+jwt` พร้อมบันทึกตรวจสอบย้อนหลัง ผู้ออกเอกสารรับผิดชอบบริการนี้ โดย Thai profile ต้องกำหนดวิธีระบุตำแหน่ง Status List และกุญแจของผู้ออกเอกสารใน Trusted List ก่อนใช้ตรวจสถานะ เนื่องจาก JWT ตัวอย่างยังไม่แสดงฟิลด์ดังกล่าว [D6] [research/42](../research/42-trusted-list-lote-jwt-format.md) + +2.39 รายการที่เชื่อถือได้ (list of trusted entities: LoTE) หมายถึง คำเรียกตามมาตรฐาน ETSI TS 119 602 ซึ่งเทียบเท่ากับ trusted list ในข้อ 2.25 โดยใช้ในบริบทการทำงานร่วมกับสหภาพยุโรป [D7] + +2.40 รายการรวมรายการที่เชื่อถือ (list of trusted lists: LoTL) หมายถึง รายการที่รวบรวม trusted list ของหลายเขตอำนาจศาล เพื่อให้ผู้ตรวจสอบสามารถค้นหา trusted list ที่เกี่ยวข้องกับเอนทิตีที่อยู่ภายใต้เขตอำนาจศาลนั้นได้ [D7] + +2.41 การรับรองคุณลักษณะทางอิเล็กทรอนิกส์ของหน่วยงานภาครัฐ (public body electronic attestation of attributes: PuB-EAA) หมายถึง การรับรองคุณลักษณะทางอิเล็กทรอนิกส์ที่ออกโดยหน่วยงานของรัฐ เช่น สปสช. หรือกรมที่ดิน ภายใต้กรอบงานของ EUDI ARF [D1] + +2.42 ค่าเชื่อมโยงตัวระบุ (confirmation claim: `cnf`) หมายถึง ข้อมูลอ้างอิงใน payload ของ VC ที่ระบุกุญแจสาธารณะของผู้ถือเอกสาร เพื่อให้ผู้ตรวจสอบสามารถพิสูจน์ว่าผู้ถือควบคุมกุญแจส่วนตัวที่จับคู่กับ VC นั้นได้ [D8] + +## การใช้คำบอกระดับข้อบังคับ + +คำว่า “ต้อง” ให้มีความหมายเทียบเท่า MUST คำว่า “ควร” ให้มีความหมายเทียบเท่า SHOULD และคำว่า “อาจ” ให้มีความหมายเทียบเท่า MAY การใช้คำดังกล่าวในรายงานฉบับนี้กำหนดระดับข้อบังคับของข้อความในบทเพิ่มเติม ส่วนข้อ 2.1 ถึงข้อ 2.22 คงนิยามเดิม + +{/* METADATA (agent-only — not rendered to readers) +## สถานะของข้อความ + +- **ข้อเท็จจริง:** ข้อ 2.1 ถึงข้อ 2.22 คัดจาก Thai VC ARF เวอร์ชัน 1.1 ส่วนข้อ 2.23 ถึงข้อ 2.42 อ้างอิงมาตรฐานและเอกสารโครงการตามรายการอ้างอิง +- **ข้อวิเคราะห์:** การเพิ่มนิยามใหม่แยกจากนิยามเดิมช่วยให้ตรวจสอบได้ว่าความหมายเดิมไม่ถูกแก้ไข และลดความกำกวมระหว่าง WTE กับ WUA รวมถึงความชัดเจนระหว่าง trusted list กับ LoTL/LoTE และระหว่าง status list กับ VC status registry +- **สมมติฐาน:** Trust Model 3 ในเวอร์ชัน 2.0 ใช้ DID หรือ key reference ร่วมกับ trusted list เป็นกลไกหลัก ทั้งนี้ รายละเอียดเชิงบังคับของข้อมูลและกระบวนการต้องเป็นไปตามบทที่ 11 และ profile ที่ สพธอ. ประกาศใช้ + +## แหล่งอ้างอิงสำหรับนิยามเพิ่มเติม + +รายการอ้างอิงในบทนี้ใช้ตัวนำหน้า `D` (Definitions) ได้แก่ [D1] ถึง [D8] เพื่อไม่ให้ปนกับหมายเลขอ้างอิงในบรรณานุกรมกลาง (บทที่ 16) ส่วนเลข [2] ถึง [5] ในข้อ 2.1 ถึงข้อ 2.22 ยังอ้างถึงบรรณานุกรมกลางตามเดิม + +[D1] European Commission, “European Digital Identity Wallet Architecture and Reference Framework,” เวอร์ชัน 2.9.0, หัวข้อ Wallet Unit Attestation, https://eudi.dev/2.9.0/main/ และ https://eudi.dev/2.9.0/discussion-topics/c-wallet-unit-attestation/ (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +[D2] Thailand Document Wallet Working Group, “Trust Architecture — 3 Trust Models” และ “3 Trust Architecture Models — Fact-Based Analysis,” ฉบับใน repository ณ 4 สิงหาคม 2569, [research/32](../research/32-trustlist-3models.md) และ [research/33](../research/33-trust-architecture-models-factbase-analysis.md) (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +[D3] World Wide Web Consortium (W3C), “Verifiable Credential Data Integrity 1.0,” W3C Recommendation, 15 พฤษภาคม 2568, https://www.w3.org/TR/vc-data-integrity/ (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +[D4] Internet Engineering Task Force (IETF), “Token Status List (TSL),” draft-ietf-oauth-status-list-21, 21 มิถุนายน 2569 (Internet-Draft; RFC Editor status: Awaiting First editor ณ 1 ตุลาคม 2569), https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ (เข้าถึงเมื่อ 1 ตุลาคม 2569); สถาปัตยกรรมโครงการอ้าง revision `-18` เป็น baseline + +[D5] World Wide Web Consortium (W3C), “Verifiable Credentials Data Model v2.0,” W3C Recommendation, 15 พฤษภาคม 2568, https://www.w3.org/TR/vc-data-model-2.0/ (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +[D6] สำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) และคณะทำงาน, “VC Status Registry — แนวทางการให้บริการ status list สำหรับผู้ออกเอกสาร,” เอกสารในโครงการ ณ 4 สิงหาคม 2569, [th/usecase/09-vc-status-registry.md](../usecase/09-vc-status-registry.md) (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +[D7] European Telecommunications Standards Institute (ETSI), “ETSI TS 119 602 — Electronic Signatures and Infrastructures (ESI); Lists of Trusted Entities (LoTEs),” https://www.etsi.org/deliver/etsi_ts/119600_119699/119602/ (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +[D8] European Commission, “Commission Implementing Regulation (EU) 2024/2979 — implementing Directive 1999/93/EC as regards the validation of qualified electronic signatures and qualified electronic seals (Holder Binding / cnf claim reference),” 28 พฤศจิกายน 2567, https://eur-lex.europa.eu/eli/reg_impl/2024/2979/oj (เข้าถึงเมื่อ 4 สิงหาคม 2569) + +## แผนภาพความสัมพันธ์ระหว่างนิยามใหม่ (Traceability) + +แผนภาพต่อไปนี้แสดงความสัมพันธ์ระหว่างนิยามใหม่ในเวอร์ชัน 2.0 เพื่อให้ตรวจสอบได้ว่าแต่ละนิยามถูกใช้ในบริบทใดในเอกสารฉบับนี้และฉบับอื่น ๆ ของโครงการ โดยแบ่งเป็น 5 กลุ่มตามหัวข้อ + +**กลุ่มที่ 1 หน่วยกระเป๋าเอกสารและหลักฐานรับรอง (WUA)** + +```mermaid +flowchart LR + WU["2.23 wallet unit"] -.-> WUA["2.24 WUA
Wallet Unit Attestation"] + WUA -.-> WSCD["2.36 WSCD"] + WUA -.-> WSCA["2.37 WSCA"] + WUA -.-> KBJ["2.33 holder binding
(cnf claim)"] +``` + +**กลุ่มที่ 2 Trusted list และ Trust Model 3** + +```mermaid +flowchart LR + LoTE["2.39 LoTE"] -.-> TL["2.25 trusted list"] + LoTL["2.40 LoTL"] -.-> TL + TL -.-> M3["2.26 Trust Model 3"] + M3 -.-> DID["DID 2.15 + key ref 2.34"] + DID -.-> M3 +``` + +**กลุ่มที่ 3 ชุดวิธีการเข้ารหัสลับและวงจรชีวิตกุญแจ** + +```mermaid +flowchart LR + CS["2.27 cryptographic suite"] -.-> SIG["2.13 digital signature"] + CS -.-> KM["2.28 key management"] + KM -.-> KR["2.29 key rotation"] + KR -.-> CS +``` + +**กลุ่มที่ 4 สถานะและการเพิกถอน VC** + +```mermaid +flowchart LR + CR["2.31 VC revocation"] -.-> CSTAT["2.30 credential status"] + CSTAT -.-> SL["2.35 status list"] + SL -.-> VCSR["2.38 VC status registry"] + VCSR -. "อ้างอิงใน trusted list" .-> TL["2.25 trusted list"] +``` + +**กลุ่มที่ 5 การเปิดเผยแบบเลือกได้และการออกเอกสารโดยหน่วยงานรัฐ** + +```mermaid +flowchart LR + SD["2.32 selective disclosure"] -.-> VP["2.7 VP"] + SD -.-> VC["2.6 VC"] + PuB["2.41 PuB-EAA"] -. "ออกโดยหน่วยงานรัฐ" .-> VC +``` + +## ตารางตรวจสอบย้อนกลับ (Traceability Matrix) + +ตารางนี้ระบุการใช้นิยามใหม่ในเอกสารอื่น ๆ ของโครงการ เพื่อให้ผู้อ่านตามรอยคำนิยามไปยังการใช้งานจริงในบทอื่นได้ + +| นิยาม | ใช้ในเอกสาร (TH) | ใช้ในเอกสาร (EN) | อ้างอิงมาตรฐาน | +|-------|------------------|-------------------|----------------| +| 2.23 wallet unit | §5 (Wallet Roles), §7 (Trusted List), §8 (Impl. Guidelines) | §5, §7, §8 | EUDI ARF 2.9.0 [D1] | +| 2.24 WUA | §5, §7, §9, §10 (Wallet Unit Attestation topic) | §5, §7, §9, §10 | EUDI ARF 2.9.0 [D1] | +| 2.25 trusted list | §7, §9 (Trust Model 3) | §7, §9 | ETSI TS 119 602 [D7], research/32, research/33 | +| 2.26 Trust Model 3 | §7, §9 | §7, §9 | research/32, research/33 [D2] | +| 2.27 cryptographic suite | §7, §9, §11 (S8 Security) | §7, §9, §11 | W3C VC Data Integrity 1.0 [D3] | +| 2.28 key management | §9, §12 | §9, §12 | research/31, FIPS 140-2 Level 3 (ยอมรับ FIPS 140-3 เป็นมาตรฐานสืบทอด) | +| 2.29 key rotation | §9, §12 | §9, §12 | CIR (EU) 2024/2979 [D8] | +| 2.30 credential status | §13 | §13 | IETF Token Status List [D4] | +| 2.31 VC revocation | §13 | §13 | IETF Token Status List [D4] | +| 2.32 selective disclosure | §5, §7 | §5, §7 | W3C VC DM 2.0 [D5] | +| 2.33 holder binding | §5, §7, §9 | §5, §7, §9 | CIR (EU) 2024/2979 [D8] | +| 2.34 key reference | §7, §9 | §7, §9 | W3C DID Core 1.0 | +| 2.35 status list | §13 | §13 | IETF Token Status List [D4] | +| 2.36 WSCD | §5, §7, §9, §10 | §5, §7, §9, §10 | EUDI ARF 2.9.0 [D1] | +| 2.37 WSCA | §5, §7, §9, §10 | §5, §7, §9, §10 | EUDI ARF 2.9.0 [D1] | +| 2.38 VC status registry | §13, usecase/09 | §13, usecase/09 (EN mirror) | usecase/09 [D6] | +| 2.39 LoTE | §7, §9 | §7, §9 | ETSI TS 119 602 [D7] | +| 2.40 LoTL | §7, §9 | §7, §9 | ETSI TS 119 602 [D7], CID 2025/2164 | +| 2.41 PuB-EAA | §5, §7 | §5, §7 | EUDI ARF 2.9.0 [D1] | +| 2.42 `cnf` | §5, §7, §9 | §5, §7, §9 | CIR (EU) 2024/2979 [D8] | + +> **หมายเหตุ:** หมายเลข § ในคอลัมน์ “ใช้ในเอกสาร” อ้างอิงบทในรายงานฉบับนี้ ได้แก่ §7 การทำงานร่วมกันข้ามระบบนิเวศและ Trusted List §9 Trust Model 3 §10 Wallet Unit Attestation (WUA) §11 ชุดวิธีการเข้ารหัสลับ (cryptographic suites) §12 การบริหารจัดการกุญแจและการติดตั้ง Trusted List §13 สถานะและการเพิกถอน VC และ §14 แบบจำลองภัยคุกคามและการทดสอบความสอดคล้อง + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 1 — ขอบข่าย](01-scope.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 3 — ภาพรวมการใช้งาน ➡️](03-usage-overview.md) diff --git a/docs/thai-vc-arf/03-usage-overview.md b/docs/thai-vc-arf/03-usage-overview.md new file mode 100644 index 0000000..33fef5d --- /dev/null +++ b/docs/thai-vc-arf/03-usage-overview.md @@ -0,0 +1,117 @@ +--- +description: "3. ภาพรวมการใช้งาน — Thai VC ARF 2.0 DRAFT 0" +--- + +# 3. ภาพรวมการใช้งาน + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + + +ในปัจจุบันเอกสารในรูปแบบของข้อมูลอิเล็กทรอนิกส์เริ่มมีการใช้งานแพร่หลายมากยิ่งขึ้น แต่การใช้งานยังคงถูกจำกัดอยู่ในแค่บางกรณี เนื่องจากการออกหนังสือหรือเอกสารบางส่วนยังคงอยู่ในรูปแบบกระดาษ ส่วนเอกสารอิเล็กทรอนิกส์ที่มีใช้งานอยู่นั้นก็มีรูปแบบและมาตรฐานที่หลากหลาย เอกสารที่ออกโดยหน่วยงานหนึ่งอาจต้องใช้วิธีการในการจัดเก็บและวิธีการในการตรวจสอบที่แตกต่างกันไปตามเทคโนโลยีที่ใช้งาน + +การใช้งานเอกสารอิเล็กทรอนิกส์ในระยะหลัง เริ่มมีแนวคิดของการนำเอกสารรับรองดิจิทัล (verifiable credential: VC) และเอกสารสำแดงดิจิทัล (verifiable presentation: VP) มาใช้งาน โดยเอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัลนั้น มีคุณสมบัติที่ช่วยให้สามารถตรวจสอบความถูกต้องของเอกสารได้ว่าเอกสารดังกล่าวออกโดยหน่วยงานนั้นจริง และบุคคลที่ยื่นเอกสารเป็นเจ้าของเอกสารนั้นจริง นอกจากนั้น ยังช่วยเพิ่มความเป็นส่วนตัวให้กับผู้ใช้งาน เนื่องจากในบางกรณี ผู้ใช้งานสามารถเลือกแสดงข้อมูลในเอกสารบางส่วนได้ + +อย่างไรก็ตาม การนำ VC และ VP มาใช้งานนั้น ระบบที่ให้บริการแต่ละระบบจำเป็นต้องมีความสามารถในการทำงานร่วมกัน (interoperability) เพื่อให้สามารถเชื่อมต่อกันได้และสามารถตรวจสอบข้อมูลข้ามระบบได้อย่างมีประสิทธิภาพ เนื่องจากเอกสารบางประเภทอาจมีความเกี่ยวข้องกับหลายหน่วยงานไม่ว่าจะเป็นองค์กรภาครัฐ บริษัทเอกชน สถาบันการศึกษา หรือบริการออนไลน์ต่าง ๆ + +การใช้งานเอกสารรับรองดิจิทัลในภาพรวม ตั้งแต่การออกเอกสารจนถึงการตรวจสอบ แสดงได้ดังรูปที่ 1 + +![ภาพรวมการใช้งานของเอกสารรับรองดิจิทัล](images/p9-0.png) + +**รูปที่ 1 ภาพรวมการใช้งานของเอกสารรับรองดิจิทัล** + +{/* pdf page 10 */} + +## 3.1. บทบาทและความสัมพันธ์ของผู้เกี่ยวข้อง + +(1) ผู้สมัคร (applicant) และ ผู้ถือเอกสาร (holder) + +(2) ผู้ออกเอกสาร (issuer) + +(3) ผู้ตรวจสอบเอกสาร (verifier) + +(4) ผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet provider) + +(5) ระบบทะเบียนเอกสารรับรอง (verifiable data registry) + +การใช้งานกระเป๋าเอกสารดิจิทัลสำหรับเอกสารรับรองดิจิทัล ประกอบด้วยเอนทิตีและระบบที่เกี่ยวข้อง ได้แก่ ผู้สมัคร (applicant) ผู้ถือเอกสาร (holder) ผู้ออกเอกสาร (issuer) ผู้ตรวจสอบเอกสาร (verifier) ผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet provider) รวมไปถึงระบบทะเบียนเอกสารรับรอง (verifiable data registry) โดยบทบาทและความสัมพันธ์ของเอนทิตีที่เกี่ยวข้องเป็นไปตามรูปที่ 2 + +![บทบาทของผู้ที่เกี่ยวข้องกับการใช้งานเอกสารรับรองดิจิทัล](images/p10-0.png) + +**รูปที่ 2 บทบาทของผู้ที่เกี่ยวข้องกับการใช้งานเอกสารรับรองดิจิทัล** + +(1) ผู้สมัคร (applicant) ยื่นขอเอกสารรับรองดิจิทัลจากผู้ออกเอกสาร (issuer) พร้อมทั้งกำหนดให้จัดส่ง VC มายังกระเป๋าเอกสารดิจิทัลของผู้ถือเอกสาร (holder) ทั้งนี้ ผู้ออกเอกสารอาจกำหนดให้ผู้สมัครกรอกข้อมูลที่เกี่ยวข้องหรือแนบเอกสารเพิ่มเติม เพื่อให้ผู้ออกเอกสารตรวจสอบความถูกต้องก่อนออกเอกสารรับรองดิจิทัล + +(2) ผู้ถือเอกสาร (holder) ใช้งานและควบคุมการทำงานกระเป๋าเอกสารดิจิทัลที่ให้บริการโดยผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet provider) โดยกระเป๋าเอกสารดิจิทัลนั้นอาจอยู่ในรูปแบบแอปพลิเคชันบนอุปกรณ์เคลื่อนที่หรือเว็บไซต์ + +ข้อสังเกต: ผู้สมัคร ผู้ถือเอกสาร และเจ้าของข้อความ (subject) อาจเป็นบุคคลเดียวกันหรือไม่ก็ได้ ตัวอย่างเช่น บิดาเป็นผู้สมัครยื่นขอเอกสารรับรองดิจิทัลซึ่งมีบุตรเป็นเจ้าของข้อความ จากนั้นจัดเก็บ VC เอกสารรับรอง ในกระเป๋าเอกสารดิจิทัลของมารดาซึ่งมีบทบาทเป็นผู้ถือเอกสาร + +{/* pdf page 11 */} + +(3) ผู้ถือเอกสารสามารถสร้าง VP โดยใช้ข้อมูลจาก VC จากนั้นแสดง VP ต่อผู้ตรวจสอบเอกสาร (verifier) ซึ่งผู้ตรวจสอบเอกสารสามารถตรวจสอบความถูกต้องครบถ้วนของ VP ดังกล่าวได้ โดยอาศัยข้อมูลในระบบทะเบียนเอกสารรับรอง (verifiable data registry) + +(4) ระบบทะเบียนเอกสารรับรอง (verifiable data registry) เป็นตัวกลางในการสนับสนุนการสร้างและตรวจสอบเอกสารรับรอง โดยทำหน้าที่ลงทะเบียนตัวระบุ (identifier) รวมไปถึงกุญแจสาธารณะ (public key) ของแต่ละเอนทิตี และเค้าร่าง (schema) ของ VC และ VP + +ทั้งนี้ ผู้ออกเอกสารและผู้ตรวจสอบเอกสารอาจเป็นบุคคลซึ่งใช้งานกระเป๋าเอกสารดิจิทัลเช่นเดียวกันกับผู้ถือเอกสาร หรืออาจเป็นระบบขององค์กรที่ทำหน้าที่ออก VC เอกสารรับรองดิจิทัลหรือตรวจสอบ VP ในกรณีนี้ ระบบขององค์กรจะถือเป็นกระเป๋าเอกสารดิจิทัลขององค์กร (enterprise digital wallet) ซึ่งทำหน้าที่บริหารจัดการเอกสารรับรองดิจิทัลสำหรับองค์กรนั้น + +## 3.2. เอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัล + +เอกสารรับรองดิจิทัล (verifiable credential: VC) อาจเป็นเอกสารที่ออกโดยหน่วยงานของรัฐหรือเอกสารอิเล็กทรอนิกส์ใด ๆ ที่ออกให้เพื่อรับรองข้อความที่เกี่ยวข้องกับเจ้าของข้อความ (subject) ซึ่งเอกสารรับรองดิจิทัลนี้จะมีคุณสมบัติที่สามารถตรวจสอบได้ว่าเอกสารนั้นไม่ถูกเปลี่ยนแปลง และสามารถยืนยันตัวบุคคลผู้ออกเอกสารได้ ทั้งนี้ เมื่อพิจารณาตาม Verifiable Credentials Data Model ของ W3C จะสามารถสรุปองค์ประกอบของ VC ได้ ดังนี้ + +(1) คำอธิบายข้อมูล (metadata) ของ VC ซึ่งอาจรวมถึงตัวระบุ (identifier) ของเอนทิตีที่เกี่ยวข้อง ข้อมูลของผู้ออกเอกสาร หรือวันหมดอายุของเอกสารรับรอง + +(2) ข้อความยืนยัน (claim) ซึ่งอาจมีเพียงข้อความยืนยันเดียวหรือหลายข้อความ โดยเป็นข้อมูลที่ยืนยันเกี่ยวกับเจ้าของข้อความ ซึ่งอาจเป็นบุคคลธรรมดา นิติบุคคล สิ่งของ หรือซอฟต์แวร์ + +(3) ข้อพิสูจน์ (proof) ของ VC ซึ่งอาจมีข้อพิสูจน์เดียวหรือหลายข้อพิสูจน์ โดยเป็นข้อมูลที่เป็นลายมือชื่อดิจิทัลของผู้ออกเอกสาร + +เอกสารสำแดงดิจิทัล (verifiable presentation: VP) คือ ชุดข้อมูลที่ผู้ถือเอกสารสร้างขึ้นจาก VC โดย VP นั้นจะมีคุณสมบัติที่สามารถตรวจสอบได้ว่าเอกสารนั้นไม่ถูกเปลี่ยนแปลง (integrity) และสามารถยืนยันตัวผู้ถือเอกสารได้ (authenticity) ทั้งนี้ เมื่อพิจารณาตาม Verifiable Credentials Data Model ของ W3C จะสามารถสรุปองค์ประกอบของ VP ได้ ดังนี้ + +(1) คำอธิบายข้อมูล (metadata) ของ VP + +(2) เอกสารรับรอง (verifiable credential: VC) ซึ่งอาจมี VC เดียวหรือหลาย VC ก็ได้ ทั้งนี้ VP อาจไม่ใช้ข้อมูลจาก VC โดยตรง แต่อาจใช้ข้อมูลซึ่งสร้าง (derived) มาจาก VC อีกที + +(3) ข้อพิสูจน์ (proof) ของ VP ซึ่งอาจมีข้อพิสูจน์เดียวหรือหลายข้อพิสูจน์ก็ได้ โดยเป็นข้อมูลที่เป็นลายมือชื่อดิจิทัลของผู้ถือเอกสาร + +{/* pdf page 12 */} + +องค์ประกอบพื้นฐานของ VC และ VP สรุปได้ตามรูปที่ 3 + +![องค์ประกอบพื้นฐานของเอกสารรับรองและเอกสารสำแดง](images/p12-0.png) + +**รูปที่ 3 องค์ประกอบพื้นฐานของเอกสารรับรองและเอกสารสำแดง** + +## 3.3. ระบบทะเบียนเอกสารรับรอง (verifiable data registry) + +ในการใช้งานเอกสารรับรองดิจิทัล เอนทิตีที่เกี่ยวข้องจะใช้งานกระเป๋าเอกสารดิจิทัลร่วมกับระบบทะเบียนเอกสารรับรอง โดยระบบทะเบียนเอกสารรับรองจะถูกนำมาใช้สนับสนุนการทำงานและจัดเก็บข้อมูลต่าง ๆ เช่น + +- ทะเบียนตัวระบุ (identifier) หรือตัวระบุแบบกระจายศูนย์ (decentralized identifier: DID) รวมไปถึง DID Document ของผู้ที่เกี่ยวข้อง เช่น ผู้ถือเอกสาร ผู้ออกเอกสาร หรือผู้ตรวจสอบเอกสาร + +ข้อสังเกต: การตรวจสอบ VC หรือ VP สามารถทำได้โดยการนำ DID ของ issuer หรือ holder มาใช้ในการดึงข้อมูล (resolve) DID Document ที่ถูกลงทะเบียนไว้ในระบบทะเบียนเอกสารรับรอง เพื่อนำ public key มาใช้ตรวจสอบลายมือชื่อดิจิทัล + +- ทะเบียนเค้าร่างของเอกสารรับรอง (credential schema) + +ข้อสังเกต: เพื่อให้ผู้ออกเอกสาร (issuer) สามารถเลือกใช้งานเค้าร่างของเอกสารรับรองได้ เมื่อต้องมีการออกเอกสารรับรองในลักษณะเดียวกัน โดยเอกสารรับรองที่ออกตาม credential schema เดียวกัน จะมีโครงสร้าง (structure) เนื้อหา (content) และรูปแบบ (format) ที่สอดคล้องกัน + +- ทะเบียนรายการเพิกถอนเอกสารรับรอง (revocation registry) + +นอกจากนี้ ระบบทะเบียนเอกสารรับรองอาจถูกนำมาใช้เป็นทะเบียนรายชื่อของเอนทิตีต่าง ๆ ในระบบได้ เช่น + +- รายชื่อผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet providers) +- รายชื่อผู้ออกเอกสาร (issuers) +- รายชื่อผู้ตรวจสอบเอกสาร (verifiers) +- รายชื่อผู้ให้บริการออกใบรับรอง (certification authorities: CA) + +ทั้งนี้ ระบบทะเบียนเอกสารรับรองสามารถพัฒนาได้หลากหลายรูปแบบ เช่น รูปแบบรวมศูนย์ (centralized) ด้วยระบบฐานข้อมูล หรือรูปแบบกระจายศูนย์ (decentralized) ด้วยเทคโนโลยีบล็อกเชน (blockchain) หรือโครงสร้างพื้นฐานใบรับเหตุการณ์กุญแจ (key event receipt infrastructure: KERI) หรือรูปแบบผสม + +> 📌 **หมายเหตุ (ส่วนขยายนอกรายงานต้นฉบับ):** แนวทางการจัดทำรายชื่อของเอนทิตีแบบกระจายศูนย์ในระยะแรก อ้างอิงตาม Trust Model 3 (Trusted List + DID) ดังรายละเอียดใน [§9 Trust Model 3](09-trust-model-3.md) + +{/* pdf page 13 */} + +--- + +**การนำทาง:** [⬅️ บทที่ 2 — บทนิยาม](02-definitions.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 4 — แนวคิดและองค์ประกอบที่ส่งเสริมการทำงานร่วมกัน ➡️](04-interoperability-concepts.md) diff --git a/docs/thai-vc-arf/04-interoperability-concepts.md b/docs/thai-vc-arf/04-interoperability-concepts.md new file mode 100644 index 0000000..9ae77d7 --- /dev/null +++ b/docs/thai-vc-arf/04-interoperability-concepts.md @@ -0,0 +1,34 @@ +--- +description: "4. แนวคิดและองค์ประกอบที่ส่งเสริมให้เกิดการทำงานร่วมกัน (interoperability) — Thai VC ARF 2.0 DRAFT 0" +--- + +# 4. แนวคิดและองค์ประกอบที่ส่งเสริมให้เกิดการทำงานร่วมกัน (interoperability) + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + + +เนื่องด้วยการใช้งานเอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัลยังอยู่ในระยะเริ่มต้น การให้บริการในปัจจุบันจึงมีความหลากหลายทั้งในมิติเชิงธุรกิจและการพัฒนาระบบที่อ้างอิงกระบวนการทางเทคนิคหรือมาตรฐานที่แตกต่างกัน ในกรณีที่ต้องมีการขยายการใช้งานไปในวงกว้างหรือต้องการใช้งานเอกสารดังกล่าวข้ามระบบนิเวศ (Ecosystem) ก็อาจไม่สามารถทำงานร่วมกันได้ ดังนั้น ในการพัฒนาระบบเกี่ยวกับเอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัล ผู้พัฒนาควรให้ความสำคัญในรายละเอียดของเรื่องดังต่อไปนี้ + +- มาตรฐานเกี่ยวกับ VC และ VP เนื่องจากเอกสารรับรองดิจิทัลหรือเอกสารสำแดงดิจิทัลเป็นเอกสารที่ต้องมีการส่งต่อหรือแลกเปลี่ยนระหว่างหลายหน่วยงาน หากเอกสารดังกล่าวมีรูปแบบที่แตกต่างกัน เช่น หน่วยงาน A และ หน่วยงาน B ใช้เอกสารที่มีโครงสร้างข้อมูลที่แตกต่างกัน ก็อาจส่งผลต่อการประมวลผลแบบอัตโนมัติของระบบ หรือทำให้ไม่สามารถตรวจสอบเอกสารดังกล่าวได้ + +- เค้าร่าง (schema) เอกสารรับรองที่ออกโดยหน่วยงานต่าง ๆ อาจถูกออกแบบและใช้โครงสร้างข้อมูลที่แตกต่างกัน เมื่อต้องมีการส่งเอกสารข้ามหน่วยงาน หากเอกสารดังกล่าวไม่ได้ใช้เค้าร่างข้อมูลเดียวกัน ก็อาจส่งผลให้มีโครงสร้าง (structure) เนื้อหา (content) และรูปแบบ (format) ที่แตกต่างกัน ซึ่งส่งผลต่อประมวลผลแบบอัตโนมัติของระบบ หรือทำให้ไม่สามารถตรวจสอบเอกสารดังกล่าวได้ + +- มาตรฐานเกี่ยวกับ Protocol สำหรับการออก VC เพื่อให้การเชื่อมต่อในขั้นตอนของการออก VC โดยผู้ออกเอกสาร (issuer) มีความมั่นคงและปลอดภัย และระบบต่าง ๆ สามารถเชื่อมต่อกันได้ด้วยวิธีการที่เป็นมาตรฐานเดียวกัน + +- มาตรฐานเกี่ยวกับ Protocol สำหรับการใช้งาน VP เพื่อให้การเชื่อมต่อในขั้นตอนของการใช้งาน VP ระหว่าง Digital Document Wallet และผู้ตรวจสอบเอกสาร รวมไปถึงผู้ถือเอกสารมีความมั่นคงและปลอดภัย และระบบต่าง ๆ สามารถเชื่อมต่อกันได้ด้วยวิธีการที่เป็นมาตรฐานเดียวกัน + +- มาตรฐานเกี่ยวกับตัวระบุ (identifier) ตัวระบุแบบกระจายศูนย์ (decentralized identifier: DID) และ DID Method เนื่องจากเป็นส่วนสำคัญเกี่ยวกับการระบุตัวบุคคลที่เกี่ยวข้องและการตรวจสอบ VC และ VP ดังนั้น identifier รวมไปถึงในส่วนของ DID Document ควรมีฟังก์ชันและการบริหารจัดการต่าง ๆ ที่มีความมั่นคงปลอดภัย ไม่ถูกแก้ไขโดยไม่ได้รับอนุญาต และสามารถดึงข้อมูล (resolve) มาใช้เมื่อต้องการตรวจสอบ VC หรือ VP ได้ + +- Universal Resolver เนื่องจากในการตรวจสอบ VC และ VP นั้นต้องมีการดึงข้อมูล DID Document ที่ถูกจัดเก็บไว้ใน registry ของแต่ละ DID Method โดยการดึงข้อมูลดังกล่าว ส่วนใหญ่จะเป็นการดำเนินการผ่านช่องทาง resolver ของแต่ละ DID Method ดังนั้น ในกรณีที่มีการใช้งานหลาย DID Method ร่วมกัน ย่อมต้องมีการใช้ resolver หลายอัน หากมี Universal resolver ที่เป็นเสมือนศูนย์รวมของ resolver ก็จะช่วยให้สามารถเข้าใช้งานและดึงข้อมูล DID Document ได้ที่จุดเดียว + +{/* pdf page 14 */} + +--- + +**การนำทาง:** [⬅️ บทที่ 3 — ภาพรวมการใช้งาน](03-usage-overview.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 5 — มาตรฐานและข้อปฏิบัติสำหรับ VC และ VP ➡️](05-standards-and-compliance.md) diff --git a/docs/thai-vc-arf/05-standards-and-compliance.md b/docs/thai-vc-arf/05-standards-and-compliance.md new file mode 100644 index 0000000..ec926df --- /dev/null +++ b/docs/thai-vc-arf/05-standards-and-compliance.md @@ -0,0 +1,706 @@ +--- +description: "5. มาตรฐานและข้อปฏิบัติสำหรับเอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัล (Standards and Compliance for Verifiable Credentials and Presentations) — Thai VC ARF 2.0 DRAFT 0" +--- + +# 5. มาตรฐานและข้อปฏิบัติสำหรับเอกสารรับรองดิจิทัลและเอกสารสำแดงดิจิทัล (Standards and Compliance for Verifiable Credentials and Presentations) + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📐 Specification — มาตรฐานที่ประกาศใช้จริงในเวอร์ชัน 2.0 แทนที่เนื้อหาต้นฉบับเวอร์ชัน 1.1 ทั้งบท +> **เวอร์ชันเอกสาร:** 2.0 (10 สิงหาคม 2569) — แทนที่เค้าร่างเอกสารและโพรโทคอลของรายงานต้นฉบับทั้งหมด (ดูเหตุผลในกล่องด้านล่างและ [ภาคผนวก ข ข.3.6](15-appendix.md)) (MASA-170) +> **แหล่งข้อมูลเดิม:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย (มกราคม 2568) — บทนี้ปรับปรุงจากต้นฉบับดังกล่าว รายละเอียดที่ถูกแทนที่ดูได้จาก git history ของไฟล์นี้ +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) · [§8 — Implementation Guidelines](08-implementation-guidelines.md) · [§8.1 — OID4VCI Full Flow](08.1-issuance-full-flow-detail.md) · [§8.2 — OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) · [§11 — Cryptographic Suites](11-cryptographic-suites.md) · [ภาคผนวก ข — บันทึกการเปลี่ยนแปลง v1.1→v2.0](15-appendix.md) +*/} + +--- + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะการรองรับรูปแบบเอกสาร:** รายงานต้นฉบับเวอร์ชัน 1.1 ใช้ W3C Verifiable Credentials Data Model v1.1 (W3C VCDM) และโพรโทคอลฉบับร่าง สำหรับ ARF ฉบับนี้ ระบบยังคงรองรับ W3C VCDM v1.1 เพื่อใช้งานเอกสารเดิม และเพิ่ม IETF SD-JWT Verifiable Credential (`dc+sd-jwt`) [12] สำหรับการออกและการแสดงเอกสารตาม OID4VCI 1.0 Final [10] และ OID4VP 1.0 Final พร้อม DCQL [11] ตัวอย่างทางเทคนิคในบทนี้ใช้ SD-JWT VC เป็นหลัก ระบบต้องรองรับทั้ง W3C VCDM และ SD-JWT VC ควบคู่กัน +*/} + +เมื่อการทำธุรกรรมมีแนวโน้มมาอยู่ในรูปแบบอิเล็กทรอนิกส์มากขึ้น หน่วยงานทั้งภาครัฐและภาคเอกชนอาจมีการออกเอกสารรับรองข้อมูลในรูปของเอกสารรับรองดิจิทัลที่ตรวจสอบได้ (verifiable credential: VC) โดยเอกสารรับรองดิจิทัลที่ตรวจสอบได้ดังกล่าวเป็นเอกสารรับรองข้อมูลในรูปแบบอิเล็กทรอนิกส์ที่มีคุณสมบัติช่วยให้สามารถตรวจพบการปลอมแปลงและตรวจสอบผู้เขียนข้อมูลได้ด้วยกระบวนการเข้ารหัสลับ (Cryptography) + +ในรายงานฉบับนี้ เอกสารรับรองข้อมูลตามที่กล่าวข้างต้นประกอบด้วย 2 ส่วน ดังนี้ + +- เอกสารรับรองดิจิทัล (verifiable credential: VC) +- เอกสารสำแดงดิจิทัล (verifiable presentation: VP) + +ระบบต้องรองรับ W3C Verifiable Credentials Data Model v1.1 (W3C VCDM) [5] สำหรับเอกสารเดิม และ IETF SD-JWT Verifiable Credential (`dc+sd-jwt`) [12] ซึ่งเพิ่มใน ARF ฉบับนี้ สำหรับเอกสารใหม่ การออกและการสำแดงผ่านโพรโทคอล **OID4VCI 1.0 Final** [10] และ **OID4VP 1.0 Final พร้อม DCQL** [11] ใช้ `dc+sd-jwt` เป็นรูปแบบที่แนะนำ รายละเอียดทางเทคนิคระดับ field-by-field พร้อมตัวอย่าง SD-JWT VC อยู่ที่ [§8.1 — OID4VCI Full Flow](08.1-issuance-full-flow-detail.md) และ [§8.2 — OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) + +## 5.0 โครงของบทนี้ + +บทนี้มีเนื้อหายาว รายงานฉบับนี้จึงแบ่งออกเป็น 5 ส่วนหลัก เพื่อให้ผู้อ่านเข้าถึงหัวข้อที่ต้องการได้สะดวก ดังนี้ + +| ส่วน | หัวข้อในบท | เนื้อหาโดยย่อ | +|------|-----------|--------------| +| โครงสร้าง VC/VP | §5.1–§5.2 | การรองรับ W3C VCDM v1.1 สำหรับเอกสารเดิม และ **SD-JWT VC (`dc+sd-jwt`)** ที่เพิ่มใน ARF ฉบับนี้ พร้อมตัวอย่าง SD-JWT VC | +| การออกเอกสาร (OID4VCI) | §5.3 | ขั้นตอนการออก VC ด้วยโพรโทคอล **OID4VCI 1.0 Final** [10] | +| การสำแดงเอกสาร (OID4VP) | §5.4 | ขั้นตอนการสำแดงและตรวจสอบ VP ด้วยโพรโทคอล **OID4VP 1.0 Final พร้อม DCQL** [11] | +| Universal Resolver | §5.5 | การใช้ DIF Universal Resolver เพื่อการทำงานร่วมกันระหว่างระบบนิเวศ | +| บทบาทของผู้เกี่ยวข้อง | §5.6 | บทบาทของผู้ออกเอกสาร ผู้ถือเอกสาร และผู้ตรวจสอบเอกสาร | + +## 5.1 เอกสารรับรองดิจิทัล (verifiable credential: VC) + +เอกสารรับรองดิจิทัล ประกอบด้วย identifier และคำอธิบายข้อมูล (metadata) เช่น ผู้ออกเอกสาร วันและเวลาเมื่อ VC เริ่มมีผลผูกพันและสิ้นผลผูกพัน + +โครงสร้างของเอกสารรับรองดิจิทัลในรายงานทางเทคนิคฉบับนี้ แสดงตัวอย่าง SD-JWT VC (`dc+sd-jwt`) [12] ซึ่งประกอบด้วย (1) คำอธิบายข้อมูลของ VC (credential metadata) (2) ข้อความยืนยัน (claim) และ (3) ข้อพิสูจน์ (proof) การใช้ตัวอย่างดังกล่าวไม่กระทบการรองรับเอกสาร W3C VCDM v1.1 ที่ออกอยู่เดิม [5] + +![โครงสร้างเอกสารรับรอง (VC)](images/p15-0.png) + +**รูปที่ 4 โครงสร้างเอกสารรับรอง (VC)** + +เอกสารรับรองใช้เค้าร่าง **IETF SD-JWT Verifiable Credential (`dc+sd-jwt`)** [12] ซึ่งบันทึกทั้ง 3 ส่วนข้างต้นในรูปแบบ SD-JWT แทนการบันทึกแบบ JSON-LD โดย SD-JWT VC ประกอบด้วย 3 ส่วนเรียงต่อกันด้วยสัญลักษณ์ "~" ได้แก่ + +1. **Issuer-signed JWT** — JOSE header ระบุประเภทเอกสาร (`typ: "dc+sd-jwt"`) และวิธีลงลายมือชื่อ (`alg`) ตามด้วย JWT claims ที่มี claim ซึ่งถูกแฮชไว้ในอาร์เรย์ `_sd` (แทนการเปิดเผยค่าจริงในตัวเอกสาร) พร้อมกุญแจสาธารณะของผู้ถือเอกสาร (`cnf.jwk`) สำหรับผูกเอกสารไว้กับผู้ถือ +2. **Disclosures** — รายการค่าจริงของแต่ละ claim ที่เข้ารหัส Base64URL แยกทีละรายการ ผู้ถือเอกสารเลือกเปิดเผยเฉพาะรายการที่ต้องการได้ในภายหลัง โดยไม่กระทบลายมือชื่อของผู้ออกเอกสาร +3. **Key Binding JWT (KB-JWT)** — JWT ที่ผู้ถือเอกสารลงลายมือชื่อด้วยกุญแจของตนเอง (คู่กับ `cnf.jwk` ในข้อ 1) เพื่อพิสูจน์การครอบครองคู่กุญแจ สร้างขึ้นเฉพาะตอนนำเอกสารไปสำแดง (ดู §5.2) + +ในรายงานฉบับนี้ ได้ยกตัวอย่างกรณีศึกษาของ VC ที่แสดงกรณีศึกษาเรื่องการขอใบประมวลผลการศึกษา (Transcript) ตามรูปที่ 6 จากมหาวิทยาลัย โดยเอกสารจะออกให้เมื่อนักศึกษาพิสูจน์ได้ว่าตนเองเคยศึกษา ณ มหาวิทยาลัยดังกล่าว ซึ่งทางมหาวิทยาลัยได้ออก VC เพื่อรับรองการสำเร็จการศึกษา และนักศึกษาจัดเก็บ VC นั้นไว้ในกระเป๋าเอกสารดิจิทัลของตนเอง + +![VC JWT Format](images/p15-1.png) + +**รูปที่ 5 VC JWT Format** + +รูปที่ 5 แสดงแนวคิดทั่วไปของการบันทึกข้อมูล VC เป็นโครงสร้างหลายส่วนที่ลงลายมือชื่อแบบ JOSE ซึ่งเป็นแนวคิดเดียวกับที่ SD-JWT VC นำมาใช้ ต่างกันเพียงตัวคั่นส่วนย่อยเป็น "~" แทน "." และมีส่วน Disclosures กับ KB-JWT เพิ่มเข้ามาเพื่อรองรับ selective disclosure ตามที่อธิบายไว้ข้างต้น + +![กรณีศึกษา VC การขอใบประมวลผลการศึกษา (Transcript)](images/p16-0.png) + +**รูปที่ 6 กรณีศึกษา VC การขอใบประมวลผลการศึกษา (Transcript)** + +ขั้นตอนการออกใบประมวลผลการศึกษามีกระบวนการ (User Journey) ดังนี้ + +1. นักศึกษาหรือผู้ที่ต้องการหลักฐานการศึกษาส่งคำร้อง (request) ให้กับทางมหาวิทยาลัย ผ่านช่องทางที่เป็น web application และมีการยืนยันตัวตน (user authentication) +2. เมื่อนักศึกษาร้องขอเอกสารใบประมวลผลการศึกษา (Transcript) ไปยังมหาวิทยาลัย จากนั้นมหาวิทยาลัยจะดำเนินการสร้างคิวอาร์โคด (QR code) สำหรับรายละเอียดการเชื่อมต่อกับ wallet รับเอกสาร นักศึกษาสแกนคิวอาร์โคด (QR code) เพื่อขอรับเอกสาร และมหาวิทยาลัยจัดเตรียมข้อมูลสำหรับใบประมวลผลการศึกษา (Transcript) ในรูปแบบเอกสารรับรองดิจิทัล (VC) และทำการลงลายมือชื่ออิเล็กทรอนิกส์ +3. เมื่อนักศึกษาได้รับใบประมวลผลการศึกษา (Transcript) ในรูปแบบเอกสารรับรองดิจิทัล (VC) แล้วจึงนำเอกสารที่ได้รับไปจัดเก็บในกระเป๋าเอกสารดิจิทัลของนักศึกษา (digital document wallet) +4. เมื่อนักศึกษาต้องการไปสมัครงานกับบริษัทสมมติเป็นผู้ตรวจสอบเอกสาร ทางบริษัทจะส่งคำร้องขอ VC ที่ออกโดยมหาวิทยาลัยมายังกระเป๋าเอกสารดิจิทัลของนักศึกษา และกระเป๋าเอกสารดิจิทัลจะถามนักศึกษาว่าต้องการใช้ VC ที่มีอยู่หรือไม่ เมื่อนักศึกษาตอบตกลง VC จะถูกนำมาใช้สร้างเป็นเอกสารสำแดงดิจิทัล (VP) และส่งต่อไปให้บริษัทดำเนินการตรวจสอบ + +**ตัวอย่างที่ 1 โครงสร้าง VC ที่ใช้ในโครงการ แสดงรูปแบบ SD-JWT VC (`dc+sd-jwt`)** + +JOSE Header (ส่วนที่ 1 ของ Issuer-signed JWT): + +```json +{ + "typ": "dc+sd-jwt", + "alg": "EdDSA", + "kid": "https://credential-issuer.example.com#key-1" +} +``` + +JWT Claims (ส่วนที่ 2 ของ Issuer-signed JWT): + +```json +{ + "iss": "https://credential-issuer.example.com", + "vct": "https://credentials.example.com/vct/transcript", + "iat": 1755500991, + "exp": 1755501291, + "cnf": { + "jwk": { "kty": "OKP", "crv": "Ed25519", "x": "holder_pub_key_x" } + }, + "_sd_alg": "sha-256", + "_sd": [ + "TGZlNVR4Rk1md0dhUUdicjFXODNZa3VqVWJPYld4Wko3ZTgxU1RCVVo1SQ", + "OFdVaXVUb2R2TzFyaWt6TzZrb0J0dUlvMEZuVjV5cE5xUUNMSDJZeXNXVQ" + ] +} +``` + +Disclosure (ส่วนที่ 2 ของ SD-JWT VC — ตัวอย่างการเปิดเผย claim `student`): + +``` +["3jqcb67z9wksrndv", "student", "Nattapong Methawon"] +``` + +| ส่วน | ตัวคั่น | เนื้อหา | +|------|--------|--------| +| Issuer-signed JWT | `~` หลังส่วนนี้ | JOSE header + JWT claims ที่ลงลายมือชื่อโดยมหาวิทยาลัย (ผู้ออกเอกสาร) | +| Disclosures | `~` คั่นระหว่างแต่ละรายการ | ค่าจริงของแต่ละ claim (เช่น `student`, `gpa`) ที่เข้ารหัส Base64URL แยกทีละรายการ | +| Key Binding JWT | ต่อท้ายสุด | สร้างเฉพาะตอนนำไปสำแดงเป็น VP (ดู §5.2) — ไม่มีในตัว VC ที่จัดเก็บไว้ในกระเป๋าเอกสาร | + +รายละเอียดโครงสร้าง field-by-field พร้อมตัวอย่างที่ใช้งานจริงในระบบอยู่ที่หัวข้อ STEP 6 — Issue VC ใน [§8.1 — OID4VCI Full Flow](08.1-issuance-full-flow-detail.md) และหมวดอัลกอริทึมที่รองรับอยู่ที่ [§11 — Cryptographic Suites](11-cryptographic-suites.md) + +## 5.2 เอกสารสำแดงดิจิทัล (verifiable presentation: VP) + +เอกสารสำแดงข้อมูลที่ประกอบด้วย VC อย่างน้อยหนึ่งชุด ตามรูปที่ 4 ซึ่งอาจเป็นข้อมูลต้นฉบับตามที่ปรากฏใน VC หรือเป็นข้อมูลที่สังเคราะห์จาก VC ก็ได้ โดย VP จะมีคุณสมบัติที่สามารถตรวจพบการเปลี่ยนแปลงใด ๆ ที่เกิดกับความถูกต้องครบถ้วนของข้อมูล และตรวจสอบลายมือชื่ออิเล็กทรอนิกส์ของผู้ถือเอกสารและตรวจสอบ VC ที่เกี่ยวข้องได้ด้วยกระบวนการเข้ารหัสลับ + +การสังเคราะห์ข้อมูลจาก VC เพื่อสร้างเป็น VP ใช้วิธีการที่รองรับการเลือกเปิดเผยข้อมูลบางส่วน (selective disclosure) ตามที่อธิบายไว้ใน §5.1 กล่าวคือ ผู้ถือเอกสารเลือกส่งเฉพาะ Disclosure ของ claim ที่ต้องการเปิดเผย โดยไม่ต้องส่ง claim อื่นที่อยู่ใน VC ทั้งหมด เช่น เลือกแสดงเฉพาะชื่อและนามสกุลจากข้อมูลทั้งหมดตามหน้าบัตรประชาชน โดยไม่เปิดเผยข้อมูลส่วนอื่น + +โครงสร้างของเอกสารสำแดงดิจิทัลในรายงานทางเทคนิคฉบับนี้ แสดงตัวอย่าง SD-JWT VC (`dc+sd-jwt`) [12] โดยประกอบด้วย (1) คำอธิบายข้อมูลของ VP (presentation metadata) (2) เอกสารรับรองดิจิทัล (VC) และ (3) ข้อพิสูจน์ (proof) ส่วนข้อพิสูจน์คือ Key Binding JWT (KB-JWT) ที่ผู้ถือเอกสารสร้างขึ้นและลงลายมือชื่อด้วยกุญแจของตนเอง — มาตรฐาน SD-JWT VC ไม่ต้องมี JWT-VP ห่ออีกชั้น เพราะ KB-JWT ทำหน้าที่พิสูจน์การครอบครองเอกสารในตัวอยู่แล้ว การใช้ตัวอย่างนี้ไม่ตัดการรองรับ VP ที่อ้างอิงเอกสาร W3C VCDM v1.1 เดิม [5] + +สำหรับในรายงานฉบับนี้ การตรวจสอบเอกสารสำแดงดิจิทัลมีขั้นตอนการตรวจสอบดังนี้ + +1. ตรวจสอบความถูกต้องของโครงสร้างเอกสารสำแดงดิจิทัล โดยแยกส่วนด้วยสัญลักษณ์ "~" แล้วตรวจว่าประกอบด้วย Issuer-signed JWT, Disclosures และ Key Binding JWT ครบถ้วนตามรูปแบบ SD-JWT +2. ตรวจสอบ Key Binding JWT (KB-JWT) โดยตรวจลายมือชื่อด้วยกุญแจสาธารณะของผู้ถือเอกสาร (`cnf.jwk`) ที่ปรากฏใน Issuer-signed JWT และตรวจว่าค่า `sd_hash` ใน KB-JWT ตรงกับค่าแฮชที่คำนวณจากส่วน Issuer-signed JWT และ Disclosures ที่ส่งมาจริง เพื่อยืนยันว่าผู้ส่งเป็นผู้ครอบครองคู่กุญแจของเอกสารจริง +3. ตรวจสอบผู้ออกเอกสาร (Issuer) เป็น Legal Entity หรือไม่ โดยการร้องขอ DID Document จาก Registry ผ่าน DIF Universal Resolver +4. ตรวจสอบ Disclosure แต่ละรายการที่เปิดเผยมาว่าเมื่อคำนวณแฮชแล้วตรงกับค่าที่ปรากฏในอาร์เรย์ `_sd` ของ Issuer-signed JWT หรือไม่ เพื่อยืนยันว่าข้อมูลที่เปิดเผยไม่ถูกแก้ไข +5. ตรวจสอบความถูกต้องของ Issuer-signed JWT โดยตรวจลายมือชื่อดิจิทัลด้วยกุญแจสาธารณะจาก Trusted List ที่เกี่ยวข้อง หรือ DID Document ที่ผูกกับรายการใน Trusted List แล้ว และตรวจสถานะกับขอบเขตสิทธิ์ของ Issuer ใน Trusted List ตาม [ข้อกำหนดการเผยแพร่ Trusted List](12.1-trust-list-publication-profile.md) + +เมื่อทำการตรวจสอบทั้ง 5 ขั้นตอนแล้วถูกต้องทั้งหมด จึงจะยอมรับว่า VP ที่ได้รับมาถูกสร้างออกมาอย่างถูกต้อง จึงจะนำไปใช้งานหรือดำเนินการอื่นต่อไปได้ รายละเอียดขั้นตอนการตรวจสอบเต็มรูปแบบ (รวม Trust Checkpoint ของ ETDA Trust Model) อยู่ที่ [§8.2 — OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) + +![โครงสร้างเอกสารสำแดงดิจิทัล VP](images/p19-0.png) + +**รูปที่ 7 โครงสร้างเอกสารสำแดงดิจิทัล VP** + +จากกรณีศึกษาในตัวอย่างที่ 1 เมื่อนักศึกษาได้รับ VC มาจัดเก็บไว้ในกระเป๋าเอกสารดิจิทัลของตนเองแล้ว ต่อมาจะนำเอกสารไปทำการสมัครงานจากบริษัทสมมติซึ่งเป็นผู้ตรวจสอบเอกสาร บริษัทที่รับสมัครจะส่งคำร้องขอ VC ที่ออกโดยมหาวิทยาลัยผ่านไปยังกระเป๋าเอกสารดิจิทัลของนักศึกษา และกระเป๋าเอกสารดิจิทัลจะถามนักศึกษาว่าต้องการใช้ VC ที่มีอยู่หรือไม่ เมื่อนักศึกษาตอบตกลง VC จะถูกนำมาใช้สร้างเป็น VP แล้วส่งต่อไปให้บริษัททำการตรวจสอบ ตัวอย่างของ VP ข้างต้นในรูปแบบ SD-JWT Presentation เป็นดังนี้ + +**ตัวอย่างที่ 2 โครงสร้าง VP ที่ใช้ในโครงการ แสดงรูปแบบ SD-JWT Presentation** + +Key Binding JWT (KB-JWT) — ส่วนสุดท้ายของ SD-JWT Presentation: + +```json +{ + "typ": "kb+jwt", + "alg": "ES256" +} +. +{ + "iss": "wallet-instance-abc123", + "aud": "https://verifier.example.com", + "nonce": "fa2450d7-8ca5-40d2-8832-b03891c355be", + "iat": 1755501000, + "sd_hash": "9GzX9RVLtj7dCbCyeGnHb-8O0R5Fp2VW8LTkfWzePUM" +} +``` + +**การประกอบ VP ฉบับสมบูรณ์:** `~~~` + +จากตัวอย่างที่ 1 และ 2 องค์ประกอบของ SD-JWT VC และ VP แบ่งออกเป็นส่วนหลัก ดังนี้ + +1. **JOSE header** (`typ`, `alg`, `kid`) ระบุประเภทเอกสาร ประเภทลายมือชื่อ และตัวชี้กุญแจที่ใช้ตรวจสอบ +2. **`iss`** เป็น claim ที่ระบุตัวตนของผู้ออกเอกสาร (URI แบบ https) +3. **`vct`** (Verifiable Credential Type) เป็น claim ที่ระบุประเภทของเอกสารรับรองตามมาตรฐาน IETF SD-JWT VC [12] สำหรับเอกสาร `dc+sd-jwt` โดยทำหน้าที่ใกล้เคียงกับคุณสมบัติ `type` ใน W3C VC Data Model v1.1 [5] เอกสาร W3C VCDM เดิมยังคงใช้ `type` ตามโครงสร้างของตน +4. **`iat`/`exp`** เป็น claim ที่ระบุวันและเวลาที่ออกเอกสาร (issuance) และวันหมดอายุ (expiration) ตามลำดับ +5. **`cnf.jwk`** เป็น claim ที่ระบุกุญแจสาธารณะของผู้ถือเอกสาร ใช้ผูกเอกสารไว้กับผู้ถือ (holder binding) และใช้ตรวจสอบ Key Binding JWT ตอนสำแดงเอกสาร +6. **`_sd` และ Disclosures** คือกลไก selective disclosure — `_sd` เก็บค่าแฮชของแต่ละ claim ส่วน Disclosure เก็บค่าจริงที่เปิดเผยได้ทีละรายการ แทนคุณสมบัติ `credentialSubject` ในโครงสร้าง JSON-LD +7. **Key Binding JWT (KB-JWT)** เป็นข้อพิสูจน์ (proof) ที่ผู้ถือเอกสารลงลายมือชื่อด้วยกุญแจของตนเอง ทำหน้าที่แทน `proof` ของผู้ถือเอกสารในโครงสร้าง JSON-LD และยืนยันว่าเป็นผู้ครอบครองเอกสารรับรองจริง + +รายละเอียดขั้นตอนสร้างและตรวจ KB-JWT พร้อมตัวอย่างที่ใช้งานจริงอยู่ที่ [§8.2 — OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) + +## 5.3 Protocol สำหรับการออก VC + +โพรโทคอล **OpenID for Verifiable Credential Issuance (OID4VCI) 1.0 Final** [10] เป็นโพรโทคอลที่อยู่ในกลุ่ม OpenID ใช้สำหรับการออกเอกสารรับรองดิจิทัลผ่านทาง API ระบบยังคงรองรับ W3C VCDM v1.1 สำหรับเอกสารเดิม [5] และเพิ่ม **IETF SD-JWT Verifiable Credential (`dc+sd-jwt`)** [12] สำหรับการออกเอกสารใหม่ โดยระบบระบุ `format: "dc+sd-jwt"` เมื่อขอหรือออกเอกสารในรูปแบบ SD-JWT VC + +![การใช้งาน OID4VC](images/p22-0.png) + +**รูปที่ 8 การใช้งาน OID4VC** + +![ขั้นตอนการทำ OID4VCI](images/p22-1.png) + +**รูปที่ 9 ขั้นตอนการทำ OID4VCI** + +### 5.3.1 กระบวนการทำงาน OID4VCI + +การออกเอกสารรับรองดิจิทัล (VC) ของใบประมวลผลการศึกษา ใช้โพรโทคอล OID4VCI 1.0 Final ผ่าน Pre-Authorized Code Flow มีขั้นตอนการทำงานตามรูปที่ 9 ดังนี้ + +1. การให้ความยินยอมและการรวบรวมข้อมูล +2. การสร้าง Credential Offer +3. การดึงข้อมูล Metadata ผู้ออกเอกสาร +4. การร้องขอ Token +5. การร้องขอและการออก Credential Request + +#### (1) การให้ความยินยอมและการรวบรวมข้อมูล + +ผู้ออกเอกสาร (Credential Issuer) ต้องได้รับการยินยอมจากผู้ถือเอกสาร และรวบรวมข้อมูลที่จำเป็นของผู้ถือเอกสารสำหรับการออกเอกสารรับรองดิจิทัลผ่านกระบวนการเฉพาะ เช่น การยืนยันตัวตน (Authentication) และการอนุญาต (Authorization) ของผู้ถือเอกสาร โดยกระบวนการนี้ไม่อยู่ในขอบเขตของ OID4VCI + +#### (2) การสร้าง Credential Offer + +ผู้ออกเอกสารสร้าง Credential Offer สำหรับเอกสารรับรองที่จะทำการออกและส่งไปยังกระเป๋าเอกสารดิจิทัล โดยมีวิธีส่งได้หลายวิธี แต่ในการศึกษาครั้งนี้ผู้ออกเอกสารจะสร้าง QR Code ให้กระเป๋าเอกสารสแกน หรือคัดลอก URI ส่งให้ผ่านช่องทางอื่น Credential Offer ประกอบด้วย URL ของผู้ออกเอกสาร, ตัวระบุ Credential Configuration และ Pre-Authorized Code + +**ตัวอย่าง credential offer** + +```json +{ + "credential_issuer": "https://credential-issuer.example.com", + "credential_configuration_ids": ["TranscriptCredential"], + "grants": { + "urn:ietf:params:oauth:grant-type:pre-authorized_code": { + "pre-authorized_code": "sX2CpoKx", + "tx_code": { + "length": 4, + "input_mode": "numeric", + "description": "Please provide the one-time code that was sent via e-mail" + } + } + } +} +``` + +**คำอธิบายพารามิเตอร์ (Pre-Authorized Code)** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| credential_issuer | Required | URL | URL ของผู้ออกเอกสารที่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ใช้โปรโตคอล https และต้องประกอบด้วย scheme และ host รวมถึง port number และ path components ได้ตามต้องการ แต่ต้องไม่มีส่วนประกอบ query หรือ fragment | +| credential_configuration_ids | Required | Array | อาร์เรย์ของข้อความที่ไม่ซ้ำกัน โดยแต่ละข้อความคือตัวระบุ Credential Configuration ที่ปรากฏใน `credential_configurations_supported` ของ Metadata ผู้ออกเอกสาร ซึ่งผู้ออกเอกสารสามารถออกให้ได้สำหรับ Credential Offer ครั้งนี้ | +| grants | Optional | Grant Type | ระบุ Grant Types ที่ Authorization Server ของผู้ออกเอกสารใช้สำหรับ Credential Offer ครั้งนี้ โดยในการศึกษาใช้เป็น urn:ietf:params:oauth:grant-type:pre-authorized_code | +| pre-authorized_code | Required | String | รหัสที่แสดงถึงการอนุญาตของผู้ออกเอกสารให้ผู้ถือเอกสารใช้ขอรับเอกสารรับรองประเภทใดประเภทหนึ่ง รหัสนี้ต้องมีอายุสั้นและใช้ได้เพียงครั้งเดียว หากเลือกใช้ Pre-Authorized Code Flow ต้องมีพารามิเตอร์นี้ | +| tx_code | Optional | Object | ใช้ระบุว่า Authorization Server ต้องการ Transaction Code จากผู้ถือเอกสารพร้อมกับ Token Request ใน Pre-Authorized Code Flow หรือไม่ หาก Authorization Server ไม่ต้องการ Transaction Code พารามิเตอร์นี้จะไม่ถูกใส่เข้ามา Transaction Code มีวัตถุประสงค์เพื่อเชื่อมโยง Pre-Authorized Code กับธุรกรรมที่เฉพาะเจาะจง เพื่อป้องกันการใช้รหัสซ้ำโดยผู้โจมตี เช่น การสแกน QR code โดยไม่ได้รับอนุญาต แนะนำให้ส่ง Transaction Code ผ่านช่องทางอื่น | +| input_mode | Optional | String | กำหนดชุดตัวอักษรที่สามารถป้อนข้อมูลได้ ค่าเลือกที่เป็นไปได้คือเฉพาะตัวเลขหรือเฉพาะตัวอักษร ค่าเริ่มต้นคือตัวเลข | +| length | Optional | Integer | กำหนดความยาวของ Transaction Code ช่วยให้กระเป๋าเอกสารแสดงหน้าจอสำหรับป้อนข้อมูลได้ดีขึ้นและช่วยเพิ่มประสบการณ์การใช้งานของผู้ใช้ | +| description | Optional | String | คำแนะนำแก่ผู้ถือกระเป๋าเอกสาร เกี่ยวกับวิธีการรับรหัสธุรกรรม เช่น การบอกว่ารหัสจะถูกส่งผ่านช่องทางการสื่อสารใด แนะนำให้แสดงคำอธิบายนี้ถัดจากหน้าจอป้อน Transaction Code เพื่อปรับปรุงประสบการณ์การใช้งาน ข้อความนี้ต้องไม่เกิน 300 ตัวอักษร และไม่รองรับการแปลหลายภาษา | + +#### (3) การดึงข้อมูล Metadata ผู้ออกเอกสาร + +เพื่อดึง Metadata กระเป๋าเอกสารส่ง HTTP GET ไปที่ URL ของผู้ออกเอกสารต่อด้วย `/.well-known/openid-credential-issuer` เช่น `https://credential-issuer.example.com/.well-known/openid-credential-issuer` หาก URL ของผู้ออกเอกสารมี path component ( / ) ที่อยู่ท้ายสุด ให้ลบออกก่อนเพิ่ม `/.well-known/openid-credential-issuer` + +Metadata จะเป็น JSON ประกอบด้วย ประเภทและรูปแบบของเอกสารรับรองทั้งหมดที่ผู้ออกเอกสารสามารถออกได้, Token Endpoint, Credential Endpoint และอื่น ๆ + +**ตัวอย่าง Metadata** + +```json +{ + "credential_issuer": "https://credential-issuer.example.com", + "authorization_servers": [ "https://server.example.com" ], + "credential_endpoint": "https://credential-issuer.example.com/credential", + "deferred_credential_endpoint": "https://credential-issuer.example.com/deferred_credential", + "notification_endpoint": "https://credential-issuer.example.com/notification", + "credential_response_encryption": { + "alg_values_supported": [ + "ECDH-ES" + ], + "enc_values_supported": [ + "A128GCM" + ], + "encryption_required": false + }, + "display": [ + { + "name": "Example University", + "locale": "en-US" + }, + { + "name": "Example Université", + "locale": "fr-FR" + } + ], + "credential_configurations_supported": { + "TranscriptCredential": { + "format": "dc+sd-jwt", + "vct": "https://credentials.example.com/vct/transcript", + "scope": "TranscriptCredential", + "cryptographic_binding_methods_supported": [ + "jwk" + ], + "credential_signing_alg_values_supported": [ + "EdDSA" + ], + "credential_metadata": { + "claims": [ + { + "path": ["given_name"], + "display": [{ "name": "Given Name", "locale": "en-US" }] + }, + { + "path": ["family_name"], + "display": [{ "name": "Surname", "locale": "en-US" }] + }, + { "path": ["degree"] }, + { + "path": ["gpa"], + "display": [{ "name": "GPA" }] + } + ] + }, + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "ES256" + ] + } + }, + "display": [ + { + "name": "University Credential", + "locale": "en-US", + "logo": { + "url": "https://university.example.edu/public/logo.png", + "alt_text": "a square logo of a university" + }, + "background_color": "#12107c", + "text_color": "#FFFFFF" + } + ] + } + } +} +``` + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| credential_issuer | Required | URL | URL ของผู้ออกเอกสารที่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ ใช้โปรโตคอล https และต้องประกอบด้วย scheme และ host รวมถึง port number และ path components ได้ตามต้องการ แต่ต้องไม่มีส่วนประกอบ query หรือ fragment | +| authorization_servers | Optional | Array of strings | อาร์เรย์ของสตริง ซึ่งแต่ละสตริงเป็นตัวระบุของ OAuth 2.0 Authorization Server ที่ผู้ออกเอกสารอ้างอิงเพื่อใช้ในการอนุมัติ หากไม่มีการระบุพารามิเตอร์นี้ ผู้ออกเอกสารจะทำหน้าที่เป็น Authorization Server ด้วย โดยใช้ตัวระบุของผู้ออกเอกสารเพื่อดึงข้อมูล Metadata ของ Authorization Server | +| credential_endpoint | Required | URL | URL ของ Credential Endpoint ของผู้ออกเอกสาร URL นี้ต้องใช้โปรโตคอล HTTPS | +| deferred_credential_endpoint | Optional | URL | URL ของ Deferred Credential Endpoint ของผู้ออกเอกสาร URL นี้ต้องใช้โปรโตคอล HTTPS หากไม่มีการระบุพารามิเตอร์นี้ แสดงว่าผู้ออกเอกสารไม่รองรับ Deferred Credential Endpoint | +| notification_endpoint | Optional | URL | URL ของ Notification Endpoint ผู้ออกเอกสารต้องใช้โปรโตคอล HTTPS หากไม่มีการระบุพารามิเตอร์นี้ แสดงว่าผู้ออกเอกสารไม่รองรับ Notification Endpoint | +| credential_response_encryption | Optional | Object | แสดงข้อมูลว่าผู้ออกเอกสารรองรับการเข้ารหัส Credential Response เพิ่มเติมจาก TLS หรือไม่ | +| alg_values_supported | Required* | Array | เป็นอาร์เรย์ที่ประกอบด้วยรายการของอัลกอริทึมการเข้ารหัส JWE ([RFC7516]) ที่ได้รับการสนับสนุนโดย Credential Endpoint เพื่อเข้ารหัสข้อมูล Credential Response ในรูปแบบ JWT ([RFC7519]) ตามที่กำหนดไว้ใน [RFC7518] | +| enc_values_supported | Required* | Array | เป็นอาร์เรย์ที่ประกอบด้วยรายการของอัลกอริทึมการเข้ารหัส JWE ([RFC7516]) (ค่า enc) ที่ได้รับการสนับสนุนโดย Credential Endpoint เพื่อเข้ารหัสข้อมูล Credential Response ในรูปแบบ JWT ([RFC7519]) ตามที่กำหนดไว้ใน [RFC7518] | +| encryption_required | Required* | Boolean | เป็นค่าบูลีนที่ระบุว่าผู้ออกเอกสารต้องการการเข้ารหัสเพิ่มเติมนอกเหนือจาก TLS สำหรับ Credential Response หรือไม่ หากค่าเป็น true ผู้ออกเอกสารกำหนดให้เข้ารหัส Credential Response ทุกครั้ง และกระเป๋าเอกสารต้องส่งคีย์เข้ารหัสใน Credential Request หากค่าเป็น false กระเป๋าเอกสารเลือกส่งคีย์เข้ารหัสได้ | +| display | Optional | Array of objects | อาร์เรย์ที่มีคุณสมบัติการแสดงผลของผู้ออกเอกสารในแต่ละภาษา | +| credential_configurations_supported | Required | Object | วัตถุที่อธิบายรายละเอียดของเอกสารรับรองที่ผู้ออกเอกสารรองรับ แต่ละรายการระบุ `format: "dc+sd-jwt"` และ `vct`; คำอธิบายการแสดงผลและรายการ claims อยู่ใน `credential_metadata` ตาม OID4VCI Final Appendix A และ B.2 โดย `path` เป็นอาร์เรย์ที่ไม่ว่างตาม Appendix C | + +> *ต้องใส่เมื่อมี credential_response_encryption + +#### (4) การร้องขอ Token + +![Token Exchange](images/p29-0.png) + +**รูปที่ 10 Token Exchange** + +- กระเป๋าเอกสารส่ง Pre-Authorized Code ที่ได้รับในขั้นตอนที่ 3 ไปยัง Token Endpoint หากผู้ออกเอกสารกำหนดให้ต้องใช้ Transaction Code กระเป๋าเอกสารจะส่งไปด้วย +- ผู้ออกเอกสารรับคำร้องขอโทเคนและทำการตรวจสอบสิทธิ์การเข้าถึงข้อมูล หากถูกต้องผู้ออกเอกสารจะดำเนินการสร้าง Access Token และส่ง Token กลับไปให้กระเป๋าเอกสาร + +**ตัวอย่างการส่ง Token Request ของกระเป๋าเอกสาร (Pre-Authorized Code)** + +```http +POST /token HTTP/1.1 +Host: server.example.com +Content-Type: application/x-www-form-urlencoded + +grant_type=urn:ietf:params:oauth:grant-type:pre-authorized_code +&pre-authorized_code=SplxlOBeZQQYbYS6WxSbIA +&tx_code=493536 +``` + +**คำอธิบายค่าพารามิเตอร์ (Pre-Authorized Code)** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| grant_type | Required | String | ระบุ Grant Types ที่ Authorization Server ของผู้ออกเอกสารใช้สำหรับ Credential Offer ครั้งนี้ โดยในการศึกษาใช้เป็น urn:ietf:params:oauth:grant-type:pre-authorized_code | +| pre-authorized_code | Required | String | รหัสที่ได้จากผู้ออกเอกสารที่แสดงถึงการอนุญาตเพื่อขอรับเอกสารรับรองประเภทใดประเภทหนึ่ง | +| tx_code | Optional | String | Transaction Code ที่ได้จากผู้ออกเอกสาร | + +Issuer สร้าง Access Token ตาม OID4VCI §6 และส่ง Token Response กลับให้ Holder. ตัวอย่างนี้ใช้ `Bearer` ตามรูปแบบมาตรฐาน: + +**ตัวอย่าง HTTP Token Response (Pre-Authorized Code)** + +```http +HTTP/1.1 200 OK +Content-Type: application/json +Cache-Control: no-store + +{ + "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6Ikp..sHQ", + "token_type": "Bearer", + "expires_in": 86400 +} +``` + +`c_nonce` และ `c_nonce_expires_in` ไม่ใช่สมาชิกที่กำหนดไว้ใน Token Response ของ OID4VCI Final. หาก Issuer ต้องการให้ Wallet ใส่ nonce ใน proof, Issuer ต้องประกาศ Nonce Endpoint ใน Credential Issuer Metadata. Wallet ส่ง HTTP POST โดยไม่ใช้ Access Token; Issuer ตอบ HTTP 2xx พร้อม JSON `c_nonce` และ `Cache-Control: no-store` ตาม §7. + +**ตัวอย่าง Nonce Endpoint Response:** + +```http +HTTP/1.1 200 OK +Content-Type: application/json +Cache-Control: no-store + +{ + "c_nonce": "tZignsnFbp" +} +``` + +เมื่อ Issuer มี Nonce Endpoint, Wallet ต้องใส่ `c_nonce` ใน claim `nonce` ของ proof JWT ตาม Appendix F.1. + +#### (5) การร้องขอและการออกเอกสารรับรอง + +![Credential Request](images/p31-0.png) + +**รูปที่ 11 Credential Request** + +- กระเป๋าเอกสารส่ง Credential Request ไปยัง Credential Endpoint พร้อม Access Token และ `proofs` เมื่อ Metadata ของ Credential ที่ขอระบุ `proof_types_supported` [10, §8.2] +- ผู้ออกเอกสารตรวจสอบ Access Token และ proofs ก่อนออกเอกสารรับรอง +- เมื่อผ่านการตรวจสอบ ผู้ออกเอกสารจะส่งเอกสารรับรองกลับไปยังกระเป๋าเอกสารใน Credential Response + +**ตัวอย่างการส่ง HTTP Request** + +```http +METHOD: HttpMethod(value=POST) +Content-Type: application/json +Authorization: Bearer eyJhbGciOiJFZERTQSJ9.eyJzdWIiOiJhN2MwODczZS02Y2IxLTRjYmMtYWM2OS1hYTM3YWZlNzgwNTQiLCJpc3MiOiJodHRwczovL2lzc3Vlci1hcGktdGVzdC5ldGRhLm9yLnRoIiwiYXVkIjoiQUNDRVNTIn0.dH8bufDYHuMagSi3IpnUUcscYcZDtYgygFaDX5xY-LBSVM4eUpUj-a50rd9tFo4mMMHMo1OiPvFHguMV1KiSBw + +BODY +Content-Type: application/json + +{ + "credential_configuration_id": "TranscriptCredential", + "proofs": { + "jwt": [ + "" + ] + } +} +``` + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| credential_configuration_id | Required* | String | ตัวระบุ Credential Configuration ตามที่ประกาศไว้ใน `credential_configurations_supported` ของ Metadata ผู้ออกเอกสาร ใช้เมื่อ Authorization Details ใน Token Response ไม่มี `credential_identifiers`; ห้ามส่งพร้อม `credential_identifier` [10, §8.2] | +| proofs | Required* | Object | หลักฐานการครอบครองกุญแจที่จะผูกกับ Credential ที่ออก ต้องมีเมื่อ Metadata ของ Credential ที่ขอระบุ `proof_types_supported` วัตถุนี้มีชื่อ proof type เป็น key เช่น `jwt` และมีค่าเป็นอาร์เรย์ที่ไม่ว่างของ proofs ตามชนิดนั้น [10, §8.2] | +| credential_response_encryption | Optional | Object | ข้อมูลสำหรับเข้ารหัส Credential Response หากไม่มีพารามิเตอร์นี้ Credential Response ที่ส่งกลับมาจะไม่ถูกเข้ารหัส | + +ค่า JWT ในตัวอย่างเป็น placeholder; JWT ที่ส่งจริงต้องลงลายมือชื่อด้วยกุญแจที่จะผูกกับ Credential สำหรับ JWT proof ชนิด `jwt` ตาม OID4VCI 1.0 Final Appendix F.1, JOSE header ต้องมี `typ: "openid4vci-proof+jwt"` และ `alg` ที่ใช้ลายมือชื่อแบบ asymmetric ส่วน claims ต้องมี `aud` และ `iat`; ต้องมี `nonce` เมื่อผู้ออกเอกสารมี Nonce Endpoint ค่า `aud` ต้องเป็น Credential Issuer Identifier ส่วน `key_attestation` หากใช้ จะอยู่ใน JOSE header ของ JWT proof ตามข้อกำหนด Appendix D และ F.1 [10] + +Wallet Attestation ตาม Appendix E ใช้ยืนยันตัว Wallet กับ Authorization Server ในคำขอ PAR หรือ Token Request ตามวิธีที่ Authorization Server กำหนด [10] จึงไม่ใช่สมาชิกของ JSON body ใน Credential Request ตัวอย่างนี้ + +Credential Response อาจเป็นแบบทันทีหรือแบบรอการดำเนินการ: + +- กรณีตอบกลับทันที: ผู้ออกเอกสารออกเอกสารรับรองที่ร้องขอได้ทันทีและส่งไปยังกระเป๋าเอกสาร +- กรณีรอตอบกลับ (Deferred Response): ผู้ออกเอกสารอาจไม่สามารถออกเอกสารรับรองที่ร้องขอได้ทันที และจะส่งพารามิเตอร์ transaction_id ให้กับกระเป๋าเอกสารเพื่อใช้ขอรับเอกสารรับรองเมื่อพร้อม รหัสสถานะ HTTP ต้องเป็น 202 + +การเข้ารหัสข้อมูล Credential Response: + +- กรณีไม่มีการเข้ารหัส สื่อประเภทของคำตอบ (media type) ต้องถูกตั้งค่าเป็น application/json +- หากผู้ถือเอกสารร้องขอการเข้ารหัส Credential Response โดยส่ง credential_response_encryption ในคำขอ ผู้ออกเอกสารต้องเข้ารหัสข้อมูลใน Credential Response เป็น JWT โดยใช้พารามิเตอร์จาก credential_response_encryption และสื่อประเภทของคำตอบ (media type) ต้องถูกตั้งค่าเป็น application/jwt +- หากมีการร้องขอให้เข้ารหัสใน Credential Request แต่ Credential Response ไม่ได้ถูกเข้ารหัส กระเป๋าเอกสารควรปฏิเสธ Credential Response + +**ตัวอย่างการส่ง HTTP Response ของผู้ออกเอกสาร (ไม่ได้เข้ารหัส)** + +```http +HTTP/1.1 200 OK +Content-Type: application/json +Cache-Control: no-store + +{ + "credentials": [ + { + "credential": "eyJ0eXAiOiJkYytzZC1qd3QiLCJhbGciOiJFZERTQSJ9...LUpixVCWJk0eOt4CXQe1NXK~WyIzanFjYjY3ejl3a3NybmR2Iiwgc3R1ZGVudCIsICJOYXR0YXBvbmcgTWV0aGF3b24iXQ" + } + ] +} +``` + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| credentials | Optional | Array | รายการ Credential ที่ออกให้; แต่ละรายการมี object ที่มี `credential` ตาม §8.3 | +| transaction_id | Optional | String | ใช้เมื่อ Issuer ออก Credential แบบ Deferred; response ต้องมี HTTP 202 และ `interval` ตาม §8.3 | +| notification_id | Optional | String | ตัวระบุ Credential ที่ต้องส่งกลับใน Notification Request ตาม §8.3 และ §11.1 | + +## 5.4 Protocol สำหรับการใช้งาน VP + +โพรโทคอล **OpenID for Verifiable Presentations (OID4VP) 1.0 Final** [11] ต่อยอดจากโพรโทคอล OID4VCI โดยมีการนำโพรโทคอล OpenID Connect (OIDC) มาใช้งานร่วมกันกับเอกสารสำแดงดิจิทัล (VP) ดังรูปที่ 12 การร้องขอ claim ใช้ **Digital Credentials Query Language (DCQL)** [11] แทนกลไก Presentation Exchange รุ่นก่อนหน้า โดยระบุ `format: "dc+sd-jwt"` และรายการ claim ที่ต้องการโดยตรงในคำร้องขอ + +1. **OpenID Connect (OIDC):** เป็นโปรโตคอลที่ใช้ในการยืนยันตัวตนบนอินเทอร์เน็ต โดยสามารถใช้ในการลงชื่อเข้าใช้และรับรองตัวตนของผู้ใช้ได้ โดยมีการใช้ Access Token และ ID Token เพื่อยืนยันตัวตนและรับข้อมูลพื้นฐานของผู้ใช้ +2. **Verifiable Presentations (VP):** เป็นรูปแบบการนำเสนอข้อมูลที่เชื่อถือได้ ที่สามารถใช้ในการยืนยันข้อมูลหรือข้อมูลตัวตนของบุคคลหรือองค์กร โดยมีการลงนามด้วยลายมือชื่อดิจิทัลและเข้ารหัสเพื่อให้มั่นใจได้ว่าข้อมูลมีความน่าเชื่อถือและไม่ได้ถูกแก้ไขโดยไม่ได้รับอนุญาต + +![การใช้งาน OID4VP](images/p34-0.png) + +**รูปที่ 12 การใช้งาน OID4VP** + +![ขั้นตอนการทำ OID4VP](images/p35-0.png) + +**รูปที่ 13 ขั้นตอนการทำ OID4VP** + +### 5.4.1 กระบวนการทำงาน OID4VP + +การตรวจสอบข้อมูลเอกสารสำแดงดิจิทัล (VP) ใช้โพรโทคอล OID4VP 1.0 Final พร้อม DCQL มีขั้นตอนการทำงานตามรูปที่ 13 ดังนี้ + +1. ผู้ตรวจสอบเอกสารส่ง Authorization Request ให้ผู้ถือเอกสาร +2. ผู้ถือเอกสารส่ง VP ให้ผู้ตรวจสอบผ่าน Authorization Response + +#### (1) ผู้ตรวจสอบเอกสารส่ง Authorization Request ให้ผู้ถือเอกสาร + +![สร้าง Authorization QR Code](images/p36-0.png) + +**รูปที่ 14 สร้าง Authorization QR Code** + +- Verifier สร้าง QR +- ผู้ถือเอกสารดำเนินการ Scan QR Code หรือ Upload QR Code ดังรูปที่ 14 + +**ตัวอย่างพารามิเตอร์ Authorization Request หลังถอดรหัส** + +> ตัวอย่างนี้แสดงค่าพารามิเตอร์ให้อ่านง่าย ไม่ใช่ข้อความ wire format ที่ส่งตรงใน QR หรือ HTTP request ทุกกรณี: QR อาจมี `request_uri` ให้ Wallet ไปดึง Request Object; หากส่งพารามิเตอร์ object เช่น `dcql_query` ใน Authorization Request ตาม OAuth ให้ serialize เป็น JSON string แล้ว form-encode ตาม OID4VP §5.1 [11]. ตัวอย่างนี้สมมติว่า `client_id` เป็น client ที่ลงทะเบียนไว้ล่วงหน้า และ `response_uri` เป็น URI ที่ client นี้ได้รับอนุญาตให้ใช้เป็น `redirect_uri` ตาม OID4VP §8.2 และ §5.9 โดยใช้ HTTPS. + +```json +{ + "client_id": "verifier-example", + "response_uri": "https://verifier.com/VP/callback", + "response_type": "vp_token", + "response_mode": "direct_post", + "dcql_query": { + "credentials": [ + { + "id": "transcript", + "format": "dc+sd-jwt", + "meta": { "vct_values": ["https://credentials.example.com/vct/transcript"] }, + "claims": [ + { "path": ["student"] } + ] + } + ] + }, + "nonce": "fa2450d7-8ca5-40d2-8832-b03891c355be", + "state": "8c17d20f4a936be105fd7c28a6403b91" +} +``` + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| `client_id` | Required | String | ตัวระบุผู้ตรวจสอบเอกสาร; หากไม่ใช้ Client Identifier Prefix ค่านี้ต้องอ้างถึง client ที่ Wallet ลงทะเบียนไว้ล่วงหน้า; หากใช้ prefix ต้องระบุเป็น `:` ตาม OID4VP §5.9 | +| `response_uri` | Required เมื่อใช้ `direct_post` | String | HTTPS URI ที่รับ Authorization Response | +| `response_type` | Required | String | OAuth Response Type; ตัวอย่างนี้ใช้ `vp_token` | +| `response_mode` | Required | String | Response Mode; ตัวอย่างนี้ใช้ `direct_post` เพื่อให้ Wallet ส่งคำตอบผ่าน HTTPS ตาม OID4VP §8.2 | +| `dcql_query` หรือ `scope` | อย่างใดอย่างหนึ่ง Required | Object หรือ String | ต้องระบุ DCQL Query ด้วย `dcql_query` หรือด้วย `scope` ที่แทน DCQL Query; ห้ามส่งทั้งสองพร้อมกัน. ตัวอย่างใช้ `dcql_query` และ `vct_values` ต้องตรงกับค่า `vct` ในตัวอย่าง Issuer Metadata และ SD-JWT VC ข้างต้น | +| `client_metadata` | Optional | JSON object | Metadata ของผู้ตรวจสอบเอกสาร; ต้องเข้ารหัสเป็น UTF-8 เมื่อนำส่ง. OID4VP §5.1 กำหนดว่าค่าจากแหล่งข้อมูลที่เชื่อถือได้อื่นมี precedence และ metadata อื่นที่ไม่ได้กำหนดไว้ต้องถูกละเว้น เว้นแต่ profile จะระบุ | +| `nonce` | Required | String | ค่าสุ่มใหม่ที่ผู้ตรวจสอบสร้างและเก็บไว้ เพื่อผูก VP กับธุรกรรม ตาม OID4VP §5.2 | +| `state` | Required ตามเงื่อนไขใน OID4VP §5.3; มิฉะนั้น Optional | String | ใช้เชื่อมโยงคำตอบกับธุรกรรมเดิม; ในตัวอย่างใส่ไว้เพื่อให้ผู้ตรวจสอบจับคู่ response กับ session ได้ | + +#### (2) ผู้ถือเอกสารส่ง VP ให้ผู้ตรวจสอบผ่าน Authorization Response + +![OID4VP Initiation](images/p38-0.png) + +**รูปที่ 15 OID4VP Initiation** + +- Verifier สร้าง QR Code และส่งให้ Holder ทำการ Scan QR หรือ Upload file QR Code ดังรูปที่ 15 +- Holder จับคู่ VC ในเครื่องกับ `dcql_query` แล้วเลือก Disclosure ของ claim ที่ต้องการเปิดเผย ประกอบเป็น SD-JWT Presentation ตามโครงสร้างในตัวอย่างที่ 2 +- Holder ส่งข้อมูล VP ให้ทาง Verifier + +**ตัวอย่างค่าพารามิเตอร์ Authorization Response ก่อน form-encoding** + +> ตัวอย่างนี้แสดงค่าเพื่อให้อ่านง่าย ไม่ใช่ HTTP body ที่ส่งจริง เมื่อใช้ `direct_post` Wallet ส่ง Authorization Response ไปยัง `response_uri` ผ่าน HTTPS; ต้อง serialize ค่า object ของ `vp_token` เป็น JSON string แล้ว form-encode ค่าพารามิเตอร์ก่อนส่ง ตาม OID4VP §8.2 [11]. + +```json +{ + "vp_token": { + "transcript": ["eyJ0eXAiOiJkYytzZC1qd3QiLCJhbGciOiJFZERTQSJ9...LUp~WyIzanFjYjY3ejl3a3NybmR2Iiwgc3R1ZGVudCIsICJOYXR0YXBvbmcgTWV0aGF3b24iXQ~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9...ziRjjF8Z3V5QkHEhZTFplqnqfk2BxEtZDA"] + }, + "state": "8c17d20f4a936be105fd7c28a6403b91" +} +``` + +เมื่อนำส่งจริง HTTP request ใช้ `Content-Type: application/x-www-form-urlencoded`; ค่า `vp_token` จะเป็น JSON string ที่ถูก form-encode ไม่ใช่ JSON object ที่วางตรงใน body. + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| `vp_token` | Required เมื่อส่ง Authorization Response สำเร็จ | JSON object | จับคู่ `id` ของ DCQL Credential Query กับ array ของ Presentation ที่ตรงกับ query; ค่าในตัวอย่างเป็น SD-JWT Presentation (`Issuer-signed JWT~Disclosures~KB-JWT`) หนึ่งรายการ ตาม OID4VP §8.1 [11] | +| `state` | Required ตามเงื่อนไขใน OID4VP §5.3; มิฉะนั้น Optional | String | ใช้เชื่อมโยง Response กับ Request เดิม | + +### 5.4.2 กระบวนการ Resolve DID เพื่อตรวจสอบ VP + +กระบวนการ Resolve DID เพื่อตรวจสอบ VP มีขั้นตอนดังรูปที่ 16 + +![Resolve DID](images/p39-0.png) + +**รูปที่ 16 Resolve DID** + +- ผู้ตรวจสอบเอกสารรับข้อมูล VP จากผู้ถือเอกสาร ดำเนินการ Decode VP และตรวจสอบความถูกต้องของโครงสร้าง +- ผู้ตรวจสอบเอกสารทำการส่งข้อมูล DID ID ไปตรวจสอบข้อมูลใน Registry + - ข้อมูล DID => “did:tbsi:zv8fVB1i6S7MLMZX8wd3Ayo” +- การ Resolve ข้อมูลใน Registry มี 2 รูปแบบ + - ทำการ Request ผ่าน DIF Universal Resolver + - ทำการ Request ไปยัง Registry โดยตรง ซึ่งในรายงานฉบับนี้จะใช้วิธี “http get” +- ข้อมูลที่ได้จากการทำ Resolve คือข้อมูล DID Doc ของผู้ออกเอกสาร และส่งข้อมูล DID Doc กลับมาให้ผู้ตรวจสอบเอกสาร + +การตรวจสอบข้อมูลใน Registry ในรายงานฉบับนี้จะระบุพารามิเตอร์ดังนี้ + +**ตัวอย่างการส่ง HTTP Request** + +```http +GET 'http://example.verifier_url/GetDIDDoc?' Id=did:tbsi:zv8fVB1i6S7MLMZX8wd3Ayo +``` + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | รายละเอียด | +|-------------|----------|------------| +| Id | Required | หมายเลข DID | + +ข้อมูลที่ได้จากการ Resolve และส่งกลับไปให้ Verifier + +**ตัวอย่างการส่ง HTTP Response ของ Registry ไปยัง Verifier** + +```json +{ + "status": 200, + "message": "Success", + "data": { + "@context": "https://www.context.org", + "id": "did:tbsi:zv8fVB1i6S7MLMZX8wd3Ayo", + "verificationMethod": [ + { + "id": "did:tbsi:zv8fVB1i6S7MLMZX8wd3Ayo#1XmYo2EnZwAL0giRxBWMADGk2Zei+TD2VKx7aWgWWAo=", + "type": "JsonWebKey2020", + "publicKeyJwk": { + "kty": "OKP", + "crv": "Ed25519", + "alg": "EdDSA" + } + } + ], + "assertionMethod": [] + } +} +``` + +**คำอธิบายค่าพารามิเตอร์** + +| พารามิเตอร์ | Required | Type | รายละเอียด | +|-------------|----------|------|------------| +| Status | Required | Number | สถานะการเรียกใช้งาน | +| Message | Required | String | คำอธิบาย status | +| Data | Required | JSON | ข้อมูล DID DOC | + +## 5.5 Universal Resolver + +เพื่อให้ทุกระบบนิเวศ (ecosystem) ทำงานร่วมกันได้ จำเป็นต้องมีตัวกลางสำหรับรวบรวมข้อมูลที่ใช้ตรวจสอบและยืนยันความถูกต้องของข้อมูลสำคัญในรูปแบบมาตรฐานเดียวกัน จึงเกิดแนวคิดการใช้ DIF Universal Resolver + +DIF Universal Resolver เป็นจุดเชื่อมต่อไปยังระบบนิเวศ (ecosystem) แต่ละแห่ง เพื่อให้การทำงานร่วมกัน (interoperability) เกิดขึ้นได้ แต่ละระบบนิเวศต้องลงทะเบียนใช้งาน DIF Universal Resolver โดยข้อมูลอยู่ในรูปแบบไฟล์อิเล็กทรอนิกส์มาตรฐานเดียวกันทั้งระบบนิเวศ และเมื่อต้องการตรวจสอบความถูกต้องของข้อมูลจากระบบนิเวศใด ก็สามารถสอบถามผ่าน DIF Universal Resolver ได้ทันที ทำให้แต่ละขั้นตอนดำเนินการได้รวดเร็วและเป็นมาตรฐานเดียวกัน + +## 5.6 บทบาทและกระบวนการที่เกี่ยวข้องภายใต้ VC Ecosystem + +รายงานฉบับนี้สรุปบทบาทและกระบวนการที่เกี่ยวข้องภายใต้ VC Ecosystem ดังรูปที่ 17 โดยมีรายละเอียดของแต่ละบทบาทดังนี้ + +![บทบาทของผู้ที่เกี่ยวข้องกับการใช้งานเอกสารรับรองดิจิทัล](images/p41-0.png) + +**รูปที่ 17 บทบาทของผู้ที่เกี่ยวข้องกับการใช้งานเอกสารรับรองดิจิทัล** + +**ก. ผู้ออกเอกสาร (Issuer) และกระบวนการที่เกี่ยวข้อง** + +1. สร้าง DID Document ในรูปแบบ Legal Person +2. ลงทะเบียนใน Registry +3. เป็นผู้สร้าง VC +4. ยึดมาตรฐานการส่ง VC ในรูปแบบ Protocol OID4VCI 1.0 Final +5. สร้างและแสดง QR Code เพื่อให้ Holder เข้ามาร้องขอข้อมูลที่ต้องการ +6. ออก Token เพื่อใช้ในการยืนยันการส่ง VC +7. ตรวจสอบความถูกต้องของข้อมูลร้องขอ VC ที่ได้รับจาก Holder ส่งข้อมูล VC ในรูปแบบ SD-JWT VC (`dc+sd-jwt`) ให้กับทาง Holder + +**ข. เจ้าของกระเป๋าเอกสารดิจิทัล (Wallet Holder) และกระบวนการที่เกี่ยวข้อง** + +1. สร้าง DID Document ในรูปแบบ Natural Person +2. ร้องขอข้อมูลที่ต้องการจาก Issuer +3. Scan QR Code ที่ Issuer แสดงขึ้นมา เพื่อดำเนินการขอข้อมูล VC ในรูปแบบ Protocol OID4VCI 1.0 Final +4. ร้องขอ Token จาก Issuer เพื่อใช้ตรวจสอบการขอ VC +5. จัดเก็บ VC ที่ได้จาก Issuer ใน Wallet สำเร็จ +6. เลือก Verifier ที่ต้องการส่งข้อมูล VC ให้ +7. สร้างข้อมูล VC ให้อยู่ในรูปแบบ VP โดยเลือก Disclosure ของ claim ที่ต้องการเปิดเผยและสร้าง Key Binding JWT +8. Scan QR Code ที่ Verifier แสดงขึ้นมา เพื่อดำเนินการส่งข้อมูล VP ในรูปแบบ Protocol OID4VP 1.0 Final พร้อม DCQL +9. ร้องขอ Token จาก Verifier เพื่อใช้ตรวจสอบการส่ง VP +10. ดำเนินการส่งข้อมูล VP ให้กับ Verifier สำเร็จ + +**ค. ผู้ตรวจสอบเอกสาร (Verifier) และกระบวนการที่เกี่ยวข้อง** + +1. ยึดมาตรฐานการรับ VP ในรูปแบบ Protocol OID4VP 1.0 Final พร้อม DCQL +2. สร้างและแสดง QR Code เพื่อให้ Holder เข้ามาร้องขอการส่งข้อมูล +3. ออก Token เพื่อใช้ในการยืนยันการรับ-ส่ง VP +4. รับข้อมูล VP จาก Holder สำเร็จ +5. ดึงข้อมูล (Resolve) จาก Registry จะดำเนินการผ่านขั้นตอน Decentralized Identity Foundation Universal Resolver (DIF Universal Resolver) เพื่อนำมาตรวจสอบความถูกต้องของผู้ออกข้อมูล VC +6. ดำเนินการตรวจสอบความถูกต้องของข้อมูล VP ที่ได้รับมา โดยตรวจสอบรายละเอียด ดังนี้ + - ถอดโครงสร้างเอกสารสำแดงดิจิทัล (Decode the VP) เป็นการแยกส่วนตามสัญลักษณ์ "~" ต้องประกอบด้วย + - Issuer-signed JWT (คำอธิบายข้อมูลของ VC และข้อความยืนยันที่ถูกแฮชไว้ใน `_sd`) + - Disclosures ของ claim ที่เปิดเผย + - Key Binding JWT (ข้อพิสูจน์การครอบครองของผู้ถือเอกสาร) + - ตรวจสอบลายมือชื่อดิจิทัล (Verify the Signature) จะตรวจสอบความถูกต้องของข้อมูลกุญแจสาธารณะของผู้ออกเอกสารรับรอง และตรวจลายมือชื่อ Key Binding JWT ด้วยกุญแจของผู้ถือเอกสาร + - ตรวจสอบความถูกต้องของผู้ออกเอกสาร (Check Issuer's Credentials) + - ตรวจสอบความถูกต้องของโครงสร้างเอกสารรับรองดิจิทัล (Validate the Credential Schema) + - ตรวจสอบวันหมดอายุของเอกสารรับรองดิจิทัล (Validate the Credential Expiry) + +--- + +**การนำทาง:** [⬅️ บทที่ 4 — แนวคิดและองค์ประกอบที่ส่งเสริมการทำงานร่วมกัน](04-interoperability-concepts.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 6 — Decentralized Identifiers Methodologies ➡️](06-did-methodologies.md) diff --git a/docs/thai-vc-arf/06-did-methodologies.md b/docs/thai-vc-arf/06-did-methodologies.md new file mode 100644 index 0000000..9d56ef0 --- /dev/null +++ b/docs/thai-vc-arf/06-did-methodologies.md @@ -0,0 +1,113 @@ +--- +description: "6. Decentralized Identifiers Methodologies — Thai VC ARF 2.0 DRAFT 0" +--- + +# 6. Decentralized Identifiers Methodologies + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +บทนี้อธิบายวิธีการของตัวระบุแบบกระจายศูนย์ (decentralized identifier: DID) ที่รายงานฉบับนี้ใช้ ครอบคลุมรูปแบบ DID การสร้างและการลงทะเบียน DID Document และการดึงข้อมูล (resolve) DID Document + +เป็นตัวระบุ (identifier) บนระบบทะเบียนเอกสารรับรอง (verifiable data registry) แบบกระจายศูนย์ที่ใช้ URL ในการเชื่อมโยงกับเอนทิตี้ โดยทั่วไป DID จะนำมาใช้ใน VC เพื่อแสดงความเชื่อมโยงไปยังเจ้าของข้อความซึ่งทำให้สามารถส่งต่อหรือโอนย้าย VC จากกระเป๋าเอกสารดิจิทัลหนึ่งไปยังกระเป๋าเอกสารดิจิทัลอีกอันหนึ่งได้โดยไม่จำเป็นต้องออก VC ชุดใหม่อย่างไรก็ตาม VC ไม่จำเป็นต้องใช้ identifier เป็น DID ก็ได้ + +## 6.1. รูปแบบ DID + +อ้างอิงตาม W3C โครงสร้างของ DID สามารถแสดงได้ตามรูปที่ 18 ซึ่งประกอบด้วย 3 ส่วน ได้แก่ (1) scheme (2) DID method และ (3) DID method-specific string + +![โครงสร้าง DID](images/p44-0.png) + +**รูปที่ 18 โครงสร้าง DID** + +## 6.2. การสร้างและการลงทะเบียน DID Document + +ยกตัวอย่างการทำ Digital Document โครงสร้างของ DID จะเป็นตามรูปที่ 19 ในส่วนของ DID method จะระบุเป็น “tbsi” และ DID method-specific ขึ้นต้นด้วยตัวอักษร “z” และชุดข้อความสุ่ม 16 ตัวอักษร + +![โครงสร้าง DID Document](images/p44-1.png) + +**รูปที่ 19 ตัวอย่างโครงสร้าง DID** + +จากโครงสร้าง DID ข้างต้น เมื่อทำการสร้าง DID จะมีลักษณะองค์ประกอบ ตามรูปที่ 20 + +{/* pdf page 45 */} + +![DID ID](images/p45-0.png) + +**รูปที่ 20 DID ID** + +ข้อมูลที่ได้จากการสร้าง DID จะนำไปใช้ในการสร้าง DID Document เพื่อใช้ในการลงทะเบียน (Register) ในระบบ Registry ตามรูปที่ 21 การลงทะเบียนใน Registry จะทำโดยใช้โปรโตคอล OID4VP ซึ่งข้อมูลที่นำมาใช้ในการลงทะเบียน คือ DID Document ในรายงานฉบับนี้จะเป็นการลงทะเบียนแบบออฟไลน์ (Offline) + +![การลงทะเบียน DID Document](images/p45-1.png) + +**รูปที่ 21 การลงทะเบียน DID Document** + +(1) DID Document + +เป็นชุดข้อมูลที่อธิบาย DID ประกอบด้วยข้อมูลที่ใช้ในการเข้ารหัสลับ (encrypted data) และกุญแจสาธารณะ (public key) ดังแสดงตามรูปที่ 22 + +{/* pdf page 46 */} + +![โครงสร้าง DID Document](images/p46-0.png) + +**รูปที่ 22 โครงสร้าง DID Document** + +## 6.3. การดึงข้อมูล (Resolve) DID Document + +ระบบของประเทศไทยใช้ DID Method หลัก 3 รูปแบบ แต่ละรูปแบบมีวิธี resolve ต่างกัน ดังนี้ + +| DID Method | ผู้ใช้ | วิธี Resolve | ต้อง Resolver กลาง? | +|------------|--------|-------------|:-------------------:| +| `did:web` | หน่วยงาน (Issuer, Verifier, Wallet Provider) | HTTPS GET ไปที่ `/.well-known/did.json` ของโดเมนต์นั้น | ไม่ | +| `did:jwk` | ผู้ถือเอกสาร (Holder) | กุญแจสาธารณะฝังอยู่ในสายอักขระ DID โดยตรง ไม่ต้องดึงจากที่อื่น | ไม่ | +| `did:ndid` | ระบบตัวตนของไทย (เช่น NDID) | ส่งคำขอไปยัง ETDA Trust Gateway ซึ่งทำหน้าที่เป็น Universal Resolver | ใช่ | + +```mermaid +flowchart LR + USER["ผู้ตรวจสอบ/กระเป๋า"] --> CHECK{"DID Method?"} + CHECK -->|did:web| HTTPS["HTTPS GET
.well-known/did.json"] + CHECK -->|did:jwk| SELF["แยกกุญแจจากสายอักขระ
(self-contained)"] + CHECK -->|did:ndid หรือ custom| UR["ETDA Trust Gateway
(Universal Resolver)"] + HTTPS --> DOC["DID Document"] + SELF --> KEY["กุญแจสาธารณะ"] + UR --> DOC + + style CHECK fill:#FFF3E0,stroke:#E65100 + style UR fill:#E3F2FD,stroke:#1565C0 +``` + +{/* TODO: อัปเดตแผนภาพและรายละเอียดการ resolve ของ did:ndid เมื่อมีการกำหนด spec ของ did:ndid method อย่างเป็นทางการ */} + +DID Document ที่ได้จากการ resolve จะมีกุญแจสาธารณะที่ใช้ตรวจลายมือชื่อของเอนทิตีนั้น ทั้งนี้ การ resolve ผ่าน DIF Universal Resolver ยังคงเป็นกลไกสำหรับ custom DID method ที่ยังไม่ได้จดทะเบียนใน W3C DID method registry + +{/* pdf page 47 */} + +![ขั้นตอน Resolve DID Document](images/p47-0.png) + +**รูปที่ 23 ขั้นตอน Resolve DID Document** + +![การดึงข้อมูลผ่าน http get](images/p47-1.png) + +**รูปที่ 24 การดึงข้อมูลผ่าน http get** + +ในตัวอย่าง จะเป็นการแสดงถึงการเรียกในรูปแบบ http get โดย Key ที่ส่งไปพร้อมกับ URL คือ DID ของ Issuer ที่ได้มาจากข้อมูลของ VC และเมื่อส่งข้อมูลในรูปแบบ URL แล้วข้อมูลถูกต้อง ทาง Registry จะตอบกลับเป็น DID Document มาให้ โดย DID Document จะเป็นของ Issuer ที่ได้ทำการลงทะเบียนไว้กับ Registry + +{/* pdf page 48 */} + +![ข้อมูลที่ผ่านการ resolve](images/p48-0.png) + +**รูปที่ 25 ข้อมูลที่ผ่านการ resolve** + +![การตั้งค่า Registry สำหรับ DIF Universal Resolver](images/p48-1.png) + +**รูปที่ 26 การตั้งค่า Registry สำหรับ DIF Universal Resolver** + +{/* pdf page 49 */} + +--- + +**การนำทาง:** [⬅️ บทที่ 5 — มาตรฐานและข้อปฏิบัติสำหรับ VC และ VP](05-standards-and-compliance.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 6.5 — กลไกการสร้างความน่าเชื่อถือ (Trust-Building Mechanism) ➡️](06.5-trust-building-mechanism.md) diff --git a/docs/thai-vc-arf/06.5-trust-building-mechanism.md b/docs/thai-vc-arf/06.5-trust-building-mechanism.md new file mode 100644 index 0000000..4cbde77 --- /dev/null +++ b/docs/thai-vc-arf/06.5-trust-building-mechanism.md @@ -0,0 +1,223 @@ +--- +description: "6.5 กลไกการสร้างความน่าเชื่อถือ (Trust-Building Mechanism): Trusted List และแบบจำลองความน่าเชื่อถือ 3 รูปแบบ — Thai VC ARF 2.0 DRAFT 0" +--- + +# 6.5 กลไกการสร้างความน่าเชื่อถือ (Trust-Building Mechanism): Trusted List และแบบจำลองความน่าเชื่อถือ 3 รูปแบบ + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📊 ส่วนขยาย (extension) — จัดทำเพิ่มเติมโดยคณะทำงาน VC มิได้เป็นส่วนหนึ่งของรายงานต้นฉบับ Thai VC ARF เวอร์ชัน 1.1 +> **แหล่งข้อมูล:** สรุปและสังเคราะห์จากการวิเคราะห์เปรียบเทียบช่องโหว่ความปลอดภัยของ PKI การเข้ารหัสลับ และระบบ VC [G1] การเปรียบเทียบสถาปัตยกรรมความน่าเชื่อถือ 3 รูปแบบ [G2] [G3] และมาตรฐานที่เกี่ยวข้อง ได้แก่ W3C DID Core [G4] OID4VCI [G5] OID4VP [G6] SD-JWT VC [G7] IETF Token Status List [G8] ETSI TS 119 602 [G9] +> **เอกสารที่เกี่ยวข้อง:** [§3.3 ระบบทะเบียนเอกสารรับรอง](03-usage-overview.md) · [§6 DID Methodologies](06-did-methodologies.md) · [§7 การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List](07-cross-ecosystem-interoperability.md) · [§9 Trust Model 3](09-trust-model-3.md) · [research/31 ช่องโหว่ PKI/คริปโทฯ vs VC](../research/31-security-gaps-pki-crypto-vs-vc.md) · [ดัชนี ARF](README.md) +*/} + +--- + +บทนี้เป็นส่วนขยายของรายงาน Thai VC ARF เวอร์ชัน 1.1 จัดทำขึ้นเพื่อเป็นบทเกริ่นนำเรื่องกลไกการสร้างความน่าเชื่อถือ (trust-building mechanism) ก่อนเข้าสู่บทที่ 7 (การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List) บทที่ 8 (Implementation Guidelines) และบทที่ 9 (Trust Model 3) โดยรายงานต้นฉบับเวอร์ชัน 1.1 ระบุไว้ใน [§3.3](03-usage-overview.md) ว่าระบบทะเบียนเอกสารรับรอง (verifiable data registry) อาจจัดเก็บรายชื่อของเอนทิตี (entity) ได้ แต่มิได้อธิบายว่ากลไกที่ทำให้รายชื่อดังกล่าวน่าเชื่อถือทำงานอย่างไร ทั้งบทที่ 7 อ้างถึง "ผลของ Trusted List" และบทที่ 9 กล่าวถึง Trust Model 3 โดยตรง จึงจำเป็นต้องมีบทเกริ่นนำเพื่อให้ผู้อ่านเข้าใจพื้นฐานก่อน + +บทนี้ครอบคลุม 3 ส่วน ดังนี้ (1) ความหมายของ Trusted List และประโยชน์ของ Trusted List ต่อระบบ (2) สรุปพื้นฐานเปรียบเทียบระหว่างโครงสร้างพื้นฐานกุญแจสาธารณะ (public key infrastructure: PKI) กับการเข้ารหัสลับแบบกระจายศูนย์ (decentralized cryptography) ตาม [G1] และ (3) ภาพรวมของแบบจำลองความน่าเชื่อถือ (trust model) ทั้ง 3 รูปแบบ เพื่อให้ผู้อ่านเข้าใจ Trust Model 1 และ Trust Model 2 ก่อนศึกษารายละเอียดของ Trust Model 3 ในบทที่ 9 + +อย่างไรก็ตาม บทนี้เป็นบทเกริ่นนำเชิงภาพรวม มิได้ทดแทนรายละเอียดในบทอื่น รายละเอียดของ Trust Model 3 อยู่ในบทที่ 9 รายละเอียดการจัดการกุญแจ (key management) และการหมุนกุญแจ (key rotation) อยู่ในบทที่ 12 และรายละเอียดสถานะและการเพิกถอน (revocation) อยู่ในบทที่ 13 + +--- + +## 6.5.1 บทบาทของบทนี้และขอบเขต + +รายงานฉบับนี้กำหนดให้บทนี้ทำหน้าที่เชื่อม (bridge) ระหว่างบทที่ว่าด้วยตัวระบุแบบกระจายศูนย์ (decentralized identifier: DID) ใน [§6](06-did-methodologies.md) กับบทที่ว่าด้วยการทำงานร่วมกันและความน่าเชื่อถือใน [§7](07-cross-ecosystem-interoperability.md) ถึง [§9](09-trust-model-3.md) โดยมีขอบเขต ดังนี้ + +1. **อยู่ในขอบเขต** — ความหมายและประโยชน์ของ Trusted List ภาพรวมของช่องโหว่ความปลอดภัย (security gap) ที่ระบบต้องปิด การเปรียบเทียบแนวทาง PKI กับการเข้ารหัสลับแบบกระจายศูนย์ และภาพรวมของแบบจำลองความน่าเชื่อถือทั้ง 3 รูปแบบ +2. **ไม่อยู่ในขอบเขต** — กระบวนการทำงานเชิงลึกของ Trust Model 3 (อยู่ในบทที่ 9) การจัดการกุญแจและการหมุนกุญแจ (อยู่ในบทที่ 12) โครงสร้างข้อมูลสถานะและการเพิกถอน (อยู่ในบทที่ 13) และการเชื่อมโยงข้ามพรมแดน ซึ่งมีรายละเอียดในแหล่งอ้างอิงเฉพาะเรื่อง + +--- + +## 6.5.2 ปัญหาความน่าเชื่อถือที่ระบบต้องแก้ + +ก่อนอธิบายว่า Trusted List ช่วยอะไร รายงานฉบับนี้สรุปช่องโหว่ความปลอดภัยที่ระบบเอกสารรับรองดิจิทัลต้องปิดไว้ก่อน โดยอ้างอิงการวิเคราะห์ตาม [G1] ซึ่งจัดช่องโหว่หลักเป็น 7 หมวด (G1–G7) ดังตารางต่อไปนี้ + +| หมวด | ช่องโหว่ | ประเด็นที่ต้องตอบ | +|:---:|---------|-------------------| +| G1 | การปลอมตัวเป็นผู้ออกเอกสาร (impersonation) | ผู้ตรวจสอบทราบได้อย่างไรว่าผู้ลงลายมือชื่อเป็นตัวจริง | +| G2 | กุญแจรั่วหรือถูกขโมย (key compromise) | เมื่อกุญแจรั่วไหล จะจำกัดความเสียหายอย่างไร | +| G3 | การเพิกถอน (revocation) | ยกเลิกสิ่งที่ออกไปแล้วได้หรือไม่ และเร็วเพียงใด | +| G4 | การนำลายมือชื่อเก่ามาใช้ซ้ำ (replay) | ป้องกันการนำข้อมูลเก่ามาใช้หลอกได้อย่างไร | +| G5 | จุดล้มเหลวจุดเดียว (single point of failure) | หากศูนย์กลางหยุดทำงาน ระบบยังตรวจสอบได้หรือไม่ | +| G6 | ความเป็นส่วนตัว (privacy) | ตรวจสอบได้โดยไม่เปิดเผยข้อมูลเกินจำเป็นหรือไม่ | +| G7 | การกู้คืนกุญแจของผู้ใช้ (user key recovery) | เมื่อผู้ใช้ทำกุญแจหาย จะกู้คืนได้หรือไม่ | + +**ตารางที่ 6.5-1 ช่องโหว่ความปลอดภัย 7 หมวด (G1–G7)** [G1] + +รายงานฉบับนี้ยึดหลักการป้องกันเป็นชั้น (defense-in-depth) กล่าวคือ ระบบที่มั่นคงปลอดภัยไม่ควรพึ่งการป้องกันชั้นเดียว แต่ต้องซ้อนหลายชั้น เพื่อให้เมื่อชั้นหนึ่งบกพร่อง ยังมีชั้นถัดไปรองรับ ดังรูปที่ 6.5-1 + +```mermaid +flowchart TB + L1["ชั้น 1 — กุญแจ
จัดเก็บกุญแจในอุปกรณ์ที่มั่นคงปลอดภัย เช่น HSM"] + L2["ชั้น 2 — ลายมือชื่อ
ลงลายมือชื่อข้อมูลเพื่อป้องกันการปลอมแปลง"] + L3["ชั้น 3 — Trusted List
ตรวจสอบว่าเอนทิตีเป็นตัวจริงและได้รับการรับรอง"] + L4["ชั้น 4 — การเพิกถอน
ยกเลิกกุญแจหรือเอกสารที่มีปัญหา"] + L5["ชั้น 5 — นโยบาย fail-closed
เมื่อไม่มั่นใจ ให้ปฏิเสธไว้ก่อน"] + L1 --> L2 --> L3 --> L4 --> L5 --> OK["ผลลัพธ์ — เชื่อถือได้"] +``` + +**รูปที่ 6.5-1 การป้องกันเป็นชั้น (defense-in-depth)** [G1] + +--- + +## 6.5.3 ความหมายของ Trusted List และการแก้ปัญหาความน่าเชื่อถือ + +ระบบรายชื่อที่น่าเชื่อถือ (Trusted List) หมายถึง รายการของเอนทิตีที่ได้รับการตรวจรับรอง (audit) และลงลายมือชื่อดิจิทัล (digital signature) กำกับโดยสำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) เพื่อใช้ตัดสินว่าเอนทิตีใดได้รับอนุญาตให้ทำหน้าที่ผู้ออกเอกสาร (issuer) ผู้ตรวจสอบเอกสาร (verifier) หรือผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet provider) รายการทั้งสามประเภทเผยแพร่เป็น JWT ที่มี payload แบบ LoTE; ตัวอย่างที่มีอยู่แสดงข้อมูลกุญแจหรือ DID ใน `ServiceDigitalIdentity` แต่ฟิลด์สถานะและขอบเขตสิทธิ์บางส่วนยังต้องกำหนดใน Thai profile ก่อนใช้ตัดสินใจจริง [G2] [G9] [รูปแบบ JWT ที่อ้างอิง LoTE](../research/42-trusted-list-lote-jwt-format.md) + +Trusted List ช่วยแก้ปัญหาความน่าเชื่อถือ ดังนี้ + +1. **ปิด G1 (การปลอมตัว)** — เอนทิตีทุกรายต้องผ่านการตรวจรับรองจาก สพธอ. ก่อนถูกบันทึกลง Trusted List ผู้ตรวจสอบจึงเทียบกุญแจในลายมือชื่อกับกุญแจใน Trusted List เพื่อยืนยันว่าเป็นตัวจริง +2. **ช่วยปิด G3 (การเพิกถอน)** — เมื่อเอนทิตีมีปัญหา สพธอ. เปลี่ยนสถานะใน Trusted List เป็นระงับ (suspended) หรือเพิกถอน (revoked) ได้ ทำให้ผู้ตรวจสอบปฏิเสธเอนทิตีนั้นได้ +3. **รองรับ G5 (จุดล้มเหลวจุดเดียว)** — เอนทิตีดึงข้อมูล Trusted List มาจัดเก็บไว้ในเครื่อง (local cache) แล้วตรวจสอบระหว่างกันได้โดยไม่ต้องเรียกไปยัง สพธอ. ทุกครั้ง จึงกระจายสำเนา Trusted List ไปหลายจุดได้ + +ผู้รับ Trusted List ต้องตรวจสอบลายมือชื่อดิจิทัลของ สพธอ. ทุกครั้ง รวมถึงกรณีที่รับไฟล์ผ่านโครงข่ายกระจายเนื้อหา (content delivery network: CDN) กลไกการทำงานพื้นฐานแสดงได้ดังรูปที่ 6.5-2 โดยมีรายละเอียดเชิงลึกในบทที่ 9 + +```mermaid +flowchart LR + ETDA["สพธอ. ตรวจรับรอง (audit)
แล้วลงลายมือชื่อ Trusted List"] + PUB["เผยแพร่ Trusted List ที่ลงลายมือชื่อแล้ว"] + CACHE["เอนทิตีดึงมาจัดเก็บ (cache)
ตรวจลายมือชื่อของ สพธอ. ก่อนใช้"] + VERIFY["เทียบกุญแจ + บทบาท + สถานะ
→ ตรวจลายมือชื่อของ VC/VP"] + ETDA --> PUB --> CACHE --> VERIFY +``` + +**รูปที่ 6.5-2 กลไกพื้นฐานของ Trusted List — ตรวจรับรอง ลงลายมือชื่อ เผยแพร่ และตรวจสอบ** [G2] [G9] + +--- + +## 6.5.4 ความน่าเชื่อถือ 2 สายหลัก: PKI และการเข้ารหัสลับแบบกระจายศูนย์ + +รายงานฉบับนี้สรุปพื้นฐานตาม [G1] ว่า วิธีทำให้ลายมือชื่อดิจิทัลน่าเชื่อถือมี 2 สายหลัก ได้แก่ PKI ซึ่งมีตัวกลางที่เชื่อถือได้ และการเข้ารหัสลับแบบกระจายศูนย์ ซึ่งไม่มีตัวกลาง เนื้อหาส่วนนี้เป็นบทสรุปเพื่อให้เข้าใจว่าเหตุใดระบบ VC ของไทยจึงเลือกแนวทางแบบผสม รายละเอียดฉบับเต็มอยู่ใน [research/31](../research/31-security-gaps-pki-crypto-vs-vc.md) + +### 6.5.4.1 PKI — มีตัวกลางที่เชื่อถือได้ + +PKI ใช้ผู้ให้บริการออกใบรับรอง (certification authority: CA) เป็นตัวกลางตรวจสอบตัวตนก่อนออกใบรับรอง (certificate) แล้วสร้างห่วงโซ่ความเชื่อถือ (chain of trust) ไล่ขึ้นไปถึง Root CA [G10] PKI ปิดช่องโหว่ได้ ดังนี้ + +1. **G1 การปลอมตัว** — CA ตรวจตัวตนก่อนออกใบรับรอง และมีห่วงโซ่ความเชื่อถือให้ตรวจสอบย้อนกลับได้ [G10] +2. **G2 กุญแจรั่ว** — จัดเก็บกุญแจในฮาร์ดแวร์ความมั่นคงปลอดภัย (hardware security module: HSM) [G14] และกำหนดอายุการใช้กุญแจ (cryptoperiod) ตามคำแนะนำการจัดการกุญแจ [G15] +3. **G3 การเพิกถอน** — ประกาศยกเลิกใบรับรองผ่านบัญชีเพิกถอน (certificate revocation list: CRL) หรือตรวจสถานะแบบเรียลไทม์ผ่าน OCSP (online certificate status protocol) [G10] [G11] + +จุดแข็งของ PKI คือมีผู้รับผิดชอบชัดเจนและเพิกถอนสิ่งที่รั่วไหลได้จริง จึงเหมาะกับงานระดับชาติที่ต้องมีความรับผิดชอบตามกฎหมาย ทั้งนี้ จุดอ่อนคือ หาก CA ถูกเจาะจะกระทบทั้งระบบ (G5) จึงต้องป้องกัน CA อย่างเข้มงวด [G1] + +### 6.5.4.2 การเข้ารหัสลับแบบกระจายศูนย์ — ไม่มีตัวกลาง + +การเข้ารหัสลับแบบกระจายศูนย์ เช่น เทคโนโลยีบล็อกเชน (blockchain) ใช้แนวคิดตรงข้าม คือไม่มีตัวกลาง ผู้ใช้แต่ละรายถือกุญแจของตนเอง และมีบัญชีสาธารณะ (ledger) ที่แก้ย้อนหลังไม่ได้ [G12] แนวทางนี้มีจุดเด่นและข้อจำกัด ดังนี้ + +1. **G5 จุดล้มเหลวจุดเดียว — ปิดได้ดีที่สุด** เพราะกระจายศูนย์ (decentralized) ไม่มีศูนย์กลางจุดเดียวให้หยุดทำงาน [G12] +2. **G7 การกู้คืนกุญแจ — ปิดได้ดี** ด้วยแนวคิดวลีกู้คืน (seed phrase) และการกู้คืนบัญชีโดยบุคคลหรืออุปกรณ์ที่ไว้วางใจ (social recovery) [G1] +3. **G3 การเพิกถอน — ทำไม่ได้ในระดับกุญแจดิบ** เนื่องจากไม่มีตัวกลางคอยยกเลิก หากกุญแจรั่วจึงทำได้เพียงย้ายทรัพย์สินไปยังที่อยู่ใหม่ [G12] + +รายงานฉบับนี้จึงประเมินว่า แนวคิด "ไม่มีตัวกลาง" ไม่เหมาะเป็นแกนหลักของเอกสารรับรองระดับชาติ เพราะระบบต้องเพิกถอนสิ่งที่รั่วไหลได้ อย่างไรก็ตาม แนวคิดการกู้คืนกุญแจของผู้ใช้ (G7) มีประโยชน์ และอาจนำมาใช้เสริมเฉพาะกุญแจในเครื่องของผู้ถือเอกสาร [G1] + +### 6.5.4.3 ตารางเปรียบเทียบและบทเรียนสำหรับระบบ VC + +การเปรียบเทียบความสามารถในการปิดช่องโหว่ของ 2 สายหลัก และบทเรียนสำหรับระบบ VC สรุปได้ดังตารางที่ 6.5-2 โดยใช้สัญลักษณ์ ✅ = ปิดได้ดี · 🟡 = ปิดได้บางส่วน · ❌ = ปิดไม่ได้หรือไม่เหมาะ + +| ช่องโหว่ | PKI | การเข้ารหัสลับแบบกระจายศูนย์ | บทเรียนสำหรับระบบ VC | +|---------|:---:|:---:|---------------------| +| G1 การปลอมตัว | ✅ | 🟡 | ใช้แนว PKI — มีตัวกลางตรวจตัวตน (Trusted List) | +| G2 กุญแจรั่ว | ✅ | 🟡 | ใช้แนว PKI (HSM + cryptoperiod) | +| G3 การเพิกถอน | ✅ | ❌ | จำเป็นต้องมี — ใช้ Trusted List status ร่วมกับ Token Status List [G8] | +| G4 การใช้ซ้ำ | ✅ | ✅ | ใช้ได้ทั้งคู่ (timestamp / nonce) | +| G5 จุดล้มเหลวจุดเดียว | 🟡 | ✅ | ใช้แนวการเข้ารหัสลับแบบกระจายศูนย์ — กระจายสำเนา Trusted List หลายจุด | +| G6 ความเป็นส่วนตัว | 🟡 | 🟡 | ใช้การเปิดเผยข้อมูลแบบเลือกได้ (selective disclosure) ด้วย SD-JWT VC [G7] | +| G7 การกู้คืนกุญแจผู้ใช้ | ❌ | ✅ | ใช้แนวการเข้ารหัสลับแบบกระจายศูนย์ เสริมเฉพาะกุญแจในเครื่องผู้ใช้ | + +**ตารางที่ 6.5-2 การปิดช่องโหว่ G1–G7: PKI เทียบกับการเข้ารหัสลับแบบกระจายศูนย์** [G1] + +รายงานฉบับนี้จึงสรุปว่า ระบบ VC ของไทยเลือก **ยืมแกนของ PKI เป็นหลัก** (มีตัวกลาง คือ ETDA Trusted List) เพื่อปิด G1 และ G3 ซึ่งจำเป็นต่อเอกสารระดับชาติ แล้วหยิบแนวคิดของการเข้ารหัสลับแบบกระจายศูนย์มาเสริมเฉพาะที่จำเป็น ได้แก่ การกระจายสำเนา Trusted List (ปิด G5) และการกู้คืนกุญแจในเครื่องผู้ใช้ (ปิด G7) การตอบสนองต่อกรณีกุญแจรั่วของแต่ละแนวทางเปรียบเทียบได้ดังรูปที่ 6.5-3 [G1] + +```mermaid +flowchart TB + Leak["พบว่ากุญแจรั่วหรือถูกขโมย"] + Leak --> PKI["PKI
CA ประกาศเพิกถอนผ่าน CRL/OCSP
ผู้ตรวจสอบเห็นทันทีที่สอบถาม"] + Leak --> VC["ระบบ VC
ผู้ออกเอกสารตั้งสถานะใน Token Status List เป็น revoked
และออกเอกสารใหม่ (re-issue)"] + Leak --> Crypto["การเข้ารหัสลับแบบกระจายศูนย์
เพิกถอนไม่ได้
ทำได้เพียงย้ายทรัพย์สินไปที่อยู่ใหม่"] + PKI --> Done["จำกัดความเสียหายได้"] + VC --> Done + Crypto --> Risk["เสี่ยง — ของเก่ายังถูกใช้ต่อได้"] +``` + +**รูปที่ 6.5-3 การตอบสนองต่อกรณีกุญแจรั่วของแต่ละแนวทาง** [G1] + +--- + +## 6.5.5 แบบจำลองความน่าเชื่อถือ 3 รูปแบบ + +จากการเปรียบเทียบสถาปัตยกรรมความน่าเชื่อถือ [G2] [G3] รายงานฉบับนี้จำแนกแบบจำลองความน่าเชื่อถือของระบบ VC ไว้ 3 รูปแบบ โดยทั้ง 3 รูปแบบยืมแกนของ PKI ร่วมกัน (มีตัวกลาง คือ Trusted List ที่ สพธอ. กำกับดูแล) แต่ต่างกันที่ "ตัวกลางหนักหรือเบา" ความหมายของแต่ละแบบจำลอง มีดังนี้ + +**ข้อกำหนดร่วม:** ไม่ว่าเลือกใช้ Trust Model 1, Trust Model 2 หรือ Trust Model 3 ผู้เข้าร่วมทุกฝ่ายต้องได้รับการตรวจรับรองและปรากฏใน Trusted List ที่เกี่ยวข้องก่อนนำข้อมูลความน่าเชื่อถือไปใช้ตัดสินใจ ระบบต้องดึง ตรวจลายมือชื่อ และตรวจสถานะ บทบาท และช่วงเวลาที่มีผลใช้ได้ของ Trusted List ตามขั้นตอนเดียวกัน ความแตกต่างของแต่ละแบบจำลองมีเฉพาะวิธีผูกและตรวจสอบกุญแจ ได้แก่ สายใบรับรองใน Trust Model 1 และ 2 หรือ DID/key reference ใน Trust Model 3 เท่านั้น [G2] [G3] + +1. **Trust Model 1 — CA Delegation** หมายถึง แบบจำลองที่มีผู้ให้บริการออกใบรับรองระดับรอง (subordinate CA: SubCA) ภายใต้ผู้ให้บริการออกใบรับรองแห่งชาติ (Thailand National Root Certification Authority: NRCA) เป็นผู้ออกใบรับรองให้ผู้ออกเอกสารและผู้ตรวจสอบเอกสาร แล้วลงทะเบียนข้อมูลความน่าเชื่อถือไว้ใน Trusted List โดย สพธอ. ทำหน้าที่ตรวจรับรองเอนทิตีและกำกับดูแล Trusted List [G2] [G13] +2. **Trust Model 2 — ETDA SubCA** หมายถึง แบบจำลองที่คล้าย Trust Model 1 แต่ สพธอ. เป็น SubCA ภายใต้ NRCA เองเพื่อออกใบรับรอง แบบจำลองนี้ต้องดำเนินการและตรวจประเมิน (audit) เทียบเท่า SubCA สาธารณะเต็มรูปแบบ [G2] +3. **Trust Model 3 — Trusted List + DID** หมายถึง แบบจำลองที่ไม่ใช้ CA เป็นสายความน่าเชื่อถือหลัก เอนทิตีสร้างคู่กุญแจ (key pair) และ DID ของตนเอง แล้วนำมาลงทะเบียนต่อ สพธอ. เมื่อผ่านการตรวจรับรองจึงถูกบันทึกลง Trusted List โดย สพธอ. ควบคุมการตรวจรับรองและลงลายมือชื่อกำกับ Trusted List [G2] [G4] + +การเปรียบเทียบทั้ง 3 แบบจำลอง สรุปได้ดังตารางที่ 6.5-3 + +| หัวข้อ | Trust Model 1 (CA Delegation) | Trust Model 2 (ETDA SubCA) | Trust Model 3 (Trusted List + DID) | +|--------|-------------------------------|----------------------------|---------------------------------| +| ผู้ออกใบรับรอง | SubCA ภายใต้ NRCA | สพธอ. เป็น SubCA ภายใต้ NRCA | ไม่มี CA สำหรับความน่าเชื่อถือของเอนทิตี | +| ที่มาของกุญแจ | เอนทิตีสร้างเอง ผูกกับใบรับรอง | เอนทิตีสร้างเอง ผูกกับใบรับรอง | เอนทิตีสร้างเอง (key/DID) | +| การตรวจรับรอง | สพธอ. ตรวจรับรองเอนทิตี | สพธอ. ตรวจรับรองเอนทิตี | สพธอ. ตรวจรับรองเอนทิตี | +| ที่จัดเก็บความน่าเชื่อถือ | Trusted List | Trusted List | Trusted List | +| ต้นทุนและความซับซ้อน | สูง (ค่าตรวจประเมิน CA) | สูงที่สุด (ตั้ง SubCA + ค่าตรวจประเมินต่อเนื่อง) | ต่ำที่สุด (ไม่มีค่าตรวจประเมิน CA) | + +**ตารางที่ 6.5-3 การเปรียบเทียบแบบจำลองความน่าเชื่อถือ 3 รูปแบบ** [G2] [G3] + +รายงานฉบับนี้กำหนดให้ **Trust Model 3 เป็นแนวทางหลักในระยะแรก (พ.ศ. 2570–2571)** เนื่องจากมีต้นทุนและความซับซ้อนต่ำที่สุด ไม่มีภาระค่าตรวจประเมินและค่าลิขสิทธิ์ซอฟต์แวร์ของ CA และสอดคล้องกับผลการวิเคราะห์เชิงข้อเท็จจริงและการพิจารณาของคณะทำงาน [G2] [G3] ความสัมพันธ์ของทั้ง 3 แบบจำลองแสดงได้ดังรูปที่ 6.5-4 ทั้งนี้ รายละเอียดของ Trust Model 3 มีอยู่ในบทที่ 9 + +```mermaid +flowchart TB + NRCA["NRCA (Thailand Root CA)"] + TL["ETDA Trusted List
(สพธอ. ตรวจรับรอง + ลงลายมือชื่อ)"] + M1["Trust Model 1
SubCA ภายใต้ NRCA ออกใบรับรอง"] + M2["Trust Model 2
สพธอ. เป็น SubCA เอง"] + M3["Trust Model 3
ไม่มี CA — ใช้ key/DID + Trusted List"] + NRCA --> M1 + NRCA --> M2 + M1 --> TL + M2 --> TL + M3 --> TL +``` + +**รูปที่ 6.5-4 ความสัมพันธ์ของแบบจำลองความน่าเชื่อถือทั้ง 3 รูปแบบกับ Trusted List** [G2] [G3] + +--- + +## 6.5.6 สรุปและการเชื่อมโยงกับบทถัดไป + +รายงานฉบับนี้สรุปสาระสำคัญของบทนี้ ดังนี้ + +1. Trusted List คือรายการเอนทิตีที่ สพธอ. ตรวจรับรองและลงลายมือชื่อกำกับ ผู้รับต้องตรวจลายมือชื่อก่อนใช้รายการดังกล่าว +2. ระบบ VC เลือกยืมแกนของ PKI เป็นหลัก เพราะต้องเพิกถอนสิ่งที่รั่วไหลได้ (G3) แล้วเสริมด้วยแนวคิดกระจายศูนย์เฉพาะที่จำเป็น (G5, G7) +3. ไม่ว่าใช้ Trust Model 1, 2 หรือ 3 ผู้เข้าร่วมต้องใช้ Trusted List ที่เกี่ยวข้องตามข้อกำหนดเดียวกัน ส่วนความแตกต่างอยู่ที่การผูกและตรวจสอบกุญแจ +4. Trust Model 3 เป็นแนวทางหลักในระยะแรก + +บทถัดไปต่อยอดจากบทนี้ ดังนี้ [§7](07-cross-ecosystem-interoperability.md) อธิบายการทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List [§8](08-implementation-guidelines.md) อธิบายการนำไปปฏิบัติด้วย OID4VCI [G5] และ OID4VP [G6] และ [§9](09-trust-model-3.md) อธิบายรายละเอียดของ Trust Model 3 + +--- + +{/* METADATA (agent-only — not rendered to readers) +## บรรณานุกรม (References) + +- [G1] คณะทำงาน VC, "ช่องโหว่ความปลอดภัย: PKI และคริปโทฯ ปิดอย่างไร เทียบกับระบบ VC (Model 1–3)" — [research/31-security-gaps-pki-crypto-vs-vc.md](../research/31-security-gaps-pki-crypto-vs-vc.md) +- [G2] คณะทำงาน VC, "Trust Architecture: 3 โมเดลตรวจสอบความน่าเชื่อถือ" — [research/32-trustlist-3models.md](../research/32-trustlist-3models.md) +- [G3] คณะทำงาน VC, "3 Trust Architecture Models — Fact-Based Analysis" — [research/33-trust-architecture-models-factbase-analysis.md](../research/33-trust-architecture-models-factbase-analysis.md) +- [G4] World Wide Web Consortium (W3C), "Decentralized Identifiers (DIDs) v1.0", 19 July 2022 — https://www.w3.org/TR/did-core/ +- [G5] OpenID Foundation, "OpenID for Verifiable Credential Issuance 1.0", Final — https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html +- [G6] OpenID Foundation, "OpenID for Verifiable Presentations 1.0", Final — https://openid.net/specs/openid-4-verifiable-presentations-1_0.html +- [G7] IETF, "SD-JWT-based Verifiable Credentials (SD-JWT VC)" — https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/ +- [G8] IETF, "Token Status List (`statuslist+jwt`)" — https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ +- [G9] European Telecommunications Standards Institute (ETSI), "ETSI TS 119 602 — Lists of Trusted Entities (LoTEs)" — https://www.etsi.org/deliver/etsi_ts/119600_119699/119602/ +- [G10] IETF, "RFC 5280 — Internet X.509 Public Key Infrastructure Certificate and CRL Profile" — https://www.rfc-editor.org/rfc/rfc5280 +- [G11] IETF, "RFC 6960 — X.509 Internet Public Key Infrastructure Online Certificate Status Protocol (OCSP)" — https://www.rfc-editor.org/rfc/rfc6960 +- [G12] NIST, "NIST IR 8202 — Blockchain Technology Overview", 2018 — https://csrc.nist.gov/pubs/ir/8202/final +- [G13] Thailand National Root Certification Authority (Thailand NRCA) — https://www.nrca.go.th/ +- [G14] NIST, "FIPS PUB 140-2 / 140-3 — Security Requirements for Cryptographic Modules" — https://csrc.nist.gov/pubs/fips/140-3/final +- [G15] NIST, "SP 800-57 Part 1 Rev.5 — Recommendation for Key Management (cryptoperiod §5.3.6)" — https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 6 — Decentralized Identifiers Methodologies](06-did-methodologies.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 7 — การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List ➡️](07-cross-ecosystem-interoperability.md) diff --git a/docs/thai-vc-arf/07-cross-ecosystem-interoperability.md b/docs/thai-vc-arf/07-cross-ecosystem-interoperability.md new file mode 100644 index 0000000..6e44ad6 --- /dev/null +++ b/docs/thai-vc-arf/07-cross-ecosystem-interoperability.md @@ -0,0 +1,196 @@ +--- +description: "7. การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List — Thai VC ARF 2.0 DRAFT 0" +--- + +# 7. การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 ส่วนปรับปรุงสำหรับ Thai VC ARF v2.0 (MASA-125) +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) · [ดัชนีเอกสาร ARF](README.md) +> **เวอร์ชัน:** 2.0-draft.2 +> **วันที่ปรับปรุง:** 4 สิงหาคม 2569 +> **ขอบเขต:** การทำงานร่วมกันระหว่าง Issuer, Wallet และ Verifier ภายในประเทศ รวมถึงเงื่อนไขการเชื่อมโยงกับ EUDI Wallet +> **คำสำคัญเชิงข้อกำหนด:** คำว่า **ต้อง (MUST)**, **ควร (SHOULD)** และ **อาจ (MAY)** ให้ตีความตาม RFC 2119/RFC 8174 [R1] +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) · [08-implementation-guidelines.md](08-implementation-guidelines.md) · [09-trust-model-3.md](09-trust-model-3.md) +*/} + +--- + +## 7.0 ภาพรวมการทำงานร่วมกันข้ามระบบนิเวศ (ฐานจากเวอร์ชัน 1.1) + +การทำงานร่วมกัน (interoperability) ข้ามระบบนิเวศ (ecosystem) ช่วยให้ผู้ถือเอกสาร (holder) ขอและใช้เอกสารรับรองดิจิทัลจากระบบนิเวศใดก็ได้ตามข้อมูลที่ต้องการ ตัวอย่างตามรูปที่ 27 ประกอบด้วยระบบนิเวศ 3 ระบบ + +![การทำงานร่วมกันระหว่างระบบนิเวศ](images/p49-0.png) + +**รูปที่ 27 การทำงานร่วมกัน (interoperability) ระหว่างระบบนิเวศ** + +จากรูปที่ 27 กระบวนการทำงานร่วมกันข้ามระบบนิเวศมีขั้นตอน ดังนี้ + +1. ผู้ออกเอกสาร (issuer) ในแต่ละระบบนิเวศต้องสร้าง DID Document ในรูปแบบ Legal Person แล้วนำไปลงทะเบียน (register) ในระบบทะเบียนเอกสารรับรอง (registry) +2. ผู้ถือเอกสารร้องขอข้อมูลจากระบบนิเวศใดก็ได้ตามข้อมูลที่ต้องการ โดย VC ที่ได้รับจากผู้ออกเอกสารของแต่ละระบบนิเวศจะถูกจัดเก็บไว้ในกระเป๋าเอกสารดิจิทัลของผู้ถือเอกสาร +3. ผู้ถือเอกสารส่งข้อมูลให้ผู้ตรวจสอบเอกสาร (verifier) โดยต้องจัดทำข้อมูลให้อยู่ในรูปแบบ VP ก่อนเสมอ +4. เมื่อผู้ตรวจสอบเอกสารต้องการตรวจสอบความถูกต้องของข้อมูลที่ได้รับ ต้องมี DID Document ของผู้ออก VC ก่อน จึงเรียกดู DID Document ของผู้ออกเอกสารที่ลงทะเบียนไว้ผ่าน DIF Universal Resolver +5. DIF Universal Resolver ส่งกลับ (return) DID Document ของผู้ออกเอกสารที่ลงทะเบียนไว้ในระบบทะเบียนให้แก่ผู้ตรวจสอบเอกสาร +6. ผู้ตรวจสอบเอกสารนำ DID Document ที่ได้ไปตรวจสอบความถูกต้องของ VC ต่อไป + +> **ส่วนขยายเวอร์ชัน 2.0:** หัวข้อ 7.1–7.10 ต่อไปนี้เพิ่มชั้น Trusted List เข้ากับภาพรวมข้างต้น เพื่อกำหนดว่าเอนทิตีใดได้รับการรับรองให้ทำหน้าที่ใด มีสถานะใด และมีขอบเขตเพียงใด โดยใช้ร่วมกับการ resolve DID ตามข้างต้น + +--- + +## 7.1 วัตถุประสงค์ + +หัวข้อนี้กำหนดผลของ Trusted List ต่อการทำงานร่วมกัน (interoperability) ระหว่างระบบนิเวศ โดยต่อยอดจากแนวทางเดิมที่ Verifier ต้อง resolve DID Document ของ Issuer เพื่อใช้ตรวจลายมือชื่อ VC การมี Trusted List เพิ่มชั้นข้อมูลเชิงธรรมาภิบาลว่าเอนทิตีใดได้รับการรับรองให้ปฏิบัติหน้าที่ใด มีสถานะใด และมีขอบเขตการออกหรือขอข้อมูลเพียงใด + +**ข้อเท็จจริง:** OID4VCI 1.0 Final กำหนด protocol สำหรับการออก VC และ OID4VP 1.0 Final กำหนด protocol สำหรับการร้องขอและนำเสนอ Credential แต่มาตรฐานทั้งสองมิได้ทำให้เอนทิตีต่างระบบนิเวศเชื่อถือกันโดยอัตโนมัติ การตัดสินใจด้าน trust ยังคงขึ้นกับ trust framework, policy และ profile ของแต่ละระบบนิเวศ [R2] [R3] + +**ข้อวิเคราะห์:** Trusted List เป็นชั้นนโยบายด้าน trust ที่ใช้ร่วมกับ OID4VCI/OID4VP, DID resolution, protocol, schema, การตรวจลายมือชื่อ, สถานะ credential และกฎหมายที่ใช้บังคับ + +## 7.2 ผลต่อ ecosystem เมื่อมี Trusted List + +เมื่อ สพธอ. เผยแพร่ Trusted List ที่ลงลายมือชื่อดิจิทัลแล้ว ecosystem จะได้รับผลดังต่อไปนี้ + +1. **การค้นพบ trust anchor ร่วมกัน:** Wallet, Issuer และ Verifier สามารถใช้รายการเดียวกันเพื่อตรวจ role, status, validity, key reference และ policy metadata ของคู่กรณี +2. **Cross-issuer verification:** Verifier สามารถรับ VC จาก Issuer หลายรายได้ หาก Issuer นั้นอยู่ใน Trusted List มี role และสถานะที่ถูกต้อง และได้รับอนุญาตให้ออก credential type ที่นำเสนอ +3. **Cross-verifier presentation:** Wallet สามารถตรวจ Verifier ก่อนส่งข้อมูล และบังคับใช้ขอบเขต purpose/allowed claims ตามข้อมูลที่ Trusted List หรือเอกสารกำกับระบุ เพื่อลดความเสี่ยงจากผู้ตรวจสอบที่ไม่รู้จักหรือขอข้อมูลเกินจำเป็น +4. **ลดการทำ bilateral onboarding ซ้ำในประเทศ:** ผู้เข้าร่วมไม่จำเป็นต้องแลก public key หรือสร้าง allowlist แยกกับทุกคู่กรณี หากทุกฝ่ายยอมรับ governance ของ Trusted List เดียวกัน +5. **เพิกถอนและระงับสิทธิ์จากจุดกำกับร่วม:** การเปลี่ยน status ใน Trusted List ทำให้ทุกระบบที่ refresh ตาม policy สามารถบังคับผลได้อย่างสม่ำเสมอ อย่างไรก็ดี ผลไม่เกิดขึ้นทันทีในระบบที่ยังใช้ cache เก่า +6. **การตรวจสอบย้อนหลัง:** version, issued time และการลงลายมือชื่อของ Trusted List สนับสนุน audit trail ว่าผู้ตรวจใช้ trust state ใด ณ เวลาตัดสินใจ + +Trusted List **มิได้รับรองความถูกต้องของเนื้อหา VC ทุกฉบับ** และ **มิได้แทนที่** การตรวจลายมือชื่อ VC/VP, holder binding, validity, credential status, schema และ policy ของ use case + +## 7.3 ข้อกำหนดสำหรับการทำงานร่วมกันภายในประเทศ + +ผู้เข้าร่วม ecosystem **ต้อง (MUST)** ปฏิบัติดังต่อไปนี้ + +1. ตรวจลายมือชื่อและความถูกต้องของ Trusted List ก่อนใช้ข้อมูลภายในรายการ +2. ตรวจชนิดบริการจาก `ServiceInformation.ServiceTypeIdentifier` ตรวจสถานะระดับองค์กรและบริการ ช่วงเวลาที่มีผล กุญแจหรือ DID จาก `ServiceDigitalIdentity` และขอบเขตสิทธิ์ตาม Thai profile ที่ประกาศใช้ [research/42](../research/42-trusted-list-lote-jwt-format.md) +3. resolve DID Document และตรวจลายมือชื่อของ VC, VP หรือ request object แยกจากการตรวจ Trusted List +4. ตรวจ credential status และ holder binding ตาม profile ของ credential +5. ปฏิเสธ transaction เมื่อ Trusted List หรือ role หมดอายุ ถูกระงับ หรือถูกเพิกถอน เว้นแต่ governance policy กำหนด exception ที่มีหลักฐานตรวจสอบย้อนหลัง +6. ใช้ OID4VCI 1.0 Final สำหรับ issuance และ OID4VP 1.0 Final สำหรับ presentation ตาม national profile [R2] [R3] + +ผู้เข้าร่วม **ควร (SHOULD)** รองรับ Issuer และ Verifier มากกว่าหนึ่งรายโดยไม่ผูกกับ vendor เดียว และ **ควร (SHOULD)** แยกการตัดสินใจ 4 ชั้นให้ชัดเจน ได้แก่ protocol conformance, cryptographic validity, trust authorization และ business acceptance + +ผู้เข้าร่วม **อาจ (MAY)** ใช้ Universal Resolver เพื่อรองรับ DID Method หลายชนิด แต่ผลจาก Resolver เพียงอย่างเดียวไม่ถือเป็นหลักฐานว่าเอนทิตีได้รับอนุญาตภายใต้ Trusted List + +## 7.4 ลำดับการตรวจสอบข้าม Issuer และ Verifier + +```mermaid +sequenceDiagram + actor H as Holder + participant W as Wallet + participant V as Verifier + participant TL as ETDA Trusted List + participant R as DID Resolver + participant S as Credential Status + + V-->>W: OID4VP Authorization Request + W->>TL: GET Verifier Trusted List JWT ฉบับเต็มจาก CDN + TL-->>W: JWT แบบ LoTE พร้อม ETag + W->>W: ตรวจลายมือชื่อ บทบาท สถานะ และขอบเขตตาม Thai profile + W->>W: ตรวจ request signature + policy + W->>H: แสดง purpose/claims และขอความยินยอม + H-->>W: อนุมัติ + W-->>V: Verifiable Presentation + V->>TL: GET Issuer และ Wallet Provider Trusted List JWT ฉบับเต็ม + TL-->>V: JWT แบบ LoTE ทั้งสองรายการ + V->>V: ตรวจลายมือชื่อ บทบาท สถานะ และกุญแจตาม Thai profile + V->>R: Resolve Issuer DID Document + R-->>V: verification methods + V->>S: ตรวจ credential status + S-->>V: valid / suspended / revoked + V->>V: ตรวจ VC/VP signature, holder binding, schema และ business rules +``` + +ผล `trusted` จาก Trusted List หมายถึงเอนทิตีผ่านเงื่อนไขตาม governance ของรายการ ณ version และเวลาที่ตรวจเท่านั้น มิได้หมายถึง transaction นั้นผ่านทุกเงื่อนไขโดยอัตโนมัติ + +## 7.5 การทำงานร่วมกันกับ EUDI Wallet + +**ข้อเท็จจริง:** EUDI Architecture and Reference Framework (EUDI ARF) เป็นกรอบสถาปัตยกรรมและ reference framework ของระบบ EUDI Wallet รายงานฉบับนี้ใช้ **EUDI ARF 2.9.0** เป็น baseline ให้สอดคล้องกับบทอื่นของรายงาน ส่วน eIDAS Regulation (EU) 2024/1183 กำหนดกรอบกฎหมายของ European Digital Identity Framework [R5] + +**ฉบับใหม่กว่า — ผลกระทบอยู่ระหว่างการทบทวน:** มีการเผยแพร่ EUDI ARF **v3.0.0** เมื่อ 23 กรกฎาคม 2569 (2026-07-23) [R4] ซึ่งใหม่กว่า baseline 2.9.0 ผลกระทบของฉบับนี้อยู่ระหว่างการทบทวนใน QA Gate จึงยังไม่นำมาใช้เป็น baseline ของรายงาน ทั้งนี้ การพิจารณาว่า Trusted List ทำงานร่วมกับ EUDI ได้หรือไม่ ต้องอิงกับฉบับที่ปลายทางประกาศใช้จริง ณ เวลานั้น + +**องค์ประกอบใหม่ใน EUDI ARF v3.0.0 ที่อยู่ระหว่างการทบทวนผลกระทบต่อ Trusted List interoperability** [R4]: + +- **Trust-anchor retrieval** — กำหนดให้ Wallets, Relying Parties และ Issuers รองรับทั้ง **ETSI TS 119 612 Trusted Lists** และ **ETSI TS 119 602 Lists of Trusted Entities (LoTEs)** สำหรับดึงข้อมูล trust anchor ที่ปลายทาง +- **Relying Party Services** — แนวคิดใหม่ที่เพิ่มบทบาทผู้ให้บริการที่เกี่ยวข้องกับ Relying Party registration ตาม Commission Implementing Regulation (EU) 2025/848 +- **Functional Conformance Assessment Framework (FCAF)** — ชุดทดสอบกลางที่เผยแพร่และดูแลที่ `https://conformance.eudi.dev` ผู้ที่อ้าง conformance กับ EUDI ARF **ต้อง (MUST)** อ้างผลทดสอบจากแหล่งนี้เป็นหลักฐาน +- **Alignment with the amending Commission Implementing Regulations** — CIR 2024/2977 (PID/EAA), CIR 2024/2979 (integrity/core functionalities), CIR 2024/2980 (ecosystem notifications), CIR 2024/2982 (protocols/interfaces) และ CIR 2025/848 (Wallet-Relying Party registration) + +**ข้อเท็จจริง:** การใช้ OID4VCI/OID4VP 1.0 Final [R2] [R3], SD-JWT VC หรือ DID ที่เหมือนกันช่วยลดความต่างของ protocol และ credential format แต่ **ไม่ทำให้ Thai Trusted List ได้รับการยอมรับใน EUDI ecosystem โดยอัตโนมัติ** เนื่องจาก EUDI trust infrastructure อิงกับ ETSI TS 119 612/602 และ rulebook (PID, mDL, EAA) ที่กำหนดเงื่อนไขของตนเอง + +สำหรับการเชื่อมโยงข้ามพรมแดน ผู้ดำเนินการ **ต้อง (MUST)** จัดให้มีองค์ประกอบเพิ่มเติมอย่างน้อยดังนี้ + +1. **Trust agreement หรือ recognition arrangement:** ระบุคู่ภาคี ขอบเขต credential/use case ระดับ assurance หน้าที่รับผิด ความรับผิดทางกฎหมาย การตรวจประเมิน การเพิกถอน และการระงับข้อพิพาท กรณี EU อ้างอิงคือกระบวนการ third-country recognition ภายใต้ Regulation (EU) 2024/1183 [R5] +2. **Trust mapping:** แปลง role, status, assurance และ policy ของ Thai Trusted List ให้ตรงกับ trust model และ rulebook ที่ปลายทางยอมรับ (เช่น PID Rulebook, mDL Rulebook) [R4] +3. **Technical profile agreement:** ตกลง credential format, protocol profile, cryptographic suites, identifier/client authentication, status mechanism และ schema ให้สอดคล้องกับ Credential Format Profile ที่ EUDI ARF กำหนด +4. **Trusted-list distribution/bridge:** หากปลายทางกำหนดรูปแบบหรือ trust anchor ต่างกัน (เช่น ETSI TS 119 612 XML หรือ LoTEs) **ต้อง (MUST)** มี bridge หรือ dual publication ที่ปลายทางตรวจสอบได้ โดย **ต้อง (MUST NOT)** อ้างว่า bridge เท่ากับ legal recognition +5. **Conformance evidence:** ผลทดสอบ **ต้อง (MUST)** มาจาก Functional Conformance Assessment Framework ที่ EUDI เผยแพร่ที่ `https://conformance.eudi.dev` หรือ pilot ที่ตรวจสอบย้อนกลับได้ ก่อนประกาศรองรับ cross-border +6. **Operational readiness:** ผู้ดูแล **ต้อง (MUST)** จัดให้มี audit, monitoring, SLA และ 24/7 operations ตามระดับความเสี่ยงที่คู่ภาคีกำหนด + +**ข้อวิเคราะห์:** Thai Trusted List ตาม [§9](09-trust-model-3.md) อาจทำหน้าที่เป็นฐานข้อมูลต้นทางสำหรับ bridge ไปยัง EUDI trust infrastructure ได้ เพราะมีข้อมูลเอนทิตี role status และ key reference ที่มี governance กำกับ การวิเคราะห์รูปแบบ cross-border ที่เป็นไปได้ (Hybrid · Split TL · Bridge Service) อยู่ใน [`th/research/34-trustlist-domestic-and-crossborder.md`](../research/34-trustlist-domestic-and-crossborder.md) — เอกสารฉบับนี้ไม่คัดลอกผลวิเคราะห์ แต่ใช้เป็นข้อมูลอ้างอิงเชิงสถาปัตยกรรมเท่านั้น การนำไปใช้จริงขึ้นกับข้อตกลง technical profile และ conformance evidence ที่คู่ภาคียอมรับ + +**ข้อจำกัด:** หัวข้อนี้กำหนดสถาปัตยกรรม โดยยังไม่มีผลทดสอบ interoperability จริง จึง **ห้าม (MUST NOT)** ใช้ข้อความว่า "รองรับ EUDI" หรือ "ได้รับการรับรองจาก EU" ในเอกสาร UI หรือข้อเสนอใด ๆ จนกว่าจะมีหลักฐานตามข้อ 1–6 ครบถ้วน + +## 7.6 สิ่งที่ Trusted List ทำได้และทำไม่ได้ + +| ประเด็น | Trusted List ทำได้ | Trusted List เพียงอย่างเดียวทำไม่ได้ | +|---|---|---| +| ความเชื่อถือข้าม Issuer | ให้รายการ Issuer ที่ได้รับอนุญาตและสถานะล่าสุดตามรอบ refresh | รับรองว่า VC ทุกฉบับมีข้อมูลถูกต้อง | +| ความเชื่อถือ Verifier | ให้ Wallet ตรวจ identity/role/scope ก่อนเปิดเผยข้อมูล | รับประกันว่า Verifier จะปฏิบัติตาม purpose หลังรับข้อมูล | +| Protocol interoperability | ระบุ protocol/profile ที่รองรับ | ทำให้ implementation ที่ไม่ conform ทำงานร่วมกันได้ | +| DID interoperability | ให้ key reference และ policy สำหรับ DID | ทำให้ทุก DID Method resolve ได้โดยไม่มี driver/resolver | +| Revocation | ระงับหรือเพิกถอนสิทธิ์ระดับ entity/role | แทน credential-level status หรือทำให้ cache เก่ารู้ผลทันที | +| EUDI interoperability | เป็นข้อมูลต้นทางสำหรับ trust mapping/bridge | ก่อให้เกิด EU recognition หรือ cross-border trust โดยอัตโนมัติ | + +## 7.7 ข้อจำกัดและการจัดการความเสี่ยง + +1. **Cache freshness:** Client **ต้อง (MUST)** ตรวจ `LoTE.ListAndSchemeInformation.NextUpdate` เมื่อเกินกำหนดหรือหมดอายุ **ต้อง (MUST)** ไม่ถือว่าสถานะเดิมยัง active โดยปริยาย [research/42](../research/42-trusted-list-lote-jwt-format.md) +2. **Governance concentration:** การรวม trust decision ไว้ที่ Trusted List ทำให้ signing key และกระบวนการอนุมัติเป็นจุดสำคัญ ผู้ดูแล **ต้อง (MUST)** ใช้ key protection, dual control, audit log และ incident response +3. **Semantic mismatch:** ชื่อ credential เหมือนกันอาจมี schema หรือ assurance ต่างกัน ผู้เข้าร่วม **ต้อง (MUST)** ตรวจ rulebook/schema version ไม่ใช้ชื่อประเภทเพียงอย่างเดียว +4. **Privacy:** รายการสาธารณะ **ต้อง (MUST)** ไม่บรรจุข้อมูลส่วนบุคคลของ Holder และ **ควร (SHOULD)** บรรจุเฉพาะข้อมูลของนิติบุคคล/บริการที่จำเป็นต่อการตัดสินใจ trust +5. **Cross-border overstatement:** เอกสารหรือ UI **ต้อง (MUST NOT)** ระบุว่า “รองรับ EUDI” หรือ “ได้รับการรับรองจาก EU” จนกว่าจะมี trust agreement, technical profile และหลักฐาน conformance ที่เกี่ยวข้อง + +## 7.8 Evidence matrix + +| ID | ข้ออ้าง/ข้อกำหนด | หลักฐานปฐมภูมิ | สถานะตรวจสอบ | ข้อจำกัด | +|---|---|---|---|---| +| E-01 | OID4VCI กำหนด API สำหรับ issuance | OID4VCI 1.0 Final, Abstract และ metadata/security sections [R2] | ตรวจจาก HTML ต้นฉบับเมื่อ 4 ส.ค. 2569 | ไม่กำหนด Thai governance หรือ cross-border recognition | +| E-02 | OID4VP กำหนด protocol สำหรับ requesting/presenting Credentials และให้ trust framework/policy มีผลต่อการใช้ข้อมูล Verifier | OID4VP 1.0 Final, Abstract และ transaction data/Verifier information text [R3] | ตรวจจาก HTML ต้นฉบับเมื่อ 4 ส.ค. 2569 | ไม่สร้าง trust ระหว่าง ecosystem อัตโนมัติ | +| E-03 | EUDI ARF เป็น reference framework ที่มี release version ชัดเจน และ v3.0.0 เพิ่ม Trust-anchor retrieval สำหรับ Trusted Lists / LoTEs, Relying Party Services, และ Functional Conformance Assessment Framework (FCAF) | EUDI ARF GitHub Releases, release v3.0.0 (`published_at` = 2026-07-23T19:10:17Z) และ release body ระบุองค์ประกอบทั้งสาม [R4] | ตรวจ GitHub Releases API 4 ส.ค. 2569 เวลา 12:xx น. ICT — release JSON เก็บไว้ในแหล่งตรวจของ run นี้ | release ใหม่กว่า baseline 2.9.0 ของรายงาน ผลกระทบอยู่ระหว่างการทบทวน ต้องทำ version impact review ใน QA Gate ก่อนปรับ baseline | +| E-04 | eIDAS 2.0 เป็นกรอบกฎหมาย European Digital Identity Framework | Regulation (EU) 2024/1183, OJ L, 30.4.2024 [R5] | อ้างอิง primary legal act; endpoint EUR-Lex ตอบ 202/no body ในรอบตรวจนี้ | ไม่ตีความว่า third country ได้ recognition อัตโนมัติ | +| E-05 | DID resolution ให้ verification material แต่ไม่ให้ governance authorization | W3C DID Core 1.0, DID Resolution/DID Document [R6] | ตรวจตาม W3C Recommendation | ต้องใช้ร่วมกับ Trusted List และ policy | +| E-06 | คำ MUST/SHOULD/MAY ใช้ในความหมาย normative | RFC 2119 และ RFC 8174 [R1] | ตรวจตาม RFC published | คำไทยในเอกสารใส่คำอังกฤษกำกับเพื่อลดความกำกวม | + +## 7.9 สมมติฐานและช่องว่างที่ต้องติดตาม + +**สมมติฐาน:** Thai VC ARF v2.0 ใช้ ETDA-signed Trusted List เป็น national trust anchor สำหรับ domestic ecosystem และผู้เข้าร่วมยอมรับ governance policy ฉบับเดียวกัน + +**ช่องว่างที่ต้องติดตาม:** + +- รายงานฉบับนี้ใช้ EUDI ARF **2.9.0** เป็น baseline ของทั้งเล่ม ส่วน release **v3.0.0** (23 กรกฎาคม 2569 / 2026-07-23) [R4] เป็นฉบับใหม่กว่า ซึ่งรวมองค์ประกอบใหม่ (Trust-anchor retrieval, Relying Party Services, FCAF) ที่อาจกระทบ requirements ด้าน trust list และ conformance ผลกระทบของ v3.0.0 อยู่ระหว่างการทบทวน โดย QA Gate **ควร (SHOULD)** ตรวจ breaking changes ก่อนปรับ baseline ในฉบับถัดไป +- ยังไม่มี trust agreement/recognition arrangement ระหว่าง Thai ecosystem กับ EU Member State ที่ระบุในขอบเขตงานนี้ จึง **ต้อง (MUST NOT)** อ้างว่าเปิดใช้งาน cross-border ได้แล้ว กรณี EU ให้อิงกระบวนการ third-country recognition ภายใต้ Regulation (EU) 2024/1183 [R5] +- ยังไม่มีผล conformance suite (FCAF) หรือ cross-border pilot ที่แนบกับหัวข้อนี้ จึงใช้หัวข้อนี้เป็นข้อกำหนดเชิงสถาปัตยกรรม เมื่อมี conformance suite พร้อมใช้งาน **ควร (SHOULD)** เก็บผลทดสอบจากแหล่งกลาง (เช่น `https://conformance.eudi.dev`) ไว้ในภาคผนวกของฉบับถัดไป +- การวิเคราะห์รูปแบบ cross-border ที่เป็นไปได้ (Hybrid · Split TL · Bridge Service) อยู่ใน [`th/research/34-trustlist-domestic-and-crossborder.md`](../research/34-trustlist-domestic-and-crossborder.md) เอกสารฉบับนี้ใช้อ้างอิงผลวิเคราะห์ต้นทุนและความเสี่ยงจากงานวิจัยดังกล่าว + +{/* METADATA (agent-only — not rendered to readers) +## 7.10 แหล่งอ้างอิง + +- **[R1]** IETF, *Key words for use in RFCs to Indicate Requirement Levels*, RFC 2119, March 1997; and *Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words*, RFC 8174, May 2017. https://www.rfc-editor.org/rfc/rfc2119 และ https://www.rfc-editor.org/rfc/rfc8174 — เข้าถึง 4 สิงหาคม 2569 (เปลี่ยนเส้นทางเป็น `https://www.rfc-editor.org/info/rfc2119/` และ `info/rfc8174/`) +- **[R2]** OpenID Foundation, *OpenID for Verifiable Credential Issuance 1.0*, Final, 16 September 2025. https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html — เข้าถึงและตรวจ HTML ต้นฉบับ 4 สิงหาคม 2569; Abstract = "This specification defines an API for the issuance of Verifiable Credentials." +- **[R3]** OpenID Foundation, *OpenID for Verifiable Presentations 1.0*, Final, 9 July 2025. https://openid.net/specs/openid-4-verifiable-presentations-1_0.html — เข้าถึงและตรวจ HTML ต้นฉบับ 4 สิงหาคม 2569; Abstract = "This specification defines a protocol for requesting and presenting Credentials." +- **[R4]** European Commission / EUDI Wallet Consortium, *EUDI Wallet Architecture and Reference Framework*, release v3.0.0, `published_at` = 2026-07-23T19:10:17Z. https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/releases/tag/v3.0.0 — เข้าถึงผ่าน GitHub Releases API 4 สิงหาคม 2569; online: https://eudi.dev +- **[R5]** European Parliament and Council, *Regulation (EU) 2024/1183 amending Regulation (EU) No 910/2014 as regards establishing the European Digital Identity Framework*, OJ L, 30 April 2024. https://eur-lex.europa.eu/eli/reg/2024/1183/oj — เข้าถึง 4 สิงหาคม 2569 (endpoint EUR-Lex ตอบ HTTP 202 พร้อม body ว่างในรอบตรวจสำหรับ content-fetch) +- **[R6]** W3C, *Decentralized Identifiers (DIDs) v1.0*, W3C Recommendation, 19 July 2022. https://www.w3.org/TR/did-core/ — เข้าถึง 4 สิงหาคม 2569 + +**แหล่งอ้างอิงที่เกี่ยวข้องในระบบนิเวศ (ไม่ได้ใช้เป็นหลักฐานหลักของข้อกำหนดในหัวข้อนี้):** + +- Thai Trusted List cross-border scenarios analysis: [`th/research/34-trustlist-domestic-and-crossborder.md`](../research/34-trustlist-domestic-and-crossborder.md) +- EUDI ARF v2.8+ alignment background: [`th/research/30-eu-aligned-trust-model-adaptation.md`](../research/30-eu-aligned-trust-model-adaptation.md) +- PKI/VC security gap context: [`th/research/31-security-gaps-pki-crypto-vs-vc.md`](../research/31-security-gaps-pki-crypto-vs-vc.md) +- EUDI Conformance Assessment: https://conformance.eudi.dev — ยังไม่มีผลทดสอบระบบจริงที่แนบกับหัวข้อนี้ + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 6.5 — กลไกการสร้างความน่าเชื่อถือ (Trust-Building Mechanism)](06.5-trust-building-mechanism.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 8 — Implementation Guidelines (OID4VCI / OID4VP) ➡️](08-implementation-guidelines.md) diff --git a/docs/thai-vc-arf/08-implementation-guidelines.md b/docs/thai-vc-arf/08-implementation-guidelines.md new file mode 100644 index 0000000..ac6b71a --- /dev/null +++ b/docs/thai-vc-arf/08-implementation-guidelines.md @@ -0,0 +1,404 @@ +--- +description: "8. Implementation Guidelines — OID4VCI / OID4VP และแนวทางการนำไปใช้งาน — Thai VC ARF 2.0 DRAFT 0" +--- + +# 8. Implementation Guidelines — OID4VCI / OID4VP และแนวทางการนำไปใช้งาน + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) และปรับปรุงเพิ่มเติมจากเอกสารใน trust-guide (th/public-site/vcdoc/docs/trust-guide) ภายใต้ข้อกำหนด MASA-158 +> **เวอร์ชันเอกสาร:** v2.1.3 (2026-10-01) — กำหนดให้รองรับการลงลายมือชื่อด้วย EdDSA (Ed25519) และ ES256 (ECDSA P-256/SHA-256) ในข้อกำหนดหลักและตารางสรุป +> **เวอร์ชัน:** v2.1 (Implementation Guidelines) +> **วันที่:** 1 ตุลาคม 2569 +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) · trust-guide/03-issuance-flow/ · trust-guide/04-presentation-flow/ · [REF-MASA-158][REF-MASA-165] +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) · [02-definitions.md](02-definitions.md) · [06-did-methodologies.md](06-did-methodologies.md) · [07-cross-ecosystem-interoperability.md](07-cross-ecosystem-interoperability.md) · [08.1 — OID4VCI Full Flow](08.1-issuance-full-flow-detail.md) · [08.2 — OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) · [09-trust-model-3.md](09-trust-model-3.md) · [15-appendix.md](15-appendix.md) · [16-bibliography.md](16-bibliography.md) +*/} + +--- + +## 8.0. วัตถุประสงค์และขอบเขต + +ข้อแนะนำเบื้องต้นการพัฒนาระบบจะช่วยให้การให้บริการและการแลกเปลี่ยนเอกสารรับรองดิจิทัลมีความมั่นคงปลอดภัย และช่วยคุ้มครองข้อมูลส่วนบุคคลของเอนทิตีต่าง ๆ ที่เกี่ยวข้อง รวมถึงช่วยจำกัดความซับซ้อนของแนวทางการพัฒนาเชิงเทคนิค (technical solution) เพื่อให้กระเป๋าเอกสารดิจิทัล (Document Wallet) และเอกสารรับรอง (Verifiable Credential — VC) สามารถทำงานร่วมกันได้ + +บทนี้ระบุข้อกำหนดเชิงเทคนิค (MUST / SHOULD / MAY) สำหรับการออก VC และการแสดง VP โดยใช้โปรโตคอลมาตรฐาน OID4VCI 1.0 และ OID4VP 1.0 ของ OpenID Foundation พร้อมแผนภาพผังขั้นตอนภาพรวม (Overview Flow) และอธิบายการทำงานร่วมกับรายชื่อผู้ที่ได้รับความเชื่อถือ (ETDA Trusted List) และการ resolve DID (DID Resolution) ในกรณีต่าง ๆ + +{/* METADATA (agent-only — not rendered to readers) +> **ฐานที่มาของบท:** เนื้อหาบทนี้ปรับปรุงจากฐานเวอร์ชัน 1.1 ของรายงาน Thai VC ARF [REF-ARF-V11-SRC] ร่วมกับแผนภาพฉบับสมบูรณ์จากเอกสาร trust-guide (th/public-site/vcdoc/docs/trust-guide) ภายใต้ข้อกำหนดงาน MASA-158 [REF-MASA-158] แผนภาพ Sequence ฉบับสมบูรณ์และรายละเอียดทางเทคนิคระดับ field-by-field ของทั้ง OID4VCI และ OID4VP อยู่ใน [08.1-issuance-full-flow-detail.md](08.1-issuance-full-flow-detail.md) และ [08.2-oid4vp-full-flow-detail.md](08.2-oid4vp-full-flow-detail.md) ตามลำดับ กลไกการตรวจสอบความน่าเชื่อถือ 4 จุดตรวจ (TC-1 ถึง TC-4) อธิบายด้วยข้อความเชิงบรรยายใน §8.4 +*/} + +{/* METADATA (agent-only — not rendered to readers) +> **ศัพท์เทคนิค:** คงคำภาษาอังกฤษตามมาตรฐาน (เช่น Verifiable Credential — VC, Verifiable Presentation — VP, Issuer, Verifier, Holder, Trusted List, Status List) เพื่อความชัดเจนและสอดคล้องกับเอกสารอ้างอิงสากล [REF-OID4VCI][REF-OID4VP][REF-SDJWT][REF-TSL][REF-DID-CORE] +*/} + +--- + +## 8.1. องค์ประกอบพื้นฐาน + +### 8.1.1. กรณีศึกษา + +รายงานฉบับนี้ใช้กรณีศึกษา การออกใบประมวลผลการศึกษา (Transcript) ของสถาบันการศึกษาในประเทศไทย เป็นตัวอย่างประกอบแผนภาพและคำอธิบาย เพื่อให้ผู้อ่านเห็นภาพการนำ OID4VCI/OID4VP ไปใช้งานจริง + +### 8.1.2. ข้อกำหนดทางเทคนิค + +ระบบที่พัฒนาตามแนวทางนี้ MUST ปฏิบัติตามข้อกำหนดต่อไปนี้: + +| หัวข้อ | ข้อกำหนด (RFC 2119) | แหล่งอ้างอิง | +|--------|---------------------|---------------| +| ภาษาในการพัฒนา | MUST เป็น High-Level Language | — | +| อัลกอริทึมลายมือชื่ออิเล็กทรอนิกส์ | MUST รองรับการสร้างและตรวจลายมือชื่อด้วย EdDSA (Ed25519) และ ES256 (ECDSA P-256/SHA-256) | [REF-EdDSA] [REF-ES256] | +| เค้าร่างเอกสารรับรอง | MUST รองรับ W3C Verifiable Credentials Data Model v1.1 สำหรับเอกสารเดิม และ MUST รองรับ IETF SD-JWT Verifiable Credential (`dc+sd-jwt`) ที่เพิ่มใน ARF ฉบับนี้; การออกเอกสารใหม่ SHOULD ใช้ `dc+sd-jwt` | [REF-W3C-VCDM] [REF-SDJWT] | +| โปรโตคอลออกเอกสารรับรอง | MUST ใช้ OpenID for Verifiable Credential Issuance (OID4VCI) 1.0 Final | [REF-OID4VCI] | +| โปรโตคอลแสดงเอกสาร | MUST ใช้ OpenID for Verifiable Presentations (OID4VP) 1.0 Final พร้อม Digital Credentials Query Language (DCQL) | [REF-OID4VP] | +| การยกเลิก/ระงับเอกสาร | MUST ใช้ IETF Token Status List (`statuslist+jwt`) เป็นกลไก revocation | [REF-TSL] | +| กระบวนการ Authorization Code | MUST ใช้ pre-authorized code flow ตาม OID4VCI §4.1 ยกเว้นกรณีผู้ถือ (Holder) ร้องขอ authorization แบบ explicit code | [REF-OID4VCI] | +| การ resolve DID (DID Resolution) | MUST รองรับ DIF Universal Resolver เป็นตัวกลางมาตรฐาน และ SHOULD รองรับ `did:web` และ `did:key` โดยตรงเพื่อลดการพึ่งพาส่วนกลาง | [REF-UR][REF-DID-CORE] | +| ลายมือชื่อในคำขอ (Request Object) | MUST ใช้ client identifier scheme ที่ OID4VP §5.9 ระบุ เช่น `x509_san_dns:`, `x509_hash:`, `decentralized_identifier:`, `verifier_attestation`, `openid_federation` | [REF-OID4VP] | + +{/* METADATA (agent-only — not rendered to readers) +> **ฐานจากเวอร์ชัน 1.1 และการปรับปรุงในเวอร์ชัน 2.0:** เวอร์ชัน 1.1 ใช้ W3C VCDM v1.1 และ JSON-LD สำหรับเอกสารเดิม รวมทั้ง OID4VC draft 13 กับ OID4VP draft 20 เวอร์ชัน 2.0 ยังคงรองรับ W3C VCDM v1.1 และเพิ่ม SD-JWT VC (`dc+sd-jwt`) สำหรับเอกสารใหม่ พร้อมใช้ OID4VCI 1.0 Final และ OID4VP 1.0 Final (พร้อม DCQL) โดยกำหนด EdDSA (Ed25519) เป็นอัลกอริทึมที่แนะนำ และกำหนดให้รองรับ ES256 เพิ่มเติมตามโปรไฟล์กุญแจในบทที่ 11; pre-authorized code flow ยังคงเป็นแนวทางเดิม รายละเอียดการเปลี่ยนแปลงดูได้ที่ [ภาคผนวก ข — บันทึกการเปลี่ยนแปลง v1.1→v2.0](15-appendix.md) +*/} + +{/* METADATA (agent-only — not rendered to readers) +> **หมายเหตุการเปลี่ยนชื่อ WTE → WUA:** เอกสารนี้ใช้คำว่า **WUA (Wallet Unit Attestation)** ตาม EUDI ARF 2.9.0 [REF-ARF] แทนคำว่า WTE เดิม ข้อกำหนดใน OID4VCI คงตามกระบวนการออกเอกสารที่ระบุใน §8.2 และภาคผนวก 8.1 ส่วน **ใน OID4VP** Thai profile กำหนดให้ Wallet รัฐบาลส่ง WIA และ WIA-PoP ครบคู่ ส่วน Wallet เอกชนเลือกส่งครบคู่หรือไม่ส่งทั้งคู่ได้ หากส่งไม่ครบคู่หรือหลักฐานตรวจไม่ผ่าน ให้ปฏิเสธ VP; Verifier ต้องจำแนกประเภท Wallet จากข้อมูลที่เชื่อถือได้ และปฏิเสธ VP หากจำแนกไม่ได้ [กลไก §8.4.2 และภาคผนวก 8.2](08.2-oid4vp-full-flow-detail.md) บทนี้กล่าวถึง WUA เฉพาะที่ปรากฏในกระแสงาน OID4VCI/OID4VP ส่วนแนวคิดและนิยามดู [บทที่ 10 — Wallet Unit Attestation (WUA)](10-wallet-unit-attestation.md) +*/} + +### 8.1.3. บทบาทและผู้มีส่วนได้ส่วนเสีย + +การแลกเปลี่ยน VC และ VP ประกอบด้วย 4 บทบาทหลัก MUST เข้าใจร่วมกันดังนี้: + +| บทบาท | ความหมาย | ตัวอย่างในบริบทไทย | +|------|---------|----------------| +| **Issuer** | ผู้ออก VC เป็นผู้รับผิดชอบในการลงนามและเผยแพร่ Status List | สถาบันการศึกษา, กรมการปกครอง (DOPA), กรมการขนส่งทางบก (DLT) | +| **Holder (ผู้ถือ)** | ผู้ครอบครอง VC ในกระเป๋าเอกสารดิจิทัล (Document Wallet) และเป็นผู้สร้าง VP เมื่อต้องแสดง | ผู้ใช้งาน Document Wallet | +| **Verifier** | ผู้ขอและตรวจสอบ VP จากผู้ถือ ตามวัตถุประสงค์ที่ลงทะเบียนไว้กับ สพธอ. | สถานพยาบาล, สถาบันการเงิน, หน่วยงานภาครัฐ | +| **Wallet Provider (WP)** | ผู้พัฒนาและดูแลกระเป๋าเอกสารดิจิทัล ออก Wallet Unit Attestation (WUA) เพื่อรับรองแอป | สำนักงานพัฒนารัฐบาลดิจิทัล (DGA), ผู้ให้บริการกระเป๋าเอกสารเอกชน | + +นอกจาก 4 บทบาทหลักแล้ว ยังมี **ETDA Trusted List (TL)** ทำหน้าที่: + +1. **การเข้าถึงไฟล์ (file access)** — Wallet, Issuer และ Verifier ดึง Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก CDN โดยตรงเมื่อเกิดการใช้งาน ไม่ต้องใช้ API key +2. **ควบคุมความเชื่อถือ (trust anchor)** — Trusted List ที่ดึงจาก CDN เป็น JWT ที่ สพธอ. ลงลายมือชื่อ ผู้ตรวจต้องตรวจลายมือชื่อทุกครั้งที่ได้รับไฟล์ใหม่จาก CDN [REF-TRUSTLIST-CDN] + +> รายละเอียดเกี่ยวกับ Trusted List schema และการดึงไฟล์จาก CDN ดูได้ที่ [§9 Trust Model 3](09-trust-model-3.md) และ [ข้อกำหนดการเผยแพร่ Trust List](12.1-trust-list-publication-profile.md) [REF-TRUSTLIST-CDN] + +### 8.1.4. รหัสสีในแผนภาพ + +แผนภาพ Mermaid ในบทนี้ใช้สีเพื่อแยกประเภทของขั้นตอนอย่างชัดเจน: + +| สี | ความหมาย | ผู้รับผิดชอบ | +|----|---------|------------| +| **เขียว** | การดาวน์โหลด Trusted List (เกิดก่อนผู้ใช้เริ่ม) | สพธอ. (ETDA) | +| **น้ำเงิน** | ขั้นตอนตามมาตรฐาน OID4VCI/OID4VP สากล | OpenID Foundation | +| **ส้ม** | จุดตรวจสอบความน่าเชื่อถือ (TC-1 ถึง TC-4) | Trust Framework (สพธอ.) | + +--- + +## 8.2. การออกเอกสารรับรองดิจิทัล (OID4VCI) — Flow การรับเอกสารรับรอง + +{/* METADATA (agent-only — not rendered to readers) +> **แหล่งข้อมูล:** trust-guide/03-issuance-flow/ · [08.1-issuance-full-flow-detail.md](08.1-issuance-full-flow-detail.md) · [REF-OID4VCI] +*/} + +### 8.2.1. สถานการณ์ + +ผู้ใช้ต้องการรับเอกสารรับรองดิจิทัล (เช่น ใบประมวลผลการศึกษา Transcript) ไว้ในกระเป๋าเอกสารดิจิทัล โดยไม่ต้องเดินทางไปสถาบันการศึกษา + +### 8.2.2. ผังขั้นตอนภาพรวม — Flow การรับเอกสารรับรอง (OID4VCI) + +แผนภาพนี้แสดงภาพรวมทั้งกระบวนการ แบ่งเป็น 5 ช่วงหลัก (1) เตรียมความพร้อม (2) การรับคำเชิญและการค้นหาข้อมูลผู้ออกบัตร (3) การตรวจสอบความน่าเชื่อถือก่อนยืนยันตัวตน (4) การขอ Token และ Credential และ (5) การตรวจสอบก่อนบันทึก จุดตรวจความน่าเชื่อถือของระบบ Trust Framework (TC-1 ถึง TC-4) ที่ปรากฏใน Flow นี้มี 2 จุด คือ **ช่วงที่ 3 ตรวจสอบ Issuer ก่อนยืนยันตัวตน = TC-3 (รอบแรก)** และ **ช่วงที่ 5 ตรวจสอบ VC และสถานะก่อนบันทึก = TC-3 (รอบที่สอง) + TC-4** (กลไกแต่ละจุดอธิบายใน §8.4) + +```mermaid +flowchart LR + classDef setup fill:#E8F5E9,stroke:#2E7D32,color:#1B5E20 + classDef std fill:#E3F2FD,stroke:#1565C0,color:#0D47A1 + classDef tc fill:#FFF3E0,stroke:#E65100,color:#BF360C + + P1(["① เตรียมความพร้อม
ดาวน์โหลด Trusted List + WUA"]):::setup + P2(["② รับคำเชิญ + ค้นหาข้อมูล
Credential Offer + Discovery"]):::std + P3(["③ ตรวจ Issuer ก่อนยืนยันตัวตน
TC-3 (รอบแรก)"]):::tc + P4(["④ Token + Credential
ออก VC"]):::std + P5(["⑤ ตรวจ VC + สถานะก่อนบันทึก
TC-3 (รอบที่สอง) + TC-4"]):::tc + + P1 --> P2 --> P3 --> P4 --> P5 +``` + +> **ตารางจับคู่ช่วง ↔ TC (OID4VCI):** + +| ช่วง | ชื่อช่วง | จุดตรวจ TC ที่ทำงาน | ผู้ตรวจ | ผู้ถูกตรวจ | อธิบายกลไก | +|:----:|---------|:-----------------:|--------|----------|------------| +| ① | เตรียมความพร้อม | — | — | — | ดาวน์โหลด Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก CDN แบบ lazy และตรวจลายมือชื่อ JWT — ยังไม่มีปฏิสัมพันธ์กับคู่กรณี จึงไม่มี TC | +| ② | รับคำเชิญ + ค้นหาข้อมูล | — | — | — | Credential Offer, Issuer Discovery, /.well-known/openid-credential-issuer เป็นมาตรฐาน OID4VCI ล้วน ยังไม่มีการตรวจสอบความน่าเชื่อถือของ Issuer ในระดับ Trust Framework | +| ③ | ตรวจ Issuer ก่อนยืนยันตัวตน | **TC-3 (รอบแรก)** | Wallet (ฝั่งผู้ถือ) | Issuer | Wallet ตรวจ Credential Issuer Metadata เทียบกับบริการ Issuer ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` ก่อนขอ OTP/ยืนยันตัวตน (รายละเอียด §8.4.3 และ [§12.1](12.1-trust-list-publication-profile.md)) | +| ④ | Token + Credential | **TC-2 เมื่อ Thai profile กำหนด** | Wallet → Authorization Server (ก่อนออก Access Token) | Wallet | Token Endpoint และ Credential Endpoint เป็น OID4VCI มาตรฐาน; หาก profile ใช้ Client Attestation ให้ตรวจที่ PAR หรือ Token Request ตาม Appendix E. Credential Request ใช้ `proofs.jwt`; ตรวจ Issuer/VC ในช่วง ⑤ | +| ⑤ | ตรวจ VC + สถานะก่อนบันทึก | **TC-3 (รอบที่สอง) + TC-4** | Wallet (ฝั่งผู้ถือ) | Issuer + Status List | (1) TC-3 รอบที่สอง: ตรวจ SD-JWT VC ฉบับสมบูรณ์ — claims, iss, jti, ลายมือชื่อด้วย PK_iss, validFrom/Until, disclosures (รายละเอียด §8.4.3) (2) TC-4: ดึงและตรวจ Status List JWT เพื่อยืนยันว่า VC ยังไม่ถูกยกเลิก/ระงับ (รายละเอียด §8.4.4) | + +> **หมายเหตุ (TC-2):** ใน OID4VCI Flow นี้ **TC-2 (ตรวจ Wallet) ทำงานฝั่ง Issuer** ไม่ได้แสดงเป็น node แยกในภาพรวมนี้ เนื่องจากผู้ตรวจคือ Issuer ซึ่งเป็นฝั่งตรงข้ามกับผู้ถือที่ผู้อ่านมองตามภาพ flow กลไก TC-2 ใน OID4VCI อธิบายใน §8.4.2 และรายละเอียดเชิงลำดับขั้นอยู่ใน [ภาคผนวก 8.1](08.1-issuance-full-flow-detail.md) + +> **หมายเหตุ:** แผนภาพนี้เป็นผังขั้นตอนภาพรวมฉบับย่อ (oversimplified overview) เพื่อให้ผู้อ่านเห็นลำดับกระบวนการโดยรวม หากต้องการทำความเข้าใจขั้นตอน คำขอ-คำตอบ และการตรวจสอบความน่าเชื่อถือในรายละเอียด ให้ศึกษาจาก **[ภาคผนวก 8.1 — OID4VCI Full Flow ทางเทคนิคโดยละเอียด](08.1-issuance-full-flow-detail.md)** ซึ่งแสดง TC-2 เมื่อ profile กำหนด, Client Attestation ในขั้น Token, `proofs.jwt` ใน Credential Request และ DPoP แบบมีเงื่อนไข + +### 8.2.3. แผนภาพ Sequence ฉบับสมบูรณ์และนโยบาย DPoP + +กระบวนการออกเอกสารรับรองดิจิทัลตามมาตรฐาน OID4VCI ฉบับสมบูรณ์ประกอบด้วยทุกขั้นตอน ตั้งแต่การเตรียมระบบ (SETUP) การออกคำเชิญ (STEP 1) การค้นหาข้อมูลผู้ออกเอกสาร (STEP 2) การตรวจสอบความน่าเชื่อถือ (STEP 2.5) การยืนยันตัวตน (STEP 3) การขอ Token และ Credential (STEP 4–5) การออกเอกสาร (STEP 6) และการแจ้งเตือน (STEP 7) รวมถึงการตรวจสอบความสดใหม่ของ Trusted List (Freshness Check) การใช้ DPoP เมื่อ Thai profile กำหนด และการออกเอกสารแบบทันที (Immediate Issuance) หรือแบบรอ (Deferred Issuance) + +รายละเอียดของแผนภาพ Sequence ฉบับสมบูรณ์ พร้อมคำอธิบายระดับ field-by-field และนโยบาย DPoP แยกตามระดับ IAL/AAL อยู่ใน **[ภาคผนวกของบทที่ 8 — OID4VCI Full Flow ทางเทคนิคโดยละเอียด](08.1-issuance-full-flow-detail.md)** + +--- + +## 8.3. การแสดงและตรวจสอบเอกสารรับรองดิจิทัล (OID4VP) — Flow การแสดงเอกสารรับรอง + +{/* METADATA (agent-only — not rendered to readers) +> **แหล่งข้อมูล:** trust-guide/04-presentation-flow/ · [08.2-oid4vp-full-flow-detail.md](08.2-oid4vp-full-flow-detail.md) · [REF-OID4VP] +*/} + +### 8.3.1. สถานการณ์ + +ผู้ใช้ต้องการแสดงเอกสารรับรองดิจิทัล เช่น ใบประมวลผลการศึกษา Transcript ให้หน่วยงานที่ขอตรวจสอบ (เช่น สถานศึกษาปลายทาง หรือนายจ้าง) โดยเปิดเผยเฉพาะข้อมูลที่จำเป็น (Selective Disclosure) + +### 8.3.2. ผังขั้นตอนภาพรวม — Flow การแสดงเอกสารรับรอง (OID4VP) + +แผนภาพนี้แสดงภาพรวมทั้งกระบวนการ แบ่งเป็น 6 ช่วงหลัก (1) เตรียมความพร้อม (2) Verifier ขอข้อมูล (3) Wallet ตรวจ Verifier (4) ยืนยันและสร้าง VP (5) ส่ง VP และตรวจ Wallet ตามเงื่อนไข TC-2 และ (6) Verifier ตรวจ VC และสถานะ สำหรับ OID4VP จุดตรวจ TC-1, TC-3 และ TC-4 ทำงานตามปกติ ส่วน TC-2 กำหนดให้ Wallet รัฐบาลส่ง WIA/WIA-PoP ครบคู่; Wallet เอกชนเลือกส่งครบคู่หรือไม่ส่งทั้งคู่ได้ โดย Verifier ต้องจำแนกประเภท Wallet จากข้อมูลที่เชื่อถือได้ หากตรวจประเภทไม่ได้ให้ปฏิเสธ VP (กลไกแต่ละจุดอธิบายใน §8.4) + +```mermaid +flowchart LR + classDef setup fill:#E8F5E9,stroke:#2E7D32,color:#1B5E20 + classDef std fill:#E3F2FD,stroke:#1565C0,color:#0D47A1 + classDef tc fill:#FFF3E0,stroke:#E65100,color:#BF360C + + P1(["① เตรียมความพร้อม
ดาวน์โหลด Trusted List"]):::setup + P2(["② Verifier ขอข้อมูล
Auth Request + QR"]):::std + P3(["③ Wallet ตรวจ Verifier
TC-1"]):::tc + P4(["④ ยืนยัน + สร้าง VP
Selective Disclosure"]):::std + P5(["⑤ ส่ง VP + ตรวจ Wallet ตามประเภท
TC-2 ตามข้อกำหนดของประเภท Wallet"]):::tc + P6(["⑥ Verifier ตรวจ VC + สถานะ
TC-3 + TC-4"]):::tc + + P1 --> P2 --> P3 --> P4 --> P5 --> P6 +``` + +> **ตารางจับคู่ช่วง ↔ TC (OID4VP):** + +| ช่วง | ชื่อช่วง | จุดตรวจ TC ที่ทำงาน | ผู้ตรวจ | ผู้ถูกตรวจ | อธิบายกลไก | +|:----:|---------|:-----------------:|--------|----------|------------| +| ① | เตรียมความพร้อม | — | — | — | Wallet/Verifier ดาวน์โหลด Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก CDN แบบ lazy และตรวจลายมือชื่อ JWT — ยังไม่มีปฏิสัมพันธ์ระหว่างคู่กรณี จึงไม่มี TC | +| ② | Verifier ขอข้อมูล | — | — | — | Verifier สร้าง Authorization Request, Request Object (JWS), แสดง QR/ deep link ตาม OID4VP มาตรฐาน — การยืนยันตัวตนของ Verifier จะเกิดในช่วง ③ | +| ③ | Wallet ตรวจ Verifier | **TC-1** | Wallet (ฝั่งผู้ถือ) | Verifier | ก่อนยินยอมให้ข้อมูล Wallet ตรวจบริการ Verifier ใน Trusted List ลายมือชื่อ Request Object และขอบเขต claims กับวัตถุประสงค์ตาม Thai profile (รายละเอียด §8.4.1 และ [§12.1](12.1-trust-list-publication-profile.md)) | +| ④ | ยืนยัน + สร้าง VP | — | — | — | แสดง Consent UI ให้ผู้ใช้กดยินยอม, จับคู่ Disclosure, สร้าง VP ตาม DCQL เป็น OID4VP มาตรฐาน — ยังไม่มีการตรวจสอบข้ามฝั่งในระดับ Trust Framework | +| ⑤ | ส่ง VP + ตรวจ Wallet | **TC-2 ตามประเภท Wallet** | Verifier | Wallet (WIA/WIA-PoP) | Wallet รัฐบาล MUST ส่งหลักฐานครบคู่; Wallet เอกชน MAY ส่งครบคู่หรือไม่ส่งทั้งคู่ Verifier ต้องจำแนกประเภทจากข้อมูลที่เชื่อถือได้ หากตรวจประเภทไม่ได้ ให้ปฏิเสธ VP; หลักฐานไม่ครบหรือไม่ผ่านการตรวจให้ปฏิเสธ (รายละเอียด §8.4.2) | +| ⑥ | Verifier ตรวจ VC + สถานะ | **TC-3 + TC-4** | Verifier | Issuer + Status List | (1) TC-3: ตรวจ SD-JWT VC ใน `vp_token` — iss/jti, ดึง PK_iss ผ่าน DID Resolution, ตรวจลายมือชื่อ, validFrom/Until, disclosures ตรงกับ DCQL (รายละเอียด §8.4.3) (2) TC-4: ดึงและตรวจ Status List JWT เพื่อยืนยันว่า VC ยังไม่ถูกยกเลิก/ระงับ (รายละเอียด §8.4.4) | + +> **หมายเหตุ:** แผนภาพนี้เป็นผังขั้นตอนภาพรวมฉบับย่อ (oversimplified overview) เพื่อให้ผู้อ่านเห็นลำดับกระบวนการโดยรวม หากต้องการทำความเข้าใจขั้นตอน คำขอ-คำตอบ และการตรวจสอบความน่าเชื่อถือในรายละเอียด ให้ศึกษาจาก **[ภาคผนวก 8.2 — OID4VP Full Flow ทางเทคนิคโดยละเอียด](08.2-oid4vp-full-flow-detail.md)** ซึ่งประกอบด้วยแผนภาพ Sequence ฉบับสมบูรณ์ คำอธิบายระดับ field-by-field และสรุปจุดตรวจ L1–L7 + +### 8.3.3. แผนภาพ Sequence ฉบับสมบูรณ์ — OID4VP + +กระบวนการแสดงและตรวจสอบเอกสารสำแดงดิจิทัลตามมาตรฐาน OID4VP ฉบับสมบูรณ์ประกอบด้วยทุกขั้นตอน ตั้งแต่การเตรียมระบบ (SETUP) การสร้างคำขอ (Step 1) การโอนข้ามอุปกรณ์ (Step 2) การดึง Request Object (Step 2.5) การตรวจสอบผู้ตรวจสอบเอกสาร การจับคู่ข้อมูลในเครื่องและการขอความยินยอม (Step 3) การสร้างเอกสารสำแดงและ Proof of Possession (Step 4) การส่งคำตอบ (Step 5) และการตรวจสอบฝั่งผู้ตรวจสอบเอกสาร (Step 6) ซึ่งรวมถึงการตรวจสอบผู้ให้บริการกระเป๋า การผูกผู้ถือเอกสาร (KB-JWT) การตรวจสอบผู้ออกเอกสาร และการตรวจสอบสถานะเอกสาร + +รายละเอียดของแผนภาพ Sequence ฉบับสมบูรณ์ พร้อมคำอธิบายระดับ field-by-field และสรุปจุดตรวจ L1–L7 อยู่ใน **[ภาคผนวกของบทที่ 8 — OID4VP Full Flow ทางเทคนิคโดยละเอียด](08.2-oid4vp-full-flow-detail.md)** + +--- + +## 8.4. กลไกการตรวจสอบความน่าเชื่อถือ 4 จุดตรวจ (TC-1 ถึง TC-4) + +ทั้ง 2 กระบวนการ (OID4VCI และ OID4VP) ใช้ชุดจุดตรวจเดียวกัน ต่างกันที่ผู้ดำเนินการตรวจและผู้ถูกตรวจ บทนี้อธิบายกลไกด้วยข้อความเชิงบรรยายเพื่อให้ผู้อ่านเข้าใจการทำงานของแต่ละจุดตรวจ โดยไม่อาศัยแผนภาพลำดับการตัดสินใจ (decision flow) ฉบับย่อยซึ่งเคยก่อให้เกิดความสับสนในฉบับก่อนหน้า + +### 8.4.1. TC-1 — กระเป๋าเอกสารดิจิทัลตรวจสอบผู้ตรวจสอบเอกสาร (Wallet ตรวจ Verifier) + +จุดตรวจ TC-1 ปรากฏเฉพาะในกระบวนการ OID4VP และถือเป็นจุดควบคุมความปลอดภัยที่สำคัญที่สุดของฝั่งกระเป๋าเอกสารดิจิทัล เนื่องจากเป็นด่านสุดท้ายก่อนที่กระเป๋าจะส่งข้อมูลส่วนบุคคลของผู้ถือออกไปยังผู้ตรวจสอบเอกสาร + +กลไกของ TC-1 ดำเนินการในช่วงระหว่างที่กระเป๋าเอกสารดิจิทัลดึง Request Object จากผู้ตรวจสอบเอกสาร และก่อนที่จะแสดง Consent UI ให้ผู้ใช้อนุมัติ มีลำดับขั้นตอนหลัก ดังนี้ + +1. **แยกกุญแจสาธารณะของผู้ตรวจสอบเอกสาร (Public Key — PK_v)** จาก Request Object ที่ลงนามแล้ว +2. **ตรวจสอบลายมือชื่อ Trusted List** ด้วย ETDA public key เพื่อยืนยันว่าข้อมูล Trusted List ที่จัดเก็บไว้ในเครื่องยังน่าเชื่อถือ +3. **ค้นหาบริการ Verifier ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]`** โดยตรวจ `ServiceInformation.ServiceTypeIdentifier` และกุญแจใน `ServiceDigitalIdentity` ต้องยืนยันสถานะระดับองค์กรและบริการเป็น `active` ตาม Thai profile ได้ มิฉะนั้นให้หยุดดำเนินการทันที [research/42](../research/42-trusted-list-lote-jwt-format.md) +4. **ตรวจสอบลายมือชื่อ Request Object ด้วย PK_v** พร้อมตรวจสอบ `aud`, `exp`/`iat` และค่า `nonce` +5. **ตรวจสอบขอบเขตข้อมูลที่ขอ** — `dcql_query.claims[].path` ต้องอยู่ภายในขอบเขต claims ที่ Thai profile ของบริการ Verifier ประกาศไว้ +6. **ตรวจสอบวัตถุประสงค์** — `purpose` ต้องอยู่ในขอบเขตวัตถุประสงค์ที่ Thai profile ของบริการ Verifier ประกาศไว้; หากไม่มีข้อมูลให้ปฏิเสธ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +เมื่อผ่านทุกขั้นตอน กระเป๋าเอกสารดิจิทัลจึงจะแสดง Consent UI ให้ผู้ใช้อนุมัติการส่งข้อมูล หากขั้นตอนใดไม่ผ่าน กระเป๋าเอกสารดิจิทัล MUST หยุดดำเนินการทันทีและไม่ส่งข้อมูลใด ๆ ออกไป + +### 8.4.2. TC-2 — การตรวจสอบความน่าเชื่อถือของกระเป๋าเอกสารดิจิทัล (Issuer/Verifier ตรวจ Wallet) + +จุดตรวจ TC-2 ปรากฏทั้งใน OID4VCI และ OID4VP เพื่อให้ผู้ออกเอกสารหรือผู้ตรวจสอบเอกสารยืนยันความน่าเชื่อถือของ Wallet ตาม Thai profile. ใน OID4VCI เมื่อใช้ Wallet Attestation ตาม Appendix E ให้ส่ง Client Attestation ใน Pushed Authorization Request หรือ Token Request เพื่อยืนยัน Client ต่อ Authorization Server ก่อนออก Access Token; รายละเอียด OID4VCI อยู่ใน [§8.2](08-implementation-guidelines.md) และ [ภาคผนวก 8.1](08.1-issuance-full-flow-detail.md). `proofs.jwt` ใน Credential Request แยกต่างหากและใช้พิสูจน์การครอบครองกุญแจที่จะผูกกับ Credential. + +หาก Thai profile กำหนด TC-2 ใน OID4VCI ผู้ออก/Authorization Server ต้องตรวจ Attestation และ PoP ตามกลไกที่ profile ประกาศก่อนออก Access Token, ตรวจ trust source/ลายมือชื่อและสถานะ Wallet ตามข้อมูลที่ profile กำหนด, และปฏิเสธเมื่อหลักฐานไม่ครบหรือไม่ผ่าน. OID4VCI Appendix E ไม่ได้กำหนด Trusted List schema หรือ Wallet Provider Registry ของไทย; แหล่งข้อมูล ฟิลด์ค้นหา freshness และการจัดการข้อผิดพลาดจึงเป็นเรื่องที่ Thai profile ต้องกำหนด. + +กติกาแยกประเภท Wallet ด้านล่างใช้กับ TC-2 ของ OID4VP เท่านั้น. + +ใน OID4VP ผู้ตรวจสอบเอกสารดำเนินการตรวจหลังได้รับ Authorization Response ดังนี้: + +1. ตรวจประเภท Wallet จากข้อมูล Wallet Provider ที่เชื่อถือได้และ Thai profile ซึ่งต้องกำหนดแหล่งข้อมูลและวิธีตรวจประเภทก่อนใช้งานจริง หากไม่มีข้อมูล ข้อมูลไม่สดใหม่ หรือตรวจประเภทไม่ได้ ให้ปฏิเสธ VP +2. **Wallet รัฐบาล:** ต้องมี WIA และ WIA-PoP ครบทั้งคู่ หากขาดรายการใด ให้ปฏิเสธ VP +3. **Wallet เอกชน:** MAY เลือกส่ง WIA และ WIA-PoP ครบทั้งคู่เพื่อทำ TC-2 หรือไม่ส่งทั้งคู่เพื่อข้าม TC-2 และตรวจ TC-3/TC-4 ต่อ; หากส่งมาเพียงรายการเดียว ให้ปฏิเสธ VP +4. เมื่อมี WIA และ WIA-PoP ครบ ให้ทำ TC-2: + - แยก WIA เพื่ออ่าน `iss` (Wallet Provider ID) และ `PK_wp` + - ค้นหา PK_wp ในบริการ Wallet Provider ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]`; หากไม่พบ ให้ตอบกลับด้วย `400 untrusted_wallet_provider` [research/42](../research/42-trusted-list-lote-jwt-format.md) + - ตรวจลายมือชื่อ WIA ด้วย PK_wp และตรวจช่วงเวลา `iat`/`exp` + - ตรวจลายมือชื่อ WIA-PoP ด้วย `WIA.cnf.jwk` พร้อมตรวจ `iss`, `aud` และ `nonce` + - ทำเครื่องหมาย `jti` ว่าถูกใช้แล้วเพื่อป้องกัน replay + +หาก WIA หรือ WIA-PoP ที่ส่งมาตรวจไม่ผ่าน Verifier MUST ปฏิเสธ VP + +### 8.4.3. TC-3 — การตรวจสอบความน่าเชื่อถือของผู้ออกเอกสาร (Wallet/Verifier ตรวจ Issuer) + +จุดตรวจ TC-3 ปรากฏทั้งใน OID4VCI และ OID4VP โดยมีจุดประสงค์เพื่อยืนยันว่าเอกสารรับรองที่ได้รับมีผู้ออกเอกสารที่น่าเชื่อถือและลายมือชื่อถูกต้อง + +ใน OID4VCI มีการตรวจสอบ 2 รอบ ดังนี้ + +- **รอบแรก (ตรวจก่อนยืนยันตัวตน)** — กระเป๋าเอกสารดิจิทัลตรวจสอบข้อมูล Credential Issuer Metadata ที่ได้รับจากผู้ออกเอกสารควบคู่กับ Trusted List ก่อนที่จะขอ OTP จากผู้ใช้ เพื่อป้องกันการส่งข้อมูลยืนยันตัวตนไปยังผู้ออกเอกสารที่ไม่ผ่านการรับรอง +- **รอบที่สอง (ตรวจก่อนบันทึก)** — กระเป๋าเอกสารดิจิทัลตรวจสอบ SD-JWT VC ฉบับสมบูรณ์ที่ได้รับจากผู้ออกเอกสาร + +ใน OID4VP ผู้ตรวจสอบเอกสารตรวจสอบ SD-JWT VC ที่อยู่ใน `vp_token` สำหรับแต่ละ credential ที่ผู้ถือส่งมา + +กลไกของ TC-3 ในการตรวจแต่ละครั้งมีลำดับขั้นตอนหลัก ดังนี้ + +1. **แยก claims** จาก JWT payload ได้แก่ `iss`, `jti`, `sub`, `@context`, `type` +2. **ค้นหาบริการ Issuer ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]`** ต้องยืนยันสถานะระดับองค์กรและบริการเป็น `active` ตาม Thai profile ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) +3. **ตรวจสอบความสอดคล้องของข้อมูล** — ตรวจ `iss` และ `jti` ตามรูปแบบ VC ที่ได้รับ และตรวจประเภท VC กับขอบเขตสิทธิ์ของ Issuer ใน Thai profile; `@context` และ `type` ใช้ตรวจเฉพาะ VC รูปแบบ W3C VCDM ตามข้อกำหนดของรูปแบบนั้น +4. **ดึงกุญแจสาธารณะของผู้ออกเอกสาร (PK_iss)** โดย dereference `kid` ผ่าน DID Resolver +5. **ตรวจสอบลายมือชื่อ SD-JWT VC** ด้วย PK_iss +6. **ตรวจสอบช่วงเวลาใช้งาน** — `validFrom ≤ now ≤ validUntil` +7. **ตรวจสอบ disclosures** ในกรณี OID4VP — ต้อง hash ตรงกับ `_sd` ใน issuer_jwt และ DCQL query ต้อง match กับ `reconstructed_credential` + +หากขั้นตอนใดไม่ผ่าน ฝั่งที่ดำเนินการตรวจ MUST ปฏิเสธคำขอหรือทิ้ง VC ทันที + +### 8.4.4. TC-4 — การตรวจสอบสถานะเอกสาร (Wallet/Verifier ตรวจ Status List) + +จุดตรวจ TC-4 ปรากฏทั้งใน OID4VCI และ OID4VP โดยมีจุดประสงค์เพื่อยืนยันว่าเอกสารรับรองที่ลงนามโดยผู้ออกเอกสารที่น่าเชื่อถือยังคงสถานะใช้งานได้ ไม่ถูกยกเลิกหรือระงับ + +หลักการสำคัญ: ลายมือชื่อที่ถูกต้องตาม TC-3 ไม่ได้หมายความว่าเอกสารรับรองยังใช้ได้ ผู้ออกเอกสารอาจยกเลิกเอกสารรับรองได้ทุกเมื่อ ฝั่งที่ดำเนินการตรวจ MUST ตรวจสอบ Status List ทุกครั้ง แม้ว่า TC-3 จะผ่านแล้ว [REF-TSL] + +กลไกของ TC-4 มีลำดับขั้นตอนหลัก ดังนี้ + +1. **อ่าน `uri` และ `idx`** จาก `status.status_list` ใน JWT payload +2. **ดึง Status List JWT** จาก `uri` โดยระบุ `Accept: application/statuslist+jwt` +3. **ตรวจสอบ Status List JWT** — ต้องมี `typ = "statuslist+jwt"`, `sub` ตรงกับ URI, ช่วงเวลา `iat`/`exp` ยังไม่หมดอายุ และลงนามโดย PK_iss ที่ตรวจได้ใน TC-3 +4. **ถอดรหัส `lst`** — base64url decode แล้วคลาย DEFLATE ตามรูปแบบ ZLIB +5. **อ่านค่า status ที่ตำแหน่ง `idx`** โดยใช้ความกว้าง `bits` ที่ระบุใน Status List JWT — `0x00` หมายถึงใช้งานได้ (VALID), `0x01` หมายถึงถูกยกเลิก (INVALID), `0x02` หมายถึงถูกระงับ (SUSPENDED); ปฏิเสธค่าที่ไม่รู้จักหรือไม่รองรับ (fail-closed) + +หากดึงหรือตรวจสอบ Status List JWT ไม่สำเร็จ ฝั่งที่ดำเนินการตรวจ MUST ปฏิเสธคำขอ (fail-closed) เนื่องจากไม่สามารถยืนยันสถานะของเอกสารรับรองได้ + +### 8.4.5. สรุปจุดตรวจ 4 ด่าน และการเทียบเคียงกับ PKI + +ตารางต่อไปนี้สรุปหน้าที่ของจุดตรวจทั้ง 4 ด่าน และเทียบเคียงกับกลไกในโครงสร้างพื้นฐานกุญแจสาธารณะ (Public Key Infrastructure — PKI) เพื่อให้ผู้อ่านที่คุ้นเคยกับ PKI เข้าใจความสอดคล้อง + +| รหัส | ตรวจอะไร | ใครตรวจ | ปรากฏใน | บังคับ? | เทียบเคียง PKI | +|------|---------|--------|---------|--------|---------------| +| **TC-1** | ตรวจว่าผู้ขอข้อมูลน่าเชื่อถือ | Wallet | OID4VP เท่านั้น | ใช่ — Wallet MUST ตรวจ Verifier ก่อนส่งข้อมูลใด ๆ | ตรวจ Relying Party identity | +| **TC-2** | ตรวจว่า Wallet น่าเชื่อถือ | Issuer (OID4VCI) / Verifier (OID4VP) | ทั้ง 2 Flow | OID4VCI ตาม §8.2; สำหรับ OID4VP ต้องจำแนกประเภท Wallet จากข้อมูลที่เชื่อถือได้ (หากทำไม่ได้ให้ปฏิเสธ VP); Wallet รัฐบาลต้องส่งและผ่านการตรวจ WIA/WIA-PoP ครบคู่ ส่วน Wallet เอกชนเลือกส่งครบคู่หรือไม่ส่งทั้งคู่ หากส่งไม่ครบหรือหลักฐานตรวจไม่ผ่านต้องปฏิเสธ | ตรวจ Application identity | +| **TC-3** | ตรวจว่า Issuer น่าเชื่อถือ + ลายมือชื่อถูกต้อง | Wallet (OID4VCI) / Verifier (OID4VP) | ทั้ง 2 Flow | ใช่ — ใน OID4VCI ตรวจ 2 รอบ (early + full) | ตรวจ Issuer identity + signature | +| **TC-4** | ตรวจว่าสถานะ VC ใช้งานได้ | Wallet (OID4VCI) / Verifier (OID4VP) | ทั้ง 2 Flow | ใช่ — MUST ตรวจ Status List ทุกครั้ง | ตรวจสถานะ JWT แบบ Status List | + +> **ข้อสังเกต:** TC-4 ใช้ IETF Token Status List [REF-TSL] ซึ่งเก็บค่า status แบบบรรจุหลายรายการใน byte array ตามความกว้าง `bits` แล้วบีบอัดเป็น JWT; ผู้ออก Status List ลงลายมือชื่อ Status List JWT และผู้ตรวจสอบต้องตรวจลายมือชื่อนั้นด้วยกุญแจที่เชื่อถือได้ของผู้ออก Status List ตาม profile + +--- + +## 8.5. การ resolve DID (DID Resolution) — 3 กรณี + +เมื่อกระเป๋าเอกสารดิจิทัล (ใน OID4VCI) หรือผู้ตรวจสอบเอกสาร (ใน OID4VP) ต้องตรวจสอบลายมือชื่อของ VC ต้องดึงกุญแจสาธารณะของผู้ออกเอกสารจาก DID ก่อน มี 3 กรณีตาม DID method [REF-DID-CORE][REF-UR] ดังนี้ + +**กรณีที่ 1 — `did:web:issuer.example.th`:** ฝ่ายที่ตรวจสอบดึง DID Document โดยตรงจาก HTTPS GET ไปยัง `https://issuer.example.th/.well-known/did.json` กรณีนี้ต้องอาศัยเครือข่าย และผู้ดูแลคือ Issuer เอง + +**กรณีที่ 2 — `did:key:z6Mki...`:** กุญแจสาธารณะถูกฝังอยู่ในสายอักขระของ DID โดยตรง (self-contained) ฝ่ายที่ตรวจสอบสามารถแยกกุญแจสาธารณะออกมาได้ทันทีโดยไม่ต้องอาศัยเครือข่าย ไม่มีผู้ดูแลส่วนกลาง + +**กรณีที่ 3 — `did:ndid:...` หรือ custom DID method:** ฝ่ายที่ตรวจสอบส่งคำขอไปยัง ETDA Trust Gateway ซึ่งทำหน้าที่เป็น Universal Resolver กรณีนี้ต้องอาศัยเครือข่ายและใช้ API key ผู้ดูแลคือ สพธอ. (ETDA) + +| DID method | วิธี resolve DID | ต้องเครือข่าย? | ผู้ดูแล | +|-----------|-------------|:------------:|---------| +| `did:web:issuer.example.th` | HTTPS GET `.well-known/did.json` | ใช่ | Issuer เอง | +| `did:key:z6Mki...` | แยกจากสายอักขระ DID (self-contained) | ไม่ | ไม่มี | +| `did:ndid:...` / custom | ETDA Trust Gateway Universal Resolver (API key) | ใช่ | สพธอ. (ETDA) | + +> **สำคัญ:** ทั้ง 3 กรณีต้องดำเนินการภายหลังจากผ่าน TC-3 แล้ว กล่าวคือ การ resolve DID เกิดขึ้นหลังยืนยันความน่าเชื่อถือของผู้ออกเอกสารจาก Trusted List แล้ว เพื่อให้ทราบว่าต้องดึงกุญแจสาธารณะจากแหล่งใด +> +> **หมายเหตุ `did:ndid`:** ปัจจุบันยังไม่จดทะเบียนใน W3C DID method registry สพธอ. ต้องพัฒนา DID method spec + Universal Resolver driver เอง + +--- + +## 8.6. กฎเสริมสำหรับการพัฒนา + +นอกเหนือจากข้อกำหนดหลักใน 8.1.2 แล้ว การพัฒนาระบบ SHOULD ปฏิบัติตามกฎเสริมเหล่านี้เพื่อให้ระบบมีความปลอดภัยและทำงานร่วมกันได้: + +| หัวข้อ | กฎเสริม (RFC 2119) | ที่มา | +|--------|--------------------|------| +| Access Token TTL | SHOULD ตั้งอายุสั้น (เช่น 5 นาที) และผูกกับอุปกรณ์ (DPoP หรือ cnf) — แนวปฏิบัติที่เอกสารนี้เสนอเพิ่มเติมจากข้อกำหนด OID4VCI | [REF-OID4VCI] | +| Trusted List TTL | SHOULD ตั้งอายุไม่เกิน 24 ชั่วโมง และ SHOULD มีระบบ push notification เมื่อมีการเปลี่ยนแปลง | แนวปฏิบัติ [REF-ARF] | +| WUA | MUST ใช้ WUA ตาม EUDI ARF 2.9.0 ใน OID4VCI ตาม §8.2; สำหรับ OID4VP Verifier MUST จำแนกประเภท Wallet จากข้อมูลที่เชื่อถือได้และปฏิเสธ VP หากทำไม่ได้; Wallet รัฐบาล MUST ส่ง WIA/WIA-PoP ครบคู่ ส่วน Wallet เอกชน MAY ส่งครบคู่หรือไม่ส่งทั้งคู่ (Thai-profile extension) | [REF-ARF] | +| DPoP | SHOULD ใช้ DPoP (RFC 9449) สำหรับ Access Token binding | [REF-DPOP] | +| PKCE | MUST ใช้ PKCE (RFC 7636) ใน Authorization Code flow | [REF-PKCE] | +| Consent UI | MUST แสดงข้อมูล Verifier, ข้อมูลที่ขอ, วัตถุประสงค์ และให้ผู้ใช้เลือกเปิดเผยเฉพาะที่จำเป็น | [REF-ARF] [REF-PDPA] | +| Audit log | MUST บันทึกเหตุการณ์การออก VC การแสดง VP และการตรวจสอบ โดยเก็บไว้ไม่น้อยกว่า 7 ปีตาม พ.ร.บ. ธุรกรรมทางอิเล็กทรอนิกส์ | [REF-ETA] | +| การป้องกันการโจมตีแบบ replay | MUST ใช้ nonce, `jti` หรือกลไกป้องกัน replay อื่นตามที่ protocol และ Thai profile กำหนด; ตรวจ freshness และใช้ซ้ำในแต่ละ proof/token ตามข้อกำหนดที่เกี่ยวข้อง | [REF-OID4VCI] [REF-OID4VP] [REF-DPOP] | +| การบันทึกข้อมูลส่วนบุคคล | MUST ปฏิบัติตาม พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล (PDPA) 2562 และ SHOULD ใช้ Selective Disclosure เพื่อลดการเปิดเผยข้อมูล | [REF-PDPA] | + +--- + +## 8.7. ข้อกำหนดของกรณีศึกษา (จากฉบับเวอร์ชัน 1.1) + +รายงานฉบับนี้ศึกษาการออกและแสดงเอกสารรับรองดิจิทัล โดยใช้กรณีศึกษาการออกใบประมวลผลการศึกษา (Transcript) ของสถาบันการศึกษาในประเทศไทย ตามแผนภาพที่แสดงใน [§7](07-cross-ecosystem-interoperability.md) และ [§9](09-trust-model-3.md) โดยมีข้อกำหนดซึ่งคงไว้จากฉบับเวอร์ชัน 1.1 ดังนี้ + +1. การศึกษามุ่งเน้นไปที่ขั้นตอนการออกเอกสารรับรองดิจิทัล (VC) และการแสดงเอกสารสำแดงดิจิทัล (VP) +2. กระบวนการดึงข้อมูล (Resolve) DID Document ตามมาตรฐานของ W3C จะใช้ DIF Universal Resolver ซึ่งในรายงานฉบับนี้ใช้ DIF Universal Resolver จำลองของ สพธอ. (ETDA) ที่พัฒนาขึ้นเพื่อรองรับความพร้อมของการใช้งานของผู้ให้บริการในคณะทำงานส่งเสริมการพัฒนา Document Wallet และ Verifiable Credentials เพื่อไปดึงข้อมูล DID Document จาก Registry +3. ขั้นตอนการลงทะเบียน (Register) จะดำเนินการโดยใช้โปรโตคอล OID4VP ในรายงานฉบับนี้คณะทำงานส่งเสริมการพัฒนา Document Wallet และ Verifiable Credentials ได้สร้าง DID Document แล้วบันทึกลง Registry เอง + +--- + +## 8.8. สรุป — ข้อกำหนด MUST / SHOULD / MAY + +| หัวข้อ | MUST | SHOULD | MAY | +|--------|:----:|:------:|:---:| +| ใช้มาตรฐาน OID4VCI 1.0 + OID4VP 1.0 | ✅ | | | +| รองรับ W3C VCDM v1.1 สำหรับเอกสารเดิม | ✅ | | | +| รองรับ credential format `dc+sd-jwt` สำหรับเอกสารใหม่ | ✅ | | | +| รองรับ EdDSA (Ed25519) และ ES256 (ECDSA P-256/SHA-256) | ✅ | | | +| ใช้ IETF Token Status List | ✅ | | | +| ใช้ PKCE ใน Authorization Code flow | ✅ | | | +| ตรวจสอบ Issuer/Verifier ใน Trusted List | ✅ | | | +| จำแนกประเภท Wallet รัฐบาล/เอกชนจากข้อมูล Wallet Provider ที่เชื่อถือได้และตรวจสอบความสดใหม่ได้ใน OID4VP; หากจำแนกไม่ได้ให้ปฏิเสธ VP | ✅ | | | +| ตรวจ Status List ก่อนใช้ VC (TC-4) | ✅ | | | +| ใช้ WUA ใน OID4VCI ตาม §8.2 | ✅ | | | +| Wallet รัฐบาลส่ง WIA และ WIA-PoP ครบคู่ใน OID4VP | ✅ | | | +| Wallet เอกชนเลือกส่ง WIA/WIA-PoP ครบคู่หรือไม่ส่งทั้งคู่ใน OID4VP | | | ✅ | +| ปฏิเสธ WIA/WIA-PoP ที่ส่งไม่ครบหรือไม่ผ่านการตรวจ | ✅ | | | +| ใช้ DPoP สำหรับ Access Token binding | | ✅ | | +| ใช้ W3C DID Universal Resolver | ✅ | | | +| รองรับ `did:web` โดยตรง | | ✅ | | +| รองรับ `did:key` โดยตรง | | ✅ | | +| แสดง Consent UI ครบถ้วน | ✅ | | | +| เก็บ audit log ≥ 7 ปี | ✅ | | | +| ปฏิบัติตาม PDPA | ✅ | | | +| ใช้ Selective Disclosure | | ✅ | | + +--- + +{/* METADATA (agent-only — not rendered to readers) +## อ้างอิง + +- [REF-OID4VCI] OpenID Foundation, "OpenID for Verifiable Credential Issuance 1.0" — https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html +- [REF-OID4VP] OpenID Foundation, "OpenID for Verifiable Presentations 1.0" — https://openid.net/specs/openid-4-verifiable-presentations-1_0.html +- [REF-SDJWT] IETF, “SD-JWT-based Verifiable Digital Credentials (SD-JWT VC),” draft-ietf-oauth-sd-jwt-vc-19, 31 August 2026 (Internet-Draft; status as of 1 October 2026: Waiting for AD Go-Ahead) — https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/ +- [REF-W3C-VCDM] W3C, "Verifiable Credentials Data Model v1.1" — https://www.w3.org/TR/vc-data-model/ +- [REF-TSL] IETF, “Token Status List (TSL),” draft-ietf-oauth-status-list-21, 21 June 2026 (Internet-Draft; status as of 1 October 2026: RFC Editor — Awaiting First editor) — https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ +- [REF-DID-CORE] W3C, "Decentralized Identifiers (DIDs) v1.0", 19 July 2022 +- [REF-ARF] European Commission, "EUDI Architecture and Reference Framework v2.9.0" — https://eudi.dev/2.9.0/main/ +- [REF-EdDSA] IETF RFC 8032, "Edwards-Curve Digital Signature Algorithm (EdDSA)" +- [REF-ES256] IETF RFC 7518, "JSON Web Algorithms (JWA)", §3.4 — https://www.rfc-editor.org/rfc/rfc7518.html#section-3.4 +- [REF-UR] DIF, "Universal Resolver" — https://github.com/decentralized-identity/universal-resolver +- [REF-CIR-WUA] (EU) CIR 2024/2979, "Wallet Unit Attestation" +- [REF-DPOP] IETF RFC 9449, "OAuth 2.0 Demonstrating Proof-of-Possession (DPoP)" +- [REF-PKCE] IETF RFC 7636, "Proof Key for Code Exchange (PKCE)" +- [REF-PDPA] พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562 +- [REF-ETA] พ.ร.บ. ว่าด้วยธุรกรรมทางอิเล็กทรอนิกส์ พ.ศ. 2544 และฉบับแก้ไข +- [REF-MASA-126] MASA-126 — S5 Implementation Guidelines (issue tracker) +- [REF-MASA-158] MASA-158 — Merge Full Flow from trust-guide into ARF, STEP 1.5 → 2.5 (2026-08-07) +- [REF-MASA-165] MASA-165 — Polish th/thai-vc-arf/08-implementation-guidelines.md: ตัด Trust Check flowchart ฉบับย่อย อธิบายกลไกด้วยข้อความเชิงบรรยาย และเพิ่มป้ายกำกับ TC-1 ถึง TC-4 บนผังขั้นตอนภาพรวม OID4VCI/OID4VP (2026-08-07) +- [REF-TRUSTLIST-CDN] คณะทำงาน VC, "แนวทางกระจาย Trustlist (LoTE) ผ่าน File/Edge CDN — ไม่ใช้ RabbitMQ", เวอร์ชัน 1.10, 4 กันยายน 2569 — [research/41](../research/41-trustlist-serving-filecdn-etag-binary.md) +- [REF-ARF-V11-SRC] Thai VC ARF v1.1 (มกราคม 2568), สพธอ. — [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) +- [REF-DRAFT-TFM] ฉบับร่าง Trust Flow ฉบับอธิบาย — [draft/trust-flow-minimal-explained.md](../draft/trust-flow-minimal-explained.md) +- [REF-DRAFT-TFT] ฉบับร่าง Trust Framework Template — [draft/trust-framework-template.md](../draft/trust-framework-template.md) + + + + + +--- +*/} + +**การนำทาง:** [บทที่ 7 — การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List](07-cross-ecosystem-interoperability.md) · [สารบัญ ARF](README.md) · [บทที่ 8.1 — OID4VCI Full Flow ทางเทคนิคโดยละเอียด](08.1-issuance-full-flow-detail.md) diff --git a/docs/thai-vc-arf/08.1-issuance-full-flow-detail.md b/docs/thai-vc-arf/08.1-issuance-full-flow-detail.md new file mode 100644 index 0000000..7622efa --- /dev/null +++ b/docs/thai-vc-arf/08.1-issuance-full-flow-detail.md @@ -0,0 +1,653 @@ +--- +description: "ภาคผนวกบทที่ 8 — Full Flow OID4VCI ทางเทคนิคโดยละเอียด — Thai VC ARF 2.0 DRAFT 0" +--- + +# ภาคผนวกบทที่ 8 — Full Flow OID4VCI ทางเทคนิคโดยละเอียด + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารขยายเพิ่มเติมสำหรับบทที่ 8 Implementation Guidelines +> **เวอร์ชัน:** v1.1 +> **วันที่:** 7 สิงหาคม 2569 +> **แหล่งข้อมูล:** trust-guide/03-issuance-flow/02-full-flow/ (MASA-158) +> **เอกสารที่เกี่ยวข้อง:** [บทที่ 8 — Implementation Guidelines](08-implementation-guidelines.md) · [บทที่ 9 — Trust Model 3](09-trust-model-3.md) · [ภาคผนวก 8.2 — OID4VP Full Flow](08.2-oid4vp-full-flow-detail.md) +*/} + +--- + +## วัตถุประสงค์ + +ภาคผนวกนี้จัดทำขึ้นเพื่ออธิบายรายละเอียดทางเทคนิคของกระบวนการออกเอกสารรับรองดิจิทัลตามมาตรฐาน OID4VCI (OpenID for Verifiable Credential Issuance) [REF-OID4VCI] แบบเต็มรูปแบบ (Full Flow) ตั้งแต่การเตรียมระบบ (SETUP) จนถึงการแจ้งเตือนภายหลังการรับเอกสาร (STEP 7 — Notification) โดยครอบคลุมทุกขั้นตอนอย่างละเอียด พร้อมคำอธิบายระดับ field-by-field สำหรับสถาปนิกระบบ ผู้พัฒนาซอฟต์แวร์ และผู้ตรวจสอบความสอดคล้อง + +{/* METADATA (agent-only — not rendered to readers) +> **หมายเหตุสำคัญ:** จุดตรวจ TC-3-EARLY ได้ย้ายจากตำแหน่ง STEP 1.5 (ก่อน Discovery) ไปยัง **STEP 2.5** (ภายหลัง Discovery ก่อน Authentication) ตามข้อกำหนด MASA-158 [REF-MASA-158] การอ้างอิง STEP ในภาคผนวกนี้สะท้อนตำแหน่งใหม่แล้ว +*/} + +--- + +## D.0. แผนภาพ Sequence ฉบับสมบูรณ์ — Full Flow OID4VCI (STEP 1–7) + +แผนภาพต่อไปนี้แสดงภาพรวมของกระบวนการทั้งหมดตั้งแต่ SETUP จนถึง STEP 7 (Notification): + +```mermaid +sequenceDiagram + actor EU as 👤 ประชาชน + participant W as 📱 Wallet + participant WP as 🏢 Wallet Provider + participant ETDA as 🛡️ ETDA Trusted List + participant Issuer as 🏛️ Issuer + participant SL as 📋 Issuer Status List + + rect rgb(210, 240, 210) + note over W,Issuer: 🟢 [ETDA คุม] SETUP เมื่อมีธุรกรรม — ดึง ETDA Public Key + Trusted List + W->>ETDA: GET https://etda.or.th/.well-known/did.json + ETDA-->>W: ETDA DID Document + Public Key + W->>W: เก็บ ETDA Public Key ไว้ใน Local Storage + Issuer->>ETDA: GET https://etda.or.th/.well-known/did.json + ETDA-->>Issuer: ETDA DID Document + Public Key + Issuer->>Issuer: เก็บ ETDA Public Key ไว้ใน Local Storage + W->>ETDA: GET https://trustme.etda.or.th/.well-known/iss.txt (CDN, ไม่ต้อง API key) + ETDA-->>W: Trusted List ที่เกี่ยวข้องฉบับเต็ม (JWT) + ETag + W->>W: Verify JWT ด้วย ETDA Public Key + W->>W: เก็บไฟล์เต็ม + ETag + NextUpdate + Issuer->>ETDA: GET https://trustme.etda.or.th/.well-known/wp.txt (CDN, ไม่ต้อง API key) + ETDA-->>Issuer: Trusted List ที่เกี่ยวข้องฉบับเต็ม (JWT) + ETag + Issuer->>Issuer: Verify JWT ด้วย ETDA Public Key + Issuer->>Issuer: เก็บไฟล์เต็ม + ETag + NextUpdate + end + + rect rgb(240, 240, 240) + note over W,WP: ⚙️ [Wallet Provider ดูแล] SETUP — Wallet Attestation + WP->>WP: เตรียม Wallet Attestation ตาม OID4VCI Appendix E และ trust information ตาม Thai profile + WP-->>W: Wallet Attestation สำหรับ Client authentication + W->>W: เตรียม Client Attestation PoP ตาม Appendix E + end + + rect rgb(220, 240, 255) + note over EU,Issuer: 🔵 [OID4VCI] STEP 1 — Credential Offer (รับคำเชิญ) + EU->>Issuer: [1] เข้าสู่ระบบบริการ + กด "ขอเอกสารรับรองดิจิทัล" + Issuer->>Issuer: [2] สร้าง pre_authorized_code + tx_code (OTP) + Issuer-->>EU: [3] QR Code บนหน้าจอ + Issuer-->>EU: [4] SMS OTP + EU->>W: [5] สแกน QR Code + end + + rect rgb(220, 240, 255) + note over W,Issuer: 🔵 [OID4VCI] STEP 2 — Discovery (ดูข้อมูลผู้ออกเอกสาร) + W->>Issuer: [6] GET /.well-known/openid-credential-issuer + Issuer-->>W: [7] Credential Issuer Metadata (format, claims, token_endpoint) + W->>W: [7.1] Scope Validation — ตรวจ credential_configurations_supported ว่ามีประเภทเอกสารที่ต้องการ ถ้าไม่พบ → หยุด + end + + rect rgb(255, 237, 200) + note over W,ETDA: 🟠 [ETDA Trust Model] STEP 2.5 — TC-3-EARLY: Trust Check: Issuer + W->>W: [7.2] ตรวจเจ้าของลายเซ็นบน Credential Issuer Metadata ใน Local Trusted List + W->>W: [7.3] ตรวจสถานะองค์กรและบริการตาม Thai profile + W->>W: [7.4] ตรวจประเภท VC กับขอบเขตสิทธิ์ของ Issuer + end + + rect rgb(220, 240, 255) + note over EU,W: 🔵 [OID4VCI] STEP 3 — Authentication (ยืนยันตัวตนด้วย OTP) + W->>EU: [8] กรุณากรอกรหัส OTP ที่ได้รับทาง SMS + EU->>W: [9] กรอก OTP + end + + rect rgb(235, 230, 255) + opt เมื่อ Thai profile กำหนด DPoP + note over W,Issuer: 🔐 DPoP PRE-STEP 4 — สร้าง DPoP Key Pair + W->>W: [9.1] สร้าง DPoP key pair และเก็บ private key ตามข้อกำหนดของ profile + W->>W: สร้าง DPoP Proof JWT สำหรับ /token ตาม RFC 9449 + end + end + + rect rgb(245, 245, 220) + note over Issuer,WP: ⚙️ เตรียม Wallet Provider Trusted List สำหรับ TC-2 + Issuer->>ETDA: GET Trusted List ของ Wallet Provider + If-None-Match + ETDA-->>Issuer: Trusted List ที่เกี่ยวข้องฉบับเต็ม (JWT) หรือ 304 Not Modified + Issuer->>Issuer: ตรวจลายมือชื่อ ความสดใหม่ ลำดับรายการ และช่วงเวลาที่มีผลใช้ได้ของ Trusted List + end + + rect rgb(220, 240, 255) + note over W,Issuer: 🔵 [OID4VCI] STEP 4 — Token Request + TC-2 (แลกบัตรผ่าน) + W->>Issuer: [10] POST /token + pre_authorized_code + tx_code, Wallet Attestation/Client Attestation PoP เมื่อใช้ client authentication ตาม Appendix E, DPoP เมื่อ Thai profile กำหนด + Issuer->>Issuer: [11] แยกตัวระบุ Wallet Provider และกุญแจตรวจสอบจาก Wallet Attestation + Issuer->>Issuer: [11.1] ค้นหา Wallet Provider ใน Trusted List ที่ตรวจแล้ว → ต้องพบบริการตามบทบาท กุญแจตรวจสอบต้องตรง และยืนยันสถานะองค์กร/บริการเป็น active ได้ + Issuer->>Issuer: [11.2] ตรวจ Attestation/PoP และ OTP ตาม OID4VCI/Thai profile, หาก [11.1] หรือการตรวจใดไม่ผ่าน → ไม่ออก Access Token + opt เมื่อใช้ DPoP + Issuer->>Issuer: ตรวจ DPoP Proof + end + opt เมื่อใช้ DPoP + Issuer->>Issuer: ผูก access_token กับ DPoP public key + end + Issuer-->>W: [12] Token Response: access_token (token_type ตามการใช้ DPoP) + end + + opt Issuer Metadata ระบุ Nonce Endpoint + W->>Issuer: [12.1] POST Nonce Endpoint (ไม่ต้องใช้ Access Token) + Issuer-->>W: [12.2] 2xx + c_nonce, Cache-Control: no-store + end + + rect rgb(220, 240, 255) + note over W,Issuer: 🔵 [OID4VCI] STEP 5 — Credential Request (ขอรับเอกสารรับรองดิจิทัล) + W->>W: [13] สร้าง Key Pair + ลงนาม JWT Proof โดยใส่ nonce หาก Issuer มี Nonce Endpoint + opt เมื่อ access token ผูกกับ DPoP key + W->>W: [13.1] สร้าง DPoP Proof ใหม่สำหรับ /credential ตาม RFC 9449 + end + W->>Issuer: [14] POST /credential + Authorization: Bearer หรือ DPoP + DPoP-Proof เมื่อ access token ผูกกับ DPoP key + credential_configuration_id + proofs.jwt + end + + rect rgb(220, 240, 255) + note over W,Issuer: 🔵 [OID4VCI] STEP 6 — Issue VC (ออกเอกสารรับรองดิจิทัล) + Issuer->>Issuer: [22] Validate Access Token + Key Proof + สร้าง SD-JWT VC + note over Issuer: JOSE — typ:dc+sd-jwt, alg:ES256, kid:issuer.dopa.go.th#key-2025-1 + note over Issuer: SD-JWT VC payload — registered JWT claims (iss, iat, exp), vct, cnf และ claims ระดับบนสุดพร้อม _sd, claims เสริมขึ้นกับ Thai profile, ไม่ใช่ W3C VC JSON object + alt Immediate Issuance + Issuer-->>W: [23] credential: SD-JWT VC + notification_id (ถ้ามี) + else Deferred Issuance + Issuer-->>W: [23] transaction_id + W->>Issuer: [24] POST /deferred_credential + transaction_id + Issuer-->>W: [25] credential: SD-JWT VC + notification_id (ถ้ามี) + end + end + + rect rgb(245, 245, 220) + note over W,Issuer: ⚙️ Trusted List Freshness Check (ก่อน STEP 6.5) + W->>ETDA: GET https://trustme.etda.or.th/.well-known/iss.txt + If-None-Match + alt 304 Not Modified + ETDA-->>W: ใช้ไฟล์เต็มใน Local Cache + else 200 OK + ETDA-->>W: Trusted List ที่เกี่ยวข้องฉบับเต็ม (JWT) + ETag + W->>W: Verify + Update Local Trusted List + ETag + end + end + + rect rgb(255, 237, 200) + note over W,Issuer: 🟠 [ETDA Trust Model] STEP 6.5 — TC-3: Trust Check: Issuer + W->>W: [26] แกะ iss, jti, sub จาก JWT payload + W->>W: [27] Lookup iss ใน Local Trusted List → พบ status = active + W->>W: [27.1] ตรวจ Issuer/identifier/type ตามรูปแบบ Credential และ Thai profile + W->>W: [27.2] หากเป็น W3C VCDM ให้ตรวจ issuer.id/id, @context และ type ตาม profile + W->>W: [27.3] หากเป็น SD-JWT VC ให้ตรวจ iss/vct และ claims ตาม Thai credential profile (ไม่สมมติ W3C VC body) + end + + rect rgb(220, 240, 255) + note over W,Issuer: 🔵 [W3C VC-JOSE-COSE] Resolve Issuer Public Key ผ่าน JWKS + W->>Issuer: [28] GET https://issuer.dopa.go.th/.well-known/jwt-vc-issuer + Issuer-->>W: [29] JWKS — รายการ key พร้อม kid, alg, x, y + W->>W: [29.1] kid matching: หา key ใน JWKS ที่ตรงกับ JOSE header, ดึง publicKeyJwk + end + + rect rgb(255, 237, 200) + note over W,Issuer: 🟠 [ETDA Trust Model] STEP 6.5 ต่อ — Verify + Validity + IETF Status + W->>W: [30] Verify SD-JWT signature ด้วย publicKeyJwk (kid matched) + W->>W: [30.1] ตรวจ `nbf`/`exp` และ `sub` เฉพาะตาม Thai credential profile, ห้าม map เป็น `validFrom`/`credentialSubject.id` โดยปริยาย + W->>W: [30.2] ตรวจช่วงเวลาใช้ได้ตาม JWT claims หรือ field mapping ที่ Thai profile กำหนดสำหรับ format นั้น + W->>SL: [30.3] GET status.status_list.uri (Accept: application/statuslist+jwt) + SL-->>W: [30.4] statuslist+jwt + W->>W: [30.5] Validate statuslist+jwt ตามกฎ JWT และ key-resolution/trust model ใน Thai profile, ตรวจ typ, sub = uri และ claims ที่มี + W->>W: [30.6] ตรวจ iat/freshness policy, ตรวจ exp เมื่อมี และใช้ ttl เมื่อ cache + W->>W: [30.7] Decompress lst แล้วอ่าน status slot ที่ idx = 0 ตาม bits (0x00 VALID), หาก idx อยู่นอกขอบเขตหรือ status ไม่รองรับ → ปฏิเสธ + end + + rect rgb(220, 240, 255) + note over W,Issuer: 🔵 [OID4VCI] STEP 7 — Notification (แจ้งว่ารับแล้ว, Optional) + W->>Issuer: [31] POST /notification notification_id (จาก Credential Response หรือ Deferred Credential Response) + event=credential_accepted + Issuer-->>W: [32] 204 No Content + W-->>EU: [33] บันทึกเอกสารรับรองดิจิทัลสำเร็จ + end + +``` + +**คำอธิบายแต่ละขั้นตอนโดยสังเขป:** + +| ช่วง STEP | ขั้นตอน | คำอธิบาย | +|-----------|---------|----------| +| **SETUP** | ดึง ETDA Public Key + Trusted List เมื่อมีธุรกรรม | Wallet และ Issuer ดึง ETDA Public Key จาก `/.well-known/did.json` แล้วดึง Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก CDN เมื่อเกิดการเชื่อมต่อ โดยไม่ใช้ API key หรือ background polling | +| **SETUP** | Wallet Attestation (WUA) | เมื่อใช้ client authentication ตาม OID4VCI Appendix E, Wallet Provider ออก Wallet Attestation; Wallet ส่ง Attestation และ Client Attestation PoP ใน PAR หรือ Token Request. Key Attestation ใน `proofs.jwt` เป็นกลไกแยกต่างหาก | +| **STEP 1** | Credential Offer | ผู้ใช้กดขอเอกสารรับรอง → Issuer สร้าง QR Code + ส่ง OTP ทาง SMS (pre_authorized_code + tx_code) | +| **STEP 2** | Discovery + Scope Validation | Wallet ดึง Credential Issuer Metadata → ตรวจสอบว่า credential type ที่ต้องการมีใน Metadata หรือไม่ | +| **STEP 2.5** | TC-3-EARLY | Wallet ตรวจสอบ Issuer ใน Trusted List + credential type ที่ได้รับอนุมัติ + Credential Issuer Metadata | +| **STEP 3** | Authentication | Wallet ขอ OTP → ผู้ใช้กรอก OTP → พิสูจน์ตัวตน | +| **PRE-STEP 4** | DPoP Key Pair | Wallet สร้าง DPoP key pair ตาม Thai profile เมื่อกำหนดให้ใช้ DPoP | +| **STEP 4** | Token Request + TC-2 | ส่ง `pre-authorized_code` + OTP; หากเลือก client authentication ตาม Appendix E ให้ส่ง Wallet Attestation และ Client Attestation PoP ใน Token Request; Issuer ค้นหา Wallet Provider จาก Attestation ใน Trusted List ที่ตรวจแล้ว และยืนยันบทบาท กุญแจ สถานะองค์กร/บริการก่อนตรวจ client authentication และออก Token; DPoP ใช้เมื่อ profile กำหนด | +| **STEP 5** | Credential Request | Wallet สร้าง Holder Key + JWT Proof → POST /credential พร้อม `proofs.jwt`; Key Attestation ตาม Appendix D/F.1 อาจอยู่ใน JOSE header ของ proof JWT; Wallet Attestation ไม่ใช่ JSON member ของ body นี้ | +| **STEP 6** | Issue VC | Issuer สร้าง SD-JWT VC ครบ 3 ชั้น → ส่ง credential ทันที (Immediate) หรือให้รอ (Deferred) | +| **STEP 6.5** | TC-3 + TC-4 | Wallet ตรวจสอบ Issuer ใน Trusted List + verify ลายมือชื่อ + ตรวจสอบ validity window + ตรวจสอบ Status List | +| **STEP 7** | Notification (Optional) | Wallet แจ้ง Issuer ว่ารับเอกสารแล้ว — เสริมสำหรับ audit log | + +--- + +## D.1. คำอธิบายทุกขั้นตอนโดยละเอียด + +### D.1.1. SETUP — การเตรียมระบบก่อนเริ่มใช้งาน + +ขั้นตอนนี้ดำเนินการครั้งเดียวเมื่อติดตั้งกระเป๋าเอกสารดิจิทัล (Wallet) หรือนำระบบของผู้ออกเอกสาร (Issuer) ขึ้นสู่สภาพแวดล้อมการทำงานจริง ทุกฝ่ายต้องมีข้อมูลพื้นฐานสำหรับการตรวจสอบความน่าเชื่อถือระหว่างกันก่อนเริ่มกระบวนการใด ๆ + +#### การดึง ETDA Public Key (Root of Trust) + +กระเป๋าเอกสารดิจิทัลและผู้ออกเอกสาร MUST ดึง ETDA Public Key จาก DID Document ที่ สพธอ. ประกาศไว้ กุญแจสาธารณะนี้เป็นจุดเริ่มต้นของห่วงโซ่ความเชื่อถือ (root of trust) ใช้สำหรับตรวจสอบลายมือชื่อดิจิทัลบน Trusted List [REF-TRUSTLIST-CDN] + +**คำขอ (Request):** +```http +GET https://etda.or.th/.well-known/did.json +``` + +**คำตอบ (Response):** +```json +{ + "id": "did:web:etda.or.th", + "verificationMethod": [ + { "id": "did:web:etda.or.th#tl-signing-key-1", "type": "Ed25519VerificationKey2020" } + ] +} +``` + +> **ข้อสังเกต:** กุญแจนี้เป็นจุดเริ่มต้นของห่วงโซ่ความเชื่อถือ — สพธอ. อาจปรับปรุงกุญแจได้โดยไม่ต้องปรับใช้แอปพลิเคชันใหม่ + +#### การดึง Trusted List + +กระเป๋าเอกสารดิจิทัลและผู้ออกเอกสารต้องดึง Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จากโครงข่ายกระจายเนื้อหา (CDN) ของ สพธอ. แบบ lazy เมื่อเกิดการใช้งาน โดยไม่ต้องใช้ API key และไม่ใช้ delta หรือไฟล์ CBOR ผู้รับต้องตรวจลายมือชื่อของ สพธอ. ก่อนใช้ข้อมูล [REF-TRUSTLIST-CDN] + +**คำขอ (Request) ตัวอย่าง:** +```http +GET https://trustme.etda.or.th/.well-known/iss.txt +Accept: application/jwt +``` + +**คำตอบ (Response) ตัวอย่าง:** +```http +HTTP/1.1 200 OK +Content-Type: application/jwt +ETag: "urn:etda:trusted-list:issuer:2026-v43" + + +``` + +ภายหลังการตรวจสอบลายมือชื่อ JWT กระเป๋าเอกสารดิจิทัลและผู้ออกเอกสารต้องจัดเก็บไฟล์ฉบับเต็มและค่า `ETag` ไว้ใน Local Storage เมื่อเกิดการใช้งานครั้งถัดไป ให้ส่ง `If-None-Match` หากได้รับ `304 Not Modified` ให้ใช้ไฟล์เดิม หากได้รับ `200 OK` ให้ตรวจลายมือชื่อ ตรวจ `LoTE.ListAndSchemeInformation.LoTESequenceNumber` และ `NextUpdate` ก่อนแทนที่ cache [research/42](../research/42-trusted-list-lote-jwt-format.md) [REF-TRUSTLIST-CDN] + +#### Wallet Unit Attestation (WUA) + +Wallet Attestation ตาม OID4VCI Final Appendix E เป็นวิธียืนยัน Client สำหรับ Native App Wallet. Wallet ส่ง Attestation ใน Pushed Authorization Request หรือ Token Request และ MUST สร้าง Client Attestation PoP ตาม Section 5.2 ของ Attestation-Based Client Authentication ที่ Appendix E อ้างถึง [REF-OID4VCI]. Authorization Server MUST ตรวจลายมือชื่อ Attestation จาก Issuer ที่ตนเชื่อถือ. แยกจาก Key Attestation ใน Appendix D ซึ่งอาจอยู่ใน JOSE header ของ JWT proof ใน `proofs.jwt` ตาม Appendix F.1; เมื่อ Issuer ให้ `c_nonce`, nonce claim ใน Key Attestation ต้องใช้ค่า `c_nonce` นั้น. Thai profile กำหนด trust source และวิธีตรวจสถานะ Wallet Provider/Wallet เพิ่มเติม [REF-OID4VCI] + +ตัวอย่างนี้ไม่แสดง JWT header/payload หรือชื่อพารามิเตอร์ของ Wallet Attestation/Client Attestation PoP เพื่อไม่ให้ placeholder ถูกเข้าใจว่าเป็นรูปแบบมาตรฐาน. เมื่อใช้กลไกนี้ ผู้ติดตั้งระบบ MUST ใช้รูปแบบและวิธีส่ง Wallet Attestation ตาม OID4VCI Final Appendix E และ Client Attestation PoP ตาม Section 5.2 ของ Attestation-Based Client Authentication ที่ Appendix E อ้างถึง [REF-OID4VCI]; Thai profile กำหนด trust source, key resolution, สถานะ Wallet Provider/Wallet และผลเมื่อการตรวจไม่ผ่านเพิ่มเติม [REF-OID4VCI]. + +--- + +### D.1.2. STEP 1 — Credential Offer (การออกคำเชิญ) + +ผู้ใช้เข้าระบบบริการของผู้ออกเอกสารและกดขอเอกสารรับรองดิจิทัล ผู้ออกเอกสารดำเนินการสร้างข้อมูลสองรายการสำหรับ session นั้น: + +| ข้อมูล | ค่าตัวอย่าง | อายุใช้งาน | หน้าที่ | +|--------|------------|------------|--------| +| `pre_authorized_code` | `pac-a1b2c3d4e5f6` | 5 นาที | รหัสลับที่กระเป๋าเอกสารดิจิทัลใช้แลก Access Token | +| `tx_code` (OTP) | `512847` | 5 นาที | รหัสที่ผู้ใช้กรอกเพื่อยืนยันตัวตน | + +**QR Code** บรรจุ Credential Offer Object ในรูปแบบ URI: + +```json +openid-credential-offer://?credential_offer={ + "credential_issuer": "https://issuer.dopa.go.th", + "credential_configuration_ids": ["ThaiNationalIDCredential-config"], + "grants": { + "urn:ietf:params:oauth:grant-type:pre-authorized_code": { + "pre-authorized_code": "pac-a1b2c3d4e5f6", + "tx_code": { "input_mode": "numeric", "length": 6 } + } + } +} +``` + +ผู้ออกเอกสารส่ง SMS OTP ไปยังผู้ใช้พร้อมแสดง QR Code บนหน้าจอ ผู้ใช้สแกน QR Code ด้วยกระเป๋าเอกสารดิจิทัล — กระเป๋าเอกสารดิจิทัลทราบข้อมูลเบื้องต้นว่าต้องขอเอกสารจากผู้ออกเอกสารใด และเป็นเอกสารประเภทใด + +--- + +### D.1.3. STEP 2 — Discovery (การค้นหาข้อมูลผู้ออกเอกสาร) + +กระเป๋าเอกสารดิจิทัลดึง Credential Issuer Metadata จากผู้ออกเอกสาร เพื่อรับข้อมูล endpoint และ credential configuration ที่จำเป็นสำหรับขั้นตอนถัดไป: + +```http +GET https://issuer.dopa.go.th/.well-known/openid-credential-issuer +``` + +**คำตอบ (Response):** Credential Issuer Metadata ต่อไปนี้เป็นตัวอย่างย่อ โดย `token_endpoint` มาจาก OAuth Authorization Server Metadata ตาม OID4VCI ไม่ใช่ field ของ Credential Issuer Metadata: +```json +{ + "credential_issuer": "https://issuer.dopa.go.th", + "credential_endpoint": "https://issuer.dopa.go.th/credential", + "notification_endpoint": "https://issuer.dopa.go.th/notification", + "credential_configurations_supported": { + "ThaiNationalIDCredential-config": { + "format": "dc+sd-jwt", + "vct": "https://credentials.dopa.go.th/ThaiNationalIDCredential", + "cryptographic_binding_methods_supported": ["jwk"], + "proof_types_supported": { + "jwt": { "proof_signing_alg_values_supported": ["ES256"] } + }, + "credential_metadata": { + "display": [{ "name": "บัตรประชาชนดิจิทัล", "locale": "th-TH" }], + "claims": [ + { "path": ["ชื่อ"], "display": [{ "name": "ชื่อ-นามสกุล", "locale": "th-TH" }] }, + { "path": ["เลขบัตร"], "display": [{ "name": "เลขบัตรประชาชน", "locale": "th-TH" }] }, + { "path": ["วันเกิด"], "display": [{ "name": "วันเกิด", "locale": "th-TH" }] } + ] + } + } + } +} +``` + +**Scope Validation [7.1]:** กระเป๋าเอกสารดิจิทัล MUST ตรวจสอบว่า `credential_configuration_id` จาก QR Code ตรงกับรายการใน `credential_configurations_supported` หรือไม่ — หากไม่พบ MUST หยุดดำเนินการทันที + +--- + +### D.1.4. STEP 2.5 — TC-3-EARLY: การตรวจสอบความน่าเชื่อถือของผู้ออกเอกสารก่อนยืนยันตัวตน + +> **ตำแหน่งใหม่ (MASA-158) [REF-MASA-158]:** ขั้นตอนนี้ดำเนินการภายหลัง Discovery (STEP 2) แต่ก่อน Authentication (STEP 3) — กระเป๋าเอกสารดิจิทัลใช้ข้อมูลจาก Credential Issuer Metadata ประกอบกับ Trusted List ที่จัดเก็บในเครื่อง เพื่อตรวจสอบความน่าเชื่อถือของผู้ออกเอกสาร + +กระเป๋าเอกสารดิจิทัลดำเนินการฝ่ายเดียว โดยใช้ Trusted List ที่จัดเก็บในเครื่อง (Local Trusted List) ไม่ต้องเรียกผ่านเครือข่าย: + +1. **ตรวจสอบผู้ออกเอกสารใน Trusted List [7.2–7.3]:** ค้นบริการ Issuer ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` โดยเทียบ `ServiceInformation.ServiceTypeIdentifier` และข้อมูลจาก Credential Issuer Metadata ต้องยืนยันสถานะระดับองค์กรและบริการเป็น `active` ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) +2. **ตรวจสอบประเภทเอกสารรับรอง [7.4]:** ประเภท VC ที่ `credential_configuration_id` อ้างถึงต้องอยู่ในขอบเขตสิทธิ์ของ Issuer ตาม Thai profile; หากขอบเขตยังไม่ประกาศหรือยืนยันไม่ได้ ต้องปฏิเสธ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +หากขั้นตอนใดไม่ผ่าน — กระเป๋าเอกสารดิจิทัล MUST หยุดดำเนินการทันที โดยไม่ร้องขอ OTP จากผู้ใช้ ทั้งนี้ เพื่อป้องกันการส่งข้อมูลยืนยันตัวตนของผู้ใช้ไปยังผู้ออกเอกสารที่ไม่ผ่านการรับรองจาก Trusted List + +--- + +### D.1.5. STEP 3 — Authentication (การยืนยันตัวตนด้วย OTP) + +กระเป๋าเอกสารดิจิทัลแสดง UI ขอให้ผู้ใช้กรอก OTP ที่ได้รับทาง SMS ผู้ใช้กรอก OTP — เป็นการพิสูจน์ว่าผู้ใช้เป็นเจ้าของหมายเลขโทรศัพท์ที่ผูกกับบัญชี + +--- + +### D.1.6. PRE-STEP 4 — DPoP Key Pair (สำหรับ IAL2.3+/AAL2+) + +เมื่อ Thai profile กำหนดให้ใช้ DPoP, กระเป๋าเอกสารดิจิทัลต้องสร้าง DPoP Key Pair ก่อนดำเนินการ STEP 4. ตารางและตัวอย่างด้านล่างเป็นข้อเสนอรอการยืนยันจากคณะทำงาน; ยังไม่ใช่ข้อกำหนดของ Thai profile. + +{/* TODO: นโยบาย DPoP ยังไม่ได้รับการยืนยัน (To be confirmed) — รอมติคณะทำงาน VC */} + +| สิ่งที่สร้าง | สถานที่จัดเก็บ | ส่งไปที่ใด | +|-------------|----------------|------------| +| DPoP Private Key | Trusted Execution Environment (TEE) | ห้ามส่งออกนอกอุปกรณ์ | +| DPoP Public Key | ใส่ใน DPoP Proof JWT header ตาม RFC 9449 | ส่งใน `DPoP` header เมื่อใช้ DPoP | +| DPoP Proof JWT | สร้างใหม่ทุกคำขอที่ต้องมี proof | ส่งเป็น `DPoP` header ตาม RFC 9449 | + +> **หลักการ DPoP (Demonstrating Proof of Possession — RFC 9449 [REF-DPOP]):** Access Token แบบ Bearer หากถูกขโมยสามารถนำไปใช้จากอุปกรณ์ใดก็ได้ DPoP ผูก Token กับกุญแจบนอุปกรณ์ — ขโมย Token ไปใช้จากอุปกรณ์อื่นไม่ได้ + +**DPoP Proof JWT ตัวอย่าง:** +```json +{ + "header": { + "typ": "dpop+jwt", + "alg": "ES256", + "jwk": { "kty": "EC", "crv": "P-256", "x": "dpop_pub_x", "y": "dpop_pub_y" } + }, + "payload": { + "jti": "unique-per-request-abc123", + "htm": "POST", + "htu": "https://issuer.dopa.go.th/token", + "iat": 1750000100 + } +} +``` + +| Field | ค่า | หน้าที่ | +|-------|-----|--------| +| `typ` | `dpop+jwt` | ระบุประเภท JWT | +| `jwk` | DPoP Public Key | ใช้ตรวจสอบลายมือชื่อ + ผูก Token | +| `jti` | รหัสสุ่มเฉพาะคำขอ | ป้องกันการโจมตีแบบ replay | +| `htm` | `POST` | ต้องตรงกับ HTTP method ที่ใช้ | +| `htu` | URL ของ endpoint | ต้องตรงกับ endpoint ที่เรียก | +| `iat` | เวลาปัจจุบัน | ป้องกัน Proof เก่าถูกนำมาใช้ซ้ำ | + +--- + +### D.1.7. STEP 4 — Token Request (การขอ Access Token) + +กระเป๋าเอกสารดิจิทัลส่งคำขอ: + +```http +POST https://issuer.dopa.go.th/token +Content-Type: application/x-www-form-urlencoded +DPoP: eyJhbG...rand... ← เมื่อ Thai profile กำหนด + +grant_type=urn:ietf:params:oauth:grant-type:pre-authorized_code +&pre-authorized_code=pac-a1b2c3d4e5f6 +&tx_code=512847 +``` + +ตัวอย่าง HTTP นี้ละรายละเอียดการส่ง Wallet Attestation และ Client Attestation PoP; ให้นำส่งตามรูปแบบที่กำหนดใน OID4VCI Appendix E และมาตรฐาน client authentication ที่อ้างถึง โดยไม่อนุมานชื่อ header หรือ field จากตัวอย่างนี้. + +Authorization Server ตรวจ Wallet Attestation ที่ลงนามโดยผู้ให้บริการที่ตนเชื่อถือ และตรวจ Client Attestation PoP ตามมาตรฐานที่อ้างถึง. จากนั้นตรวจ `pre_authorized_code`, `tx_code` และการใช้ code ซ้ำตาม OID4VCI. Thai profile กำหนด trust source และการตรวจสถานะ Wallet เพิ่มเติม. ตรวจ DPoP และผูก Access Token กับ DPoP public key เฉพาะเมื่อ profile กำหนดให้ใช้ DPoP. + +**คำตอบ (Response) — ตัวอย่าง Bearer ตาม OID4VCI Final:** +```json +{ + "access_token": "eyJhbGci...token...", + "token_type": "Bearer", + "expires_in": 300 +} +``` + +เมื่อใช้ DPoP token binding ตาม Thai profile ให้ใช้ `token_type: "DPoP"` และทำตาม RFC 9449. + +**ตัวอย่าง Nonce Endpoint ตาม OID4VCI Final §7 (ค่าตัวอย่าง):** + +```http +POST /nonce HTTP/1.1 +Host: issuer.dopa.go.th +Content-Length: 0 + +HTTP/1.1 200 OK +Content-Type: application/json +Cache-Control: no-store + +{ + "c_nonce": "c_nonce-returned-by-issuer" +} +``` + +--- + +### D.1.8. STEP 5 — Credential Request (การขอรับเอกสารรับรองดิจิทัล) + +Nonce Endpoint เป็น optional. หาก Issuer มี endpoint นี้ Wallet MUST ส่ง HTTP POST ไปยัง URL ใน Credential Issuer Metadata โดยไม่ต้องใช้ Access Token; Issuer ตอบด้วย HTTP 2xx และ JSON ที่มี `c_nonce` พร้อม `Cache-Control: no-store`. OID4VCI ไม่กำหนด `c_nonce_expires_in` ใน response นี้. หาก Issuer มี Nonce Endpoint Wallet MUST ใส่ `c_nonce` ใน `nonce` ของ proof. Wallet สร้าง Holder Key Pair แล้วลงนาม JWT Proof ด้วย private key; public key ที่จะผูกกับ Credential อยู่ใน JOSE header โดยเลือกใช้หนึ่งใน `jwk`, `kid` หรือ `x5c`. ตาม Appendix F.1, proof MUST มี `typ: "openid4vci-proof+jwt"`, `alg`, `aud` เป็น Credential Issuer Identifier และ `iat`. สำหรับ Pre-Authorized Code Flow แบบ anonymous ไม่ส่ง `iss` ใน proof JWT. ตัวอย่างนี้ใช้ `jwk` และแสดง claims ที่ถอดรหัสแล้ว: + +```json +{ + "header": { + "alg": "ES256", + "typ": "openid4vci-proof+jwt", + "jwk": { "kty": "EC", "crv": "P-256", "x": "wallet_pub_x", "y": "wallet_pub_y" } + }, + "payload": { + "aud": "https://issuer.dopa.go.th", + "iat": 1750000100, + "nonce": "c_nonce-returned-by-issuer" + } +} +``` + +> ตัวอย่างนี้ใช้ Pre-Authorized Code Flow แบบ anonymous จึงไม่ใส่ `iss` ใน proof JWT. ค่า `nonce` ตรงกับ `c_nonce` ที่ Issuer ส่งกลับจาก Nonce Endpoint. + +เมื่อ access token ผูกกับ DPoP key, กระเป๋าเอกสารดิจิทัลสร้าง DPoP Proof ใหม่สำหรับ endpoint `/credential` แล้วส่ง Credential Request: + +```http +POST https://issuer.dopa.go.th/credential +Authorization: Bearer *** ← หรือ DPoP *** เมื่อ access token ผูกกับ DPoP key +DPoP: eyJhbG...rand...DPoP_Proof... ← ส่งเมื่อ access token ผูกกับ DPoP key +Content-Type: application/json + +{ + "credential_configuration_id": "ThaiNationalIDCredential-config", + "proofs": { + "jwt": [ + "eyJhbG...rand..." + ] + } +} +``` + +--- + +### D.1.9. TC-2 — การตรวจ Client Attestation ใน OID4VCI + +กระเป๋าเอกสารดิจิทัลส่ง Wallet Attestation ตาม OID4VCI Appendix E พร้อม Client Attestation PoP ใน Token Request ของผู้ออกเอกสาร [REF-OID4VCI] โดยไม่ส่งใน Credential Request + +ผู้ออกเอกสารต้องตรวจตามลำดับดังนี้ + +1. แยก Wallet Provider ID และกุญแจตรวจสอบจาก Wallet Attestation +2. ค้นหา Wallet Provider ใน Wallet Provider Trusted List ที่ตรวจลายมือชื่อและความสดใหม่แล้ว +3. ยืนยันว่าบทบาทเป็น Wallet Provider กุญแจตรง และสถานะองค์กรกับบริการเป็น `active` +4. ตรวจสถานะของกระเป๋า (wallet instance) ตาม Thai profile +5. ตรวจลายมือชื่อ Wallet Attestation และ Client Attestation PoP + +หากข้อใดไม่ผ่าน ผู้ออกเอกสารต้องไม่ออก Access Token + +Thai profile ต้องกำหนดโครงสร้าง Trusted List ฟิลด์ที่ใช้ค้นหา และวิธีตรวจสถานะก่อนใช้งานจริง + +--- + +### D.1.10. STEP 6 — Issue VC (การออกเอกสารรับรองดิจิทัล) + +ผู้ออกเอกสารสร้าง SD-JWT VC ตามมาตรฐาน IETF SD-JWT VC (`dc+sd-jwt`) [REF-SDJWT] ซึ่งประกอบด้วยโครงสร้างสามชั้น: + +**JOSE Header (ชั้นที่ 1):** +```json +{ + "typ": "dc+sd-jwt", + "alg": "ES256", + "kid": "https://issuer.dopa.go.th#key-2025-1" +} +``` + +**JWT Payload (ชั้นที่ 2 — IETF SD-JWT VC `dc+sd-jwt`):** ตัวอย่างนี้แสดง claims ที่ถอดรหัสแล้วเพื่ออธิบายโครงสร้างเท่านั้น ไม่ใช่ compact SD-JWT ที่ลงลายมือชื่อแล้ว และไม่ใช่ W3C VC Data Model object; claims อยู่ที่ระดับบนสุดตาม Thai credential type (`vct`). `iat`, `exp`, `cnf` และ `status` แสดงเป็นตัวอย่างของ profile นี้ ไม่ได้หมายความว่า SD-JWT VC กำหนดให้ทุก credential ต้องมี claims เหล่านี้ +```json +{ + "iss": "https://issuer.dopa.go.th", + "iat": 1749945600, + "exp": 1907712000, + "vct": "https://credentials.dopa.go.th/ThaiNationalIDCredential", + "cnf": { "jwk": { "kty": "EC", "crv": "P-256", "x": "…", "y": "…" } }, + "status": { + "status_list": { "idx": 42, "uri": "https://status.dopa.go.th/statuslist/1" } + }, + "ชื่อ": "สมชาย ใจดี", + "เลขบัตร": "1234567890123", + "วันเกิด": "1990-01-15", + "_sd_alg": "sha-256", + "_sd": [ + "X9yH3mK2vP...digest_ที่อยู่", + "aB7cD4eF1g...digest_รูปภาพ" + ] +} +``` + +| กรณี | ความหมาย | คำตอบ | +|------|---------|-------| +| **Immediate** | ออกเอกสารทันที (กรณีปกติ) | `{ "credential": "eyJ...SD-JWT...", "notification_id": "notif-dopa-456" }` โดย `notification_id` เป็น Optional | +| **Deferred** | ต้องรอ (เช่น ต้องตรวจสอบเพิ่มเติม) | คำตอบแรก: `{ "transaction_id": "txn-dopa-456" }`; เมื่อ Credential พร้อม Deferred Credential Response อาจมี `notification_id` ซึ่งเป็น Optional | + +Issuer สร้าง `notification_id` เพื่อระบุ issuance flow แล้วส่งให้ Wallet ใน Credential Response สำหรับการออกทันที หรืออาจส่งใน Deferred Credential Response สำหรับการออกแบบ deferred [REF-OID4VCI, §§8.3, 9.2] Wallet ต้องเก็บค่านี้และส่งค่าเดิมใน Notification Request หลังจัดเก็บ Credential สำเร็จ [REF-OID4VCI, §11.1] Wallet ไม่ได้สร้างค่านี้เอง หาก Issuer ไม่ส่ง `notification_id` มา Wallet ก็ไม่มีค่าที่จะใช้ส่ง Notification Request + +**Deferred Issuance — Polling Parameters:** + +> **[ค่าที่ยังไม่ได้กำหนดอย่างเป็นทางการ]** สพธอ. ยังมิได้ประกาศค่าที่แน่นอนสำหรับ polling interval และ timeout — ค่าด้านล่างเป็นแนวทางชั่วคราว + +| พารามิเตอร์ | ค่าแนะนำชั่วคราว | +|-------------|-------------------| +| Polling interval ขั้นต่ำ | ทุก 5 วินาที | +| Timeout รวม | 10 นาที | +| Max retry | ไม่จำกัด ภายใน timeout | +| Error — ตรวจสอบไม่ผ่าน | `credential_request_denied` + `error_description` | +| Error — transaction หมดอายุ | `invalid_transaction_id` — ต้องเริ่ม flow ใหม่ | + +--- + +### D.1.11. STEP 6.5 — TC-3 + TC-4: การตรวจสอบผู้ออกเอกสารและสถานะเอกสาร + +ดำเนินการโดยกระเป๋าเอกสารดิจิทัลภายหลังได้รับ SD-JWT VC: + +| ขั้นตอน | หยิบค่าจาก | ตรวจสอบกับ | ผ่านเมื่อ | +|---------|-----------|-----------|----------| +| **[26]** แยก claims | JWT payload | — | decode สำเร็จ | +| **[27]** Trusted List lookup | `iss` | บริการ Issuer ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` และกฎจับคู่ตัวระบุตาม Thai profile | พบองค์กรและบริการที่ตรวจสถานะ `active` ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| **[27.1]** Issuer/identifier/type | Claims ตามรูปแบบ Credential | กฎจับคู่ตัวระบุและขอบเขตสิทธิ์ Issuer ใน Thai profile | ตรวจได้ตาม profile ของ format; ห้ามสมมติมี W3C VC body ใน SD-JWT VC | +| **[27.2]** W3C VCDM checks | `issuer.id`, `id`, `@context`, `type` | W3C VC body | ใช้เฉพาะเมื่อ Credential เป็น W3C VCDM | +| **[27.3]** SD-JWT VC checks | `iss`, `vct` และ claims ที่ profile กำหนด | Thai credential profile | ตรวจ issuer/type/claims ตาม profile; ห้ามถือว่า `sub`, `iat` หรือ `status` มีอยู่เสมอ | +| **[28]** GET JWKS | `credential_issuer` จาก Credential Issuer Metadata ที่ตรวจผูกกับ Issuer Trusted List แล้ว | — | HTTP 200 | +| **[29]** รับ JWKS | JWKS response | — | parse สำเร็จ | +| **[29.1]** kid match | `kid` จาก JOSE header | JWKS `keys[].kid` | พบ key → ได้ `publicKeyJwk` | +| **[30]** verify signature | SD-JWT signature | `publicKeyJwk` | verify สำเร็จ | +| **[30.1]** temporal/subject claims | `nbf`, `exp`, `sub` เมื่อมี | mapping และเงื่อนไขใน Thai credential profile | ตรวจเวลาตาม JWT claims; ตรวจ `sub`/binding เฉพาะเมื่อ profile กำหนดและ claim มีอยู่ | +| **[30.2]** validity window | JWT time claims หรือ profile-defined mapping | เวลาปัจจุบัน | token ยังอยู่ในช่วงใช้ได้; `validFrom`/`validUntil` ใช้เฉพาะเมื่อ format/profile กำหนด | +| **[30.3]** GET statuslist | `status.status_list.uri` | — | HTTP 200 | +| **[30.4]** รับ statuslist+jwt | response | — | parse สำเร็จ | +| **[30.5]** verify statuslist | Status List JWT (`typ: statuslist+jwt`) | key ที่ resolve ได้ตาม Status List trust model ใน Thai profile | ตรวจ claims/ลายมือชื่อผ่าน และ `sub` ตรงกับ status-list URI | +| **[30.6]** validity statuslist | `iat` ที่ REQUIRED; `exp` หากมี; `ttl` หากใช้ cache | now และ Thai-profile freshness policy | ตรวจ `iat`; ปฏิเสธเมื่อ `exp` มีค่าและหมดอายุ; cache ตาม `ttl` เมื่อมี | +| **[30.7]** decode status | `lst`, `bits`, `status_list.idx` | `bits` ที่ Status List JWT ระบุ | อ่าน status slot ตามความกว้าง `bits`; ยอมรับ `0x00 (VALID)` หรือสถานะที่ Thai profile อนุญาต [REF-TSL, draft-ietf-oauth-status-list-21 §4.1, §7.1] | + +--- + +### D.1.12. STEP 7 — Notification (การแจ้งเตือนการรับเอกสาร, Optional) + +กระเป๋าเอกสารดิจิทัล MAY ส่งการแจ้งเตือนไปยังผู้ออกเอกสารเพื่อยืนยันว่าได้รับเอกสารแล้ว: + +```http +POST https://issuer.dopa.go.th/notification +Authorization: Bearer *** +Content-Type: application/json + +{ + "notification_id": "notif-dopa-456", + "event": "credential_accepted" +} +``` + +ผู้ออกเอกสารตอบกลับ `204 No Content` — เป็นการบันทึก audit log เสริม มิได้ส่งผลกระทบต่อการใช้งานเอกสารรับรอง + +--- + +## D.2. ข้อเสนอนโยบาย DPoP แยกตามระดับ IAL/AAL + +{/* TODO: ข้อเสนอนโยบาย DPoP แยกตามระดับ IAL/AAL ด้านล่างนี้ยังไม่ได้รับการยืนยัน (To be confirmed) — รอมติคณะทำงานก่อนนำไปใช้ */} + +DPoP เป็นกลไกป้องกัน Access Token (แกน Authentication) จึงผูกกับระดับ **AAL** เป็นหลัก โดยมี IAL เป็นบริบทของความอ่อนไหวของข้อมูล: + +| ระดับ IAL (issue) | AAL เป้าหมาย | tx_code (OTP) | Wallet Attestation | ข้อเสนอ DPoP | เหตุผลประกอบข้อเสนอ | +|------------------|:-----------:|:-------------:|:------------------:|:------------:|----------------------| +| **IAL1** | AAL1 | ⚪ ไม่บังคับ | ⚪ ไม่บังคับ | ⚪ ไม่บังคับ — Bearer ใช้ได้ | ใช้เป็น baseline; ต้องประเมินความเสี่ยงของข้อมูลและธุรกรรม | +| **IAL2.1–2.2** | AAL2 | ✅ แนะนำ | 🟡 แนะนำ | 🟡 พิจารณาใช้ | ข้อมูลสำคัญ ควรประเมินมาตรการป้องกัน | +| **IAL2.3** | AAL2 (issue), AAL3 (present) | ✅ บังคับ | ✅ บังคับ | 🟡 พิจารณาใช้ตามผลประเมินความเสี่ยง | ข้อมูล identity หลัก | +| **IAL3** | AAL3 | ✅ บังคับ | ✅ บังคับ | 🟡 พิจารณาใช้ร่วมกับ key ที่เหมาะสม | ข้อมูลอ่อนไหวสูง | + +> **หมายเหตุ:** ตารางข้างต้นเป็นนโยบายที่ยังไม่ได้รับการยืนยัน (To be confirmed) รอมติคณะทำงาน VC ก่อนนำไปใช้จริง + +--- + +## D.3. การตรวจสอบที่ผู้ออกเอกสาร MUST ดำเนินการใน STEP 4 ตาม IAL/AAL + +| การตรวจสอบ | IAL1/AAL1 | IAL2.1–2.2/AAL2 | IAL2.3/AAL2-3 | IAL3/AAL3 | +|------------|:---------:|:---------------:|:-------------:|:---------:| +| `pre_authorized_code` valid + single-use | ✅ | ✅ | ✅ | ✅ | +| `tx_code` (OTP) ถูกต้อง | ⚪ | ✅ | ✅ | ✅ | +| Wallet Attestation ถูกต้อง | ⚪ | 🟡 | ✅ | ✅ | +| DPoP-Proof header มีและถูกต้อง | ⚪ | 🟡 | ✅ | ✅ | +| DPoP `jti` ไม่ซ้ำ (replay) | ⚪ | 🟡 | ✅ | ✅ | +| Hardware-backed key (SE/StrongBox) | ⚪ | ⚪ | ✅ (present) | ✅ | + +--- + +{/* METADATA (agent-only — not rendered to readers) +## อ้างอิง + +- [REF-OID4VCI] OpenID Foundation, "OpenID for Verifiable Credential Issuance 1.0 Final" — https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html +- [REF-SDJWT] IETF, “SD-JWT-based Verifiable Digital Credentials (SD-JWT VC),” draft-ietf-oauth-sd-jwt-vc-19, 31 August 2026 (Internet-Draft; status as of 1 October 2026: Waiting for AD Go-Ahead) — https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/ +- [REF-TSL] IETF, “Token Status List (TSL),” draft-ietf-oauth-status-list-21, 21 June 2026 (Internet-Draft; status as of 1 October 2026: RFC Editor — Awaiting First editor) — https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ +- [REF-DPOP] IETF RFC 9449, "OAuth 2.0 Demonstrating Proof-of-Possession" +- [REF-ARF] European Commission, "EUDI Architecture and Reference Framework v2.9.0" +- [REF-MASA-158] MASA-158 — Merge Full Flow from trust-guide into ARF, STEP 1.5 → 2.5 (2026-08-07) +- [REF-TRUSTLIST-CDN] คณะทำงาน VC, "แนวทางกระจาย Trustlist (LoTE) ผ่าน File/Edge CDN — ไม่ใช้ RabbitMQ", เวอร์ชัน 1.10, 4 กันยายน 2569 — [research/41](../research/41-trustlist-serving-filecdn-etag-binary.md) + +--- +*/} + +**การนำทาง:** [⬅️ กลับไปบทที่ 8 — Implementation Guidelines](08-implementation-guidelines.md) · [⬆️ สารบัญ ARF](README.md) · [ภาคผนวก 8.2 — OID4VP Full Flow ➡️](08.2-oid4vp-full-flow-detail.md) diff --git a/docs/thai-vc-arf/08.2-oid4vp-full-flow-detail.md b/docs/thai-vc-arf/08.2-oid4vp-full-flow-detail.md new file mode 100644 index 0000000..e9407eb --- /dev/null +++ b/docs/thai-vc-arf/08.2-oid4vp-full-flow-detail.md @@ -0,0 +1,403 @@ +--- +description: "ภาคผนวกบทที่ 8 — OID4VP Full Flow ทางเทคนิคโดยละเอียด — Thai VC ARF 2.0 DRAFT 0" +--- + +# ภาคผนวกบทที่ 8 — OID4VP Full Flow ทางเทคนิคโดยละเอียด + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารขยายเพิ่มเติมสำหรับบทที่ 8 Implementation Guidelines +> **เวอร์ชัน:** v1.1 +> **วันที่:** 7 สิงหาคม 2569 +> **แหล่งข้อมูล:** trust-guide/04-presentation-flow/02-full-flow/ (MASA-158) +> **เอกสารที่เกี่ยวข้อง:** [บทที่ 8 — Implementation Guidelines](08-implementation-guidelines.md) · [บทที่ 9 — Trust Model 3](09-trust-model-3.md) · [ภาคผนวก 8.1 — OID4VCI Full Flow](08.1-issuance-full-flow-detail.md) +*/} + +--- + +## วัตถุประสงค์ + +ภาคผนวกนี้จัดทำขึ้นเพื่ออธิบายรายละเอียดทางเทคนิคของกระบวนการแสดงและตรวจสอบเอกสารสำแดงดิจิทัลตามมาตรฐาน OID4VP (OpenID for Verifiable Presentations) [REF-OID4VP] แบบเต็มรูปแบบ (Full Flow) ตั้งแต่การเตรียมระบบ (SETUP) จนถึงการตรวจสอบสถานะเอกสาร พร้อมคำอธิบายระดับ field-by-field สำหรับสถาปนิกระบบ ผู้พัฒนาซอฟต์แวร์ และผู้ตรวจสอบความสอดคล้อง + +--- + +## E.0. แผนภาพ Sequence ฉบับสมบูรณ์ — Full Flow OID4VP (Step 1–6) + +แผนภาพต่อไปนี้แสดงภาพรวมของกระบวนการทั้งหมดตั้งแต่ SETUP จนถึงการตรวจสอบสถานะ: + +```mermaid +sequenceDiagram + autonumber + participant U as 👤 User + participant C as 📱 Holder + Wallet Instance
Key Store + participant W as 📱 Wallet (Holder) + participant V as 🏬 Verifier (RP) + participant TL as 🛡️ ETDA Trusted List
(signed by ETDA) + participant UR as 🔗 Universal DID Resolver + participant IR as 📋 Issuer Registry
(credential status endpoint) + + rect rgb(210, 240, 210) + note over W,TL: 🟢 [ETDA คุม] SETUP เมื่อมีธุรกรรม — ดึง ETDA Public Key + Trusted List + W->>TL: GET https://etda.or.th/.well-known/did.json + TL-->>W: ETDA DID Document + Public Key + W->>W: เก็บ ETDA Public Key ไว้ใน Local Storage + V->>TL: GET https://etda.or.th/.well-known/did.json + TL-->>V: ETDA DID Document + Public Key + V->>V: เก็บ ETDA Public Key ไว้ใน Local Storage + W->>TL: GET https://trustme.etda.or.th/.well-known/ver.txt (CDN, ไม่ต้อง API key) + TL-->>W: Trusted List ที่เกี่ยวข้องฉบับเต็ม (JWT) + ETag + W->>W: Verify JWT ด้วย ETDA Public Key + W->>W: เก็บไฟล์เต็ม + ETag + NextUpdate + V->>TL: GET https://trustme.etda.or.th/.well-known/iss.txt และ https://trustme.etda.or.th/.well-known/wp.txt (CDN, ไม่ต้อง API key) + TL-->>V: Trusted List ที่เกี่ยวข้องฉบับเต็ม (JWT) + ETag + V->>V: Verify JWT ด้วย ETDA Public Key + V->>V: เก็บไฟล์เต็ม + ETag + NextUpdate + end + + rect rgb(210, 230, 255) + Note over V: 📋 Step 1 — Prepare Authorization Request + V->>V: Generate nonce, state, request_id + V->>V: Build Request Object JWT incl. dcql_query (format: dc+sd-jwt) + V->>V: Sign with Verifier key + V->>V: Render QR + end + + rect rgb(210, 230, 255) + Note over W,V: 📱 Step 2 — Cross-device transfer + U->>V: Access RP website + V-->>U: Display QR + U->>W: Scan QR + end + + rect rgb(210, 230, 255) + Note over W,V: 📥 Step 2.5 — Fetch Request Object + W->>V: Request the Request Object + V-->>W: Signed Request Object JWT (with dcql_query) + end + + rect rgb(255, 225, 180) + Note over W,TL: 🟠 TC-1 — Verifier trust + DCQL scope + W->>W: Parse RO, Extract PK_v + W->>W: 🔎 L1: Verify TL signature + W->>W: 🔎 L2: Lookup PK_v in LoTE.TrustedEntitiesList[].TrustedEntityServices[] + W->>W: Verify RO sig, aud, exp/iat, nonce + W->>W: Check claims against Verifier scope in Thai profile + W->>W: Check purpose against Verifier scope in Thai profile + end + + rect rgb(210, 230, 255) + Note over W,U: ✅ Step 3 — DCQL local match + Consent + W->>W: Filter local SD-JWT VCs by format + vct_values + W->>W: Walk q.claims[].path natively + W->>U: Show consent UI (legal_name, purpose, claims) + U->>W: Approve, pick option, select claims + W->>C: Unlock holder + wallet instance keys + C-->>W: Authorized + end + + rect rgb(210, 230, 255) + Note over W,C: 🔐 Step 4 — Build SD-JWT Presentation + W->>W: Select disclosures matching claims path + W->>W: Concatenate: issuer_jwt~d1~d2~...~ + W->>W: Compute sd_hash = SHA-256 of presentation + W->>C: Sign KB-JWT with holder key + C-->>W: KB-JWT + W->>W: Assemble vp_token = issuer_jwt~d1~...~KB-JWT + opt Government Wallet (required) or private Wallet opts into TC-2 + W->>W: Use WIA issued by Wallet Provider + W->>C: Sign WIA-PoP with Wallet Instance key + C-->>W: wia_pop + end + end + + rect rgb(210, 230, 255) + Note over W,V: 📤 Step 5 — Authorization Response + W->>V: POST response_uri (direct_post) { vp_token, state } + opt Government Wallet (required) or private Wallet opts into TC-2 + W->>V: wallet_attestation + wallet_attestation_pop + end + Note over W,V: Government Wallet MUST send both, private Wallet MAY send both or omit both + V-->>W: 200 OK + end + + rect rgb(255, 225, 180) + Note over V,IR: 🟠 Step 6 — Verifier validates (TC-2 when applicable, TC-3, TC-4) + + Note over V: Determine Wallet type from trusted Provider profile, independently of WIA, reject VP if missing, stale, or unverifiable + alt Government Wallet, or private Wallet sends both attestations + Note over V,TL: ⓪ TC-2: Wallet Provider check + V->>V: Require and parse WIA → extract WP iss + PK_wp + V->>V: 🔎 L3: Lookup PK_wp in LoTE.TrustedEntitiesList[].TrustedEntityServices[] + V->>V: Verify WIA sig + WIA-PoP sig + nonce + jti + else Private Wallet sends neither attestation + V->>V: Skip TC-2, continue TC-3 and TC-4 + else Government evidence missing, private evidence partial, or any evidence invalid + V->>W: Reject VP + end + + Note over V: Per-id DCQL loop + V->>V: Split vp_token → issuer_jwt, disclosures[], KB-JWT + + Note over V,UR: ① KB-JWT — Holder binding + V->>V: Verify KB-JWT sig with issuer_jwt.cnf.jwk + V->>V: Verify KB-JWT.sd_hash matches + + Note over V,TL: ② TC-3: Issuer check + V->>UR: GET /1.0/identifiers/⟨issuer DID⟩ + UR-->>V: DID Resolution Result + V->>V: 🔎 L6: Dereference kid → publicKeyJwk (PK_iss) + V->>V: 🔎 L4: Lookup PK_iss in LoTE.TrustedEntitiesList[].TrustedEntityServices[] + V->>V: Check entity and service status + Issuer scope + V->>V: Verify issuer_jwt sig + disclosures hash check + V->>V: DCQL match against reconstructed_credential + + Note over IR: ③ TC-4: Status check + V->>IR: GET status.status_list.uri + IR-->>V: statuslist+jwt + V->>V: 🔎 L7: ตรวจ Referenced Token ก่อน แล้วอ่าน status slot ที่ idx ตาม bits = 0x00 (VALID) + end + + alt All checks pass + V-->>U: ✅ Service granted + else Any failure + V-->>W: 400 invalid_request + end +``` + +**คำอธิบายแต่ละขั้นตอนโดยสังเขป:** + +| ช่วง Step | ขั้นตอน | คำอธิบาย | +|-----------|---------|----------| +| **SETUP** | ดึง ETDA Public Key + Trusted List เมื่อมีธุรกรรม | Wallet และ Verifier ต่างดึง ETDA Public Key จาก `/.well-known/did.json` แล้วดึง Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก CDN เมื่อเกิดการเชื่อมต่อ โดยไม่ใช้ API key หรือ background polling | +| **Step 1** | Prepare Authorization Request | Verifier สร้าง nonce, state + Request Object JWT พร้อม dcql_query + ลงนาม + สร้าง QR | +| **Step 2** | Cross-device transfer | ผู้ใช้สแกน QR บนหน้าจอ Verifier ด้วย Wallet | +| **Step 2.5** | Fetch Request Object | Wallet ดึง Request Object JWT ฉบับเต็มจาก request_uri | +| **TC-1** | Wallet ตรวจ Verifier | Wallet ตรวจ PK_v ใน Trusted List + verify RO sig + ตรวจขอบเขต claims + วัตถุประสงค์ | +| **Step 3** | DCQL match + Consent | Wallet ค้นหา VC ในเครื่องที่ตรง DCQL → แสดง consent UI → ผู้ใช้อนุมัติ | +| **Step 4** | Build Presentation + WIA-PoP (ตามประเภท Wallet) | Wallet สร้าง SD-JWT presentation และ KB-JWT; Wallet รัฐบาลสร้าง WIA-PoP ส่วน Wallet เอกชนเลือกทำ TC-2 ได้ | +| **Step 5** | Authorization Response | Wallet ส่ง `vp_token` และ `state` ด้วย `direct_post`; Wallet รัฐบาล MUST ส่ง WIA และ WIA-PoP ส่วน Wallet เอกชน MAY ส่งทั้งคู่หรือไม่ส่งทั้งคู่ | +| **Step 6 ⓪** | TC-2: Wallet Provider check (เมื่อมีข้อกำหนด) | Verifier ตรวจ WIA และ WIA-PoP เมื่อ Wallet รัฐบาลส่งมา หรือ Wallet เอกชนเลือกส่ง | + +| **Step 6 ①** | KB-JWT — Holder binding | Verifier verify KB-JWT sig → ตรวจ sd_hash → ยืนยัน Holder ควบคุม key จริง | +| **Step 6 ②** | TC-3: Issuer check | Verifier resolve DID → lookup PK_iss ใน Trusted List → verify issuer sig + disclosures | +| **Step 6 ③** | TC-4: Status check | Verifier ดึง statuslist+jwt → อ่าน status ที่ idx ตามความกว้าง `bits` → ประมวลผลตามค่า | + +--- + +## E.1. คำอธิบายทุกขั้นตอนโดยละเอียด + +### E.1.1. SETUP — การเตรียมระบบก่อนเริ่มใช้งาน + +ก่อนเริ่มใช้งาน กระเป๋าเอกสารดิจิทัล (Wallet) และผู้ตรวจสอบเอกสาร (Verifier) MUST ดำเนินการเช่นเดียวกับ SETUP ในกระบวนการออกเอกสาร (ภาคผนวก 8.1): + +1. ดึง ETDA Public Key จาก `GET https://etda.or.th/.well-known/did.json` เพื่อใช้ตรวจสอบลายมือชื่อ Trusted List +2. ดึง Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก CDN โดย Wallet ดึง `https://trustme.etda.or.th/.well-known/ver.txt` และ Verifier ดึง `https://trustme.etda.or.th/.well-known/iss.txt` กับ `https://trustme.etda.or.th/.well-known/wp.txt` ทั้งหมดไม่ใช้ API key, delta หรือไฟล์ CBOR +3. จัดเก็บไฟล์เต็มและค่า `ETag` ใน Local Storage แล้วส่ง `If-None-Match` เมื่อเกิดการใช้งานครั้งถัดไป [REF-TRUSTLIST-CDN] + +**ข้อแตกต่างสำคัญ:** ใน OID4VP ผู้ดึง Trusted List คือ **กระเป๋าเอกสารดิจิทัลและผู้ตรวจสอบเอกสาร** (ใน OID4VCI คือ กระเป๋าเอกสารดิจิทัลและผู้ออกเอกสาร) + +--- + +### E.1.2. Step 1 — ผู้ตรวจสอบเอกสารเตรียม Authorization Request + +ผู้ตรวจสอบเอกสารดำเนินการดังนี้: + +1. **สร้างค่าสุ่ม** — `nonce` (ป้องกัน replay), `state` (เก็บ transaction context), `request_id` +2. **สร้าง Request Object JWT** — บรรจุ `dcql_query` ระบุ: + - `format: "dc+sd-jwt"` — credential format ที่รองรับ + - `vct_values` — ประเภท credential ที่ต้องการ + - `claims[].path` — path ของ claims ที่ขอ + - `credential_sets` — เงื่อนไข credential ที่จำเป็น +3. **ลงนาม** Request Object ด้วย private key ของผู้ตรวจสอบเอกสาร +4. **สร้าง QR Code** — บรรจุ `request_uri` เพื่อให้กระเป๋าเอกสารดิจิทัลดึง Request Object ฉบับเต็ม + +--- + +### E.1.3. Step 2 — การโอนข้ามอุปกรณ์ (Cross-device Transfer) + +1. ผู้ใช้เข้าถึงบริการของผู้ตรวจสอบเอกสาร (เช่น เว็บไซต์) +2. ผู้ตรวจสอบเอกสารแสดง QR Code บนหน้าจอ +3. ผู้ใช้สแกน QR Code ด้วยกระเป๋าเอกสารดิจิทัล + +> **เหตุผล:** ใช้ cross-device flow — กระเป๋าเอกสารดิจิทัลอยู่คนละอุปกรณ์กับผู้ตรวจสอบเอกสาร QR Code เป็นสะพานเชื่อมสองอุปกรณ์โดยไม่ต้องมีการเชื่อมต่อเครือข่ายโดยตรง + +--- + +### E.1.4. Step 2.5 — การดึง Request Object ฉบับเต็ม + +กระเป๋าเอกสารดิจิทัลส่ง HTTP GET ไปยัง `request_uri` ที่ระบุใน QR Code — ผู้ตรวจสอบเอกสารตอบกลับด้วย Request Object JWT ฉบับเต็มที่ลงนามแล้ว + +> **เหตุผล:** QR Code มีขนาดจำกัด ไม่สามารถบรรจุ Request Object ทั้งหมดได้ จึงส่งเป็น URI แทน + +--- + +### E.1.5. TC-1 — กระเป๋าเอกสารดิจิทัลตรวจสอบผู้ตรวจสอบเอกสาร (ระหว่าง Step 2.5 และ Step 3) + +**ความสำคัญ:** นี่คือจุดควบคุมความปลอดภัยที่สำคัญที่สุดของฝั่งกระเป๋าเอกสารดิจิทัล MUST ผ่านก่อนส่งข้อมูลใด ๆ + +กระเป๋าเอกสารดิจิทัลดำเนินการ: + +1. **แยก PK_v** — จาก Request Object +2. **ตรวจสอบลายมือชื่อ Trusted List** — L1: verify Trusted List signature ด้วย ETDA public key +3. **ค้นหา PK_v ใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]`** — L2: ต้องพบบริการ Verifier และยืนยันสถานะระดับองค์กรและบริการเป็น `active` ตาม Thai profile ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) +4. **หากไม่พบ** → หยุดดำเนินการทันที ไม่ส่งข้อมูลใด ๆ +5. **หากพบ** → ดำเนินการตรวจสอบต่อ: + - ตรวจสอบลายมือชื่อ Request Object ด้วย PK_v + - `aud` ตรงกับ wallet ID + - `exp`/`iat` ยังไม่หมดอายุ + - `nonce` มีความยาว ≥ 128-bit (การตรวจสอบเชิงโครงสร้าง) + - **ขอบเขต claims:** `dcql_query.claims[].path` ต้องอยู่ในขอบเขตที่ Thai profile ของบริการ Verifier อนุญาต + - **วัตถุประสงค์:** `purpose` ต้องอยู่ในขอบเขตที่ Thai profile ของบริการ Verifier อนุญาต; JWT ตัวอย่างยังไม่มีฟิลด์นี้ จึงต้องปฏิเสธหากตรวจไม่ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +--- + +### E.1.6. Step 3 — การจับคู่ DCQL ในเครื่องและการขอความยินยอม + +กระเป๋าเอกสารดิจิทัลดำเนินการ: + +1. **DCQL Match** — สำหรับแต่ละ query ใน `dcql_query.credentials`: + - กรอง credential ในเครื่องด้วย `format == "dc+sd-jwt"` และ `vct_values` + - เดินตาม `claims[].path` ในแต่ละ credential เพื่อหา disclosure ที่ตรง +2. **ประเมิน credential_sets** — ตรวจสอบว่า credential ในเครื่องตอบสนองเงื่อนไขที่จำเป็นได้หรือไม่ +3. **แสดง Consent UI** — แจ้งผู้ใช้: + - ผู้ตรวจสอบเอกสารคือหน่วยงานใด (`legal_name` จาก Trusted List) + - วัตถุประสงค์การขอข้อมูล (`purpose`) + - Claims ที่จะเปิดเผย +4. **ผู้ใช้ตัดสินใจ** — เลือกตัวเลือก (หากมีหลายทาง) และเลือก claims ที่ประสงค์จะเปิดเผย +5. **ปลดล็อกกุญแจ** — ใช้ Biometric/PIN เพื่อปลดล็อก holder key และ wallet instance key + +--- + +### E.1.7. Step 4 — การสร้าง SD-JWT Presentation และ WIA-PoP (ตามประเภท Wallet) + +สำหรับแต่ละ credential ที่ผู้ใช้เลือก: + +1. **เลือก Disclosures** — เก็บเฉพาะ disclosures ที่ตรงกับ claims path ที่ผู้ตรวจสอบเอกสารขอ +2. **ประกอบ Presentation:** `issuer_jwt~disclosure_1~disclosure_2~...~` +3. **คำนวณ sd_hash:** `SHA-256(presentation_string)` (รวม `~` ตัวสุดท้าย) +4. **สร้าง KB-JWT (Key Binding JWT)** — ลงนามด้วย holder key: + - Header: `typ: "kb+jwt"` + - Payload: `iss=holder`, `aud=client_id`, `nonce=⟨nonce จากผู้ตรวจสอบ⟩`, `sd_hash`, `iat` +5. **ประกอบขั้นสุดท้าย:** `issuer_jwt~disclosure_1~...~KB-JWT` → `vp_token[id]` + +**Wallet รัฐบาล MUST สร้าง WIA-PoP** — Proof of Possession ลงนามด้วย wallet instance key เมื่อใช้ TC-2: +- `iss = wallet instance ID`, `aud = client_id`, `nonce = ⟨nonce จากผู้ตรวจสอบ⟩`, `jti`, `iat`, `exp` + +Wallet เอกชน MAY เลือกใช้ TC-2 โดยส่ง WIA และ WIA-PoP ครบคู่ หรือไม่ส่งทั้งคู่ก็ได้ Wallet เอกชนที่ไม่เลือกใช้ TC-2 ไม่ต้องส่ง WIA หรือ WIA-PoP + +> **หมายเหตุ:** ตามมาตรฐาน IETF SD-JWT VC (`dc+sd-jwt`) ไม่ต้องมี JWT-VP ห่ออีกชั้น — KB-JWT ทำหน้าที่ Holder Binding ในตัว + +--- + +### E.1.8. Step 5 — Authorization Response (`direct_post`) + +ตัวอย่างนี้ใช้ `direct_post` และแสดงค่าพารามิเตอร์ก่อน form-encoding ให้ตรงกับตัวอย่างในบท 5 §5.4.1: + +```json +{ + "vp_token": { + "transcript": ["eyJ0eXAiOiJkYytzZC1qd3QiLCJhbGciOiJFZERTQSJ9...LUp~WyIzanFjYjY3ejl3a3NybmR2Iiwgc3R1ZGVudCIsICJOYXR0YXBvbmcgTWV0aGF3b24iXQ~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9...ziRjjF8Z3V5QkHEhZTFplqnqfk2BxEtZDA"] + }, + "state": "8c17d20f4a936be105fd7c28a6403b91" +} +``` + +Wallet ส่ง Authorization Response ไปยัง `response_uri` ด้วย HTTP POST และ `Content-Type: application/x-www-form-urlencoded` โดย serialize ค่า `vp_token` เป็น JSON string แล้ว form-encode ค่าพารามิเตอร์ ตาม OID4VP §8.2 [REF-OID4VP]. เมื่อส่งตาม Thai profile ให้ส่ง `wallet_attestation` และ `wallet_attestation_pop` เป็นพารามิเตอร์เพิ่มเติมในคำขอเดียวกัน ไม่ใช่สมาชิกของ `vp_token`. + +**ส่วนขยาย Thai profile:** ตัวอย่างข้างต้นแสดงพารามิเตอร์ OID4VP ตามรูปแบบเดียวกับบท 5 §5.4.1 สำหรับ Wallet รัฐบาล Thai profile กำหนดให้เพิ่ม `wallet_attestation` และ `wallet_attestation_pop` ใน Authorization Response ส่วน Wallet เอกชน MAY ส่งทั้งสองค่า หรือไม่ส่งทั้งสองค่า ฟิลด์เหล่านี้เป็นส่วนขยายของ profile ไม่ใช่พารามิเตอร์มาตรฐาน OID4VP + +--- + +### E.1.9. Step 6 — ผู้ตรวจสอบเอกสารดำเนินการตรวจสอบ + +ผู้ตรวจสอบเอกสารค้นหา transaction context จาก `state` และตรวจประเภท Wallet จากข้อมูล Wallet Provider ที่เชื่อถือได้ ซึ่ง Thai profile ต้องกำหนดวิธีประกาศและตรวจประเภทดังกล่าวโดยไม่ต้องอาศัย WIA ในกรณีที่ Wallet เอกชนไม่ส่ง WIA หากไม่มีข้อมูลประเภท Wallet ข้อมูลไม่สดใหม่ หรือตรวจประเภทไม่ได้ ให้ปฏิเสธ VP จากนั้นดำเนินการตรวจสอบตามลำดับ: + +#### ⓪ TC-2 — การตรวจสอบผู้ให้บริการกระเป๋า + +เมื่อใช้ TC-2 ต้องมีหลักฐานครบทั้งคู่ คือ WIA และ WIA-PoP: WIA ยืนยัน Wallet Provider/Wallet Unit ส่วน WIA-PoP แสดงการครอบครองกุญแจที่ผูกกับ WIA ในธุรกรรมปัจจุบัน ตาม Thai profile หากเป็น Wallet รัฐบาล Wallet MUST ส่งหลักฐานครบทั้งคู่; หากขาดรายการใดรายการหนึ่ง ให้ปฏิเสธ VP หากเป็น Wallet เอกชน Wallet MAY เลือกใช้ TC-2 โดยส่งหลักฐานครบทั้งคู่ หรือไม่ส่งทั้งคู่; หากไม่ส่งให้ข้าม TC-2 และตรวจ TC-3/TC-4 ต่อ แต่หากส่งมาเพียงรายการเดียว ให้ปฏิเสธ VP + +เมื่อทำ TC-2 ให้ดำเนินการดังนี้: + +1. แยก WIA → ได้ `iss` (WP ID) + `PK_wp` +2. **L3:** ค้นหา PK_wp ในบริการ Wallet Provider ของ `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` [research/42](../research/42-trusted-list-lote-jwt-format.md) +3. หากไม่พบ → `400 untrusted_wallet_provider` +4. หากพบ: + - ตรวจสอบลายมือชื่อ WIA ด้วย PK_wp → `iat ≤ now < exp` + - ตรวจสอบลายมือชื่อ WIA-PoP ด้วย `WIA.cnf.jwk` → `iss == WIA.sub`, `aud == client_id`, `nonce` ตรง + - Mark `jti` consumed (ป้องกัน replay) + +การตรวจประเภท Wallet ต้องใช้ข้อมูลที่ Verifier ตรวจสอบได้จากแหล่งที่เชื่อถือได้ และเป็นอิสระจาก WIA เพื่อใช้ตัดสินกรณีที่ WIA ไม่มี ทั้งนี้ หากแหล่งข้อมูลขัดข้อง ข้อมูลขาดหาย หรือไม่ผ่านการตรวจสอบ ผู้ตรวจต้องปฏิเสธ VP โดยไม่ถือว่าการไม่มี WIA เป็นกรณี Wallet เอกชน + +#### ① KB-JWT — Holder Binding (SD-JWT native) + +สำหรับแต่ละ credential ใน `vp_token`: + +1. แยก `vp_token[id]` ด้วย `~` → `issuer_jwt`, `disclosures[]`, `KB-JWT` +2. จาก `issuer_jwt`: ดึง `cnf.jwk` (holder key) + `iss` (issuer DID) + `kid` +3. ตรวจสอบลายมือชื่อ KB-JWT ด้วย `issuer_jwt.cnf.jwk`: + - `aud == client_id` + - `nonce == issued_nonce` + - `iat` เป็นเวลาปัจจุบัน +4. คำนวณ `sd_hash` ใหม่จาก `issuer_jwt~d1~d2~...~` → ตรงกับ `KB-JWT.sd_hash` +5. Mark nonce + KB-JWT `jti` consumed + +#### ② TC-3 — การตรวจสอบผู้ออกเอกสาร + +1. **L6:** แก้ไขปัญหา issuer DID ผ่าน Universal Resolver → dereference `kid` ใน `didDocument.assertionMethod[]` → ได้ `publicKeyJwk` (PK_iss) +2. **L4:** ค้นหา PK_iss ในบริการ Issuer ของ `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` [research/42](../research/42-trusted-list-lote-jwt-format.md) +3. หากไม่พบ → `400 untrusted_issuer (key)` +4. หากพบ: + - สถานะระดับองค์กรและบริการต้องเป็น `active` ตาม Thai profile + - `vct` ต้องอยู่ในขอบเขตประเภท VC ที่ Issuer ได้รับอนุญาตตาม Thai profile + - หากต้องตรวจช่วงเวลากุญแจหรือ DID method ต้องมีข้อมูลดังกล่าวใน Thai profile ที่ประกาศใช้; หากไม่มี ให้ปฏิเสธ +5. ตรวจสอบลายมือชื่อ `issuer_jwt` ด้วย PK_iss → `nbf ≤ now ≤ exp` +6. ตรวจสอบ disclosures: `hash(d)` ∈ `issuer_jwt._sd` → parse `[salt, claim_name, claim_value]` → build `reconstructed_credential` +7. DCQL match กับ reconstructed credential → claims path มีค่า และ value ตรง (หากระบุ) + +#### ③ TC-4 — การตรวจสอบสถานะเอกสาร + +หาก `issuer_jwt` มี `status.status_list`: + +1. อ่าน `uri` และ `idx` จาก `status.status_list` +2. GET `uri` (Accept: `application/statuslist+jwt`) → statuslist+jwt +3. ตรวจสอบ statuslist JWT: + - `typ == "statuslist+jwt"` + - `sub == URI` ของ Status List + - `now > iat`, `now < exp` + - ลงนามโดย PK_iss (จาก L6) +4. ประมวลผล Referenced Token ก่อน รวมทั้งลายมือชื่อและ `exp`; token ที่ไม่ผ่านหรือหมดอายุต้องปฏิเสธ แม้ status จะเป็น `0x00`. +5. Decode `lst`: base64url → DEFLATE ตามรูปแบบ ZLIB → อ่านค่า status ที่ `idx` ตามความกว้าง `bits` [REF-TSL, draft-ietf-oauth-status-list-21 §4.1]. +6. ตีความ: `0x00 = VALID` / `0x01 = INVALID` / `0x02 = SUSPENDED`; `0x03 = rotated` ใช้ได้เฉพาะเมื่อ Thai profile กำหนด semantics และ processing rules ไว้; ปฏิเสธค่า status ที่ไม่รู้จักหรือไม่รองรับ [REF-TSL, draft-ietf-oauth-status-list-21 §7.1]. + +--- + +## E.2. สรุปจุดตรวจ L1–L7 ใน Full Flow OID4VP + +| จุดตรวจ | ผู้ดำเนินการตรวจ | สิ่งที่ตรวจ | อ้างอิง Trusted List | +|:-------:|-----------------|-----------|:-----------------:| +| **L1** | Wallet / Verifier | ตรวจสอบลายมือชื่อ JWT ของ Trusted List ด้วย ETDA public key | ETDA DID Document | +| **L2** | Wallet | ค้นหา Verifier PK ในบริการที่เกี่ยวข้อง | `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` | +| **L3** | Verifier | ค้นหา Wallet Provider PK ในบริการที่เกี่ยวข้อง เมื่อทำ TC-2 | `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` | +| **L4** | Verifier | ค้นหา Issuer PK ในบริการที่เกี่ยวข้อง | `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` | +| **L6** | Verifier | Dereference kid ใน DID Document → publicKeyJwk | DID Resolver | +| **L7** | Verifier | Decode Status List status slot | Issuer Status List | + +> **หมายเหตุ:** L5 (reserved สำหรับ Wallet Attestation) — ตรวจสอบ WUA Status List แบบ privacy-preserving [REF-CIR-WUA] เมื่อ Wallet ส่ง WIA และ TC-2 ทำงาน + +--- + +{/* METADATA (agent-only — not rendered to readers) +## อ้างอิง + +- [REF-OID4VP] OpenID Foundation, "OpenID for Verifiable Presentations 1.0 Final" — https://openid.net/specs/openid-4-verifiable-presentations-1_0.html +- [REF-SDJWT] IETF, “SD-JWT-based Verifiable Digital Credentials (SD-JWT VC),” draft-ietf-oauth-sd-jwt-vc-19, 31 August 2026 (Internet-Draft; status as of 1 October 2026: Waiting for AD Go-Ahead) — https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/ +- [REF-TSL] IETF, “Token Status List (TSL),” draft-ietf-oauth-status-list-21, 21 June 2026 (Internet-Draft; status as of 1 October 2026: RFC Editor — Awaiting First editor) — https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ +- [REF-DID-CORE] W3C, "Decentralized Identifiers (DIDs) v1.0", 19 July 2022 +- [REF-ARF] European Commission, "EUDI Architecture and Reference Framework v2.9.0" +- [REF-CIR-WUA] (EU) CIR 2024/2979, "Wallet Unit Attestation" +- [REF-MASA-158] MASA-158 — Merge OID4VP Full Flow from trust-guide into ARF (2026-08-07) +- [REF-TRUSTLIST-CDN] คณะทำงาน VC, "แนวทางกระจาย Trustlist (LoTE) ผ่าน File/Edge CDN — ไม่ใช้ RabbitMQ", เวอร์ชัน 1.10, 4 กันยายน 2569 — [research/41](../research/41-trustlist-serving-filecdn-etag-binary.md) + +--- +*/} + +**การนำทาง:** [⬅️ กลับไปบทที่ 8 — Implementation Guidelines](08-implementation-guidelines.md) · [⬆️ สารบัญ ARF](README.md) · [ภาคผนวก 8.1 — OID4VCI Full Flow ➡️](08.1-issuance-full-flow-detail.md) diff --git a/docs/thai-vc-arf/09-trust-model-3.md b/docs/thai-vc-arf/09-trust-model-3.md new file mode 100644 index 0000000..625f507 --- /dev/null +++ b/docs/thai-vc-arf/09-trust-model-3.md @@ -0,0 +1,325 @@ +--- +description: "9. Trust Model 3 — ระบบรายชื่อที่น่าเชื่อถือแบบกระจายศูนย์ด้วย DID (Decentralized Trusted List) — Thai VC ARF 2.0 DRAFT 0" +--- + +# 9. Trust Model 3 — ระบบรายชื่อที่น่าเชื่อถือแบบกระจายศูนย์ด้วย DID (Decentralized Trusted List) + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📊 ส่วนขยาย (extension) — จัดทำเพิ่มเติมโดยคณะทำงาน VC มิได้เป็นส่วนหนึ่งของรายงานต้นฉบับ Thai VC ARF เวอร์ชัน 1.1 +> **เวอร์ชันเอกสาร:** 1.0.2 (2026-09-25) — ปรับแผนภาพ §9.4 ให้แสดงลำดับ Credential Offer, metadata, Token Request, Credential Request และการตรวจ Trusted List ให้ตรงกับ flow OID4VCI +> **แหล่งข้อมูล:** สังเคราะห์จากการวิเคราะห์สถาปัตยกรรมความน่าเชื่อถือ [T1] [T2] [T3] รูปแบบ JWT ที่อ้างอิง LoTE [T8] Trust Framework Template [T12] คู่มือ Trust Guide (th/public-site/vcdoc) [T9] [T10] [T11] และมาตรฐาน OID4VCI 1.0 [T4] OID4VP 1.0 [T5] W3C DID Core [T6] +> **เอกสารที่เกี่ยวข้อง:** [§3.3 ระบบทะเบียนเอกสารรับรอง](03-usage-overview.md) · [§6.5 กลไกการสร้างความน่าเชื่อถือ (ภาพรวม Model 1–3)](06.5-trust-building-mechanism.md) · [§6 DID Methodologies](06-did-methodologies.md) · [§7 การทำงานร่วมกันข้ามระบบนิเวศ](07-cross-ecosystem-interoperability.md) · [ดัชนี ARF](README.md) +*/} + +--- + +หัวข้อนี้เป็นส่วนขยายของรายงาน Thai VC ARF เวอร์ชัน 1.1 จัดทำขึ้นเพื่อกำหนดแนวทางการทำงานของระบบรายชื่อที่น่าเชื่อถือ (trustlist) แบบกระจายศูนย์ (decentralized) ซึ่งเติมเต็มส่วนของระบบทะเบียนเอกสารรับรอง (verifiable data registry) ตาม [§3.3](03-usage-overview.md) ที่ระบุว่าระบบทะเบียนอาจจัดเก็บรายชื่อของเอนทิตี (entity) ได้ แต่มิได้กำหนดกลไกการกำกับดูแลและการตรวจสอบความน่าเชื่อถือของรายชื่อดังกล่าวไว้ + +รายงานฉบับนี้อ้างอิงการวิเคราะห์เปรียบเทียบสถาปัตยกรรมความน่าเชื่อถือ 3 รูปแบบ [T1] [T2] โดยกำหนดให้ Trust Model 3 (Trusted List + DID) เป็นแนวทางหลักในระยะแรก (พ.ศ. 2570–2571) ทั้งนี้ การกำหนดดังกล่าวสอดคล้องกับผลการรับฟังความเห็นของผู้ให้บริการในระบบนิเวศ [T2] + +หัวข้อนี้ครอบคลุมหลักการ องค์ประกอบ กระบวนการลงทะเบียน และกระบวนการตรวจสอบความน่าเชื่อถือภายใต้ Trust Model 3 ทั้งนี้ ภาพรวมของแบบจำลองความน่าเชื่อถือทั้ง 3 รูปแบบ ได้แก่ Trust Model 1 (CA Delegation) Trust Model 2 (ETDA SubCA) และ Trust Model 3 (Trusted List + DID) พร้อมทั้งความหมายและประโยชน์ของ Trusted List อยู่ใน [§6.5 กลไกการสร้างความน่าเชื่อถือ](06.5-trust-building-mechanism.md) ซึ่งควรอ่านก่อนหัวข้อนี้ อย่างไรก็ตาม หัวข้อนี้ไม่ครอบคลุมรายละเอียดของ Trust Model 1 และ Trust Model 2 ซึ่งมีรายละเอียดตาม [T1] [T2] และไม่ครอบคลุมการเชื่อมโยงข้ามพรมแดน ซึ่งมีรายละเอียดตาม [T3] + +--- + +## 9.1 หลักการของ Trust Model 3 + +Trust Model 3 ไม่ใช้ผู้ให้บริการออกใบรับรอง (certification authority: CA) เป็นสายความน่าเชื่อถือหลัก โดยสำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) ดำเนินการ 2 ประการ ดังนี้ + +1. ตรวจรับรอง (audit) เอนทิตีที่ประสงค์จะเข้าร่วมระบบ +2. กำกับดูแลและลงลายมือชื่อดิจิทัล (digital signature) กำกับ Trusted List + +เอนทิตีแต่ละราย ได้แก่ ผู้ออกเอกสาร (issuer) ผู้ตรวจสอบเอกสาร (verifier) และผู้ให้บริการกระเป๋าเอกสารดิจิทัล (digital document wallet provider) จำเป็นต้องสร้างคู่กุญแจ (key pair) และตัวระบุแบบกระจายศูนย์ (decentralized identifier: DID) ของตนเอง แล้วนำมาลงทะเบียนต่อ สพธอ. เมื่อผ่านการตรวจรับรอง สพธอ. จะจัดเก็บ DID หรือการอ้างอิงกุญแจ (key reference) พร้อมบทบาท (role) สถานะ (status) ชนิดเอกสารที่ออกได้ (allowed credential types) และช่วงเวลาที่มีผลใช้ได้ (validity) ไว้ใน Trusted List + +การจัดเก็บรายชื่อของเอนทิตีในลักษณะนี้ เป็นการดำเนินการตาม [§3.3](03-usage-overview.md) โดยเลือกใช้รูปแบบกระจายศูนย์ ทั้งนี้ กุญแจสาธารณะ (public key) ของแต่ละเอนทิตีจัดเก็บในรูปแบบ DID Document ตาม [§6](06-did-methodologies.md) [T6] องค์ประกอบของ Trust Model 3 แสดงได้ดังรูปที่ 9-1 + +```mermaid +flowchart TB + ISS["ผู้ออกเอกสาร / ผู้ตรวจสอบเอกสาร /
ผู้ให้บริการกระเป๋าเอกสารดิจิทัล"] + AUDIT["สพธอ. ตรวจรับรอง (Audit)"] + TL["ETDA Signed Trusted List
(DID/key + role + status + validity)"] + ALL["เอนทิตีจัดเก็บ Trusted List ไว้ในเครื่อง (cache)
แล้วตรวจสอบระหว่างกัน"] + ISS -->|"สร้าง key/DID แล้วยื่นลงทะเบียน"| AUDIT + AUDIT -->|"เมื่อผ่านการตรวจ จึงบันทึกลง Trusted List"| TL + TL -->|"ดึงข้อมูลไปจัดเก็บ (มี TTL)"| ALL +``` + +**รูปที่ 9-1 องค์ประกอบและการทำงานของ Trust Model 3** + +--- + +## 9.2 การลงทะเบียนและการตรวจรับรอง (onboarding) + +กระบวนการเข้าร่วมระบบภายใต้ Trust Model 3 ประกอบด้วยการยื่นให้ สพธอ. ตรวจรับรองเพื่อบันทึกลง Trusted List โดยเอนทิตีไม่จำเป็นต้องขอใบรับรอง (certificate) จาก CA ก่อน บทบาท คู่กุญแจ และข้อมูลที่จัดเก็บของแต่ละเอนทิตี เป็นดังนี้ + +| เอนทิตี | สร้าง key/DID เอง | การใช้งานกุญแจ | ข้อมูลที่จัดเก็บใน Trusted List | +|---------|:---:|------|------| +| ผู้ออกเอกสาร (issuer) | ต้อง | ลงลายมือชื่อ VC | DID/key + role + status + allowed credential types | +| ผู้ตรวจสอบเอกสาร (verifier) | ต้อง | ลงลายมือชื่อคำขอ VP | DID/key + role + status | +| ผู้ให้บริการกระเป๋าเอกสารดิจิทัล | ต้อง | ลงลายมือชื่อ Wallet Unit Attestation (WUA) | DID/key + role + status | +| กระเป๋าเอกสารดิจิทัล (wallet unit) | ต้อง (device key) | ผูกผู้ถือเอกสารกับอุปกรณ์ (holder/device binding) | ไม่จัดเก็บโดยตรง ตรวจสอบผ่าน WUA และ status ของผู้ให้บริการ | +| สพธอ. | — | ตรวจรับรองและลงลายมือชื่อ Trusted List | เป็นผู้กำกับดูแลและลงลายมือชื่อ Trusted List | + +บทบาทของเอนทิตีข้างต้นเป็นไปตาม [§3.1](03-usage-overview.md) + +--- + +## 9.3 กลไกการทำงานของ Trusted List + +สพธอ. ลงลายมือชื่อดิจิทัลกำกับ Trusted List ที่เกี่ยวข้องในรูปแบบ JWT และเผยแพร่เป็นไฟล์ฉบับเต็มผ่าน CDN เอนทิตีแต่ละรายดึง Trusted List ที่เกี่ยวข้องเมื่อเกิดการตัดสินใจด้านความน่าเชื่อถือ จัดเก็บไฟล์และ `ETag` ไว้ในเครื่อง (local cache) แล้วตรวจสอบระหว่างกันโดยไม่จำเป็นต้องเรียกไปยัง สพธอ. ทุกครั้ง กลไกการทำงานแสดงได้ดังรูปที่ 9-2 [T14] + +```mermaid +flowchart LR + ETDA["สพธอ. ลงลายมือชื่อ Trusted List
(JWT ฉบับเต็ม)"] + CACHE["เอนทิตีดึงมาจัดเก็บ (cache)
ไฟล์เต็ม + ETag"] + VERIFY["ตรวจ DID/key + status
→ resolve เป็น public key
→ ตรวจลายมือชื่อ"] + REFRESH["เมื่อเกิด connection
→ GET + If-None-Match"] + ETDA --> CACHE --> VERIFY + CACHE -.->|"ครบกำหนด TTL"| REFRESH --> ETDA +``` + +**รูปที่ 9-2 กลไกการลงลายมือชื่อ การจัดเก็บ และการตรวจสอบ Trusted List** + +ข้อกำหนดสำคัญของกลไกนี้ มีดังนี้ + +1. ผู้รับ Trusted List ต้องตรวจสอบลายมือชื่อดิจิทัลของ สพธอ. ทุกครั้ง โดยดึงไฟล์จาก CDN ได้โดยไม่ต้องใช้ API key [T14] +2. การดึงข้อมูล (resolve) DID ที่เอนทิตีไม่สามารถดำเนินการได้เอง ให้ใช้ Universal Resolver ตาม [§6.3](06-did-methodologies.md) และ [§7](07-cross-ecosystem-interoperability.md) +3. ในระหว่างที่ยังใช้ cache อยู่ เอนทิตีจะไม่สามารถทราบการเพิกถอน (revocation) ที่เกิดขึ้นภายหลังการดึงข้อมูลครั้งล่าสุด ดังนั้น รายงานฉบับนี้กำหนดให้ต้องระบุนโยบายให้ชัดเจนว่า เมื่อ cache หมดอายุและไม่สามารถดึงข้อมูลใหม่ได้ ระบบต้องปฏิเสธไว้ก่อน (fail-closed) หรืออนุญาตให้ดำเนินการต่อ (fail-open) + +--- + +## 9.4 กระบวนการออกเอกสารรับรองดิจิทัล (OID4VCI ร่วมกับ Trusted List) + +กระบวนการออก VC ตามมาตรฐาน OID4VCI [T4] มีจุดตรวจ 3 จุด ได้แก่ ตรวจผู้ออกเอกสารก่อนขอรหัส OTP ตรวจผู้ให้บริการกระเป๋าก่อนออก VC และตรวจผู้ออกเอกสารกับลายมือชื่อ VC ก่อนจัดเก็บ ดังรูปที่ 9-3 ลำดับ OID4VCI ฉบับเต็มอยู่ใน [§8.1](08.1-issuance-full-flow-detail.md) ส่วนจุดตรวจ Trusted List อ้างอิง [T11] + +```mermaid +sequenceDiagram + actor U as ผู้ถือเอกสาร (holder) + participant W as กระเป๋าเอกสารดิจิทัล + participant I as ผู้ออกเอกสาร (issuer) + participant TL as ETDA Trusted List + U->>I: เข้าสู่บริการและขอออก VC + I-->>U: แสดง Credential Offer เป็น QR Code และส่งรหัส OTP + U->>W: สแกน QR Code + W->>I: GET Credential Issuer Metadata + I-->>W: Metadata และรายละเอียด Credential Offer + Note over W,TL: ดึง Trusted List ฉบับเต็มจาก CDN เมื่อจำเป็น โดยตรวจลายมือชื่อและใช้ ETag ตรวจความใหม่ + W->>TL: GET Issuer Trusted List JWT ฉบับเต็ม + TL-->>W: Signed JWT + W->>W: จุดตรวจ 1 — TC-3-EARLY: ตรวจสถานะและขอบเขตสิทธิ์ของ Issuer ก่อนขอ OTP + W->>U: ขอรหัส OTP + U-->>W: ส่งรหัส OTP + W->>I: POST /token (pre-authorized_code + tx_code + Client Attestation/PoP ตาม Thai profile) + I->>TL: ตรวจ trust source ของ Wallet Provider ตาม Thai profile + TL-->>I: Trusted List JWT ฉบับเต็ม + I->>I: จุดตรวจ 2 — TC-2: ตรวจ Client Attestation และ PoP ก่อนออก Access Token + I-->>W: access_token + W->>I: POST /credential (proofs.jwt) + I->>I: ตรวจ Access Token และ holder-key proof, ตรวจประเภท VC ตามขอบเขตสิทธิ์ของ Issuer + I->>I: ลงลายมือชื่อ SD-JWT VC + I-->>W: Credential (SD-JWT VC) + W->>TL: GET Issuer Trusted List พร้อม If-None-Match + alt 304 Not Modified + TL-->>W: ใช้ Trusted List ใน cache ที่ตรวจลายมือชื่อแล้ว + else 200 OK + TL-->>W: Trusted List JWT ฉบับใหม่ + ETag + W->>W: ตรวจลายมือชื่อและปรับปรุง cache + end + W->>W: จุดตรวจ 3 — TC-3: ตรวจสถานะและขอบเขตของ Issuer + W->>I: GET Issuer JWKS ตาม kid ใน JOSE Header + I-->>W: Public key สำหรับตรวจลายมือชื่อ + W->>W: ตรวจลายมือชื่อ SD-JWT VC + W-->>U: จัดเก็บ VC +``` + +**รูปที่ 9-3 กระบวนการออก VC ร่วมกับการตรวจสอบ Trusted List** + +--- + +## 9.5 กระบวนการแสดงเอกสารสำแดงดิจิทัล (OID4VP ร่วมกับ Trusted List) + +กระบวนการแสดง VP ตามมาตรฐาน OID4VP [T5] กำหนดให้กระเป๋าเอกสารดิจิทัลตรวจสอบผู้ตรวจสอบเอกสารก่อนส่งข้อมูล และผู้ตรวจสอบเอกสารตรวจสอบผู้ออกเอกสารและผู้ให้บริการกระเป๋าภายหลังรับข้อมูล ดังรูปที่ 9-4 + +```mermaid +sequenceDiagram + actor U as ผู้ถือเอกสาร (holder) + participant W as กระเป๋าเอกสารดิจิทัล + participant V as ผู้ตรวจสอบเอกสาร (verifier) + participant TL as ETDA Trusted List + V-->>U: แสดง QR Code (Authorization Request) + U->>W: สแกน QR Code + W->>V: ขอ Request Object + V-->>W: Signed Request Object + W->>TL: GET Verifier Trusted List JWT ฉบับเต็ม + TL-->>W: JWT แบบ LoTE + Note over W: จุดตรวจ 1 — ตรวจว่าผู้ตรวจสอบเอกสารอยู่ใน Trusted List หากไม่อยู่ ต้องไม่ส่งข้อมูล + W->>U: ขอความยินยอมและเลือกข้อมูลที่จะเปิดเผย (selective disclosure) + U-->>W: ให้ความยินยอม + W->>V: ส่ง VP + V->>TL: GET Wallet Provider และ Issuer Trusted List JWT ฉบับเต็ม + TL-->>V: JWT แบบ LoTE ทั้งสองรายการ + Note over V: จุดตรวจ 2 — ตรวจผู้ให้บริการกระเป๋าใน Trusted List (บังคับเฉพาะกระเป๋าของภาครัฐ) + Note over V: จุดตรวจ 3 — ตรวจ Issuer ใน Trusted List พร้อมสถานะและประเภท VC ตาม Thai profile + V->>V: ตรวจลายมือชื่อของ VC และ VP +``` + +**รูปที่ 9-4 กระบวนการแสดง VP ร่วมกับการตรวจสอบ Trusted List** + +--- + +## 9.6 ความสอดคล้องกับส่วนอื่นของรายงาน + +Trust Model 3 สอดคล้องและต่อยอดจากส่วนต่าง ๆ ของรายงาน Thai VC ARF ดังนี้ + +| หัวข้อ | ส่วนที่ Trust Model 3 กำหนดเพิ่มเติม | +|--------|--------------------------------------| +| [§3.1 บทบาทของผู้เกี่ยวข้อง](03-usage-overview.md) | ใช้บทบาทเดิม ไม่เพิ่มบทบาทใหม่ | +| [§3.3 ระบบทะเบียนเอกสารรับรอง](03-usage-overview.md) | กำหนดรายชื่อของเอนทิตีให้เป็นรูปธรรมในรูปแบบกระจายศูนย์ คือ ETDA Signed Trusted List | +| [§5 มาตรฐานและข้อปฏิบัติ](05-standards-and-compliance.md) | ใช้ OID4VCI OID4VP และ SD-JWT VC เดิม โดยเพิ่มจุดตรวจสอบ Trusted List | +| [§6 DID Methodologies](06-did-methodologies.md) | ใช้ DID และ DID Document เป็นที่จัดเก็บ public key ของเอนทิตี | +| [§7 การทำงานร่วมกันข้ามระบบนิเวศ](07-cross-ecosystem-interoperability.md) | ใช้ Universal Resolver ในการ resolve DID ข้ามระบบนิเวศ | + +การเชื่อมโยงข้ามพรมแดนกับสหภาพยุโรป (EU) จำเป็นต้องดำเนินการเพิ่มเติม โดยจัดทำ bridge จาก DID ไปเป็น X.509 และจัดทำ List of Trusted Entities (LoTE) ตามมาตรฐาน ETSI TS 119 602 [T7] ทั้งนี้ มีรายละเอียดตาม [T3] + +--- + +## 9.7 ข้อกำหนดที่ต้องระบุให้ชัดเจน + +จากการวิเคราะห์ความเสี่ยงและการรับฟังความเห็นของผู้ให้บริการ [T2] รายงานฉบับนี้กำหนดให้ต้องระบุเรื่องต่อไปนี้ให้ชัดเจนตั้งแต่ระยะเริ่มต้น + +1. นโยบายการจัดการกุญแจ (key management) — ต้องกำหนด proof-of-possession การหมุนกุญแจ (key rotation) และบังคับใช้ฮาร์ดแวร์ความมั่นคงปลอดภัย (hardware security module: HSM) ที่ผ่านการรับรองอย่างน้อยระดับ FIPS 140-2 Level 3 เป็นเกณฑ์ขั้นต่ำ และยอมรับ FIPS 140-3 Level 3 เป็นมาตรฐานสืบทอด [T13] ทั้งนี้ ควรจัดทำบัญชีผู้ให้บริการ HSM และการเก็บรักษากุญแจ (key custody) ที่ได้รับการรับรอง โดยรายละเอียดเกณฑ์และการอ้างอิง NIST อยู่ใน [§12.2 และ §12.10](12-key-management-and-trustlist-deployment.md) +2. ความพร้อมใช้งานสูง (high availability) ของ Trusted List และ Universal Resolver — ควรจัดให้มี replicated endpoint, local cache, fallback resolver และกำหนดเป้าหมายระดับการให้บริการ (service level agreement: SLA) ที่ชัดเจน +3. ค่า TTL และนโยบาย fail-open/fail-closed — ต้องกำหนดเป็นค่าที่แน่นอน +4. สถานะทางกฎหมาย — ควรพิจารณาว่าลายมือชื่อที่ตรวจสอบผ่าน DID และ Trusted List เข้าเกณฑ์ลายมือชื่ออิเล็กทรอนิกส์ที่เชื่อถือได้ตามพระราชบัญญัติว่าด้วยธุรกรรมทางอิเล็กทรอนิกส์ พ.ศ. 2544 มาตรา 9 มาตรา 26 และมาตรา 28 หรือไม่ +5. แผนรองรับการเข้ารหัสลับยุคหลังควอนตัม (post-quantum cryptography: PQC) — ควรจัดทำแผนปรับเปลี่ยนไปสู่มาตรฐาน FIPS 203 FIPS 204 และ FIPS 205 +6. ข้อจำกัดสิทธิของผู้ถือเอกสาร — ผู้ถือเอกสารอาจถูกจำกัดมิให้ส่งเอกสารรับรองให้แก่ผู้ตรวจสอบเอกสารที่อยู่นอก Trusted List ดังนั้น ควรออกแบบแนวทางรองรับกรณีดังกล่าว + +--- + +## 9.8 โครงสร้างข้อมูลของ Trusted List (Trusted List Schema) + +JWT ตัวอย่างที่ถอดรหัสได้ใช้ `LoTE.TrustedEntitiesList[]` เป็นรายการองค์กร และใช้ `TrustedEntityServices[]` ภายในแต่ละองค์กรเพื่อแสดงบริการที่เกี่ยวข้อง กุญแจสาธารณะอยู่ใน `ServiceInformation.ServiceDigitalIdentity.PublicKeyValues[]` ส่วน DID อาจอยู่ใน `OtherIds[]` ตัวอย่าง issuer ฉบับปัจจุบันมี compact JWS ครบสามส่วนและถอด payload ได้ โดยพบองค์กร 1 รายและบริการออกเอกสาร 3 รายการ แต่ยังไม่แสดงสถานะระดับองค์กรและบริการ หรือประเภท VC ที่ออกได้ จึงต้องกำหนดฟิลด์และกฎดังกล่าวใน Thai profile ก่อนใช้ตัดสินความน่าเชื่อถือ [T8] + +Trusted List ฉบับเผยแพร่เป็น JWT ที่ลงลายมือชื่อและมี payload อ้างอิงโครงสร้าง LoTE ตาม ETSI TS 119 602 โดย JWT และกฎรายบทบาทเป็น Thai profile ผู้เข้าร่วมดึงรายการผ่าน CDN เมื่อจำเป็นต้องตัดสินความน่าเชื่อถือโดยไม่ใช้ API key หากดึงรายการหรือตรวจลายมือชื่อไม่ได้ ให้ปฏิเสธการเชื่อมต่อนั้น [research/42](../research/42-trusted-list-lote-jwt-format.md) [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +โครงสร้าง payload ที่พบใน JWT ตัวอย่างประกอบด้วยเขตข้อมูลดังนี้ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +| เขตข้อมูล | ชนิด | จำเป็น | คำอธิบาย | +|-----------|------|:---:|----------| +| `LoTE.ListAndSchemeInformation.LoTEVersionIdentifier` | Integer | พบในตัวอย่าง | เวอร์ชันโครงสร้างรายการ | +| `LoTE.ListAndSchemeInformation.LoTESequenceNumber` | Integer | พบในตัวอย่าง | ลำดับการเผยแพร่ | +| `LoTE.ListAndSchemeInformation.LoTEType` | URI | พบในตัวอย่าง | ชนิดของรายการ | +| `LoTE.ListAndSchemeInformation.ListIssueDateTime` | ISO8601 | พบในตัวอย่าง | เวลาเผยแพร่ | +| `LoTE.ListAndSchemeInformation.NextUpdate` | ISO8601 | พบในตัวอย่าง | เวลาที่ต้องตรวจความสดใหม่ | +| `LoTE.TrustedEntitiesList[]` | Array | พบในตัวอย่าง | รายการองค์กร | + +เขตข้อมูลระดับองค์กรและบริการที่พบในตัวอย่าง issuer และ verifier มีดังนี้ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +| ระดับ | เขตข้อมูล | คำอธิบาย | +|-------|-----------|----------| +| องค์กร | `TrustedEntityInformation.TEName[]` | ชื่อองค์กรพร้อมภาษา | +| บริการ | `ServiceInformation.ServiceTypeIdentifier` | URI ของประเภทบริการ | +| บริการ | `ServiceInformation.ServiceName[]` | ชื่อบริการพร้อมภาษา | +| บริการ | `ServiceInformation.ServiceDigitalIdentity.PublicKeyValues[]` | กุญแจสาธารณะที่ประกาศโดยตรง | +| บริการ | `ServiceInformation.ServiceDigitalIdentity.X509Certificates[]` | ใบรับรอง X.509 ที่พบในตัวอย่าง issuer | +| บริการ | `ServiceInformation.ServiceDigitalIdentity.OtherIds[]` | ตัวระบุอื่น เช่น DID | + +> **ข้อกำหนดที่ยังต้องระบุใน Thai profile:** ต้องกำหนดฟิลด์สถานะระดับองค์กรและระดับบริการ ขอบเขตสิทธิ์ และช่วงเวลาที่มีผลใช้ได้ให้ชัดเจน ตัวอย่าง JWT ที่ถอดรหัสยังไม่มีข้อมูลเหล่านี้ครบ ผู้ตรวจสอบข้อมูลต้องปฏิเสธเมื่อยืนยันสถานะหรือสิทธิ์ที่จำเป็นไม่ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +Trusted List เป็นแหล่งตัดสินว่าเอนทิตีมีสิทธิ์กระทำการใด ส่วน DID Document ใช้ประกาศกุญแจสำหรับตรวจลายมือชื่อ ดังนั้น consumer ต้องตรวจทั้งตัวตน กุญแจ สถานะ ช่วงเวลา และขอบเขตสิทธิ์จาก Trusted List ก่อนดำเนินการ [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +ขอบเขตสิทธิ์ต้องระบุแยกตามบทบาท ดังนี้ [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +| บทบาท | ข้อมูลขอบเขตสิทธิ์ขั้นต่ำ | เงื่อนไขการใช้งาน | +|--------|-----------------------------|-------------------| +| Issuer | ประเภท VC และ claims ที่ออกได้; research/42 ยก `ServiceInformation.credential_types` เป็นตัวอย่างที่เสนอ | ต้องตรวจตาม Thai profile ที่ประกาศใช้ | +| Verifier | claims ที่ขอได้และวัตถุประสงค์; JWT ตัวอย่างยังไม่แสดงฟิลด์ดังกล่าว | ต้องตรวจตาม Thai profile ที่ประกาศใช้ | +| Wallet Provider | กุญแจ สถานะ และช่วงเวลาสำหรับตรวจ WUA; JWT ตัวอย่างยังมี `TrustedEntitiesList[]` ว่าง | ต้องตรวจตาม Thai profile ที่ประกาศใช้ | + +การลงลายมือชื่อ Trusted List ของ สพธอ. ควรดำเนินการจาก HSM ระดับ FIPS 140-3 Level 3 โดยใช้เกณฑ์อนุมัติแบบ M-of-N เช่น 3-of-5 และมีกุญแจฉุกเฉินที่เก็บแบบออฟไลน์ [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +โครงสร้าง issuer ต่อไปนี้เป็นข้อเสนอใน [research/42](../research/42-trusted-list-lote-jwt-format.md) ส่วน issuer JWT ต้นทางมีบริการออกเอกสาร 3 รายการ ยังไม่มีฟิลด์สถานะหรือประเภท VC ที่ออกได้ และยังไม่ได้ตรวจลายมือชื่อ ค่า `ThaiIssuersList` ด้านล่างเป็น URI ที่เสนอ ส่วน JWT ตัวอย่างใช้ค่า `EUPubEAAProvidersList` + +```json +{ + "LoTE": { + "ListAndSchemeInformation": { + "LoTEType": "https://uri.etda.or.th/19602/LoTEType/ThaiIssuersList", + "LoTESequenceNumber": 1, + "ListIssueDateTime": "2026-09-24T00:00:00Z", + "NextUpdate": "2026-09-25T00:00:00Z" + }, + "TrustedEntitiesList": [{ + "TrustedEntityInformation": {"TEName": [{"lang": "th", "value": "หน่วยงานตัวอย่าง"}]}, + "TrustedEntityServices": [{"ServiceInformation": { + "ServiceTypeIdentifier": "https://uri.etda.or.th/19602/SvcType/CredentialIssuer", + "status": "active", + "ServiceDigitalIdentity": {"OtherIds": ["did:web:issuer.example.th"]}, + "credential_types": ["https://credentials.dopa.go.th/ThaiNationalIDCredential"] + }}] + }] + } +} +``` + +สำหรับ Verifier การตรวจ claims และวัตถุประสงค์ที่ขอได้ยังเป็นข้อกำหนดของไทย แต่ JWT ตัวอย่างใน research/42 ยังไม่แสดงชื่อฟิลด์ดังกล่าว จึงต้องกำหนดใน Thai profile ก่อนนำตัวอย่างไปใช้จริง [research/42](../research/42-trusted-list-lote-jwt-format.md) [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +--- + +## 9.9 การลงทะเบียนและ ETDA Trust Gateway + +เอนทิตีทุกรายต้องลงทะเบียนต่อ สพธอ. ก่อนเข้าร่วมระบบ เมื่อผ่านการตรวจ (audit) แล้วจึงถูกเพิ่มเข้า Trusted List [T10] + +การดึง Trusted List ใช้รูปแบบ CDN: แต่ละ entity ดึง Trusted List ที่เกี่ยวข้องฉบับเต็มในรูปแบบ JWT จาก **CDN** โดยตรง ได้แก่ `https://trustme.etda.or.th/.well-known/iss.txt` สำหรับ Issuer, `https://trustme.etda.or.th/.well-known/ver.txt` สำหรับ Verifier และ `https://trustme.etda.or.th/.well-known/wp.txt` สำหรับ Wallet Provider โดยไม่ต้องใช้ API key, delta หรือไฟล์ CBOR และต้องตรวจลายมือชื่อของ Trusted List ตาม §9.3 ก่อนใช้ข้อมูล [T14] + +ส่วน **API Key** ที่ได้รับตอนลงทะเบียน ใช้เฉพาะเรียก **ETDA API Gateway** เพื่อ resolve custom DID ที่ Resolver ส่วนกลางยังไม่รองรับเท่านั้น — ไม่เกี่ยวกับการดึง Trusted List [T12] + +รายงานฉบับนี้กำหนดระดับความเชื่อมั่นของผู้ตรวจสอบเอกสาร (verifier) เป็น 2 ระดับ [T10] ดังนี้ + +1. ระดับทั่วไป (standard) — ไม่จำเป็นต้องพิสูจน์กระเป๋าเอกสารดิจิทัล +2. ระดับเข้มงวด (enhanced) — จำเป็นต้องพิสูจน์กระเป๋าเอกสารดิจิทัล + +กรณีเอนทิตีประสงค์จะใช้ DID Method ที่ Resolver ส่วนกลางยังไม่รองรับ (custom DID) สพธอ. กำหนดทางเลือกการเชื่อมต่อไว้ 2 รูปแบบ [T10] ได้แก่ (1) เอนทิตีจัดส่ง DID Driver ให้ สพธอ. ติดตั้งใน Resolver ส่วนกลาง และ (2) เอนทิตีให้บริการ Resolver ของตนเอง แล้วอนุญาต IP ของ ETDA Gateway (whitelist) + +--- + +## 9.10 หลักการตรวจสอบความปลอดภัยพื้นฐาน (Core Security Rules) + +การตรวจสอบในทุก flow แบ่งตามต้นทุนได้ 3 ประเภท ได้แก่ (1) การเทียบข้อมูลใน Trusted List ที่จัดเก็บไว้ในเครื่อง (2) การตรวจลายมือชื่อ (cryptographic verification) และ (3) การเรียกผ่านเครือข่าย (network) เช่น การ resolve DID หรือการดึง Status List [T11] + +รายงานฉบับนี้กำหนดหลักการสำคัญว่า หากการเทียบข้อมูลใน Trusted List (ประเภทที่ 1) ไม่ผ่าน เอนทิตีต้องปฏิเสธทันที โดยไม่ต้องเรียกผ่านเครือข่าย (ประเภทที่ 3) ต่อ เพื่อมิให้สิ้นเปลืองทรัพยากรและมิให้เกิดความเสี่ยงจากการส่งคำขอไปยังปลายทางที่ไม่น่าเชื่อถือ [T11] + +จุดตรวจสอบ Trusted List ตลอดกระบวนการออกและแสดงเอกสาร สรุปได้ดังนี้ [T11] + +| จุดตรวจ | กระบวนการ | ผู้ตรวจ | ตรวจอะไร | เมื่อไม่ผ่าน | +|:---:|------|---------|----------|-------------| +| 1 | ออก VC | กระเป๋าเอกสารดิจิทัล | ผู้ออกเอกสารอยู่ใน Trusted List | หยุด ไม่ส่ง Transaction Code | +| 2 | ออก VC | ผู้ออกเอกสาร | ผู้ให้บริการกระเป๋าอยู่ใน Trusted List | ไม่ออก VC | +| 3 | ออก VC | กระเป๋าเอกสารดิจิทัล | ผู้ออกเอกสารอยู่ใน Trusted List | ไม่บันทึก VC | +| 4 | แสดง VP | กระเป๋าเอกสารดิจิทัล | ผู้ตรวจสอบเอกสารอยู่ใน Trusted List | ไม่ส่งข้อมูล | +| 5 | แสดง VP | ผู้ตรวจสอบเอกสาร | ผู้ให้บริการกระเป๋าอยู่ใน Trusted List (บังคับเฉพาะกระเป๋าภาครัฐ) | ปฏิเสธ | +| 6 | แสดง VP | ผู้ตรวจสอบเอกสาร | ผู้ออกเอกสารอยู่ใน Trusted List พร้อม status และสิทธิ์การออกเอกสาร | ไม่เชื่อถือข้อมูล | + +--- + +{/* METADATA (agent-only — not rendered to readers) +## บรรณานุกรม (References) + +- [T1] คณะทำงาน VC, "Trust Architecture: 3 โมเดลตรวจสอบความน่าเชื่อถือ" — [research/32-trustlist-3models.md](../research/32-trustlist-3models.md) +- [T2] คณะทำงาน VC, "3 Trust Architecture Models — Fact-Based Analysis" — [research/33-trust-architecture-models-factbase-analysis.md](../research/33-trust-architecture-models-factbase-analysis.md) +- [T3] คณะทำงาน VC, "Trusted List สำหรับ Domestic และ Cross-Border" — [research/34-trustlist-domestic-and-crossborder.md](../research/34-trustlist-domestic-and-crossborder.md) +- [T4] OpenID Foundation, "OpenID for Verifiable Credential Issuance 1.0", Final — https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html +- [T5] OpenID Foundation, "OpenID for Verifiable Presentations 1.0", Final — https://openid.net/specs/openid-4-verifiable-presentations-1_0.html +- [T6] World Wide Web Consortium (W3C), "Decentralized Identifiers (DIDs) v1.0", 19 July 2022 — https://www.w3.org/TR/did-core/ +- [T7] European Telecommunications Standards Institute (ETSI), "ETSI TS 119 602 — Lists of Trusted Entities (LoTEs)" — https://www.etsi.org/deliver/etsi_ts/119600_119699/119602/ +- [T8] คณะทำงาน VC, "การย้ายรูปแบบ Trusted List ไปสู่ JWT ที่อ้างอิง LoTE" — [research/42-trusted-list-lote-jwt-format.md](../research/42-trusted-list-lote-jwt-format.md) +- [T9] คู่มือ Trust Guide, "§5.3 ตัวอย่าง TL JSON" — [trust-guide/05-trust-infrastructure/02-tl-json-examples.md](../public-site/vcdoc/docs/trust-guide/05-trust-infrastructure/02-tl-json-examples.md) +- [T10] คู่มือ Trust Guide, "§6.1 ระดับความเชื่อมั่นของ Verifier และการลงทะเบียน" — [trust-guide/06-security-and-privacy/01-verifier-confidence-and-registration.md](../public-site/vcdoc/docs/trust-guide/06-security-and-privacy/01-verifier-confidence-and-registration.md) +- [T11] คู่มือ Trust Guide, "ภาคผนวก ก — Core Security Rules" — [trust-guide/09-appendix/01-core-security-rules.md](../public-site/vcdoc/docs/trust-guide/09-appendix/01-core-security-rules.md) +- [T12] คณะทำงาน VC, "Trust Framework Template — §5 (CDN Trusted List serving: ดึงจาก CDN ไม่ต้องใช้ API key; Gateway สำหรับ custom DID เท่านั้น)" — [th/draft/trust-framework-template.md](../draft/trust-framework-template.md) +- [T13] NIST, "FIPS PUB 140-2 — Security Requirements for Cryptographic Modules", พฤษภาคม ค.ศ. 2001 และ "FIPS PUB 140-3", มีนาคม ค.ศ. 2019 — https://csrc.nist.gov/pubs/fips/140-3/final +- [T14] คณะทำงาน VC, "แนวทางกระจาย Trustlist (LoTE) ผ่าน File/Edge CDN — ไม่ใช้ RabbitMQ", เวอร์ชัน 1.10, 4 กันยายน 2569 — [research/41](../research/41-trustlist-serving-filecdn-etag-binary.md) + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 8 — Implementation Guidelines (OID4VCI / OID4VP)](08-implementation-guidelines.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 10 — Wallet Unit Attestation (WUA) ➡️](10-wallet-unit-attestation.md) diff --git a/docs/thai-vc-arf/10-wallet-unit-attestation.md b/docs/thai-vc-arf/10-wallet-unit-attestation.md new file mode 100644 index 0000000..95d4206 --- /dev/null +++ b/docs/thai-vc-arf/10-wallet-unit-attestation.md @@ -0,0 +1,302 @@ +--- +description: "10. Wallet Unit Attestation (WUA) — Thai VC ARF 2.0 DRAFT 0" +--- + +# 10. Wallet Unit Attestation (WUA) + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📐 Specification +> **เวอร์ชันเอกสาร:** 1.7 (2026-08-07) — ประวัติการแก้ไขทั้งหมดอยู่ในภาคผนวก §ก.4 บันทึกการเปลี่ยนแปลง +> **แหล่งข้อมูลปฐมภูมิ (ต้นฉบับที่ระบบของไทยอ้างอิง):** +> - EUDI ARF 2.9.0 — Topic 9 / Discussion Topic C: Wallet Unit Attestation (WUA) and Key Attestation — [eudi.dev/2.9.0/discussion-topics/c-wallet-unit-attestation](https://eudi.dev/2.9.0/discussion-topics/c-wallet-unit-attestation/) +> - EUDI ARF 2.9.0 — Technical Specification TS3: Wallet Unit Attestations — [eudi.dev/2.9.0/technical-specifications/ts3-wallet-unit-attestation](https://eudi.dev/2.9.0/technical-specifications/ts3-wallet-unit-attestation/) +> - Commission Implementing Regulation (EU) 2024/2979 — Wallet requirements and Wallet Unit Attestations +> - OpenID for Verifiable Credential Issuance 1.0 (Final) — Annex D (Key Attestation), Annex E (Wallet Attestation) +> +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md), [บทที่ 8 — Implementation Guidelines (OID4VCI/OID4VP)](08-implementation-guidelines.md), [บทที่ 9 — Trust Model 3](09-trust-model-3.md), [บทที่ 12 — Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md), [บทที่ 13 — VC Status และการเพิกถอน](13-vc-status-and-revocation.md), [00-glossary.md](../../00-glossary.md) +*/} + +--- + +Wallet Unit Attestation (WUA) เป็นแนวคิดที่กำหนดขึ้นโดยกรอบ EU Digital Identity Wallet Architecture and Reference Framework (EUDI ARF) และมีฐานทางกฎหมายใน eIDAS 2.0 (Regulation (EU) 2024/1183) และ Commission Implementing Regulation series (CIR 2024/2977, 2024/2979, 2024/2982) รายงานฉบับนี้ **นำ WUA มาใช้ตามมาตรฐานของ EUDI** เพื่อรับรองผู้ให้บริการกระเป๋าเอกสารดิจิทัล (wallet provider) และหน่วยกระเป๋าเอกสารดิจิทัล (wallet unit) มิได้คิดค้นหรือกำหนดกลไกใหม่ขึ้นเอง + +บทนี้มุ่งอธิบายเฉพาะ **วิธีที่ระบบของไทยใช้ WUA ในกระแสงาน OID4VCI และ OID4VP** และความสัมพันธ์ระหว่าง WUA กับ Trusted List ของสำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) ส่วนรายละเอียดเชิงมาตรฐาน ได้แก่ โครงสร้างข้อมูล ข้อกำหนดระดับสูง (High-Level Requirements) และฐานทางกฎหมายฉบับเต็ม รายงานฉบับนี้ไม่กล่าวซ้ำ แต่ให้ผู้อ่านศึกษาจากต้นฉบับของ EUDI ตามที่ระบุใน [ภาคผนวก ก](#ภาคผนวก-ก--เอกสารอ้างอิงและการอ่านเพิ่มเติม) + +--- + +## 10.1 ขอบข่ายและที่มา + +### 10.1.1 ที่มาของ WUA + +WUA เป็นกลไกที่ EUDI ARF กำหนดให้ wallet provider ออกให้แก่ wallet unit ของตน เพื่อให้ผู้พึ่งพา (เช่น ผู้ออกเอกสาร หรือผู้ตรวจสอบเอกสาร) ตรวจสอบได้ว่า wallet unit นั้นมาจาก wallet provider ที่เชื่อถือได้ และผูกกับกุญแจที่จัดเก็บในอุปกรณ์เข้ารหัสลับที่ได้รับการรับรอง ระบบของไทยนำกลไกนี้มาใช้เพื่อวัตถุประสงค์เดียวกันสองประการ ได้แก่ + +1. **รับรองผู้ให้บริการกระเป๋าเอกสารดิจิทัล (wallet provider)** ผ่านการที่ สพธอ. ตรวจประเมินและลงรายการใน Trusted List +2. **รับรองหน่วยกระเป๋าเอกสารดิจิทัล (wallet unit)** ผ่านการที่ wallet provider ลงลายมือชื่อ WUA และหน่วยกระเป๋านำเสนอ WUA ในขั้นตอนการทำงาน (runtime) + +กลไกทั้งสองทำงานร่วมกัน โดย Trusted List รับรองในระดับผู้ให้บริการ ส่วน WUA รับรองในระดับหน่วยกระเป๋า + +### 10.1.2 ขอบเขตของบทนี้ + +รายงานฉบับนี้กำหนดให้ระบบของไทยใช้ WUA **ตามที่ EUDI กำหนดไว้** โดยไม่ดัดแปลงนิยามหรือโครงสร้าง บทนี้ครอบคลุมเฉพาะ + +- วิธีที่ wallet unit นำเสนอ WUA และวิธีที่ผู้พึ่งพาตรวจสอบ WUA ในกระแสงาน OID4VCI (การออกเอกสาร) และ OID4VP (การแสดงเอกสาร) +- ความสัมพันธ์ระหว่าง WUA กับ Trusted List ของ สพธอ. +- การเพิกถอนและการเผยแพร่สถานะของ WUA ในบริบทของระบบไทย + +บทนี้ **ไม่ครอบคลุม** รายละเอียดต่อไปนี้ ซึ่งให้อ้างอิงต้นฉบับของ EUDI แทน + +- โครงสร้างข้อมูลและการเข้ารหัสฉบับเต็มของ WIA และ KA (ตาม EUDI Technical Specification TS3) +- ข้อกำหนดระดับสูง (HLR) รายข้อของ EUDI ARF Topic 9 +- ถ้อยคำของกฎหมายลูก (CIR) รายมาตรา + +--- + +## 10.2 นิยามและบทบาทโดยย่อ + +### 10.2.1 นิยามศัพท์ + +ศัพท์ที่ใช้ในบทนี้สอดคล้องกับ [00-glossary.md](../../00-glossary.md) และนิยามในข้อ 2.24 ของ [บทที่ 2 — บทนิยาม](02-definitions.md) รายละเอียดฉบับเต็มให้อ้างอิง EUDI ARF 2.9.0 + +| ศัพท์ | คำเต็มภาษาอังกฤษ | ความหมายโดยย่อ | +|------|-------------------|---------------| +| **WUA** | Wallet Unit Attestation | คำรวมของหลักฐานที่ Wallet Provider ออกให้แก่ Wallet Unit ตาม EUDI ARF 2.9.0 TS3; การนำมาใช้ในไทยและการจับคู่กับ protocol เป็นไปตาม Thai profile | +| **WIA** | Wallet Instance Attestation | ประเภทหนึ่งของ WUA รับรองความเป็นของแท้และความสมบูรณ์ของ wallet instance; มีวัตถุประสงค์ใกล้เคียงกับ Client authentication ของ Wallet Attestation ใน OID4VCI 1.0 Appendix E แต่รูปแบบ/ข้อกำหนดของ EUDI และ OID4VCI ไม่ควรถูกถือว่าเทียบเท่ากันโดยอัตโนมัติ | +| **KA** | Key Attestation | ประเภทหนึ่งของ WUA รับรองว่ากุญแจของ wallet unit ถูกสร้างและจัดเก็บใน WSCD ที่ได้รับการรับรอง และระบุระดับความมั่นคงปลอดภัยของกุญแจ; การผูกกับ OID4VCI Key Attestation ใน Appendix D ต้องเป็นไปตาม mapping ที่ profile ระบุ | +| **Wallet Unit** | Wallet Unit | หน่วยของกระเป๋าเอกสารดิจิทัล ประกอบด้วย wallet instance พร้อม WSCA และอุปกรณ์ที่เกี่ยวข้อง | +| **Wallet Provider** | Wallet Provider | ผู้ให้บริการ wallet unit ที่มีหน้าที่ออกและเพิกถอน WUA ทั้ง WIA และ KA | + +### 10.2.2 บทบาทที่เกี่ยวข้องกับ WUA + +```mermaid +flowchart LR + WP[Wallet Provider
สพธอ. รับรอง] -- "ออก WUA
ลงลายมือชื่อ" --> WU[Wallet Unit] + WU -- "นำเสนอหลักฐานที่ profile กำหนด
ณ จุดส่งตาม OID4VCI" --> ISS[ผู้ออกเอกสาร
Issuer / PID Provider] + WU -- "นำเสนอ WUA
ยืนยันตัวตนเท่านั้น" --> RP[ผู้ตรวจสอบเอกสาร
Relying Party] + ETDA[สพธอ.
Trusted List] -- "รับรอง Wallet Provider" --> WP + ETDA -- "เผยแพร่สถานะ Trusted List" --> ISS + ETDA -- "เผยแพร่สถานะ Trusted List" --> RP +``` + +WUA มีบทบาทต่างกันตามผู้รับ ผู้ออกเอกสารได้รับ WUA ฉบับที่มีข้อมูลความสามารถของอุปกรณ์ (EUDI เรียกว่า Use Case 2) ขณะที่ผู้ตรวจสอบเอกสารได้รับเฉพาะข้อมูลยืนยันตัวตนของ wallet unit (Use Case 1) เพื่อรักษาความเป็นส่วนตัว รายละเอียดของทั้งสอง Use Case ให้อ้างอิง EUDI ARF 2.9.0 Topic 9 + +### 10.2.3 WUA เป็นคำรวม ประกอบด้วย WIA และ KA + +WUA เป็นคำรวม (umbrella term) ของหลักฐานสองประเภทที่แยกหน้าที่กันตาม EUDI ARF 2.9.0 Technical Specification TS3 ได้แก่ + +1. **Wallet Instance Attestation (WIA)** รับรองว่า wallet instance คือตัวโปรแกรมกระเป๋า เป็นของแท้ มาจาก wallet provider ที่เชื่อถือได้ และไม่ถูกดัดแปลง +2. **Key Attestation (KA)** รับรองว่ากุญแจที่ wallet unit ใช้ผูกกับเอกสารถูกสร้างและจัดเก็บใน WSCD ที่ได้รับการรับรอง พร้อมระบุระดับความมั่นคงปลอดภัยของกุญแจนั้น + +หลักฐานทั้งสองประเภทมีวงจรชีวิตและกลไกสถานะแยกจากกัน ระบบของไทยนำการแบ่งประเภทและกลไกดังกล่าวมาใช้ตามที่ EUDI กำหนด มิได้กำหนดขึ้นเอง การแยกบทบาทของ WIA และ KA แสดงได้ดังนี้ + +| ประเภท | คำเต็ม | รับรองอะไร | หลักฐานคู่ขนานใน OID4VCI | +|--------|--------|-----------|--------------------------| +| WIA | Wallet Instance Attestation | ความเป็นของแท้และความสมบูรณ์ของ wallet instance | Client authentication ใน Wallet Attestation (Appendix E); mapping ตาม Thai profile | +| KA | Key Attestation | การจัดเก็บกุญแจใน WSCD และระดับความมั่นคงปลอดภัยของกุญแจ | Key Attestation ใน JOSE header ของ `proofs.jwt` (Appendix D/F.1); mapping ตาม Thai profile | + +รายละเอียดการเพิกถอนและสถานะของ WIA และ KA อยู่ใน [§10.5](#105-อายุการใช้งาน-การเพิกถอน-และสถานะของ-wua) ส่วนรายละเอียดโครงสร้างข้อมูลฉบับเต็ม ให้อ้างอิง EUDI ARF 2.9.0 TS3 + +--- + +## 10.3 การใช้ WUA ในกระแสงานของระบบไทย + +หัวข้อนี้เป็นสาระสำคัญของบท โดยอธิบายว่า WUA ปรากฏอยู่ที่จุดใดในกระแสงานมาตรฐาน กระแสงานฉบับเต็มพร้อมแผนภาพลำดับ (sequence diagram) และจุดตรวจ (checkpoint) ทั้งหมดอยู่ใน [บทที่ 8 — Implementation Guidelines](08-implementation-guidelines.md) + +### 10.3.1 การออกเอกสาร (OID4VCI) + +ในกระแสงานการออกเอกสารตาม OID4VCI ตาม [บทที่ 8 §8.2](08-implementation-guidelines.md), `proofs.jwt` ใน Credential Request พิสูจน์การครอบครองกุญแจที่จะผูกกับ Credential. หาก Thai profile ใช้ Wallet Attestation ตาม Appendix E, Wallet ส่ง Client Attestation ใน Pushed Authorization Request หรือ Token Request เพื่อยืนยัน Client ต่อ Authorization Server ก่อนออก Access Token; การส่งนี้แยกจาก Credential Request. + +Thai profile อาจกำหนดให้ใช้ WIA/KA และให้ Issuer ตรวจข้อมูล trust, key และสถานะ Wallet ก่อนออก Credential; ต้องระบุ mapping และจุดส่งให้ชัด. Wallet Attestation ตาม Appendix E ใช้ยืนยัน Client ต่อ Authorization Server. `proofs.jwt` ตาม Appendix F.1 พิสูจน์การครอบครองกุญแจใน Credential Request และอาจมี Key Attestation ตาม Appendix D ใน JOSE header. อย่าอนุมานว่า EUDI WUA ทั้งชุดส่งใน Credential Request หรือเป็นรูปแบบเดียวกับ OID4VCI โดยอัตโนมัติ. OID4VCI ไม่กำหนด Trusted List/Registry ของไทย จึงต้องกำหนด trust source, schema, freshness และวิธีตรวจสถานะใน profile. + +```mermaid +sequenceDiagram + autonumber + participant WU as Wallet Unit + participant ISS as ผู้ออกเอกสาร (Issuer) + participant TL as Trusted List (สพธอ.) + participant WPR as Wallet Provider
Token Status List + + WU->>ISS: Pushed Authorization Request หรือ Token Request + Client Attestation/PoP ตาม profile + ISS->>TL: ตรวจ trust source และ Wallet Provider ตาม Thai profile + ISS->>ISS: ตรวจ Client Attestation/PoP ก่อนออก Access Token + ISS-->>WU: Access Token + WU->>ISS: Credential Request + Access Token + proofs.jwt + ISS->>ISS: ตรวจ holder-key proof และ Key Attestation หาก Thai profile กำหนด + ISS->>WPR: ตรวจสถานะ Wallet/Key เมื่อ Thai profile กำหนด + WPR-->>ISS: ผลตรวจสถานะตามกลไก profile + alt ผ่านทั้งหมด + ISS-->>WU: ออกเอกสารผูกกับกุญแจใน Key Attestation + else ไม่ผ่าน + ISS-->>WU: ปฏิเสธการออก พร้อมเหตุผล + end +``` + +การตรวจสถานะของ WUA ใช้จุดตรวจสอบของ wallet provider โดยคงความเป็นส่วนตัว (privacy-preserving) ของผู้ใช้รายเครื่อง สอดคล้องกับ CIR 2024/2979 Art. 7 จุดตรวจนี้ตรงกับจุดตรวจ TC-2 ใน [บทที่ 8 §8.2.5](08-implementation-guidelines.md) + +### 10.3.2 การแสดงเอกสาร (OID4VP) + +ในกระแสงานการแสดงเอกสารตาม OID4VP ตาม [บทที่ 8 §8.3](08-implementation-guidelines.md) Thai profile กำหนดให้ Wallet รัฐบาลส่ง WIA และ WIA-PoP เพื่อให้ผู้ตรวจสอบเอกสารตรวจ TC-2; Wallet เอกชนเลือกส่งทั้งคู่หรือไม่ส่งทั้งคู่ได้ + +- เมื่อ Wallet ส่ง WIA ผู้ตรวจสอบเอกสารใช้ WIA เพื่อยืนยันแหล่งที่มาของ Wallet Provider และใช้ WIA-PoP เพื่อยืนยันการครอบครองกุญแจในธุรกรรมปัจจุบัน ตามกติกา TC-2 ใน [บทที่ 8 §8.4.2](08-implementation-guidelines.md) +- หาก Wallet เอกชนไม่ส่งทั้งสองรายการ ผู้ตรวจสอบเอกสารข้าม TC-2 และตรวจ TC-3/TC-4 ต่อ; หากส่งมาเพียงรายการเดียวหรือหลักฐานรายการใดตรวจไม่ผ่าน ให้ปฏิเสธ VP +- ผู้ตรวจสอบเอกสาร **ต้องไม่** ได้รับข้อมูลความสามารถของอุปกรณ์ (Use Case 2) ตามข้อกำหนดความเป็นส่วนตัวของ EUDI ARF (HLR WUA_24) +- การจัดประเภท Wallet และผลของการไม่มี WIA/WIA-PoP เป็นข้อกำหนดของ Thai profile ไม่ใช่ข้อกำหนดของ OID4VP หรือ EUDI WUA โดยตรง + +### 10.3.3 ข้อมูลที่แต่ละบทบาทเข้าถึงได้ + +| ผู้รับ WUA | ข้อมูลที่เข้าถึง | ที่มา (EUDI) | +|-----------|-----------------|--------------| +| ผู้ออกเอกสาร (Issuer / PID Provider) | ยืนยันตัวตน และความสามารถของอุปกรณ์และกุญแจ (Use Case 1 และ 2) | EUDI ARF 2.9.0 Topic 9 | +| ผู้ตรวจสอบเอกสาร (Relying Party) | ยืนยันตัวตนของ wallet unit เท่านั้น (Use Case 1) | HLR WUA_24 | + +--- + +## 10.4 ความสัมพันธ์กับ Trusted List ของ สพธอ. + +### 10.4.1 แบบจำลองความน่าเชื่อถือสองระดับ + +```mermaid +flowchart TD + WP[Wallet Provider
เช่น DGA หรือผู้ให้บริการเอกชน] -->|ลงทะเบียน| AUDIT[การตรวจประเมินของ สพธอ.] + AUDIT -->|ผ่าน| TL[Trusted List
did:web:vc.thaigov.go.th] + TL -->|รับรองระดับผู้ให้บริการ| WP + WP -->|ออก WUA ลงลายมือชื่อ| WU[Wallet Unit] + WU -->|WUA รับรองระดับหน่วย| ISS[ผู้ออกเอกสาร] + ISS -->|ตรวจ Wallet Provider| TL +``` + +### 10.4.2 การลงทะเบียน Wallet Provider + +การลงทะเบียนเป็นไปตาม [`../policy/01-verifier-registration-policy.md`](../policy/01-verifier-registration-policy.md) โดย สพธอ. ตรวจประเมิน 3 ด้าน ได้แก่ (ก) ความปลอดภัยของซอฟต์แวร์ (ข) การจัดการกุญแจ และ (ค) การคุ้มครองข้อมูลส่วนบุคคล เมื่อผ่านการประเมิน สพธอ. เพิ่ม wallet provider ใน Wallet Provider Trusted List ซึ่งเผยแพร่เป็น JWT ที่มี payload แบบ LoTE [รูปแบบอ้างอิง](../research/42-trusted-list-lote-jwt-format.md) ตัวอย่าง JWT ของรายการนี้ยังมี `LoTE.TrustedEntitiesList` เป็นอาร์เรย์ว่าง จึงยังไม่ยืนยันเส้นทางข้อมูลสำหรับ WUA ได้ Thai profile ต้องกำหนดวิธีประกาศและตรวจสอบข้อมูลต่อไปนี้ก่อนใช้งานจริง: + +1. DID ของ wallet provider +2. ใบรับรองสำหรับตรวจลายมือชื่อ WUA +3. รายการ wallet solution ที่ได้รับการรับรอง +4. ตำแหน่งจุดตรวจสอบสถานะการเพิกถอน WUA + +ข้อกำหนดด้านการจัดเก็บและจัดการกุญแจของ wallet provider ให้อ้างอิง [บทที่ 12 — Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md) + +--- + +## 10.5 อายุการใช้งาน การเพิกถอน และสถานะของ WUA + +### 10.5.1 อายุการใช้งานของ WUA (WUA เป็นหลักฐานอายุสั้น) + +ตาม EUDI ARF 2.9.0 (HLR WUA_09) WUA โดยหลักการมีอายุการใช้งานสั้น wallet provider ต้องพิจารณาการใช้งานแบบออฟไลน์ การทำงานร่วมกัน (interoperability) และความเสี่ยงด้านการติดตามผู้ใช้ (linkability) ในการกำหนดอายุของ WUA และอาจใช้ WUA อายุสั้นเพื่อลดความเสี่ยงดังกล่าว + +เพื่อลดความเสี่ยงด้าน linkability ตามแนวทางของ EUDI (Discussion Topic A) wallet provider ควรออก WUA ในลักษณะใช้ครั้งเดียว (once-only) หรือออกเป็นชุด (batch) แล้วให้หน่วยกระเป๋าหมุนเวียนใช้ WUA คนละฉบับในแต่ละธุรกรรม ด้วยแนวทางนี้ WUA แต่ละฉบับจึงหมดอายุไปเองในเวลาอันสั้น การควบคุมวงจรชีวิตหลักของ WUA จึงเป็น **การหมดอายุระยะสั้น** เป็นด่านแรก ส่วนการเพิกถอน (revocation) เป็นด่านสำรองสำหรับกรณีที่ต้องยกเลิกก่อนหมดอายุ เช่น อุปกรณ์สูญหายหรือกุญแจรั่วไหล + +_ข้อสังเกต:_ ด้วยเหตุที่ WUA มีอายุสั้น ผลของการยกเลิกในทางปฏิบัติจึงมักเกิดจากการที่ wallet provider หยุดออก WUA ฉบับใหม่ให้หน่วยกระเป๋าที่ถูกยกเลิก มากกว่าการประกาศสถานะเพิกถอนของ WUA ฉบับเดิมที่ใกล้หมดอายุอยู่แล้ว + +### 10.5.2 การเพิกถอนและสถานะของ WIA และ KA + +WUA ประกอบด้วย WIA และ KA ซึ่งมีกลไกสถานะแยกจากกัน ระบบของไทยนำกลไกการเพิกถอนของทั้งสองประเภทมาใช้ตามที่ EUDI กำหนด มิได้กำหนดกลไกใหม่ ตาม EUDI ARF 2.9.0 TS3 การเพิกถอน WIA และ KA **ต้อง**ใช้ IETF Token Status List (draft-ietf-oauth-status-list) เป็นกลไกสถานะ โดยมีรายละเอียดดังนี้ + +**การเพิกถอนและสถานะของ WIA** + +- WIA มี object ชื่อ `client_status` ที่อ้างถึงรายการสถานะ (status list) ของ WIA +- `client_status.status` ชี้ไปยัง IETF Token Status List ที่ wallet provider เผยแพร่ เพื่อประกาศว่า wallet instance ใดถูกเพิกถอน เช่น กรณีผู้ใช้ร้องขอ หรือพบปัญหาด้านความปลอดภัย +- ผู้ออกเอกสารตรวจสถานะของ WIA จากรายการนี้ก่อนออกเอกสาร + +**การเพิกถอนและสถานะของ KA** + +- KA มี object ชื่อ `key_storage_status` ที่อ้างถึงรายการสถานะของ KA +- `key_storage_status.status` ชี้ไปยัง IETF Token Status List ที่ wallet provider เผยแพร่ ซึ่งประกาศสถานะได้สองระดับ ได้แก่ (ก) สถานะของ WSCD หรือ keystore ทั้งประเภท โดย KA ทุกฉบับของประเภทเดียวกันใช้ index ร่วมกัน หรือ (ข) สถานะของ WSCD หรือ keystore ของ wallet unit แต่ละหน่วยแยกราย +- ผู้ออกเอกสารตรวจสถานะของ KA จากรายการนี้เพื่อยืนยันว่ากุญแจที่จะผูกกับเอกสารยังอยู่ในอุปกรณ์ที่เชื่อถือได้ + +การใช้ IETF Token Status List คงความเป็นส่วนตัวโดยธรรมชาติ เนื่องจากสถานะแต่ละรายการเป็นเพียง index ในรายการรวม มิได้ระบุตัวผู้ใช้เป็นรายบุคคล จึงสอดคล้องกับข้อกำหนดการเผยแพร่สถานะแบบคงความเป็นส่วนตัวใน CIR 2024/2979 Art. 7 ทั้งนี้ อำนาจการเพิกถอน WIA และ KA เป็นของ wallet provider ที่ออกหลักฐานนั้นเท่านั้น การลงลายมือชื่อ WIA, KA และ Token Status List ใช้อัลกอริทึม ES256, ES384 หรือ ES512 ตาม EUDI ARF 2.9.0 TS3 + +เงื่อนไขและการแจ้งเตือนการเพิกถอนสรุปได้ดังนี้ + +| ประเด็น | ข้อกำหนด | +|--------|----------| +| ผู้มีอำนาจเพิกถอน | เฉพาะ wallet provider ที่ออก WIA หรือ KA นั้น | +| เงื่อนไข | ผู้ใช้ร้องขอ (เช่น อุปกรณ์สูญหาย) กุญแจรั่วไหล การเปลี่ยนสถานะรับรองใน Trusted List หรือ wallet unit ไม่เป็นไปตามข้อกำหนดทางเทคนิค | +| การแจ้งผู้ใช้ | wallet provider ต้องแจ้งผู้ได้รับผลกระทบภายใน 24 ชั่วโมง พร้อมเหตุผล | +| การเผยแพร่สถานะ | IETF Token Status List ที่ wallet provider เผยแพร่ ผ่าน `client_status` สำหรับ WIA และ `key_storage_status` สำหรับ KA | +| ผลต่อเอกสารที่ผูกไว้ | เมื่อ WIA หรือ KA ถูกเพิกถอน ผู้ออกเอกสารที่เคยออกเอกสารให้ wallet unit นั้นต้องเพิกถอนเอกสารที่ผูกไว้ | + +### 10.5.3 ความแตกต่างระหว่างรายการสถานะของ WUA กับรายการสถานะของเอกสารรับรอง + +WIA, KA และเอกสารรับรอง (VC/PID/attestation) ต่างใช้รูปแบบ IETF Token Status List เหมือนกัน แต่เป็น **คนละรายการกัน** มีผู้เผยแพร่และวัตถุประสงค์ต่างกัน ผู้พัฒนาต้องไม่สับสนระหว่างรายการเหล่านี้ + +| รายการสถานะ | ผู้เผยแพร่ | ติดตามสถานะของ | ผู้ตรวจสถานะ | +|------|----------------|---------|--------------| +| สถานะ WIA (`client_status`) | wallet provider ที่ออก WIA | wallet instance คือตัวโปรแกรมกระเป๋า | ผู้ออกเอกสาร (กระแสงาน OID4VCI) | +| สถานะ KA (`key_storage_status`) | wallet provider ที่ออก KA | WSCD หรือ keystore ที่เก็บกุญแจ | ผู้ออกเอกสาร (กระแสงาน OID4VCI) | +| สถานะเอกสารรับรอง (VC/PID/attestation) | ผู้ออกเอกสารแต่ละราย | เอกสารรับรองที่ออกให้ผู้ถือ | ผู้ตรวจสอบเอกสาร (กระแสงาน OID4VP) | + +ความสัมพันธ์แบบต่อเนื่อง (cascade) มีดังนี้ เมื่อ wallet provider เพิกถอน WIA หรือ KA ผ่านรายการสถานะของตน ผู้ออกเอกสารที่เคยออกเอกสารให้ wallet unit นั้นต้องเพิกถอนเอกสารที่ผูกไว้ผ่าน IETF Token Status List **ของผู้ออกเอกสารเอง** ตาม CIR 2024/2977 Art. 5(4)(b) กล่าวคือ รายการสถานะของ WUA ใช้กับ wallet instance และกุญแจ ส่วนรายการสถานะของผู้ออกเอกสารใช้กับเอกสารที่ผูกกับ wallet unit นั้น ด้วยเหตุนี้ ผู้ออกเอกสารจึงต้องติดตามสถานะของ WIA และ KA ที่ตนเคยตรวจไว้เป็นระยะ เช่น รายวัน เพื่อเพิกถอนเอกสารที่ผูกกับ wallet unit ที่ถูกเพิกถอนแล้ว + +แผนภาพลำดับของ cascade นี้ (wallet provider เพิกถอน WIA/KA → ผู้ออกเอกสารเพิกถอน VC ที่ผูกไว้ → ผู้ตรวจสอบเอกสารรับรู้ผ่านสถานะ VC) อยู่ใน [บทที่ 13 §13.7.5](13-vc-status-and-revocation.md) พร้อมตารางสรุปรูปแบบการเพิกถอนทั้งหมดใน §13.7.6 รายละเอียดกลไกสถานะและการเพิกถอนเอกสารรับรอง ให้อ้างอิง [บทที่ 13 — VC Status และการเพิกถอน](13-vc-status-and-revocation.md) ส่วนรายละเอียดโครงสร้างและ field ของ WIA และ KA รวมถึงรายการสถานะ ให้อ้างอิง EUDI ARF 2.9.0 TS3 + +--- + +## 10.6 สถานะการบังคับใช้ในระบบของไทย + +```mermaid +flowchart LR + P1[ระบบไทย
Trusted List + การตรวจประเมิน
+ หลักฐานตาม Thai profile] --> P2[การยอมรับข้ามพรมแดน
mapping กับ EUDI TS3
เมื่อมี trust agreement] +``` + +**การใช้ในระบบไทย — ต้องระบุใน Thai profile:** + +- สพธอ. ใช้ Trusted List และการตรวจประเมินตามนโยบายการรับรอง Wallet Provider ของไทย +- CIR 2024/2979 Art. 6(1) กำหนดหน้าที่แก่ Wallet Provider ในขอบเขตของกฎหมายสหภาพยุโรป; ไม่ใช่ฐานกฎหมายที่กำหนดหน้าที่แก่ผู้ให้บริการไทยโดยอัตโนมัติ +- หาก Thai profile กำหนดให้ใช้ WUA, ต้องระบุหลักฐานที่ใช้ในแต่ละ protocol. สำหรับ OID4VCI ให้ส่ง Wallet Attestation ตาม Appendix E ใน PAR หรือ Token Request. Key Attestation ตาม Appendix D/F.1 อาจอยู่ใน JOSE header ของ `proofs.jwt` ใน Credential Request. อย่าถือว่า EUDI WUA ทั้งชุดเป็นสมาชิกเดียวกันของ Credential Request body. สำหรับ OID4VP ให้กำหนด WIA/WIA-PoP และวิธีตรวจตาม profile [บทที่ 8](08-implementation-guidelines.md) และ [บทที่ 9](09-trust-model-3.md). + +**การยอมรับข้ามพรมแดน — แนวทางในอนาคต:** + +- ระบบของไทยจะปรับรูปแบบ WUA ให้เป็นไปตาม EUDI Technical Specification TS3 เมื่อ EUDI เผยแพร่ฉบับสมบูรณ์ +- WUA ที่ออกในระบบของไทยจะได้รับการยอมรับข้ามพรมแดนกับ EUDI Wallet เมื่อมีข้อตกลงความน่าเชื่อถือ (trust agreement) ระหว่างไทยกับสหภาพยุโรป + +> **หมายเหตุเชิงประวัติ:** ฉบับร่างก่อนหน้าของโครงการใช้คำว่า Wallet Trust Evidence (WTE) รายงานฉบับนี้เปลี่ยนมาใช้ WUA ตาม EUDI ARF 2.9.0 การอ้างถึง WTE ให้ถือเป็นคำที่เลิกใช้แล้ว บันทึกการเปลี่ยนผ่านอยู่ใน [บทที่ 15 — ภาคผนวก §ข.3.4](15-appendix.md) + +--- + +{/* METADATA (agent-only — not rendered to readers) +## ภาคผนวก ก — เอกสารอ้างอิงและการอ่านเพิ่มเติม + +### ก.1 อ่านรายละเอียดฉบับเต็มของ WUA ได้ที่ EUDI + +ผู้อ่านที่ต้องการรายละเอียดเชิงลึกของ WUA ได้แก่ โครงสร้างข้อมูล ข้อกำหนดระดับสูง ฐานทางกฎหมาย และ Use Case ให้ศึกษาจากต้นฉบับของ EUDI ดังนี้ + +1. **EUDI ARF 2.9.0 — Discussion Topic C: Wallet Unit Attestation (WUA) and Key Attestation** — [https://eudi.dev/2.9.0/discussion-topics/c-wallet-unit-attestation/](https://eudi.dev/2.9.0/discussion-topics/c-wallet-unit-attestation/) +2. **EUDI ARF 2.9.0 — Technical Specification TS3: Wallet Unit Attestations** — [https://eudi.dev/2.9.0/technical-specifications/ts3-wallet-unit-attestation/](https://eudi.dev/2.9.0/technical-specifications/ts3-wallet-unit-attestation/) — นิยาม WUA เป็นคำรวมของ WIA และ KA พร้อม field สถานะ `client_status` (WIA) และ `key_storage_status` (KA) และกำหนดให้ใช้ IETF Token Status List เป็นกลไกเพิกถอนของทั้งสองประเภท ฉบับเต็มอยู่ที่ [eu-digital-identity-wallet/eudi-doc-standards-and-technical-specifications — docs/technical-specifications/ts3-wallet-unit-attestation.md](https://github.com/eu-digital-identity-wallet/eudi-doc-standards-and-technical-specifications/blob/main/docs/technical-specifications/ts3-wallet-unit-attestation.md) +3. **EUDI ARF 2.9.0 — Annex 2 (High-Level Requirements) Topic 9** — [https://eudi.dev/2.9.0/main/](https://eudi.dev/2.9.0/main/) + +### ก.2 มาตรฐานโปรโตคอลและกฎหมายที่ WUA อ้างอิง + +4. **OpenID for Verifiable Credential Issuance 1.0 (Final) — Annex D (Key Attestation), Annex E (Wallet Attestation)** — [https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html](https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html) +5. **OpenID4VC High Assurance Interoperability Profile 1.0 — §4.4.1 Wallet Attestation, §4.5.1 Key Attestation** — [https://openid.net/specs/openid4vc-high-assurance-interoperability-profile-1_0-04.html](https://openid.net/specs/openid4vc-high-assurance-interoperability-profile-1_0-04.html) +6. **Regulation (EU) 2024/1183 (eIDAS 2.0)** — Article 5a(4)(a)(viii), 5a(8), 5a(9) +7. **CIR (EU) 2024/2977** — PID issuance — Article 3(5), 3(9), 5(4)(b) +8. **CIR (EU) 2024/2979** — Wallet requirements and Wallet Unit Attestations — Article 6, 7 +9. **CIR (EU) 2024/2982** — Protocols and interfaces — Article 3, 4 + +### ก.3 เอกสารภายในที่เกี่ยวข้อง + +10. [บทที่ 2 — บทนิยาม §2.24](02-definitions.md) — นิยาม WUA +11. [บทที่ 8 — Implementation Guidelines](08-implementation-guidelines.md) — กระแสงาน OID4VCI/OID4VP ฉบับเต็ม +12. [บทที่ 9 — Trust Model 3](09-trust-model-3.md) — แบบจำลองความน่าเชื่อถือ +13. [บทที่ 12 — Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md) — การจัดการกุญแจและ WSCD +14. [บทที่ 13 — VC Status และการเพิกถอน](13-vc-status-and-revocation.md) — กลไกสถานะ +15. [00-glossary.md](../../00-glossary.md) — อภิธานศัพท์ + +### ก.4 บันทึกการเปลี่ยนแปลง (Changelog) + +| เวอร์ชัน | วันที่ | การเปลี่ยนแปลง | +|---------|-------|----------------| +| 1.8 | 1 ตุลาคม 2569 | ปรับข้อกำหนด WIA/WIA-PoP ใน OID4VP: Wallet รัฐบาลต้องส่งหลักฐานครบคู่ ส่วน Wallet เอกชนเลือกส่งครบคู่หรือไม่ส่งทั้งคู่ได้; หากส่งไม่ครบหรือตรวจไม่ผ่านให้ปฏิเสธ VP; หากข้อมูลจำแนกประเภท Wallet จากแหล่งที่เชื่อถือได้ขาดหาย ไม่สดใหม่ หรือตรวจสอบไม่ได้ ให้ปฏิเสธ VP และห้ามถือว่าข้อมูลที่ขาดหายหมายถึง Wallet เอกชน โดยไม่เปลี่ยนข้อกำหนด OID4VCI | +| 1.7 | 7 สิงหาคม 2569 | แก้ถ้อยคำ "คำร่ม" เป็น **"คำรวม"** ทุกจุด — คำว่า "คำร่ม" เป็นการแปลตรงตัว (calque) จาก umbrella term ซึ่งไม่ปรากฏในพจนานุกรมฉบับราชบัณฑิตยสถาน กฎการห้ามแปลตรงตัวเพิ่มไว้ใน `.agents/thai-regulator-writing-style.md` §7.5 (MASA-167) | +| 1.6 | 6 สิงหาคม 2569 | เพิ่ม cross-reference จาก §5.3 ไปยังแผนภาพลำดับ (sequence diagram) ของ cascade การเพิกถอน WIA/KA และตารางสรุปรูปแบบการเพิกถอนใน [บทที่ 13 §13.7.5–§13.7.6](13-vc-status-and-revocation.md) ตามข้อสังเกตของผู้ทบทวนที่ขอแผนภาพลำดับของทุกรูปแบบการเพิกถอน (MASA-158) | +| 1.5 | 6 สิงหาคม 2569 | แยก WUA เป็นคำรวม (umbrella term) ที่ประกอบด้วย Wallet Instance Attestation (WIA) และ Key Attestation (KA) — เพิ่ม WIA/KA ใน §2.1 เพิ่ม §2.3 อธิบายการแบ่งประเภท และเขียน §5.2–§5.3 ใหม่ให้การเพิกถอนและสถานะของ WIA และ KA เป็นไปตาม EUDI (IETF Token Status List ผ่าน field `client_status` และ `key_storage_status` ลงลายมือชื่อด้วย ES256/384/512) ตาม EUDI ARF 2.9.0 TS3 แก้ข้อความในเวอร์ชัน 1.4 ที่ระบุว่า WUA มิได้ใช้ IETF Token Status List ให้ถูกต้อง (สถานะ WUA ใช้ Token Status List แต่เป็นคนละรายการกับสถานะเอกสารรับรอง) (MASA-158) | +| 1.4 | 6 สิงหาคม 2569 | แก้ §5 ให้ถูกต้อง — เพิ่ม §5.1 อายุการใช้งานของ WUA (WUA เป็นหลักฐานอายุสั้น ใช้ครั้งเดียว/ออกเป็นชุด เพื่อลด linkability ตาม HLR WUA_09 และ Topic A) และเพิ่ม §5.3 แยกกลไกสถานะ WUA (กลไกของ wallet provider แบบ privacy-preserving ตาม EUDI TS3) ออกจากกลไกสถานะเอกสารรับรอง (IETF Token Status List) แก้ข้อความเดิมที่ระบุว่าสถานะ WUA สอดคล้องกับ IETF Token Status List ให้ถูกต้อง (MASA-158) | +| 1.3 | 6 สิงหาคม 2569 | ยุบเนื้อหาให้กระชับ ปรับกรอบให้ WUA เป็นแนวคิดของ EUDI ที่ไทยนำมาใช้ ตัดการกล่าวซ้ำรายละเอียดเชิงมาตรฐาน (ฐานกฎหมายรายมาตรา โครงสร้างข้อมูล ตาราง HLR การเปรียบเทียบ WTE) และชี้ไปยังต้นฉบับ EUDI คงเฉพาะการใช้งานในกระแสงาน OID4VCI/OID4VP และความสัมพันธ์กับ Trusted List (MASA-158) | +| 1.2 | 6 สิงหาคม 2569 | ปรับสถานะ WUA เป็นข้อบังคับ (MANDATORY) ในขั้นปัจจุบัน (MASA-157) | +| 1.1 | 6 สิงหาคม 2569 | ตัดการอ้างถึง Phase 2/Phase 3 และยุบแผนแบ่งระยะ (MASA-157) | +| 1.0 | 4 สิงหาคม 2569 | ฉบับร่างแรก — แทนที่ WTE ด้วย WUA ตาม EUDI ARF 2.9.0 (MASA-127) | + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 9 — Trust Model 3 (Trusted List + DID)](09-trust-model-3.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 11 — Cryptographic Suites ➡️](11-cryptographic-suites.md) diff --git a/docs/thai-vc-arf/11-cryptographic-suites.md b/docs/thai-vc-arf/11-cryptographic-suites.md new file mode 100644 index 0000000..5e816d9 --- /dev/null +++ b/docs/thai-vc-arf/11-cryptographic-suites.md @@ -0,0 +1,127 @@ +--- +description: "11. Cryptographic Suites — Thai VC ARF 2.0 DRAFT 0" +--- + +# 11. Cryptographic Suites + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📐 Specification — Draft สำหรับการทบทวนเชิงกำกับดูแล (S8, MASA-129 → MASA-150) +> **เวอร์ชันเอกสาร:** 1.0.1 (2026-08-06) — ลบกุญแจ Level 2 (Pairwise Key ต่อ Verifier) และแถว Pairwise pseudonym hash ออกจากตาราง algorithm profile ตามมติให้ยกเลิกการใช้ pairwise DID (MASA-157) +> **แหล่งข้อมูล:** เอกสารสถาปัตยกรรมภายใต้ `th/architecture/` เท่านั้น — ดู §11.5 References +> **ขอบเขต:** เอกสารกำกับดูแลและข้อกำหนดสำหรับการตรวจประเมิน ห้ามตีความเป็นผลทดสอบ production +> **เอกสารที่เกี่ยวข้อง:** [12-key-management-and-trustlist-deployment.md](12-key-management-and-trustlist-deployment.md), [13-vc-status-and-revocation.md](13-vc-status-and-revocation.md), [14-security-threat-model-and-conformance.md](14-security-threat-model-and-conformance.md), [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +บทที่ 11 กำหนดข้อกำหนดด้าน cryptographic suites สำหรับกระเป๋าเอกสารดิจิทัล (Wallet) ผู้ออกเอกสาร (Issuer) และสำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) เดิมเนื้อหานี้เป็นส่วนหนึ่งของบทความมั่นคงปลอดภัยที่รวมสามเรื่องไว้ด้วยกัน คือ Cryptographic Suites, Key Management และ VC Status/Revocation รายงานฉบับนี้แยกเรื่อง Cryptographic Suites ออกมาเป็นบทเฉพาะ เพื่อให้อ้างอิงได้ชัดเจน ทั้งนี้ เรื่อง Key Management อยู่ในบทที่ 12 และเรื่อง VC Status/Revocation อยู่ในบทที่ 13 + +--- + +## 11.1 ขอบเขตและการจำแนกข้อความ + +บทนี้กำหนดข้อกำหนดด้าน Cryptographic Suites ที่ ARF v1.1 ยังไม่ครอบคลุม ครอบคลุม algorithm profile ของกุญแจฝ่าย Wallet suite ที่ปรากฏในเอกสารสถาปัตยกรรม และการเปลี่ยน algorithm พร้อมแผนระยะยาว ส่วนเรื่อง Key Management/Rotation อยู่ในบทที่ 12 และเรื่อง VC Revocation ด้วย IETF Token Status List อยู่ในบทที่ 13 + +**กฎการอ้างอิงของหัวข้อนี้:** ข้อกำหนดทุกข้อ **MUST** สืบย้อนไปยังไฟล์ภายใต้ `th/architecture/` มาตรฐานภายนอกอ้างผ่านไฟล์สถาปัตยกรรมที่ระบุมาตรฐานนั้นไว้แล้ว หัวข้อนี้ **MUST NOT** สร้างข้อกำหนดใหม่ที่ไม่มีฐานในเอกสารสถาปัตยกรรม + +การจำแนกข้อความ: + +| ป้าย | ความหมาย | +|------|----------| +| **[ข้อเท็จจริง]** | ข้อความที่ปรากฏในเอกสารสถาปัตยกรรมโดยตรง พร้อมเลขอ้างอิง | +| **[ข้อวิเคราะห์]** | การประมวลข้อเท็จจริงหลายแหล่งเข้าเป็นข้อกำหนดเชิงกำกับดูแล | +| **[ช่องว่าง]** | ประเด็นที่เอกสารสถาปัตยกรรมยังขัดกันเองหรือยังไม่กำหนด ต้องมีมติก่อนบังคับใช้ | + +คำ **MUST / MUST NOT / SHOULD / MAY** ใช้ตามความหมายเชิงข้อกำหนด: ต้อง / ห้าม / ควร / อาจ + +--- + +## 11.2 Algorithm Profile ของกุญแจฝ่าย Wallet + +**[ข้อเท็จจริง]** เอกสาร Key Derivation กำหนด algorithm profile ตามระดับกุญแจไว้ดังนี้ [A-KD01 §9] + +| ระดับกุญแจ | การใช้งาน | Recommended | รองรับเพิ่มเติม | +|-----------|-----------|:-----------:|:--------------:| +| Level 1 | Wallet Identity Key signing | `EdDSA` (Ed25519) | `ES256` | +| Level 3 | Per-credential `cnf` signing (KB-JWT) | `EdDSA` (Ed25519) | `ES256` (ค่าปริยายของ OID4VP) | +| — | BIP32 derivation | `HMAC-SHA512` | — | + +> **หมายเหตุ:** ตารางข้ามจาก Level 1 ไป Level 3 ตามมติให้ยกเลิก Level 2 ซึ่งเดิมกำหนด Pairwise Key ต่อ Verifier (MASA-157) รายงานฉบับนี้คงหมายเลข Level 1 และ Level 3 ไว้ตามเอกสารสถาปัตยกรรมต้นทาง +> +> **หมายเหตุเรื่อง Ed25519:** `EdDSA` (Ed25519) เป็น algorithm ที่แนะนำ (recommended) สำหรับทุกระดับกุญแจ อย่างไรก็ตาม KB-JWT ใน Level 3 มีค่าปริยายเป็น `ES256` ตามมาตรฐาน OID4VP Wallet จึงรองรับทั้งสองและเลือกตามความสามารถของฮาร์ดแวร์ — ดู §11.4 สำหรับแผน transition + +**[ข้อเท็จจริง]** KB-JWT ใช้ `ES256` เพราะเป็นค่าปริยายของ OID4VP ส่วนกุญแจระดับอื่นเลือก `EdDSA` ตามข้อกำหนด VCTF-06 [A-KD01 §9] + +**[ข้อวิเคราะห์ — การรองรับทั้ง Ed25519 และ ES256]** ระบบยังคงรองรับ `EdDSA` (Ed25519) และถือว่าเป็น algorithm หลัก อย่างไรก็ตาม อุปกรณ์ Apple (iOS) ไม่รองรับ Ed25519 ใน Secure Enclave ทำให้ไม่สามารถเก็บกุญแจ Ed25519 ใน hardware-backed keystore ของ Apple ได้ เมื่อใดก็ตามที่เป็นไปได้ ระบบจะใช้ `ES256` (ECDSA P-256) แทนบนอุปกรณ์ที่ไม่รองรับ Ed25519 ในฮาร์ดแวร์ โดย ES256 ได้รับการรองรับจาก Secure Enclave ของ Apple และ StrongBox ของ Android ทั้งคู่ สรุปคือ Wallet รองรับทั้ง `EdDSA` และ `ES256` และจะเลือกใช้ตามความสามารถของฮาร์ดแวร์ — ถ้าฮาร์ดแวร์รองรับ Ed25519 ก็ใช้ EdDSA ถ้าไม่ ก็ใช้ ES256 + +**[ข้อวิเคราะห์]** Wallet **MUST** รองรับทั้ง `EdDSA` และ `ES256` สำหรับทุกระดับกุญแจ Issuer และ Verifier **MUST** ยอมรับทั้งสอง suite เป็นอย่างน้อย มิฉะนั้น Wallet ที่ทำตามข้อกำหนดจะใช้งานร่วมกันไม่ได้ ส่วน `HMAC-SHA512` สำหรับ BIP32 derivation **MUST** รองรับเป็นกรณีบังคับ + +--- + +## 11.3 Suite ที่ปรากฏในเอกสารสถาปัตยกรรม + +**[ข้อเท็จจริง]** ตัวอย่างในเอกสารสถาปัตยกรรมประกาศ suite ดังนี้ + +| วัตถุ | ผู้ลงลายมือชื่อ | ค่า `alg` หรือกุญแจ | ที่มา | +|-------|----------------|--------------------|-------| +| Issuer metadata `proof_types_supported` | Wallet | `["EdDSA", "ES256"]` | [A-ARCH §ลำดับที่ 2B] | +| Holder binding `cnf` JWK | Wallet | `kty=OKP`, `crv=Ed25519` (recommended) หรือ `kty=EC`, `crv=P-256` | [A-ARCH §ลำดับที่ 2B] | +| VC Status List Token | Issuer | `EdDSA` หรือ `ES256` | [A-ARCH §ลำดับที่ 3] | +| Issuer DID Document verification key (ตัวอย่าง DOPA) | Issuer | `kty=OKP`, `crv=Ed25519` (recommended) หรือ `kty=EC`, `crv=P-256` | [A-ARCH §6] | + +**[ข้อวิเคราะห์]** ผู้ตรวจ **MUST** ผูก `alg` กับชนิดและ curve ของกุญแจให้ตรงกัน โดย `ES256` ต้องคู่กับ `kty=EC` และ `crv=P-256` ส่วน `EdDSA` ต้องคู่กับกุญแจ Ed25519 การพบ `alg` ที่ไม่ตรงกับกุญแจ **MUST** ถือว่าตรวจไม่ผ่านและปฏิเสธทันที + +**[ข้อวิเคราะห์]** ผู้ตรวจ **MUST NOT** เลือก algorithm จาก JWT header เพียงลำพัง ต้องตรวจชนิดกุญแจและ algorithm ที่อนุญาตตาม Thai profile ประกอบกับกุญแจที่ประกาศใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[].ServiceInformation.ServiceDigitalIdentity` ทั้งนี้ [JWT ตัวอย่าง](../research/42-trusted-list-lote-jwt-format.md) ยังไม่แสดงฟิลด์ suite รายบริการ จึงห้ามสมมติว่ามีฟิลด์ดังกล่าวใน Trusted List; หาก profile ที่ประกาศใช้ไม่ระบุวิธีจับคู่ algorithm กับกุญแจ ผู้ตรวจต้องปฏิเสธการตัดสินใจด้านความน่าเชื่อถือ สถาปัตยกรรมกำหนดให้ใช้ **Trusted List เป็นแหล่งข้อมูลอ้างอิงหลักของกุญแจ** [A-TM §6, §I7] + +--- + +## 11.4 การเปลี่ยน Algorithm และแผนระยะยาว + +**[ข้อวิเคราะห์ — แผน transition จาก Ed25519 ไป ES256]** `EdDSA` (Ed25519) เป็น algorithm ที่แนะนำและระบบรองรับอยู่ อย่างไรก็ตาม อุปกรณ์ Apple (iOS) ไม่รองรับ Ed25519 ใน Secure Enclave ทำให้ไม่สามารถเก็บกุญแจ Ed25519 ใน hardware-backed keystore ของ Apple ได้ ระบบจึงวางแผน transition ไปสู่ `ES256` (ECDSA P-256) ซึ่งได้รับการรองรับจาก Secure Enclave ของ Apple และ StrongBox ของ Android ทั้งคู่ ทั้งนี้ Wallet ยังคงรองรับ `EdDSA` ในระหว่าง transition และจะเลือกใช้ตามความสามารถของฮาร์ดแวร์ — ถ้าฮาร์ดแวร์รองรับ Ed25519 ก็ใช้ EdDSA ถ้าไม่ ก็ใช้ ES256 + +| ระยะ | algorithm | สถานะ | เงื่อนไข | +|------|----------|-------|----------| +| ปัจจุบัน | `EdDSA` (Ed25519) | Recommended | ฮาร์ดแวร์รองรับ (Android StrongBox) | +| ปัจจุบัน | `ES256` (P-256) | รองรับ | ฮาร์ดแวร์ไม่รองรับ Ed25519 (Apple Secure Enclave) | +| อนาคต | `ES256` (P-256) | เป้าหมาย transition | รอการยืนยันจากคณะทำงาน — To be confirmed | + +> **หมายเหตุ:** แผน transition ด้านบนยังไม่ได้รับการยืนยัน (To be confirmed) รอมติคณะทำงาน VC ระบบไม่ทิ้งการรองรับ Ed25519 แม้หลัง transition จะเสร็จ เพื่อรองรับ credential เดิมที่ลงลายมือชื่อด้วย EdDSA + +**[ข้อเท็จจริง]** การเลิกใช้ algorithm เป็นหนึ่งใน rotation trigger ที่กำหนดไว้ ตัวอย่างที่ระบุคือ `ES256 → ES384` [A-KD08 §1] + +**[ข้อเท็จจริง]** แผนย้ายไปสู่ Post-Quantum Cryptography (PQC) กำหนดกรอบเวลาปี 2028 เป็นต้นไป เส้นทางที่ระบุคือ `Ed25519 → ML-DSA-65 (CRYSTALS-Dilithium)` [A-TM §9] + +**[ข้อวิเคราะห์]** ETDA ในฐานะ Trust Framework Authority **MUST** ประกาศ algorithm registry แบบมีเวอร์ชัน ระบุสถานะ `allowed` / `deprecated` / `prohibited` และวันที่มีผล เพราะการเปลี่ยน algorithm เป็น rotation trigger ที่ทุกฝ่ายต้องตรวจสอบได้ร่วมกัน + +**[ข้อวิเคราะห์]** การรองรับหลาย suite พร้อมกัน **MUST NOT** เปิดช่องให้ downgrade กล่าวคือ credential ที่ลงลายมือชื่อด้วย suite หนึ่ง **MUST** ตรวจด้วย suite นั้นและกุญแจที่ผูกกันเท่านั้น + +--- + +{/* METADATA (agent-only — not rendered to readers) +## 11.5 References + +### 11.5.1 แหล่งข้อมูลหลัก — เอกสารสถาปัตยกรรมในโครงการ + +วันที่เข้าถึงทุกไฟล์: **2026-08-04** โดยอ้างสถานะ repository ณ เวอร์ชันเอกสาร 1.0.0 + +| รหัส | เอกสาร | เวอร์ชันที่ระบุในไฟล์ | +|------|--------|---------------------| +| A-ARCH | [../architecture/01-architecture.md](../architecture/01-architecture.md) — สถาปัตยกรรมความน่าเชื่อถือแบบ Trusted List | v2.3 | +| A-TM | [../architecture/phase2/trustlist/10-threat-model.md](../architecture/phase2/trustlist/10-threat-model.md) — Trust List Verification: Threat Model & Mitigations | Draft v1.0 | +| A-KD01 | [../architecture/phase2/key-derivation/01-key-derivation-architecture.md](../architecture/phase2/key-derivation/01-key-derivation-architecture.md) — Key Derivation Architecture | Draft v1.0 | +| A-KD08 | [../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md](../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md) — Key Rotation & Lifecycle | Draft v1.0 | + +### 11.5.2 มาตรฐานภายนอกที่อ้างผ่านเอกสารข้างต้น + +เอกสารนี้ไม่อ้างมาตรฐานภายนอกโดยตรง รายการต่อไปนี้คือมาตรฐานที่ไฟล์สถาปัตยกรรมข้างต้นระบุไว้เป็นแหล่งข้อมูลของตน เฉพาะส่วนที่เกี่ยวข้องกับ cryptographic suites ในบทนี้ + +| มาตรฐาน | ส่วนที่อ้าง | ไฟล์ที่อ้าง | +|---------|-----------|-----------| +| OID4VP 1.0 Final | ค่าปริยาย `alg` ของ KB-JWT (`ES256`) | A-KD01 §9, A-ARCH §ลำดับที่ 2B | +| SD-JWT VC (draft-ietf-oauth-sd-jwt-vc) | §4.1 Key Binding JWT | A-KD01 §9, A-ARCH §ลำดับที่ 2B | +| EU eIDAS ARF | เส้นทางการย้ายไป PQC (`Ed25519 → ML-DSA-65`) และการเลิกใช้ algorithm | A-TM §9, A-KD08 §1 | + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 10 — Wallet Unit Attestation (WUA)](10-wallet-unit-attestation.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 12 — Key Management และ Trusted List Deployment ➡️](12-key-management-and-trustlist-deployment.md) diff --git a/docs/thai-vc-arf/12-key-management-and-trustlist-deployment.md b/docs/thai-vc-arf/12-key-management-and-trustlist-deployment.md new file mode 100644 index 0000000..1122b79 --- /dev/null +++ b/docs/thai-vc-arf/12-key-management-and-trustlist-deployment.md @@ -0,0 +1,272 @@ +--- +description: "12. Key Management, Key Rotation และ Trusted List Deployment — Thai VC ARF 2.0 DRAFT 0" +--- + +# 12. Key Management, Key Rotation และ Trusted List Deployment + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📐 Specification — Draft สำหรับการทบทวนเชิงกำกับดูแล (S8, MASA-129 → MASA-153) +> **เวอร์ชันเอกสาร:** 1.2.5 (2026-09-23) — ประวัติการแก้ไขทั้งหมดดูได้ที่ §12.11 บันทึกการเปลี่ยนแปลง +> **แหล่งข้อมูล:** เอกสารสถาปัตยกรรมภายใต้ `th/architecture/` และงานวิจัยภายใน `th/research/` — ดู §12.10 References +> **ขอบเขต:** เอกสารกำกับดูแลและข้อกำหนดสำหรับการตรวจประเมิน ห้ามตีความเป็นผลทดสอบ production +> **เอกสารที่เกี่ยวข้อง:** [11-cryptographic-suites.md](11-cryptographic-suites.md), [13-vc-status-and-revocation.md](13-vc-status-and-revocation.md), [14-security-threat-model-and-conformance.md](14-security-threat-model-and-conformance.md), [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +บทที่ 12 กำหนดข้อกำหนดการจัดการกุญแจ (key management) การหมุนเวียนกุญแจ (key rotation) และการวางระบบ Trusted List (Trusted List deployment) รวมถึงการควบคุมระดับเครือข่ายและการดึง Trusted List ผ่าน CDN ด้าน cryptographic suites อยู่ในบทที่ 11 และการเพิกถอน VC ด้วย status list อยู่ในบทที่ 13 รายละเอียดประเภท จำนวนไฟล์ รูปแบบ และโครงสร้างข้อมูลของ Trust List อยู่ใน [ข้อกำหนดการเผยแพร่ Trust List](12.1-trust-list-publication-profile.md) + +--- + +## 12.1 ขอบเขตและการจำแนกข้อความ + +หัวข้อนี้รวมข้อกำหนดด้านการจัดการกุญแจและการวางระบบ Trusted List คือ (1) Key Management และ Key Rotation (2) Resolver และ Network Controls และ (3) การดึง Trusted List แบบ lazy ผ่าน CDN ด้วย HTTP `GET` + +**กฎการอ้างอิงของหัวข้อนี้:** ข้อกำหนดทุกข้อ **MUST** สืบย้อนไปยังไฟล์ภายใต้ `th/architecture/` มาตรฐานภายนอกอ้างผ่านไฟล์สถาปัตยกรรมที่ระบุมาตรฐานนั้นไว้แล้ว หัวข้อนี้ **MUST NOT** สร้างข้อกำหนดใหม่ที่ไม่มีฐานในเอกสารสถาปัตยกรรม + +การจำแนกข้อความ: + +| ป้าย | ความหมาย | +|------|----------| +| **[ข้อเท็จจริง]** | ข้อความที่ปรากฏในเอกสารสถาปัตยกรรมโดยตรง พร้อมเลขอ้างอิง | +| **[ข้อวิเคราะห์]** | การประมวลข้อเท็จจริงหลายแหล่งเข้าเป็นข้อกำหนดเชิงกำกับดูแล | +| **[ช่องว่าง]** | ประเด็นที่เอกสารสถาปัตยกรรมยังขัดกันเองหรือยังไม่กำหนด ต้องมีมติก่อนบังคับใช้ | + +คำ **MUST / MUST NOT / SHOULD / MAY** ใช้ตามความหมายเชิงข้อกำหนด: ต้อง / ห้าม / ควร / อาจ + +--- + +## 12.2 ข้อกำหนดการเก็บกุญแจ + +**[ข้อเท็จจริง]** ข้อกำหนดการจัดการกุญแจแยกตามผู้ถือกุญแจสี่กลุ่ม ได้แก่ ผู้ออกเอกสาร (issuer) ระบบ Trusted List ของ สพธอ. กระเป๋าเอกสารดิจิทัลของผู้ถือเอกสาร (holder) และผู้ตรวจสอบเอกสาร (verifier) ทั้งนี้ ผู้ตรวจสอบเอกสารต้องมีกุญแจของตนเองเช่นกัน เนื่องจากต้องลงลายมือชื่อ Request Object คือ `client_metadata_jwt` ในคำขอ VP ตาม OID4VP เพื่อให้กระเป๋าเอกสารดิจิทัลตรวจได้ว่าคำขอมาจากผู้ตรวจสอบเอกสารตัวจริง [A-ACP §1, §5.2] + +| ผู้ถือกุญแจ | ข้อกำหนด | หลักฐาน | ที่มา | +|------------|---------|---------|-------| +| Issuer | กุญแจลงลายมือชื่ออยู่ใน HSM ระดับ FIPS 140-2 Level 3 | ใบรับรอง HSM | [A-ARCH §8 I1] | +| Issuer | พิธีสร้างกุญแจต้องมีพยานและบันทึกวิดีโอ | รายงานพิธี | [A-ARCH §8 I2] | +| Issuer | แผนหมุนเวียนกุญแจประจำปีเป็นเอกสาร | เอกสารนโยบาย | [A-ARCH §8 I3] | +| ETDA (Trusted List) | กุญแจอยู่ใน HSM ที่ export ไม่ได้ ระดับ FIPS 140-3 Level 3 ขึ้นไป | — | [A-TM §T1] | +| ETDA (Trusted List) | การลงลายมือชื่อ TL ต้องใช้ quorum แบบ M-of-N เช่น 3-of-5 | — | [A-TM §T1] | +| ETDA (Trusted List) | มี emergency key แบบ offline air-gapped สำหรับเพิกถอนกุญแจที่ถูก compromise | — | [A-TM §T1] | +| Wallet (Holder) | กุญแจต้องสร้างใน WSCD และ export ไม่ได้ | WSCD attestation chain | [A-TM §W4], [A-KD06] | +| Verifier (RP) | มีกุญแจลงลายมือชื่อ Request Object (`client_metadata_jwt`) เป็นของตนเอง โดยเลือกวิธีเก็บกุญแจตามระดับความเชื่อมั่นที่ §12.2.1 กำหนด | บันทึกวิธีเก็บกุญแจตามตารางใน §12.2.1 | [A-ACP §1, §5.2] | +| Verifier (RP) | public key ที่ใช้ตรวจ Request Object **MUST** ประกาศให้ตรวจสอบได้ ผ่านทางใดทางหนึ่ง คือ (ก) เผยแพร่ใน Trusted List entry ของผู้ตรวจสอบเอกสาร หรือ (ข) เผยแพร่เป็น DID Document ที่ `did:web` resolve ได้ที่ `/.well-known/did.json` | Trusted List entry หรือ DID Document | [A-VRP] | + +**[ข้อเท็จจริง]** Issuer **MUST** ปฏิเสธกุญแจที่ไม่มี `key_storage_verified` เป็น `hardware` หรือ `secure_enclave` [A-TM §W4] ส่วน flag `requires_hardware_key` ที่เอกสาร threat model เสนอ ยังไม่ปรากฏใน [JWT ตัวอย่างแบบ LoTE](../research/42-trusted-list-lote-jwt-format.md) จึงต้องกำหนดใน Thai profile ก่อนใช้เป็นข้อมูลจาก Trusted List + +**[ช่องว่าง G-01 — มีมติกำกับดูแลแล้ว]** เอกสารสถาปัตยกรรมกำหนด FIPS 140-2 Level 3 สำหรับ HSM ของ Issuer [A-ARCH §8 I1] แต่กำหนด FIPS 140-3 Level 3 ขึ้นไปสำหรับ HSM ของ ETDA [A-TM §T1] ทั้งสองข้อใช้กับผู้ถือกุญแจต่างกลุ่มจึงไม่ขัดกันในทางเทคนิค รายงานฉบับนี้กำหนดข้อยุติดังนี้ ผู้ถือกุญแจลงลายมือชื่อทุกกลุ่ม **ต้อง** ใช้ HSM ที่ผ่านการรับรองอย่างน้อยระดับ **FIPS 140-2 Level 3** ตาม NIST FIPS PUB 140-2 [N1] เป็นเกณฑ์ขั้นต่ำ ทั้งนี้ เนื่องจาก NIST กำหนดให้ใบรับรองตาม FIPS 140-2 เปลี่ยนสถานะเป็น Historical ตั้งแต่วันที่ 21 กันยายน 2569 (ค.ศ. 2026) [N3] จึงให้ยอมรับ **FIPS 140-3 Level 3** ตาม NIST FIPS PUB 140-3 [N2] เป็นมาตรฐานสืบทอดที่เทียบเท่าหรือสูงกว่า และ HSM ที่ได้รับการรับรองใหม่ภายหลังวันดังกล่าว **ต้อง** เป็น FIPS 140-3 ด้วยเหตุนี้ HSM ของ ETDA ที่กำหนดเป็น FIPS 140-3 Level 3 จึงเป็นไปตามเกณฑ์ขั้นต่ำนี้อยู่แล้ว + +### 12.2.1 ทางเลือกการเก็บกุญแจของผู้ตรวจสอบเอกสาร + +**[ช่องว่าง G-07 — มีมติกำกับดูแลแล้ว]** เอกสารสถาปัตยกรรมกำหนดให้ผู้ตรวจสอบเอกสารลงลายมือชื่อ Request Object คือ `client_metadata_jwt` ด้วยกุญแจของตนเอง [A-ACP §5.2] และกำหนดสภาพเป้าหมายให้เก็บกุญแจไว้ในฮาร์ดแวร์ที่ปลอดภัย เช่น HSM หรือ Secure Element แต่การบังคับใช้ HSM กับผู้ตรวจสอบเอกสารทุกรายมีต้นทุนสูง [A-HSM §2] ที่ประชุมกำกับดูแลจึงมีมติกำหนดทางเลือกการเก็บกุญแจของผู้ตรวจสอบเอกสาร 3 แบบตามระดับความเชื่อมั่นของกุญแจ (key assurance) โดยผู้ตรวจสอบเอกสาร **อาจ** เลือกใช้แบบใดแบบหนึ่งได้ตามความพร้อมและงบประมาณ ดังนี้ + +**[ข้อเท็จจริง]** นิยาม WSCD ครอบคลุมอุปกรณ์เข้ารหัสลับที่ปลอดภัยหลายชนิด ได้แก่ Secure Element, StrongBox, Trusted Execution Environment (TEE) และ HSM [บทที่ 2 §2.36](02-definitions.md) ทางเลือกแบบ TEE จึงรองรับการเก็บกุญแจด้วยฮาร์ดแวร์อีกประเภทหนึ่ง + +| ตัวเลือกการเก็บกุญแจ Verifier | ระดับข้อบังคับ | key assurance | ต้นทุน | การประกาศ public key | +|------------------------------|:-------------:|:-------------:|:------:|----------------------| +| Soft key (software key store) | **MAY** | ต่ำ | ต่ำ | Trusted List entry หรือ `did:web` ที่ `/.well-known/did.json` | +| TEE หรือ WSCD (Secure Element / StrongBox) | **MAY** | กลาง | กลาง | Trusted List entry หรือ `did:web` ที่ `/.well-known/did.json` | +| HSM | **MAY** | สูง | สูง | Trusted List entry หรือ `did:web` ที่ `/.well-known/did.json` | + +**[ข้อวิเคราะห์]** ทั้งสามแบบให้ระดับความเชื่อมั่นของกุญแจต่างกัน รายงานฉบับนี้จึงกำหนดข้อยุติดังนี้ (1) ผู้ตรวจสอบเอกสาร **อาจ** ใช้ soft key ได้ในระยะเปลี่ยนผ่านหรือเมื่อยังไม่พร้อมด้านฮาร์ดแวร์ (2) ผู้ตรวจสอบเอกสาร **ควร** ใช้ TEE หรือ WSCD เป็นอย่างน้อยเพื่อยกระดับความเชื่อมั่นของกุญแจ และ (3) ผู้ตรวจสอบเอกสารที่ต้องการความเชื่อมั่นสูงสุด **อาจ** ใช้ HSM ทั้งนี้ HSM ให้ความเชื่อมั่นสูงสุดแต่มีต้นทุนสูงตามที่ [A-HSM §2] ระบุ จึงไม่บังคับกับผู้ตรวจสอบเอกสารทุกราย + +**[ข้อวิเคราะห์]** ไม่ว่าผู้ตรวจสอบเอกสารเลือกวิธีเก็บกุญแจแบบใด **ต้อง** ทำตามเงื่อนไขทุกข้อดังนี้ + +- public key ที่คู่กับกุญแจลงลายมือชื่อ **MUST** ประกาศให้ตรวจสอบได้ ผ่านทางใดทางหนึ่ง คือ (ก) ผูกกับ Verifier entry ใน Trusted List ของผู้ตรวจสอบเอกสาร หรือ (ข) เผยแพร่เป็น DID Document ที่ `did:web` published ที่ `https:///.well-known/did.json` [A-VRP §7] +- Verifier entry **MUST** อยู่ใน Trusted List และผู้ตรวจสอบเอกสาร **MUST NOT** ใช้ `client_id` แบบ `redirect_uri` ที่ไม่มี DID เพราะกระเป๋าเอกสารดิจิทัลจะถือว่าเป็นผู้ตรวจสอบเอกสารที่ไม่ได้ลงทะเบียน [A-VRP §7] +- ผู้ตรวจสอบเอกสารที่ใช้ soft key **SHOULD** ย้ายไปเก็บกุญแจในฮาร์ดแวร์ที่ปลอดภัย คือ TEE, WSCD หรือ HSM เมื่อพร้อม เพื่อยกระดับความเชื่อมั่นของกุญแจ [A-HSM §2] + +--- + +## 12.3 Rotation Trigger + +**[ข้อเท็จจริง]** trigger ที่ทำให้ต้องหมุนเวียนกุญแจ [A-KD08 §1] + +| Trigger | การดำเนินการ | +|---------|-------------| +| ครบกำหนดเวลา | หมุนเวียนรายปีสำหรับ Level 1 และหมุนเวียนต่อใบเมื่อ VC ออกใหม่ | +| ผู้ใช้แจ้งอุปกรณ์สูญหาย (compromise) | ล้างข้อมูลฉุกเฉินแล้วกู้คืน | +| OS ยกเลิกกุญแจ (เปลี่ยน biometric) | iOS/Android ยกเลิกกุญแจ จึงต้องออก VC ใหม่ | +| ผู้ใช้ร้องขอ | หมุนเวียนด้วยตนเอง | +| เลิกใช้ algorithm | ย้าย algorithm เช่น `ES256 → ES384` | + +--- + +## 12.4 Lifecycle ตามระดับกุญแจ + +**[ข้อเท็จจริง]** นโยบายและผลกระทบของการหมุนเวียนแต่ละระดับ [A-KD08 §2] + +| ระดับ | ค่าปริยาย | ผลกระทบ | +|-------|----------|---------| +| Level 0 (Master Seed) | ไม่หมุนเวียน เพราะ mnemonic เป็นค่าถาวร | ถ้าสร้างใหม่เท่ากับได้ตัวตนใหม่ ต้องออก VC ใหม่ทั้งหมด | +| Level 1 (Wallet Identity) | หมุนเวียนรายปี เป็นข้อแนะนำ ไม่บังคับ | ได้ `did:key` หรือ `did:jwk` ใหม่ VC เดิมไม่กระทบ | +| Level 3 (Per-credential `cnf`) | เมื่อ VC ออกใหม่ | สร้างกุญแจใหม่ใน WSCD แล้วขอ VC ใหม่ | + +**[ข้อเท็จจริง]** ข้อแลกเปลี่ยนที่บันทึกไว้คือ หมุนเวียนถี่ได้ forward secrecy ดีขึ้นแต่บริการสะดุดและมีต้นทุน หมุนเวียนห่างระบบเสถียรแต่หน้าต่างความเสี่ยงจาก compromise ยาวขึ้น ข้อสรุปที่แนะนำคือหมุนเวียนรายปีสำหรับ Level 1 ร่วมกับหมุนเวียนตาม trigger ต่อใบ [A-KD08 §10] + +--- + +## 12.5 Rotation Endpoint + +**[ข้อเท็จจริง]** Issuer **SHOULD** เปิด endpoint `POST /credential/rotate` โดยรับ `old_vc`, `proof` ซึ่งเป็น PoP ที่ลงลายมือชื่อด้วยกุญแจ `cnf` เดิม และ `new_cnf` แล้วส่งกลับ credential ใหม่ [A-KD08 §7] + +**[ข้อเท็จจริง]** ลำดับการหมุนเวียนต่อใบคือ Wallet สร้างกุญแจใหม่ใน WSCD ลงลายมือชื่อคำขอด้วยกุญแจเดิมเพื่อพิสูจน์ความเป็นเจ้าของ Issuer ตรวจ PoP ด้วยกุญแจเดิม ออก VC ใหม่ที่ผูกกับ `cnf` ใหม่ แล้ว **mark VC เดิมใน Status List ว่า `rotated`** จากนั้น Wallet ลบ key handle เดิม [A-KD08 §3] + +**[ข้อวิเคราะห์]** ขั้นตอน mark VC เดิมเป็น `rotated` **MUST** สำเร็จก่อนที่ Wallet จะลบ key handle เดิม เพราะถ้าลบก่อนแล้วการ mark ล้มเหลว VC เดิมจะยังอยู่ในสถานะใช้ได้ โดยไม่มีผู้ใดถือกุญแจที่จะเพิกถอนได้ + +--- + +## 12.6 การจัดการกุญแจที่ถูก Compromise + +**[ข้อเท็จจริง]** ข้อกำหนดที่เกี่ยวข้องกับกุญแจ Issuer ที่ถูกขโมย [A-TM §I3, §I7] + +- Thai profile **MUST** กำหนดวิธีระบุช่วงเวลาที่กุญแจแต่ละรายการมีผล ก่อนใช้ Trusted List ตัดสินความน่าเชื่อถือ; JWT ตัวอย่างใน [research/42](../research/42-trusted-list-lote-jwt-format.md) ยังไม่แสดง `valid_from` และ `valid_until` ต่อกุญแจ +- Wallet **MUST** ตรวจช่วงเวลาของกุญแจตาม Thai profile ที่ประกาศใช้ หากไม่มีข้อมูลเพียงพอให้ปฏิเสธ +- การเพิกถอนฉุกเฉิน **MUST** แพร่กระจายภายใน 1 ชั่วโมง +- เมื่อ Issuer แจ้งหมุนเวียนกุญแจ ETDA **MUST** ตรวจแล้วเผยแพร่ TL ใหม่ภายใน 24 ชั่วโมง +- Wallet **MUST NOT** ใช้กุญแจจาก DID Document แทนกุญแจจาก TL แม้ DID Document จะถูกแก้ให้ดูถูกต้อง + +**[ข้อเท็จจริง]** การเพิกถอนแบบกลุ่มเมื่อผู้ใช้แจ้งอุปกรณ์สูญหายมีขั้นตอนคือ ผู้ใช้แจ้งผ่านพอร์ทัล ETDA พร้อมพิสูจน์ตัวตน ETDA บันทึกเหตุการณ์แล้วสั่งเพิกถอน VC ทั้งหมดที่ผูกกับ master seed ของผู้ใช้ จากนั้นผู้ใช้กู้คืนด้วย mnemonic บนอุปกรณ์ใหม่แล้วขอออก VC ใหม่ [A-KD08 §5] + +**[ข้อเท็จจริง]** เอกสารสถาปัตยกรรมบันทึกข้อกังวลด้าน privacy ไว้เองว่า การเพิกถอนแบบกลุ่มต้องให้ผู้ให้บริการ Wallet เก็บความเชื่อมโยงระหว่าง master seed กับประวัติการออก VC และแนวทางในอนาคตคือใช้ self-attested revocation token แทน [A-KD08 §5] + +**[ข้อเท็จจริง]** การปฏิบัติตาม CIR 2024/2979 ที่บันทึกไว้คือ หมุนเวียนกุญแจได้ กุญแจเดิมใช้ซ้ำไม่ได้เพราะ mark เป็น `rotated` ใน Status List มี audit trail จากประวัติ KSN และ rotation log และผู้ใช้ควบคุมการหมุนเวียนได้เอง [A-KD08 §8] + +--- + +## 12.7 Resolver และ Network Controls + +**[ข้อเท็จจริง]** ระบบแยกหน้าที่ออกเป็นสองบริการที่ไม่ปะปนกัน (1) Trusted List ของ สพธอ. เป็นแหล่งข้อมูลอ้างอิงหลักของการอนุญาต โดย JWT ตัวอย่างมีรายการองค์กรที่ `LoTE.TrustedEntitiesList[]` และรายการบริการที่ `TrustedEntityServices[]` แต่ยังไม่แสดงฟิลด์สถานะและขอบเขตสิทธิ์ครบถ้วน Thai profile จึงต้องกำหนดฟิลด์เหล่านั้นก่อนใช้ตัดสินใจ; หากไม่พบองค์กรหรือบริการ หรือไม่อาจตรวจสถานะได้ ให้ถือว่าไม่ผ่าน (2) Universal Resolver ที่ `https://resolver.etda.or.th` ทำหน้าที่ resolve DID Document เฉพาะ custom DID (เช่น `did:ndid`) ที่เอนทิตี resolve เองไม่ได้เท่านั้น และส่งกลับเฉพาะ `didDocument` โดยไม่เกี่ยวข้องกับการค้นหรือการตัดสินสถานะใน Trusted List [A-ARCH §6] [รูปแบบ JWT](../research/42-trusted-list-lote-jwt-format.md) + +**[ข้อวิเคราะห์]** การตัดสิน trust **MUST** อาศัยผลการค้นใน Trusted List ผู้เรียกใช้ **MUST** ถือว่าการไม่พบบริการใน `LoTE.TrustedEntitiesList[].TrustedEntityServices[]` หรือไม่สามารถยืนยันสถานะ `active` ทั้งระดับองค์กรและบริการตาม Thai profile ได้เป็นผลลบ และ **MUST NOT** ใช้ `didDocument` ที่ resolve ได้เป็นหลักฐานการอนุญาต เพราะจะข้าม gate `TL_ENTRY_LOOKUP` และ `ENTRY_STATUS_CHECK` ที่ threat model กำหนดไว้ [A-TM §3.0] [รูปแบบ JWT](../research/42-trusted-list-lote-jwt-format.md) + +**[ข้อเท็จจริง]** มาตรการระดับเครือข่ายและการเผยแพร่ที่กำหนดไว้ + +| มาตรการ | ป้องกัน | ที่มา | +|---------|---------|-------| +| บังคับ DNSSEC สำหรับโดเมน `.go.th` ทั้งหมด | did:web hijack จาก DNS poisoning | [A-TM §I1] | +| CAA record และ DNS pinning ตาม Thai profile; JWT ตัวอย่างยังไม่แสดงฟิลด์ดังกล่าว | domain takeover | [A-TM §I1], [รูปแบบ JWT](../research/42-trusted-list-lote-jwt-format.md) | +| ตรวจ homograph แบบ IDN mixed-script และห้าม UI แสดง raw DID | lookalike DID | [A-TM §I2] | +| ลายมือชื่อ JWT บน TL โดย CDN ไม่ถือกุญแจลงลายมือชื่อ | CDN ถูก compromise | [A-TM §T2] | +| Multi-CDN แบบ primary กับ secondary และ tertiary พร้อม DNS fallback | eclipse attack แบบ DoS | [A-TM §T2, §T3] | +| Graceful degradation โดยแสดงคำเตือนและจำกัดฟีเจอร์ที่ต้องใช้ TL สด | eclipse attack | [A-TM §T3] | +| `client_id_scheme: x509_san_dns` สำหรับ verifier ที่อยู่ใน TL | client_id spoofing | [A-TM §V1] | +| `response_uri` ต้องตรงกับ SAN ของ `client_id` | MITM proxy | [A-TM §V4] | +| `nonce` กับ `aud` ใน VP token และอายุ token ไม่เกิน 5 นาที | cross-verifier replay | [A-TM §V5] | +| Cross-signed bridge TL และตรวจ scope ตามเขตอำนาจ | cross-border TL substitution | [A-TM §T7] | + +**[ข้อวิเคราะห์]** เอกสารนี้ **MUST NOT** ถูกใช้เป็นหลักฐานว่ามาตรการข้างต้นทำงานจริง การอนุมัติขึ้นใช้งาน **MUST** มีหลักฐานจากการทดสอบใน staging ได้แก่ signed fixture ผลการทดสอบเชิงลบ และรายงาน fault injection + +--- + +## 12.8 การดึง Trusted List แบบ Lazy ผ่าน CDN + +**[ข้อเท็จจริง]** Trusted List เป็นไฟล์ static ที่ลงลายมือชื่อโดย สพธอ. และเผยแพร่ผ่าน CDN ผู้ใช้บริการไม่ต้องเชื่อถือ CDN เพราะต้องตรวจลายมือชื่อของ Trusted List ก่อนใช้งาน [research/41] + +**[ข้อกำหนด]** Wallet, Issuer และ Verifier **MUST** ดึง Trusted List ด้วย HTTP `GET` เมื่อเกิด connection หรือก่อนตัดสินใจด้านความน่าเชื่อถือเท่านั้น ระบบ **MUST NOT** ใช้ message broker หรือ background polling เพื่อแจ้งหรือดึงการเปลี่ยนแปลงของ Trusted List [research/41] + +### 12.8.1 ขั้นตอนการดึงและตรวจสอบ + +1. เลือก Trusted List ที่เกี่ยวข้องตามบทบาท ได้แก่ `https://trustme.etda.or.th/.well-known/iss.txt` สำหรับ Issuer, `https://trustme.etda.or.th/.well-known/ver.txt` สำหรับ Verifier และ `https://trustme.etda.or.th/.well-known/wp.txt` สำหรับ Wallet Provider แล้วเรียก `GET` ไปยัง CDN พร้อม `If-None-Match` หากมีค่า `ETag` ที่เก็บไว้ +2. หาก CDN ตอบ `304 Not Modified` ให้ใช้ Trusted List ที่เกี่ยวข้องฉบับเต็มใน cache เดิม หากตอบ `200 OK` ให้รับ Trusted List ที่เกี่ยวข้องฉบับเต็มใหม่ในรูปแบบ JWT โดยไม่ใช้ API key, delta หรือไฟล์ CBOR +3. ตรวจลายมือชื่อ JWT ด้วย public key ของ สพธอ. แล้วตรวจ `LoTE.ListAndSchemeInformation.LoTEType`, `LoTESequenceNumber` ว่าไม่ย้อนกลับ และ `NextUpdate` ว่ายังไม่หมดอายุ [research/42](../research/42-trusted-list-lote-jwt-format.md) +4. หากตรวจผ่าน ให้บันทึกไฟล์และ `ETag` ใหม่ หากตรวจไม่ผ่าน ให้ปฏิเสธไฟล์และไม่เปลี่ยน cache เดิม + +### 12.8.2 Lazy pull มีผลต่อผู้ใช้บริการอย่างไร + +| ผู้ใช้บริการ | จุดที่เรียก `GET` | ผลที่ผู้ใช้เห็น | +|---|---|---| +| Wallet | เมื่อรับ VC หรือได้รับ VP Request | ลดการแสดงคำขอจาก Verifier ที่สถานะไม่ active และไม่ต้องเชื่อมต่อเพื่อ polling ระหว่างไม่ได้ใช้งาน | +| Issuer | เมื่อ Wallet ขอรับ VC | ตรวจสอบ Wallet Provider ที่เกี่ยวข้องก่อนออก VC โดยไม่ต้องดูแลช่องทางรับการแจ้งเตือนแยก | +| Verifier | เมื่อรับ VP | ตรวจสอบ Issuer และสถานะที่ใช้ตัดสินใจจากข้อมูลล่าสุดที่ CDN ส่งให้ โดยไม่ต้องติดตั้งช่องทางแจ้งเตือนแยก | + +แนวทางนี้เรียกว่า **lazy pulling** เพราะระบบดึงข้อมูลเมื่อมีการใช้งานจริง ไม่ดึงเป็นระยะในช่วงที่ไม่มี connection จึงลดการใช้แบตเตอรี่ CPU bandwidth และ request ของ CDN ขณะเดียวกันการตรวจ Trustlist เกิดตรงจุดที่มีการตัดสินใจจริง [research/41] + +```mermaid +graph LR + ADMIN[ETDA Admin
Emergency Revoke] --> PUB[TL Publisher] + PUB -->|"1. update signed TL file"| CDN[ETDA CDN] + CDN -->|"2. GET + If-None-Match
on connection"| V[Verifiers] + CDN -->|"2. GET + If-None-Match
on connection"| I[Issuers] + CDN -->|"2. GET + If-None-Match
on connection"| W[Wallets] + + style CDN fill:#e3f2fd + style ADMIN fill:#ffcdd2 +``` + +**รูปที่ 12-1 ภาพรวมการดึง Trusted List แบบ lazy ผ่าน CDN** + +--- + +## 12.9 ช่องว่างที่เกี่ยวข้อง + +**[ข้อวิเคราะห์]** ช่องว่าง G-01 เรื่องระดับการรับรอง HSM ได้ข้อยุติแล้ว โดยกำหนดเกณฑ์ขั้นต่ำเป็น FIPS 140-2 Level 3 และยอมรับ FIPS 140-3 Level 3 เป็นมาตรฐานสืบทอด และช่องว่าง G-07 เรื่องการเก็บกุญแจของผู้ตรวจสอบเอกสารได้ข้อยุติแล้วเช่นกัน โดยกำหนดทางเลือก 3 แบบ คือ soft key, TEE หรือ WSCD, และ HSM ซึ่ง HSM ให้ความเชื่อมั่นสูงสุดแต่มีต้นทุนสูง ทั้งนี้ ไม่ว่าเลือกวิธีเก็บกุญแจแบบใด ผู้ตรวจสอบเอกสาร **ต้อง** ประกาศ public key ให้ตรวจสอบได้ผ่าน Trusted List หรือ DID Document ที่ `did:web` รายละเอียด G-01 ปรากฏใน §12.2 และรายละเอียด G-07 ปรากฏใน §12.2.1 สรุปช่องว่างทั้งหมดที่ต้อง escalate รวมทั้งประเด็นที่เกี่ยวกับการหมุนเวียนกุญแจและการเพิกถอน รวมอยู่ในบทที่ 14 §14.4 + +--- + +{/* METADATA (agent-only — not rendered to readers) +## 12.10 References + +### 12.10.1 แหล่งข้อมูลหลัก — เอกสารสถาปัตยกรรมในโครงการ + +วันที่เข้าถึงทุกไฟล์: **2026-08-06** โดยอ้างสถานะ repository ณ เวอร์ชันเอกสาร 1.0.0 + +| รหัส | เอกสาร | เวอร์ชันที่ระบุในไฟล์ | +|------|--------|---------------------| +| A-ARCH | [../architecture/01-architecture.md](../architecture/01-architecture.md) — สถาปัตยกรรมความน่าเชื่อถือแบบ Trusted List | v2.3 | +| A-TM | [../architecture/phase2/trustlist/10-threat-model.md](../architecture/phase2/trustlist/10-threat-model.md) — Trust List Verification: Threat Model & Mitigations | Draft v1.0 | +| A-KD08 | [../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md](../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md) — Key Rotation & Lifecycle | Draft v1.0 | +| A-KD06 | [../architecture/phase2/key-derivation/06-wscd-key-attestation.md](../architecture/phase2/key-derivation/06-wscd-key-attestation.md) — WSCD Key Attestation | Draft v1.0 | +| A-ACP | [../architecture/phase2/trustlist/05-access-certificate-profile.md](../architecture/phase2/trustlist/05-access-certificate-profile.md) — Access Certificate Profile (ETSI TS 119 411-8) | Draft v1.0 | +| A-VRP | [../policy/01-verifier-registration-policy.md](../policy/01-verifier-registration-policy.md) — นโยบายการลงทะเบียนผู้ตรวจสอบ | Draft v1.0 | +| A-HSM | [../policy/07-hsm-and-schema-governance-policy.md](../policy/07-hsm-and-schema-governance-policy.md) — นโยบาย HSM Service Model และ Schema Governance | Draft v1.0 | + +### 12.10.2 แหล่งข้อมูลงานวิจัยภายในโครงการ + +| รหัส | เอกสาร | เวอร์ชันที่ระบุในไฟล์ | +|------|--------|---------------------| +| research/41 | [../research/41-trustlist-serving-filecdn-etag-binary.md](../research/41-trustlist-serving-filecdn-etag-binary.md) — Trustlist ผ่าน File/Edge CDN และ lazy revalidation | v1.10 | + +### 12.10.3 มาตรฐานภายนอกที่อ้างผ่านเอกสารข้างต้น + +เอกสารนี้ไม่อ้างมาตรฐานภายนอกโดยตรง รายการต่อไปนี้คือมาตรฐานที่ไฟล์สถาปัตยกรรมและงานวิจัยที่อ้างในหัวข้อ §12.2–§12.8 ระบุไว้เป็นแหล่งข้อมูลของตน + +| มาตรฐาน | ส่วนที่อ้าง | ไฟล์ที่อ้าง | +|---------|-----------|-----------| +| IETF Token Status List | Architecture baseline: `draft-ietf-oauth-status-list-18`; current technical reference: `draft-ietf-oauth-status-list-21` [13] (การเพิกถอน; `rotated` เป็น application-specific semantics ที่ Thai profile ต้องกำหนด) | A-KD08, A-TM, research/41 | +| CIR 2024/2979 | ข้อกำหนดการหมุนเวียนกุญแจ | A-KD08 | +| EU eIDAS ARF | §6 WSCD และการจัดการกุญแจ | A-KD08, A-KD06 | +| RFC 4033 | DNSSEC | A-TM §I1 | +| RFC 9162 | Certificate Transparency v2 | A-TM §I4 | +| RFC 5891 และ Unicode TR 39 | IDN และการตรวจ homograph | A-TM §I2 | + +### 12.10.4 แหล่งอ้างอิง NIST สำหรับข้อกำหนด HSM + +ระดับการรับรอง HSM ในหัวข้อนี้อ้างอิงมาตรฐานของ National Institute of Standards and Technology (NIST) โดยตรง เนื่องจากเอกสารสถาปัตยกรรม [A-ARCH §8 I1] และ [A-TM §T1] ระบุระดับ FIPS ไว้แล้ว รายการนี้จึงระบุแหล่งที่มาที่ตรวจสอบได้ของมาตรฐานดังกล่าว + +- [N1] NIST, "FIPS PUB 140-2 — Security Requirements for Cryptographic Modules", พฤษภาคม ค.ศ. 2001 (ปรับปรุงตาม Change Notice ธันวาคม ค.ศ. 2002) — https://csrc.nist.gov/pubs/fips/140-2/upd2/final +- [N2] NIST, "FIPS PUB 140-3 — Security Requirements for Cryptographic Modules", มีนาคม ค.ศ. 2019 — https://csrc.nist.gov/pubs/fips/140-3/final +- [N3] NIST, "Cryptographic Module Validation Program (CMVP) — FIPS 140-2 Transition" — ใบรับรองตาม FIPS 140-2 เปลี่ยนสถานะเป็น Historical ตั้งแต่วันที่ 21 กันยายน ค.ศ. 2026 — https://csrc.nist.gov/projects/cryptographic-module-validation-program + +--- + +## 12.11 บันทึกการเปลี่ยนแปลง + +| เวอร์ชัน | วันที่ | รายละเอียด | +|---------|-------|-----------| +| 1.2.5 | 2026-09-23 | เปลี่ยนการกระจาย Trusted List จาก message broker เป็นการดึงด้วย HTTP `GET` แบบ lazy ผ่าน CDN พร้อม `ETag` และเพิ่มผลกระทบต่อ Wallet, Issuer และ Verifier โดยอ้างอิง research/41 | +| 1.2.4 | 2026-08-06 | ลบกุญแจ Level 2 (Pairwise ต่อ Verifier) ออกจากตาราง lifecycle (§12.4) และ rotation trigger (§12.3) และตัดการอ้างถึง Phase 2/Phase 3 ใน §12.5 และ §12.6 ตามมติให้ยกเลิก pairwise DID และการแบ่งระยะ (MASA-157) | +| 1.2.3 | 2026-08-06 | ตัดข้อกำหนดและมาตรการที่อ้างอิงช่องทางสื่อสารแบบ transport ออกจากบทนี้ทั้งหมด เพราะการควบคุมระดับ transport อยู่นอกขอบเขตบท key management บทนี้จึงคงเฉพาะข้อกำหนดการเก็บกุญแจ การประกาศ public key และการหมุนกุญแจ (MASA-153) | +| 1.2.2 | — | ข้ามหมายเลข ไม่มีการออกเวอร์ชันนี้ | +| 1.2.1 | 2026-08-06 | ตัดกลไกประกาศ public key ของผู้ตรวจสอบเอกสารแบบฝังใน Verifier Attestation ออกจากขอบเขต คงไว้สองทางคือ Trusted List entry หรือ DID Document (`did:web`) (MASA-153) | +| 1.2.0 | 2026-08-06 | เพิ่มผู้ตรวจสอบเอกสาร (Verifier) เป็นผู้ถือกุญแจกลุ่มที่ 4 และมติ G-07 ทางเลือกการเก็บกุญแจ 3 แบบ (soft key / TEE-WSCD / HSM) พร้อมกำหนดการประกาศ public key ผ่าน Trusted List หรือ DID Document (`did:web`) และตัดข้อกำหนด Access Certificate ออกจากขอบเขต (MASA-153) | + +--- + +**สถานะเอกสาร:** Living document — ทบทวนพร้อม [A-TM] ทุกไตรมาส หรือเมื่อ Trusted List ขึ้น minor version +**ผู้ดูแล:** ETDA Security Team + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 11 — Cryptographic Suites](11-cryptographic-suites.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 13 — VC Status และ Revocation ➡️](13-vc-status-and-revocation.md) diff --git a/docs/thai-vc-arf/12.1-trust-list-publication-profile.md b/docs/thai-vc-arf/12.1-trust-list-publication-profile.md new file mode 100644 index 0000000..aa91bcd --- /dev/null +++ b/docs/thai-vc-arf/12.1-trust-list-publication-profile.md @@ -0,0 +1,150 @@ +--- +description: "12.1 ข้อกำหนดการเผยแพร่ Trusted List — Thai VC ARF 2.0 DRAFT 0" +--- + +# 12.1 ข้อกำหนดการเผยแพร่ Trusted List + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** ส่วนขยายของ Thai VC ARF เวอร์ชัน 2.1 — กำลังย้ายไปใช้ payload แบบ LoTE ใน JWT +> **วัตถุประสงค์:** ระบุประเภท จำนวนไฟล์ รูปแบบ โครงสร้างข้อมูล และตัวอย่างของ Trusted List ที่ใช้ในระบบกระเป๋าเอกสารดิจิทัล (Document Wallet) +> **เอกสารที่เกี่ยวข้อง:** [บทที่ 9 — Trust Model 3](09-trust-model-3.md) · [บทที่ 12 — Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md) · [บทที่ 13 — VC Status และการเพิกถอน](13-vc-status-and-revocation.md) +*/} + +## 12.1.1 ขอบข่าย + +เอกสารฉบับนี้สรุปรูปแบบเป้าหมายของ Trust List สำหรับประเทศไทยตาม [ผลการวิเคราะห์ JWT ที่อ้างอิง LoTE](../research/42-trusted-list-lote-jwt-format.md) และ [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) โดยแยกข้อมูลที่พบใน JWT ตัวอย่างออกจากเขตข้อมูลที่ Thai profile ยังต้องกำหนดก่อนใช้งานจริง [1][2] + +ข้อกำหนดการใช้ Trusted List นี้ใช้ร่วมกันใน Trust Model 1, Trust Model 2 และ Trust Model 3 โดยความแตกต่างของแบบจำลองอยู่ที่วิธีผูกและตรวจสอบกุญแจหรือใบรับรองของเอนทิตี [บทที่ 6.5](06.5-trust-building-mechanism.md) + +ดังนั้น ไม่ว่าใช้แบบจำลองใด ระบบต้องดึง Trusted List ที่เกี่ยวข้อง ตรวจลายมือชื่อ JWT ตรวจสถานะ บทบาท และช่วงเวลาที่มีผลใช้ได้ก่อนตัดสินใจเชื่อถือเอนทิตี ห้ามใช้การตรวจสอบสายใบรับรองหรือ DID แทนการตรวจ Trusted List + +payload ของ JWT อ้างอิงชื่อและลำดับชั้นข้อมูลของ List of Trusted Entities (LoTE) ตาม ETSI TS 119 602 ส่วนการห่อด้วย JWT จุดเผยแพร่ และกฎรายบทบาทเป็น Thai profile จึงยังไม่อาจกล่าวอ้างความสอดคล้องกับ LoTE ของ EUDI โดยสมบูรณ์ การตรวจสถานะ VC รายฉบับใช้ Token Status List [1][2] + +## 12.1.2 ประเภทและจำนวนไฟล์ + +สพธอ. ต้องเผยแพร่ Trust List จำนวน 3 ไฟล์ โดยแยกตามบทบาทของเอนทิตี เพื่อให้ผู้ใช้งานดึงเฉพาะข้อมูลที่จำเป็นต่อการตัดสินใจด้านความน่าเชื่อถือ [1] + +| ลำดับ | Trusted List ที่เกี่ยวข้อง | Endpoint | เอนทิตีที่บันทึก | ผู้เรียกใช้หลัก | เหตุการณ์ที่ใช้ตรวจสอบ | +|:---:|---|---|---|---|---| +| 1 | Issuer Trusted List | `https://trustme.etda.or.th/.well-known/iss.txt` | ผู้ออกเอกสาร (issuer) | Wallet และ Verifier | ก่อนรับหรือก่อนตรวจสอบ VC | +| 2 | Verifier Trusted List | `https://trustme.etda.or.th/.well-known/ver.txt` | ผู้ตรวจสอบเอกสาร (verifier) | Wallet | ก่อนนำเสนอ VP | +| 3 | Wallet Provider Trusted List | `https://trustme.etda.or.th/.well-known/wp.txt` | ผู้ให้บริการกระเป๋าเอกสารดิจิทัล (wallet provider) | Issuer และ Verifier | ก่อนออก VC หรือก่อนตรวจสอบ Wallet Unit | + +การแยกไฟล์ดังกล่าวทำให้การเปลี่ยนแปลงข้อมูลของบทบาทหนึ่งไม่กระทบ cache ของอีกบทบาทหนึ่ง และทำให้แต่ละระบบดึงข้อมูลเฉพาะที่เกี่ยวข้องกับหน้าที่ของตน [1] + +## 12.1.3 รูปแบบไฟล์และการเผยแพร่ + +Trusted List ทั้ง 3 รายการมีเนื้อหาเป็น compact JWS ในรูป `header.payload.signature` ซึ่ง สพธอ. ลงลายมือชื่อและเผยแพร่ผ่าน CDN จุดเผยแพร่ที่ระบุใน §12.1.2 ใช้นามสกุล `.txt` โดยเนื้อหาภายในยังคงเป็น compact JWS ผู้ใช้ข้อมูลต้องตรวจลายมือชื่อด้วย trust anchor ของ สพธอ. ก่อนใช้ payload [1][2] + +การดึงข้อมูลต้องใช้ HTTP conditional request โดยเก็บค่า `ETag` จากการตอบกลับครั้งก่อนและส่ง `If-None-Match` เมื่อมีการตรวจสอบครั้งถัดไป หากได้รับ `304 Not Modified` ให้ใช้ Trusted List ที่เกี่ยวข้องซึ่งจัดเก็บไว้เดิม หากได้รับ `200 OK` พร้อมไฟล์ใหม่ ให้ดึง Trusted List ที่เกี่ยวข้องฉบับเต็ม ตรวจลายมือชื่อ และตรวจ `LoTE.ListAndSchemeInformation.LoTESequenceNumber` กับ `LoTE.ListAndSchemeInformation.NextUpdate` ก่อนแทนที่ cache ทั้งนี้ การเผยแพร่ระยะปัจจุบันไม่ใช้ API key, delta หรือไฟล์ CBOR [1][2][3] + +`ETag` ใช้ตรวจการเปลี่ยนแปลงของไฟล์ ส่วนความถูกต้องและความครบถ้วนของเนื้อหาต้องตรวจจากลายมือชื่อบน JWT [1] + +```text +GET https://trustme.etda.or.th/.well-known/iss.txt +If-None-Match: "urn:etda:trusted-list:issuer:2026-v42" + +304 Not Modified +``` + +## 12.1.4 โครงสร้างข้อมูล + +payload ที่ถอดรหัสจาก JWT ตัวอย่างใช้ `LoTE` เป็นวัตถุระดับบน มีข้อมูลรายการใน `ListAndSchemeInformation` และมีรายการองค์กรใน `TrustedEntitiesList[]` โดยแต่ละองค์กรมี `TrustedEntityInformation` และ `TrustedEntityServices[]` ตารางต่อไปนี้แสดงเฉพาะชื่อเขตข้อมูลที่พบในตัวอย่าง issuer, verifier และ wallet provider ส่วนฟิลด์บังคับทั้งหมดต้องกำหนดใน Thai profile [1] + +| เส้นทางใน payload | ข้อมูลที่พบในตัวอย่าง | +|---|---| +| `LoTE.ListAndSchemeInformation.LoTEVersionIdentifier` | เวอร์ชันของโครงสร้างรายการ | +| `LoTE.ListAndSchemeInformation.LoTESequenceNumber` | ลำดับของรายการ ใช้ตรวจ rollback | +| `LoTE.ListAndSchemeInformation.LoTEType` | ชนิดของรายการ; Thai profile ยังต้องตรึง URI ที่อนุญาต | +| `LoTE.ListAndSchemeInformation.SchemeTerritory` | เขตอำนาจของ scheme เช่น `TH` | +| `LoTE.ListAndSchemeInformation.SchemeName[]` | ชื่อ scheme พร้อมภาษา | +| `LoTE.ListAndSchemeInformation.ListIssueDateTime` | เวลาเผยแพร่รายการ | +| `LoTE.ListAndSchemeInformation.NextUpdate` | เวลาที่ต้องตรวจความสดใหม่ของรายการ | +| `LoTE.TrustedEntitiesList[]` | รายการองค์กร; ตัวอย่าง wallet provider ยังเป็นอาร์เรย์ว่าง | +| `TrustedEntitiesList[].TrustedEntityInformation.TEName[]` | ชื่อองค์กรพร้อมภาษา | +| `TrustedEntitiesList[].TrustedEntityServices[].ServiceInformation.ServiceTypeIdentifier` | ชนิดบริการ; Thai profile ยังต้องตรึง URI ที่อนุญาต | +| `TrustedEntitiesList[].TrustedEntityServices[].ServiceInformation.ServiceName[]` | ชื่อบริการพร้อมภาษา | +| `TrustedEntitiesList[].TrustedEntityServices[].ServiceInformation.ServiceDigitalIdentity.PublicKeyValues[]` | กุญแจสาธารณะของบริการ หากประกาศโดยตรง | +| `TrustedEntitiesList[].TrustedEntityServices[].ServiceInformation.ServiceDigitalIdentity.X509Certificates[]` | ใบรับรอง X.509 ของบริการ; พบในตัวอย่าง issuer | +| `TrustedEntitiesList[].TrustedEntityServices[].ServiceInformation.ServiceDigitalIdentity.OtherIds[]` | ตัวระบุอื่นของบริการ เช่น DID | + +OID4VP TC-2 กำหนดให้ Wallet รัฐบาลส่ง WIA/WIA-PoP ส่วน Wallet เอกชนเลือกส่งหรือไม่ส่งได้ ดังนั้น Thai profile ต้องกำหนดข้อมูลที่ Verifier ใช้จำแนก Wallet แต่ละรายการว่าเป็น Wallet รัฐบาลหรือเอกชน โดยข้อมูลดังกล่าวต้องเผยแพร่หรืออ้างอิงจากแหล่งที่เชื่อถือได้ ตรวจสอบความถูกต้องและความสดใหม่ได้ และต้องไม่อาศัยการมีหรือไม่มี WIA เป็นตัวตัดสินประเภท Wallet เอง วิธีบันทึกข้อมูลและชื่อ field ยังไม่ปรากฏในตัวอย่าง Trusted List จึงต้องกำหนดใน profile ก่อนใช้งานจริง หาก Verifier ไม่สามารถตรวจประเภทหรือความสดใหม่ของข้อมูลได้ ให้ปฏิเสธ VP; ห้ามถือว่าข้อมูลที่ขาดหายหมายถึง Wallet เอกชน + +หลักการของไทยกำหนดให้ตรวจสถานะระดับองค์กรและระดับบริการเป็น `active` และตรวจขอบเขตสิทธิ์ของ Issuer, Verifier และ Wallet Provider ตามบทบาท แต่ JWT ตัวอย่างทั้งสามยังไม่แสดงฟิลด์สถานะครบทั้งสองระดับ หรือฟิลด์ประเภท VC/claims ของ Issuer และ claims กับวัตถุประสงค์ของ Verifier จึงยังไม่อาจยืนยันชื่อและเส้นทางฟิลด์เหล่านั้นจากตัวอย่างได้ Thai profile ต้องกำหนดฟิลด์ดังกล่าวพร้อมกฎการตรวจสอบก่อนใช้งานจริง [1][2] + +ผู้ใช้ข้อมูลต้องปฏิเสธการตัดสินใจด้านความน่าเชื่อถือ หากไม่สามารถยืนยันสถานะระดับองค์กรและระดับบริการ ขอบเขตสิทธิ์ที่จำเป็น ลายมือชื่อ ชนิดรายการ ลำดับรายการ และเวลาที่มีผลใช้ได้จาก profile ที่ประกาศใช้ [1][2] + +## 12.1.5 ตัวอย่าง payload + +โครงสร้าง Issuer Trusted List ต่อไปนี้เป็นข้อเสนอใน [research/42](../research/42-trusted-list-lote-jwt-format.md) เพื่อแสดงข้อมูลที่ Thai profile ยังต้องกำหนด ส่วน JWT ตัวอย่างฉบับปัจจุบันมี compact JWS ครบสามส่วนและมีบริการออกเอกสาร 3 รายการ แต่ยังไม่มีฟิลด์สถานะและประเภท VC ที่ออกได้ และยังไม่ได้ตรวจลายมือชื่อ ค่า `LoTEType` ใน JWT ตัวอย่างเป็น URI `EUPubEAAProvidersList` ใน namespace ของ ETSI; ค่า `ThaiIssuersList` ด้านล่างเป็น URI ที่เสนอและยังรอการประกาศใช้ [1] + +```json +{ + "LoTE": { + "ListAndSchemeInformation": { + "LoTEType": "https://uri.etda.or.th/19602/LoTEType/ThaiIssuersList", + "LoTESequenceNumber": 1, + "ListIssueDateTime": "2026-09-24T00:00:00Z", + "NextUpdate": "2026-09-25T00:00:00Z" + }, + "TrustedEntitiesList": [ + { + "TrustedEntityInformation": { + "TEName": [{"lang": "th", "value": "หน่วยงานตัวอย่าง"}] + }, + "TrustedEntityServices": [ + { + "ServiceInformation": { + "ServiceTypeIdentifier": "https://uri.etda.or.th/19602/SvcType/CredentialIssuer", + "status": "active", + "ServiceDigitalIdentity": { + "OtherIds": ["did:web:issuer.example.th"] + }, + "credential_types": ["https://credentials.dopa.go.th/ThaiNationalIDCredential"] + } + } + ] + } + ] + } +} +``` + +โครงสร้างการตรวจสอบใช้ลำดับดังรูปแบบต่อไปนี้ โดยการตัดสินใจต้องเกิดภายหลังการตรวจลายมือชื่อและเวลาที่มีผลใช้ได้ของข้อมูลแล้ว [1] + +```mermaid +sequenceDiagram + participant C as Consumer + participant CDN as CDN + participant DID as ETDA DID Document + + C->>CDN: GET Trusted List ที่เกี่ยวข้อง พร้อม If-None-Match + alt ไม่เปลี่ยนแปลง + CDN-->>C: 304 Not Modified + C->>C: ใช้ cache เดิม + else มีไฟล์ใหม่ + CDN-->>C: 200 OK พร้อม JWT และ ETag ใหม่ + C->>DID: ดึง public key ของ สพธอ. + DID-->>C: public key + C->>C: ตรวจลายมือชื่อ LoTESequenceNumber และ NextUpdate + C->>C: ปรับปรุง cache เมื่อผ่านการตรวจสอบ + end +``` + +## 12.1.6 ข้อกำหนดสำหรับผู้ใช้ข้อมูล + +Wallet, Issuer และ Verifier ต้องใช้เฉพาะ JWT ที่ผ่านการตรวจลายมือชื่อแล้ว ต้องตรวจ `LoTEType`, `LoTESequenceNumber`, `ListIssueDateTime` และ `NextUpdate` ใน `LoTE.ListAndSchemeInformation` ก่อนใช้ข้อมูล และต้องไม่ถือว่า JWT ตัวอย่างที่ยังขาดสถานะหรือขอบเขตสิทธิ์เป็นรายการที่อนุญาตให้ใช้จริง [1][2] + +การเปลี่ยนสถานะของเอนทิตีใน Trust List เป็น `suspended` หรือ `withdrawn` ต้องมีผลต่อการตัดสินใจของระบบในครั้งถัดไปที่มีการเชื่อมต่อและตรวจสอบ Trust List ใหม่ ทั้งนี้ การตรวจสอบ Trust List ดำเนินการเมื่อเกิดการเชื่อมต่อที่ต้องมีการตัดสินใจด้านความน่าเชื่อถือ ไม่ใช้การ polling เบื้องหลัง [1] + +## 12.1.7 เอกสารอ้างอิง + +[1] [การย้ายรูปแบบ Trusted List ไปสู่ JWT ที่อ้างอิง LoTE](../research/42-trusted-list-lote-jwt-format.md), เวอร์ชัน 1.2, 25 กันยายน 2569 + +[2] [ชุด VC ของประเทศไทย — สรุปหนึ่งหน้า](00-minimal-interoperability-reference.md), หัวข้อ Trusted List + +[3] [แนวทางกระจาย Trusted List ผ่าน File/Edge CDN](../research/41-trustlist-serving-filecdn-etag-binary.md), เวอร์ชัน 1.10, 4 กันยายน 2569 (ใช้เฉพาะวิธีเผยแพร่และ ETag) + +--- + +**การนำทาง:** [⬅️ บทที่ 12 — Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 13 — VC Status และการเพิกถอน ➡️](13-vc-status-and-revocation.md) diff --git a/docs/thai-vc-arf/13-vc-status-and-revocation.md b/docs/thai-vc-arf/13-vc-status-and-revocation.md new file mode 100644 index 0000000..97cb2f2 --- /dev/null +++ b/docs/thai-vc-arf/13-vc-status-and-revocation.md @@ -0,0 +1,529 @@ +--- +description: "13. VC Status และ Revocation — Thai VC ARF 2.0 DRAFT 0" +--- + +# 13. VC Status และ Revocation + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📐 Specification — Draft สำหรับการทบทวนเชิงกำกับดูแล (S8, MASA-129 → MASA-150) +> **เวอร์ชันเอกสาร:** 1.3.0 (2026-08-07) — เพิ่ม §13.7.7 ผลกระทบเมื่อผู้ออกเอกสารหมุนเวียนกุญแจลงลายมือชื่อ (4 สถานะของกุญแจ 4 trigger T0–T3, ผลต่อ VC เดิม, กลไก wallet-side notification และ reissue campaign) และเพิ่มแถวในตารางสรุป §13.7.6 (MASA-166) แก้ถ้อยคำแปลตรงตัว "คำร่ม" → "คำรวม" และ "แหล่งความจริงเดียว" → "แหล่งข้อมูลอ้างอิงหลัก" (MASA-167) · เดิม: เพิ่ม §13.7 แผนภาพลำดับของรูปแบบการเพิกถอนทั้ง 5 แบบ (เพิกถอน VC, เพิกถอน Issuer/Verifier ผ่าน Trusted List, wallet provider เพิกถอน WIA/KA พร้อม cascade) และตารางสรุป §13.7.6 (MASA-158) +> **แหล่งข้อมูล:** เอกสารสถาปัตยกรรมภายใต้ `th/architecture/` เท่านั้น — ดู §13.9 References +> **ขอบเขต:** เอกสารกำกับดูแลและข้อกำหนดสำหรับการตรวจประเมิน ห้ามตีความเป็นผลทดสอบ production +> **เอกสารที่เกี่ยวข้อง:** [11-cryptographic-suites.md](11-cryptographic-suites.md), [12-key-management-and-trustlist-deployment.md](12-key-management-and-trustlist-deployment.md), [14-security-threat-model-and-conformance.md](14-security-threat-model-and-conformance.md), [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +บทที่ 13 กำหนดกลไกการแสดงสถานะและการเพิกถอนเอกสารรับรองดิจิทัล (VC) ด้วย IETF Token Status List การเพิกถอนผู้ตรวจสอบเอกสาร (verifier) ผ่านการเปลี่ยนสถานะใน Trusted List และลำดับการตรวจสถานะระหว่างการนำเสนอ VP เรื่อง cryptographic suites อยู่ในบทที่ 11 และ key management อยู่ในบทที่ 12 + +--- + +## 13.1 ขอบเขตและการจำแนกข้อความ + +บทนี้รวมข้อกำหนดด้านการแสดงสถานะและการเพิกถอนที่เกี่ยวข้องกับการนำเสนอ VC สี่เรื่อง คือ (1) การเพิกถอน VC (VC Revocation) ด้วย IETF Token Status List (2) การเพิกถอนผู้ตรวจสอบเอกสาร (verifier) ผ่านการเปลี่ยนสถานะใน Trusted List (3) ลำดับการตรวจสถานะระหว่างการนำเสนอ VP และ (4) ผลกระทบเมื่อผู้ออกเอกสารหมุนเวียนกุญแจลงลายมือชื่อ (Issuer Key Rotation) ตามที่ §13.7.7 อธิบาย + +**กฎการอ้างอิงของบทนี้:** ข้อกำหนดทุกข้อ **MUST** สืบย้อนไปยังไฟล์ภายใต้ `th/architecture/` มาตรฐานภายนอกอ้างผ่านไฟล์สถาปัตยกรรมที่ระบุมาตรฐานนั้นไว้แล้ว บทนี้ **MUST NOT** สร้างข้อกำหนดใหม่ที่ไม่มีฐานในเอกสารสถาปัตยกรรม + +การจำแนกข้อความ: + +| ป้าย | ความหมาย | +|------|----------| +| **[ข้อเท็จจริง]** | ข้อความที่ปรากฏในเอกสารสถาปัตยกรรมโดยตรง พร้อมเลขอ้างอิง | +| **[ข้อวิเคราะห์]** | การประมวลข้อเท็จจริงหลายแหล่งเข้าเป็นข้อกำหนดเชิงกำกับดูแล | +| **[ช่องว่าง]** | ประเด็นที่เอกสารสถาปัตยกรรมยังขัดกันเองหรือยังไม่กำหนด ต้องมีมติก่อนบังคับใช้ | + +คำ **MUST / MUST NOT / SHOULD / MAY** ใช้ตามความหมายเชิงข้อกำหนด: ต้อง / ห้าม / ควร / อาจ + +--- + +## 13.2 รูปแบบที่เลือกใช้ + +**[ข้อเท็จจริง]** เอกสารสถาปัตยกรรมของโครงการระบุ Token Status List revision `draft-ietf-oauth-status-list-18` เป็นฐานที่เลือกใช้ [A-ARCH §2, §3] ส่วนการอธิบายพารามิเตอร์และกฎการประมวลผลในบทนี้ตรวจเทียบกับ revision ปัจจุบันที่ตรวจพบ `draft-ietf-oauth-status-list-21` (Internet-Draft; RFC Editor status: Awaiting First editor ณ 1 ตุลาคม 2569) [13] ทั้งสอง revision ยังเป็น draft จึงต้องระบุ revision ของ profile ที่นำไปใช้งานจริง + +**[ข้อเท็จจริง]** เหตุผลที่บันทึกไว้ในสถาปัตยกรรมคือสอดคล้องกับ SD-JWT VC ที่กำหนด `status.status_list.{idx, uri}`, ตรงกับ EUDI Wallet ARF และ media type `application/statuslist+jwt` ลงทะเบียนกับ IANA แล้ว [A-ARCH §3] + +**[ข้อเท็จจริง]** ความต่างจาก W3C Bitstring ตามที่สถาปัตยกรรมบันทึกไว้ คือใช้รูปแบบ token JWT แทน JSON-LD และการบีบอัดข้อมูลต่างกัน [A-ARCH §2] + +**[ข้อวิเคราะห์]** ก่อนนำไปใช้งานจริง ผู้ดูแล profile **MUST** กำหนด revision ที่แน่นอน แล้วประเมินความเข้ากันได้และผลกระทบเมื่อเปลี่ยน revision; ไม่ถือว่า draft-18 และ draft-21 ใช้แทนกันได้โดยอัตโนมัติ + +--- + +## 13.3 โครงสร้าง Status List Token ของ VC + +**[ข้อเท็จจริง]** สถานะใน VC อยู่ในรูป `status: { status_list: { idx, uri } }` และ Status List Token มีโครงสร้างดังนี้ [A-ARCH §ลำดับที่ 2B, §ลำดับที่ 3] + +``` +Header: +{ + "alg": "ES256", + "kid": "did:web:dopa.go.th#key-2026-001", + "typ": "statuslist+jwt" +} + +Payload: +{ + "sub": "https://status.dopa.go.th/statuslists/1", + "iat": 1742284800, + "exp": 1742371200, + "ttl": 43200, + "status_list": { "bits": 2, "lst": "eNrbuRgAAhcBXQ" } +} +``` + +**[ข้อเท็จจริง]** ความหมายของ `exp` กับ `ttl` คือ `exp` (86,400 วินาที = 24 ชั่วโมง) เป็นอายุสูงสุดของ JWT หลังจากนั้นต้อง fetch ใหม่ ส่วน `ttl` (43,200 วินาที = 12 ชั่วโมง) เป็นระยะเวลาที่ Verifier ควร cache และ `ttl` ≤ `exp` เสมอ [A-ARCH §ลำดับที่ 3] + +**[ข้อเท็จจริง]** ขั้นตอนการตรวจสถานะสี่ขั้น [A-ARCH §ลำดับที่ 3] + +1. ตรวจ Referenced Token ก่อน (เช่น claims ที่คาดหมาย ลายมือชื่อ และ `exp`); หากไม่ผ่าน ต้องปฏิเสธและห้ามตรวจ status ต่อ +2. เมื่อ Referenced Token ผ่าน ให้ดึง URI ของ Status List แล้วรับ JWT ที่มี `typ: statuslist+jwt` +3. ตรวจ Status List Token ตามกฎ JWT และ trust/key-resolution rules ที่ Thai profile กำหนด; ตรวจ claims ที่มีอยู่ รวม `sub` ว่าตรงกับ URI ใน `status.status_list.uri`, `iat` ตาม freshness policy และ `exp` หากมี +4. base64url-decode ค่า `lst` แล้วคลายข้อมูลด้วย decompressor ที่เข้ากันได้กับ DEFLATE/ZLIB +5. อ่านค่า status ที่ index `idx` ตามจำนวนบิตต่อรายการ (`bits`) ใน `status_list`; `bits` คือความกว้างของช่อง ไม่ใช่ค่า status และมีค่าได้ 1, 2, 4 หรือ 8 +6. ตรวจ status ตาม semantics ที่ IETF ลงทะเบียนหรือ Thai profile กำหนด; หาก `idx` อยู่นอกขอบเขตหรือ status ไม่รองรับ ให้ปฏิเสธแบบ fail-closed + +--- + +## 13.4 Status Value + +**[ข้อเท็จจริง]** draft IETF Token Status List ที่ตรวจพบกำหนด status ที่ลงทะเบียนไว้คือ `0x00 VALID`, `0x01 INVALID` และ `0x02 SUSPENDED`; ค่า `0x03` และช่วง `0x0C–0x0F` สงวนไว้สำหรับการใช้งานเฉพาะแอปพลิเคชันตาม draft-21; Thai profile ที่กำหนด `0x03 = rotated` ต้องระบุ semantics และ processing rules ให้ชัด ค่า `0x03` จึงไม่ใช่ status `rotated` ที่ IETF กำหนดความหมายให้ ส่วน IETF เปิดให้ use case กำหนดค่าเพิ่มเติมได้ โดย Thai profile อาจกำหนด `0x03` เป็น `rotated` ได้เมื่อระบุความหมายและกฎประมวลผลให้ชัดเจน [TSL draft-21 §§7.1, 14.5.2] + +| ค่า status | สถานะ | แหล่งความหมาย / การใช้ | +|:---:|-------|----------| +| `0x00` | `VALID` | IETF — token ใช้ได้ตามสถานะ (แต่ยังต้องผ่าน validation ของ token เอง) | +| `0x01` | `INVALID` | IETF — token ถูกเพิกถอนหรือยกเลิก | +| `0x02` | `SUSPENDED` | IETF — token ถูกระงับชั่วคราว | +| `0x03` | `rotated` | **Thai-profile extension** — ต้องกำหนดร่วมกันใน ecosystem และระบุการจัดการเมื่อพบค่านี้ | + +ตัวอย่าง: ใช้เฉพาะ `VALID`/`INVALID` รองรับ `bits: 1`; เมื่อรวม `SUSPENDED` ต้องใช้ `bits: 2`; หากใช้ `rotated = 0x03` ด้วยก็ยังใช้ `bits: 2` ได้ ทั้งนี้ `bits: 1` ใช้แทน status `0x02` หรือ `0x03` ไม่ได้ + +--- + +## 13.5 ข้อกำหนดการตรวจประเมินที่เกี่ยวกับการเพิกถอน + +**[ข้อเท็จจริง]** รายการตรวจสำหรับ Issuer [A-ARCH §8 I7–I9] + +| # | ข้อตรวจ | หลักฐาน | +|---|---------|---------| +| I7 | ต้องรองรับ IETF Token Status List (`statuslist+jwt`) | ทดสอบ endpoint | +| I8 | SLA อัปเดต Status List ≤ 15 นาที | เอกสาร SLA | +| I9 | Status List JWT ต้องผ่านการตรวจลายมือชื่อและ key resolution ตาม trust model ที่ Thai profile กำหนด; ตรวจ `exp` หากมี และใช้ `ttl` ตามนโยบาย cache | ตรวจ token | + +**[ข้อเท็จจริง]** รายการตรวจสำหรับ Verifier ข้อ V4 กำหนดให้ตรวจ IETF Token Status List JWT ทั้งลายมือชื่อ คลายข้อมูล และ status [A-ARCH §8 V4] การอ่านค่า status ต้องใช้ความกว้าง `bits` ที่ระบุใน JWT ไม่ใช่ตรวจบิตเดี่ยว + +**[ช่องว่าง G-03 — มีนัยด้านความมั่นคงปลอดภัย]** ค่าความสดของข้อมูลสามค่าในเอกสารสถาปัตยกรรมยังไม่สอดคล้องกัน Issuer มี SLA อัปเดต Status List ≤ 15 นาที [A-ARCH §8 I8] การเพิกถอนฉุกเฉินต้องแพร่กระจายภายใน 1 ชั่วโมง [A-TM §I3] แต่ `ttl` ที่ให้ Verifier cache คือ 12 ชั่วโมง และ `exp` คือ 24 ชั่วโมง [A-ARCH §ลำดับที่ 3] Verifier ที่ cache ตาม `ttl` จะไม่เห็นการเพิกถอนได้นานถึง 12 ชั่วโมง ทำให้ SLA 15 นาทีและเป้าหมาย 1 ชั่วโมงไม่มีผลจริงแบบ end-to-end โดย TSL กำหนด `exp` และ `ttl` เป็น RECOMMENDED ไม่ใช่ REQUIRED; Thai profile จึงต้องระบุค่าและเพดาน cache ให้สอดคล้องกับเป้าหมายการแพร่กระจาย หรือกำหนดกลไก force refresh สำหรับการเพิกถอนฉุกเฉิน + +--- + +## 13.6 การเพิกถอนผู้ตรวจสอบเอกสาร (verifier) ผ่าน Trusted List + +**[ข้อวิเคราะห์]** การเพิกถอนผู้ตรวจสอบเอกสาร (verifier) ดำเนินการผ่านการเปลี่ยนสถานะใน Trusted List เท่านั้น รายงานฉบับนี้ **ไม่ใช้** status list แยกต่างหากสำหรับผู้ตรวจสอบเอกสาร แหล่งข้อมูลอ้างอิงหลักของสถานะการอนุญาตของผู้ตรวจสอบเอกสารคือ Trusted List ของ สพธอ. โครงสร้าง entry และการจัดสถานะตามบทบาทมีรายละเอียดในบทที่ 9 + +**[ข้อเท็จจริง]** JWT ตัวอย่างจัดองค์กรใน `LoTE.TrustedEntitiesList[]` และจัดบริการใน `TrustedEntityServices[]` โดยชนิดบริการอยู่ที่ `ServiceInformation.ServiceTypeIdentifier` ตัวอย่างยังไม่แสดงฟิลด์สถานะครบทั้งระดับองค์กรและบริการ [research/42](../research/42-trusted-list-lote-jwt-format.md) + +**[ข้อกำหนด]** Thai profile ต้องกำหนดฟิลด์สถานะทั้งสองระดับและค่า `active`, `suspended`, `withdrawn` ให้ชัดเจน ผู้ตรวจสอบข้อมูล **ต้อง** ยืนยันสถานะเป็น `active` ทั้งระดับองค์กรและบริการ หากตรวจไม่ได้หรือพบ `suspended` หรือ `withdrawn` **ต้อง** ปฏิเสธ [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) [research/42](../research/42-trusted-list-lote-jwt-format.md) + +**[ข้อกำหนด]** เมื่อ สพธอ. ระงับผู้ตรวจสอบเอกสาร สถานะบริการ Verifier ตาม Thai profile ต้องเปลี่ยนเป็น `suspended` และเมื่อเพิกถอนถาวรต้องเปลี่ยนเป็น `withdrawn` โดยต้องยื่นลงทะเบียนใหม่ตามนโยบายการลงทะเบียนผู้ตรวจสอบ [A-VRP] [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +**[ข้อวิเคราะห์]** Wallet **MUST** ตรวจสถานะของผู้ตรวจสอบเอกสารใน Trusted List **ก่อน** แสดงหน้าขอความยินยอมทุกครั้ง หากยืนยันสถานะ `active` ไม่ได้ Wallet **MUST** ปฏิเสธหรือเตือนผู้ใช้แล้วหยุดการนำเสนอ เนื่องจากการแสดงหน้าขอความยินยอมของผู้ตรวจสอบเอกสารที่ถูกเพิกถอนแล้วเป็นการเปิดช่อง phishing [A-TM §V6, §V8] + +**[ข้อวิเคราะห์]** การเพิกถอนผู้ตรวจสอบเอกสารแบบฉุกเฉิน เช่น กรณีละเมิด PDPA ร้ายแรงหรือกุญแจถูก compromise ใช้การดึง Trusted List ด้วย HTTP `GET` จาก CDN เมื่อ Wallet หรือ Verifier มี connection และกำลังจะตัดสินใจ โดยใช้ `If-None-Match` เพื่อตรวจการเปลี่ยนแปลงและตรวจลายมือชื่อของไฟล์ใหม่ [research/41] ทั้งนี้ ระยะเวลาที่ผู้ตรวจสอบเอกสารและ Wallet เห็นการเพิกถอนขึ้นกับจังหวะการเชื่อมต่อและนโยบาย cache ที่กำหนดใน Trusted List + +--- + +## 13.7 แผนภาพลำดับของการตรวจสถานะและการเพิกถอน + +หัวข้อนี้รวมแผนภาพลำดับ (sequence diagram) ของการตรวจสถานะระหว่างการนำเสนอ VP และรูปแบบการเพิกถอนทั้งหมดในระบบ ประกอบด้วย 5 แผนภาพ ได้แก่ (1) การนำเสนอ VP พร้อมการตรวจสถานะ (2) การที่ผู้ออกเอกสารเพิกถอน VC (3) การเพิกถอนผู้ออกเอกสารผ่าน Trusted List (4) การเพิกถอนผู้ตรวจสอบเอกสารผ่าน Trusted List และ (5) การที่ wallet provider เพิกถอน WUA คือ WIA และ KA พร้อมผลต่อเนื่อง (cascade) โดยปิดท้ายด้วยตารางสรุปใน §13.7.6 และ §13.7.7 เพิ่มการวิเคราะห์ผลกระทบเมื่อผู้ออกเอกสารหมุนเวียนกุญแจลงลายมือชื่อ ทั้งนี้ ทุกแผนภาพประกอบจากลำดับที่บันทึกไว้ในเอกสารสถาปัตยกรรมและบทที่เกี่ยวข้อง มิได้สร้างข้อกำหนดใหม่ + +### 13.7.1 การนำเสนอ VP พร้อมการตรวจสถานะ + +**[ข้อวิเคราะห์]** แผนภาพนี้ประกอบจากลำดับที่บันทึกไว้ในเอกสารสถาปัตยกรรม คือ ลำดับการตรวจสถานะ VC [A-ARCH §ลำดับที่ 3] การตรวจสถานะผู้ตรวจสอบเอกสารใน Trusted List (ดู §13.6 และบทที่ 9) และ gate การตรวจตาม defense state machine [A-TM §3.0, §4.0] + +**Wallet ตรวจ Verifier ก่อนขอความยินยอม** + +```mermaid +sequenceDiagram + autonumber + actor U as ผู้ใช้ + participant W as Wallet + participant V as Verifier (RP) + participant TL as Trusted List
(ETDA) — แหล่งการอนุญาต + + V->>W: VP Request + Verifier Attestation + + Note over W: ตรวจ Verifier ก่อนเปิดเผยข้อมูล + W->>W: ตรวจ client_id_scheme กับ SAN ของ TLS cert (V1) + W->>W: ตรวจ response_uri อยู่ใน SAN เดียวกัน (V4) + W->>TL: GET Verifier Trusted List ฉบับเต็มจาก CDN + TL-->>W: JWT พร้อม LoTE.TrustedEntitiesList[] + W->>W: ตรวจลายมือชื่อ Attestation และ cnf (V2) + W->>W: ตรวจ iat กับ exp โดย clock skew ไม่เกิน 60 วินาที ห้าม cache (V7) + W->>W: ตรวจ status ของ Verifier ทั้งระดับองค์กรและระดับบทบาท + + alt status ของ Verifier เป็น suspended หรือ withdrawn + W-->>U: ปฏิเสธหรือเตือน แล้วหยุด (V8) + else status ของ Verifier เป็น active + W->>W: เทียบ claim ที่ขอกับขอบเขตสิทธิ์ตาม Thai profile (V3) + W-->>U: แสดงชื่อและ logo จาก TL เพื่อขอความยินยอม (V6) + U-->>W: ให้ความยินยอม + W->>W: WSCD ปล่อยกุญแจ Level 3 แล้วลงลายมือชื่อ KB-JWT ด้วย ES256 + W->>V: vp_token + KB-JWT + end +``` + +**Verifier ตรวจ Issuer และสถานะ VC** + +```mermaid +sequenceDiagram + autonumber + actor U as ผู้ใช้ + participant V as Verifier (RP) + participant TL as Trusted List
(ETDA) — แหล่งการอนุญาต + participant UR as Universal Resolver
resolve custom DID เท่านั้น + participant VSL as VC Status List
ของ Issuer + + Note over V: ตรวจฝ่าย Issuer และสถานะ VC + V->>TL: GET Issuer Trusted List JWT ฉบับเต็มจาก CDN + TL-->>V: JWT พร้อม LoTE.TrustedEntitiesList[] + V->>V: ตรวจลายมือชื่อและบริการ Issuer ตาม Thai profile + V->>UR: resolve DID ของ Issuer เฉพาะ custom DID (เช่น did:ndid) + UR-->>V: didDocument + V->>V: ตรวจลายมือชื่อ VC ด้วยกุญแจที่ผูกกับ TL (I7) + V->>V: ตรวจช่วงเวลากุญแจตาม Thai profile และปฏิเสธหากไม่มีข้อมูล + V->>V: ตรวจ KB-JWT กับ nonce และ aud ที่ต้องเป็น client_id ของตน (V5) + V->>VSL: GET status URI ที่ตรวจผูกกับ Issuer ตาม Thai profile (I6) + VSL-->>V: statuslist+jwt พร้อม typ กับ exp และ ttl + V->>V: ตรวจลายมือชื่อ แล้ว base64url-decode และคลาย ZLIB + V->>V: อ่าน status slot ที่ idx ตามความกว้าง `bits` + + alt สถานะเป็น Valid (0) + V-->>U: ยอมรับตามนโยบาย + else สถานะเป็น Invalid หรือ Suspended หรือ rotated + V-->>U: ปฏิเสธ พร้อมรหัสเหตุผลที่ไม่เปิดเผยข้อมูลส่วนบุคคล + end +``` + +**[ข้อวิเคราะห์]** จุดสำคัญสามข้อที่แผนภาพบังคับไว้ + +1. Wallet **MUST** ตรวจสถานะของ Verifier ใน Trusted List **ก่อน** แสดงหน้าขอความยินยอม เพื่อป้องกันการแสดงคำขอของ Verifier ที่ถูกเพิกถอนแล้ว [A-TM §V6, §V8] +2. Verifier **MUST** ตรวจว่า URI ใน `status` claim ของ VC อยู่ในแหล่งที่อนุญาตตาม Thai profile เพื่อกัน status endpoint takeover [A-TM §I6] ทั้งนี้ [JWT ตัวอย่างแบบ LoTE](../research/42-trusted-list-lote-jwt-format.md) ยังไม่แสดงฟิลด์ status URI จึงต้องกำหนดเส้นทางข้อมูลก่อนใช้เกณฑ์นี้ +3. การตรวจลายมือชื่อ **MUST** เกิดก่อนการคลาย ZLIB ทุกครั้ง เพราะการคลายข้อมูลที่ยังไม่ผ่านการตรวจลายมือชื่อคือการประมวลผลข้อมูลที่ผู้โจมตีควบคุมได้ + +### 13.7.2 การที่ผู้ออกเอกสารเพิกถอน VC + +**[ข้อวิเคราะห์]** ผู้ออกเอกสาร (issuer) เปลี่ยนค่า status ในรายการ IETF Token Status List ของตนเองเพื่อระบุสถานะเอกสารรับรอง (VC) ตามรูปแบบและขั้นตอนที่กำหนดไว้ใน §13.2–§13.4 [A-ARCH §2, §3; A-KD08 §9] แผนภาพนี้แสดงทั้งการกระทำเพิกถอนและการที่ผู้ตรวจสอบเอกสาร (verifier) รับรู้สถานะนั้นในการนำเสนอ VP ครั้งถัดไป + +```mermaid +sequenceDiagram + autonumber + participant EV as เหตุการณ์
(ผู้ถือร้องขอ / ข้อมูลเปลี่ยน / key รั่ว / cascade จาก WUA) + participant ISS as ผู้ออกเอกสาร (Issuer) + participant VSL as VC Token Status List
ของ Issuer + participant V as ผู้ตรวจสอบเอกสาร (Verifier) + + EV->>ISS: มีเหตุต้องเพิกถอน VC + ISS->>ISS: หาตำแหน่ง idx ของ VC ในรายการสถานะของตน + ISS->>VSL: เขียนค่า status ที่ idx เป็น 0x01 (INVALID), 0x02 (SUSPENDED) หรือ 0x03 (Thai-profile `rotated`) + ISS->>VSL: ลงลายมือชื่อและเผยแพร่ statuslist+jwt ฉบับใหม่ โดย `bits` ต้องเพียงพอแทนทุกค่าที่ใช้ (SLA ≤ 15 นาที) + Note over ISS,VSL: กรณีฉุกเฉินต้องแพร่กระจายภายใน 1 ชั่วโมง + V->>VSL: GET status URI ที่ตรวจผูกกับ Issuer ตาม Thai profile (ตอนตรวจ VP ครั้งถัดไป) + VSL-->>V: statuslist+jwt พร้อม exp และ ttl + V->>V: ตรวจลายมือชื่อ แล้ว base64url-decode และคลาย ZLIB + V->>V: อ่าน status slot ที่ idx ตามความกว้าง `bits` + alt status = 0x00 (VALID) + V-->>V: ยอมรับต่อเมื่อ Referenced Token ผ่าน validation และผ่านนโยบายอื่น + else status = 0x01 (INVALID) หรือ 0x02 (SUSPENDED) หรือ 0x03 (Thai-profile `rotated`) + V-->>V: ปฏิเสธตามนโยบาย status ที่ประกาศไว้ + else status ไม่รู้จัก / ใช้ร่วมกันไม่ได้ + V-->>V: ปฏิเสธแบบ fail-closed + end +``` + +**[ข้อวิเคราะห์]** อำนาจการเพิกถอน VC เป็นของผู้ออกเอกสารที่ออก VC นั้นเท่านั้น ผู้ตรวจสอบเอกสารรับรู้การเพิกถอนได้เร็วเพียงใดขึ้นกับค่า cache TTL ของรายการสถานะ ซึ่งเป็นช่องว่าง G-03 ที่บันทึกไว้ใน §13.5 ผู้ตรวจสอบเอกสารที่ cache ตาม `ttl` อาจไม่เห็นการเพิกถอนได้นานถึง 12 ชั่วโมง จึง **ควร** มีกลไก force refresh สำหรับการเพิกถอนฉุกเฉิน + +### 13.7.3 การเพิกถอนผู้ออกเอกสารผ่าน Trusted List + +**[ข้อวิเคราะห์]** การเพิกถอนผู้ออกเอกสาร (issuer) ทั้งรายอยู่ในอำนาจของสำนักงานพัฒนาธุรกรรมทางอิเล็กทรอนิกส์ (สพธอ.) ในฐานะผู้ดูแล Trusted List สพธอ. เปลี่ยนสถานะของผู้ออกเอกสารใน Trusted List เป็น `suspended` หรือ `withdrawn` [A-ARCH §6] แล้วเผยแพร่ไฟล์ที่ลงลายมือชื่อผ่าน CDN ผู้ตรวจสอบเอกสารเรียก `GET` พร้อม `If-None-Match` เมื่อรับ VP และก่อนตัดสินใจ [research/41] + +```mermaid +sequenceDiagram + autonumber + participant ETDA as สพธอ.
(ผู้ดูแล Trusted List) + participant TL as Trusted List
(CDN) + participant V as ผู้ตรวจสอบเอกสาร (Verifier) + + ETDA->>ETDA: พบเหตุร้ายแรง (key รั่ว / ประเมินไม่ผ่าน / ละเมิดนโยบาย) + ETDA->>TL: เปลี่ยนสถานะบริการ Issuer ใน TrustedEntityServices[] + Note over V: ตอนรับ VP ครั้งถัดไป + V->>TL: GET https://trustme.etda.or.th/.well-known/iss.txt
If-None-Match: ETag เดิม + TL-->>V: 304 หรือ 200 + Trusted List ที่เกี่ยวข้องฉบับเต็ม + V->>V: ตรวจ JWT signature, LoTESequenceNumber และ NextUpdate + V->>TL: ค้นหาบริการ Issuer ใน TrustedEntitiesList[] + TL-->>V: status ของ Issuer + alt status ของ Issuer = active + V->>V: ตรวจ VC และสถานะราย VC ตามปกติ (ดู §13.7.1) + else status ของ Issuer ≠ active + V-->>V: ปฏิเสธ VC ทุกใบของ Issuer นั้น โดยไม่ต้องอ่านสถานะราย VC + end +``` + +**[ข้อวิเคราะห์]** เมื่อผู้ออกเอกสารถูกเพิกถอนใน Trusted List VC ทุกใบที่ผู้ออกเอกสารนั้นเคยออกจะใช้ไม่ได้ในการตรวจสอบ โดยไม่จำเป็นต้องเปลี่ยนค่า status ในรายการสถานะราย VC เนื่องจากแหล่งข้อมูลอ้างอิงหลักของสถานะการอนุญาตของผู้ออกเอกสารคือ Trusted List หากยืนยันสถานะ `active` ไม่ได้ ผู้ตรวจสอบเอกสาร **ต้อง** ปฏิเสธ VC นั้น [A-ARCH §6, §8] การเพิกถอนผู้ออกเอกสารจึงมีผลต่อ VC ทุกใบของผู้ออกเอกสารรายนั้น + +### 13.7.4 การเพิกถอนผู้ตรวจสอบเอกสารผ่าน Trusted List + +**[ข้อวิเคราะห์]** การเพิกถอนผู้ตรวจสอบเอกสาร (verifier) ดำเนินการผ่าน Trusted List เท่านั้น ตาม §13.6 ผู้มีอำนาจคือ สพธอ. จุดสำคัญคือ กระเป๋าเอกสารดิจิทัล (wallet) **ต้อง** ตรวจสถานะของผู้ตรวจสอบเอกสาร **ก่อน** แสดงหน้าขอความยินยอมทุกครั้ง เพราะการแสดงหน้าขอความยินยอมของผู้ตรวจสอบเอกสารที่ถูกเพิกถอนแล้วเป็นการเปิดช่อง phishing [A-TM §V6, §V8] + +```mermaid +sequenceDiagram + autonumber + actor U as ผู้ใช้ + participant ETDA as สพธอ.
(ผู้ดูแล Trusted List) + participant TL as Trusted List
(CDN) + participant W as Wallet + + ETDA->>ETDA: พบเหตุ (ละเมิด PDPA ร้ายแรง / key รั่ว) + ETDA->>TL: เปลี่ยนสถานะบริการ Verifier ใน TrustedEntityServices[] + Note over W: ตอนได้รับ VP Request ครั้งถัดไป + W->>TL: GET https://trustme.etda.or.th/.well-known/ver.txt
If-None-Match: ETag เดิม + TL-->>W: 304 หรือ 200 + Trusted List ที่เกี่ยวข้องฉบับเต็ม + W->>W: ตรวจ JWT signature, LoTESequenceNumber และ NextUpdate + W->>TL: ค้นหาบริการ Verifier ใน TrustedEntitiesList[] + TL-->>W: status ของ Verifier + alt status = active + W-->>U: แสดงชื่อและ logo จาก TL เพื่อขอความยินยอม + else status ≠ active + W-->>U: ปฏิเสธหรือเตือน แล้วหยุดการนำเสนอ (กัน phishing) + end +``` + +**[ข้อวิเคราะห์]** ระยะเวลาที่ Wallet เห็นการเพิกถอนขึ้นกับจังหวะที่ได้รับ VP Request และผลการตรวจ `GET` จาก CDN ในครั้งนั้น ระบบไม่ใช้ message broker หรือ background polling การตรวจจึงเกิดตรงจุดที่ Wallet ต้องตัดสินใจว่าจะขอความยินยอมจากผู้ใช้หรือไม่ [research/41] + +### 13.7.5 การที่ wallet provider เพิกถอน WUA คือ WIA และ KA พร้อมผลต่อเนื่อง + +**[ข้อวิเคราะห์]** WUA เป็นคำรวม (umbrella term) ประกอบด้วย Wallet Instance Attestation (WIA) และ Key Attestation (KA) การเพิกถอนและสถานะของทั้งสองประเภทเป็นไปตาม EUDI คือใช้ IETF Token Status List ที่ wallet provider เผยแพร่ ผ่าน field `client_status` (WIA) และ `key_storage_status` (KA) รายละเอียดอยู่ใน [บทที่ 10 §10.5](10-wallet-unit-attestation.md) แผนภาพนี้แสดง 3 ผลต่อเนื่อง (chain) ที่เกิดขึ้นเมื่อ wallet provider เพิกถอน WUA + +```mermaid +sequenceDiagram + autonumber + participant EV as เหตุการณ์
(อุปกรณ์สูญหาย / key รั่ว / WSCD ถูก compromise) + participant WP as Wallet Provider + participant WSL as WUA Token Status List
client_status (WIA) / key_storage_status (KA) + participant ISS as ผู้ออกเอกสาร (Issuer) + participant VSL as VC Token Status List
ของ Issuer + participant V as ผู้ตรวจสอบเอกสาร (Verifier) + + EV->>WP: มีเหตุต้องเพิกถอน WUA + alt เพิกถอน WIA (wallet instance ถูก compromise) + WP->>WSL: ปรับค่า status ในรายการ client_status ของ WIA + else เพิกถอน KA (WSCD หรือกุญแจถูก compromise) + WP->>WSL: ปรับค่า status ในรายการ key_storage_status ของ KA + Note over WP,WSL: KA แบบ type-shared: 1 index ครอบทุก wallet unit ของ WSCD ประเภทนั้น + end + Note over ISS: chain 1 — Issuer ติดตามสถานะ WIA/KA ที่เคยตรวจไว้เป็นระยะ เช่น รายวัน + ISS->>WSL: ตรวจสถานะ WIA/KA ของ wallet unit ที่เคยออกเอกสารให้ + WSL-->>ISS: revoked + Note over ISS,VSL: chain 2 — Issuer ต้องเพิกถอน VC ที่ผูกกับ wallet unit นั้น (CIR 2024/2977 Art. 5(4)(b)) + ISS->>VSL: ตั้งค่า status ของ VC ที่ผูกไว้เป็น 0x01 (INVALID) ในรายการสถานะของตน + Note over V: chain 3 — Verifier ไม่อ่านสถานะ WUA โดยตรง (RP เห็นเฉพาะ Use Case 1) + V->>VSL: GET status uri ตอนตรวจ VP + VSL-->>V: statuslist+jwt + V->>V: อ่าน status slot ตาม bits และ idx แล้วปฏิเสธ VC ที่ผูกกับ wallet unit ที่ถูกเพิกถอน +``` + +**[ข้อวิเคราะห์]** แผนภาพนี้ตอบคำถามหลักสองข้อ + +1. **ผู้ออกเอกสารต้องเพิกถอน VC ที่ผูกกับ WUA หรือไม่** — **ต้อง** เมื่อ wallet provider เพิกถอน WIA หรือ KA ผู้ออกเอกสารที่เคยออก VC ให้ wallet unit นั้น **ต้อง** เพิกถอน VC ที่ผูกไว้ผ่าน IETF Token Status List **ของผู้ออกเอกสารเอง** ตาม CIR 2024/2977 Art. 5(4)(b) [บทที่ 10 §10.5.3](10-wallet-unit-attestation.md) รายการสถานะของ WUA ใช้กับ wallet instance และกุญแจ ส่วนรายการสถานะของผู้ออกเอกสารใช้กับ VC ที่ผูกกับ wallet unit นั้น จึงเป็นคนละรายการกัน +2. **ผู้ตรวจสอบเอกสารรับรู้ได้อย่างไร** — ผู้ตรวจสอบเอกสารได้รับ WUA เฉพาะรูปแบบยืนยันตัวตน (Use Case 1) และรับรู้ผลของการเพิกถอน WUA **โดยอ้อม** ผ่านรายการสถานะ VC ของผู้ออกเอกสาร (chain 3) ผู้ออกเอกสารตรวจสถานะ WUA โดยตรงในกระแสงาน OID4VCI ตาม [บทที่ 10 §10.3.1](10-wallet-unit-attestation.md) + +_ข้อสังเกต:_ กรณี KA แบบ type-shared การเพิกถอน 1 index มีผลต่อ wallet unit ทุกหน่วยที่ใช้ WSCD ประเภทเดียวกัน ผู้ออกเอกสารจึงต้องเพิกถอน VC ทุกใบที่ผูกกับ WSCD ประเภทนั้น ผลต่อเนื่องจึงกว้างกว่าการเพิกถอน WIA รายหน่วยมาก + +### 13.7.6 ตารางสรุปรูปแบบการเพิกถอน + +**[ข้อวิเคราะห์]** ตารางต่อไปนี้สรุปรูปแบบการเพิกถอนและการหมุนเวียนกุญแจทั้ง 6 แบบใน §13.7.2–§13.7.7 ว่าใครมีอำนาจ ใช้กลไกใด ใครต้องรับรู้ และรับรู้ได้อย่างไร + +| รูปแบบการเพิกถอน / การหมุนเวียนกุญแจ | ผู้มีอำนาจ | กลไก / รายการสถานะ | ผู้ที่ต้องรับรู้ และรับรู้ได้อย่างไร | เวลาเป้าหมาย / ช่องว่าง | +|---|---|---|---|---| +| เพิกถอน VC (§13.7.2) | ผู้ออกเอกสารที่ออก VC นั้น | VC Token Status List ของผู้ออกเอกสาร | ผู้ตรวจสอบเอกสารอ่านค่า status ตอนตรวจ VP | SLA ≤ 15 นาที (ฉุกเฉิน ≤ 1 ชั่วโมง) จำกัดด้วย cache TTL — ช่องว่าง G-03 | +| เพิกถอนผู้ออกเอกสาร (§13.7.3) | สพธอ. | สถานะใน Trusted List (`suspended`/`withdrawn`) | ผู้ตรวจสอบเอกสารเรียก `GET` จาก CDN ตอนรับ VP และตรวจลายมือชื่อ | ตรวจ ณ จุดตัดสินใจ; ปฏิเสธหากยืนยันสถานะ `active` ไม่ได้ [research/41] | +| เพิกถอนผู้ตรวจสอบเอกสาร (§13.7.4) | สพธอ. | สถานะใน Trusted List (`suspended`/`withdrawn`) | กระเป๋าเอกสารดิจิทัลเรียก `GET` จาก CDN **ก่อน** แสดงหน้าขอความยินยอม | ตรวจ ณ จุดตัดสินใจ; กัน phishing [A-TM §V6, §V8] | +| เพิกถอน WIA (§13.7.5) | wallet provider ที่ออก WIA | `client_status` list ของ wallet provider | ผู้ออกเอกสาร อ่านตอน OID4VCI และ poll เป็นระยะ → cascade เพิกถอน VC → ผู้ตรวจสอบเอกสารรับรู้ผ่านสถานะ VC | poll เป็นระยะ เช่น รายวัน + SLA ของ VC status | +| เพิกถอน KA (§13.7.5) | wallet provider ที่ออก KA | `key_storage_status` list (รายหน่วย หรือ type-shared) | เหมือน WIA; หาก type-shared จะ cascade ครอบ WSCD ทั้งประเภท | poll เป็นระยะ เช่น รายวัน + SLA ของ VC status | +| หมุนเวียนกุญแจลงลายมือชื่อของผู้ออกเอกสาร (§13.7.7) | ผู้ออกเอกสารเอง (T0–T3) | (ก) DID Document `assertionMethod` (ข) ข้อมูลกุญแจใน `ServiceInformation.ServiceDigitalIdentity` ของ Trusted List; การกำหนดช่วงเวลาต่อกุญแจยังต้องระบุใน Thai profile [research/42](../research/42-trusted-list-lote-jwt-format.md) (ค) Campaign Manifest ผ่าน `/.well-known/reissue-campaigns/{id}` (ง) VC Token Status List ค่า status `0x03` = `rotated` ตาม Thai-profile extension | กระเป๋าเอกสารดิจิทัลรับรู้ผ่าน push/pull ตาม Campaign Protocol | ขึ้นกับ trigger และนโยบายการเผยแพร่ | + +**[ข้อวิเคราะห์]** จุดที่ผู้พัฒนาต้องไม่สับสน คือ การเพิกถอนสามระดับใช้รายการสถานะคนละชุดกัน ได้แก่ (1) รายการสถานะ VC ของผู้ออกเอกสาร (2) รายการสถานะ WUA ของ wallet provider ผ่าน `client_status` และ `key_storage_status` และ (3) Trusted List ของ สพธอ. สำหรับสถานะการอนุญาตของผู้ออกเอกสารและผู้ตรวจสอบเอกสาร แม้ (1) และ (2) ใช้รูปแบบ IETF Token Status List เหมือนกัน แต่เป็นคนละรายการ มีผู้เผยแพร่และวัตถุประสงค์ต่างกัน ตาม §13.7.5 และ [บทที่ 10 §10.5.3](10-wallet-unit-attestation.md) + +### 13.7.7 ผลกระทบเมื่อผู้ออกเอกสารหมุนเวียนกุญแจลงลายมือชื่อ (Issuer Key Rotation) + +หัวข้อนี้ตอบคำถามเชิงกำกับดูแลสามข้อเกี่ยวกับการหมุนเวียนกุญแจลงลายมือชื่อของผู้ออกเอกสาร ได้แก่ (1) ผลกระทบต่อเอกสารรับรอง (VC) เดิมที่ลงลายมือชื่อด้วยกุญแจรุ่นก่อน (2) กลไกที่กระเป๋าเอกสารดิจิทัล (wallet unit) ใช้รับรู้ว่ากุญแจถูกหมุนเวียน (3) ความจำเป็นในการออก VC ใหม่ ทั้งนี้ หัวข้อนี้ประกอบจากข้อกำหนดในเอกสารสถาปัตยกรรม [A-KD08 §1–§9], [A-TM §I3, §I7] และงานวิจัยภายใน [research/07], [research/07-1] มิได้สร้างข้อกำหนดใหม่ที่ไม่มีฐานในเอกสารต้นทาง + +#### 13.7.7.1 สถานะของกุญแจลงลายมือชื่อผู้ออกเอกสาร 4 สถานะ + +**[ข้อเท็จจริง]** วงจรชีวิตของกุญแจลงลายมือชื่อของผู้ออกเอกสารแบ่งเป็น 4 สถานะ ดังนี้ [research/07 §สถานะของกุญแจผู้ออก] + +| สถานะ | ลงลายมือชื่อ VC ใหม่ | ตรวจ VC เก่า | อยู่ใน DID Document | +|-------|:---:|:---:|:---:| +| **Created** | ❌ | ❌ | ✅ (กำหนดวันเริ่มใช้ในอนาคต) | +| **Active** | ✅ | ✅ | ✅ (`authentication` + `assertionMethod`) | +| **Inactive** | ❌ | ✅ | ✅ (`assertionMethod` เท่านั้น) | +| **Decommissioned** | ❌ | ❌ | ❌ (ลบ + ทำลายกุญแจลับ) | + +**[ข้อวิเคราะห์]** กฎสำคัญคือ กุญแจเดิมต้องอยู่ใน `assertionMethod` จนกว่า VC ทั้งหมดที่ลงลายมือชื่อด้วยกุญแจนั้นจะหมดอายุ การลบกุญแจออกจาก DID Document ก่อนกำหนดจะทำให้ VC ที่ออกด้วยกุญแจนั้นตรวจสอบไม่ได้อีกต่อไป ทั้งนี้ ต้องเสริมด้วยข้อจำกัดของ W3C DID Core ที่ไม่มีช่องบอกสถานะรายกุญแจ สถานะ `Inactive` และ `Created` จึงเป็นวินัยฝั่งผู้ออกเอกสาร ผู้ตรวจสอบเอกสารตรวจข้อนี้โดยตรงไม่ได้ จึงต้องพึ่ง Trusted List ของ สพธอ. เป็นกลไกยืนยันภายนอกตามที่ §13.7.7.3 อธิบาย + +#### 13.7.7.2 รูปแบบการหมุนเวียนกุญแจ 4 รูปแบบ (T0–T3) + +**[ข้อเท็จจริง]** การหมุนเวียนกุญแจลงลายมือชื่อของผู้ออกเอกสารจำแนกเป็น 4 รูปแบบตาม trigger และความรุนแรง [A-KD08 §1], [research/07-1 §2] ดังนี้ + +| Trigger | ความรุนแรง | SLA แจ้งเตือน | Grace Period | VC เก่าใช้ได้หรือไม่ | +|---------|:---------:|:-------------:|:------------:|:---------------------:| +| **T0 — Scheduled Rotation** (รายปี ตามนโยบาย [A-KD08 §1]) | 🟢 ปกติ | ไม่ต้องแจ้ง | ไม่กำหนด (จนกว่า VCs จะหมดอายุ) | ✅ ใช้ได้ตราบเท่าที่กุญแจเดิมยังอยู่ใน `assertionMethod` | +| **T1 — Key Compromise** ([A-KD08 §1], [A-TM §I3]) | 🔴 ฉุกเฉิน | ≤ 15 นาที (push) | 0 (ทันที) | ❌ ต้องปฏิเสธเมื่อยืนยันสถานะกุญแจเดิมไม่ได้ตาม Thai profile [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| **T2 — Early Decommissioning** (compliance / ยุติใช้ก่อน VCs หมดอายุ) | 🟡 เร่งด่วน | ≥ 90 วันล่วงหน้า | ≥ 90 วัน | ✅ ใช้ได้จนถึง `deadline` | +| **T3 — Coordinated Migration** (algorithm upgrade เช่น `ES256 → EdDSA`) | 🟢 ปกติ | ≥ 30 วันล่วงหน้า | ≥ 30 วัน | ✅ ใช้ได้จนถึง `deadline` | + +**[ข้อวิเคราะห์]** ข้อแตกต่างสำคัญระหว่าง T0 กับ T1–T3 คือ T0 เป็นการหมุนเวียนแบบโปร่งใส (transparent) เนื่องจากกุญแจเดิมยังอยู่ใน `assertionMethod` ผู้ตรวจสอบเอกสารยังตรวจ VC เก่าได้ จึงไม่ต้องมีกลไกแจ้ง wallet ส่วน T1–T3 เป็นการหมุนเวียนที่มี deadline หรือเป็นเหตุฉุกเฉิน จำเป็นต้องมีกลไกแจ้ง wallet เพื่อให้ผู้ใช้ออก VC ใหม่ก่อนกุญแจเดิมถูกถอนออกจาก DID Document ตามแนวทาง Campaign Protocol ใน [research/07-1] + +#### 13.7.7.3 กลไกที่กระเป๋าเอกสารดิจิทัลใช้รับรู้การหมุนเวียนกุญแจ + +**[ข้อวิเคราะห์]** กระเป๋าเอกสารดิจิทัล (wallet unit) อาจรับรู้การหมุนเวียนกุญแจของผู้ออกเอกสารผ่าน 4 ช่องทางตามสถาปัตยกรรมที่เสนอ ทั้งนี้ JWT ตัวอย่างใน [research/42](../research/42-trusted-list-lote-jwt-format.md) ยังไม่แสดงช่วงเวลาที่มีผลของกุญแจแต่ละรุ่นใน Trusted List + +| ช่องทาง | สารที่ส่ง | ใช้กับ Trigger | ผู้เผยแพร่ | +|--------|----------|:---------------:|------------| +| (1) DID Document `assertionMethod` | กุญแจเดิมยังอยู่ใน `assertionMethod` หรือถูกถอนออก | T0 (มีอยู่) / T1–T3 (ถูกถอนเมื่อถึง deadline) | ผู้ออกเอกสาร | +| (2) Trusted List `ServiceInformation.ServiceDigitalIdentity` | กุญแจสาธารณะหรือ DID; ช่วงเวลาต่อกุญแจต้องกำหนดเพิ่มใน Thai profile | ทุก trigger เมื่อ profile รองรับ | สพธอ. | +| (3) Reissue Campaign Manifest ผ่าน `/.well-known/reissue-campaigns/{id}` | campaign id, `affected_kid`, `trigger`, `severity`, `deadline` | T1–T3 | ผู้ออกเอกสาร | +| (4) VC Token Status List ค่า status `0x03` = `rotated` (Thai-profile extension) | ระบุว่า VC ถูกแทนด้วยใบใหม่แล้ว | T1–T3 (หลังออกใบใหม่) | ผู้ออกเอกสาร | + +**[ข้อกำหนด]** กระเป๋าเอกสารดิจิทัลต้องตรวจข้อมูลกุญแจของ Issuer ใน Trusted List และตรวจช่วงเวลาต่อกุญแจเมื่อ Thai profile ประกาศฟิลด์ดังกล่าว หากไม่มีข้อมูลเพียงพอที่จะยืนยันว่ากุญแจมีผลในเวลาที่ VC ถูกลงลายมือชื่อ ต้องปฏิเสธการใช้ VC นั้น การมีชื่อกุญแจใน DID Document เพียงอย่างเดียวไม่ยืนยันสถานะการอนุญาต [research/42](../research/42-trusted-list-lote-jwt-format.md) [บทสรุปความสอดคล้องขั้นต่ำ](00-minimal-interoperability-reference.md) + +**[ข้อวิเคราะห์]** ช่องทาง (3) เป็นกลไกเฉพาะของ T1–T3 ที่ช่วยให้กระเป๋าเอกสารดิจิทัลรับรู้ล่วงหน้าก่อน deadline และกระตุ้นให้ผู้ใช้ออก VC ใหม่ กลไกนี้ใช้ dual-channel คือ push ผ่าน wallet provider (APN/FCM) สำหรับ T1 ที่ต้องการความเร็ว และ pull ผ่านการเรียก `GET /.well-known/reissue-campaigns/active` เป็นระยะตาม TTL เป็น safety net [research/07-1 §3] ทั้งนี้ Campaign Manifest ต้องลงลายมือชื่อด้วย **กุญแจใหม่** เพื่อกันผู้โจมตีที่ครอบครองกุญแจเดิมปลอม campaign ยกเลิกเหตุฉุกเฉิน [research/07-1 §4.3] + +#### 13.7.7.4 ผลกระทบต่อ VC เดิม และความจำเป็นในการออก VC ใหม่ + +**[ข้อเท็จจริง]** ผลกระทบต่อ VC เดิมที่ลงลายมือชื่อด้วยกุญแจรุ่นก่อนหน้า (`key-1`) จำแนกตาม trigger ดังนี้ [A-KD08 §8], [research/07], [research/07-1] + +| Trigger | VC เดิม (`key-1`) ตรวจสอบได้หรือไม่ | ค่า status ใน Status List | ต้องออก VC ใหม่หรือไม่ | +|---------|:----------------------------------:|:-----------------:|:------------------------:| +| **T0 — Scheduled Rotation** | ✅ ใช้ได้ตราบเท่าที่ `key-1` อยู่ใน `assertionMethod` และ VC ยังไม่หมดอายุ | คงค่า `0` (Valid) | ❓ ไม่บังคับ แต่แนะนำให้ reissue ตามรอบหมุนเวียนประจำปี เพื่อลดหน้าต่างความเสี่ยงจาก compromise [A-KD08 §10] | +| **T1 — Key Compromise** | ❌ ต้องปฏิเสธเมื่อยืนยันสถานะกุญแจเดิมจาก Thai profile ไม่ได้; JWT ตัวอย่างยังไม่มีช่วงเวลาต่อกุญแจ [research/42](../research/42-trusted-list-lote-jwt-format.md) | เปลี่ยนเป็น status `0x03` (`rotated` ตาม Thai-profile extension) ทันทีที่ออก VC ใหม่ | ✅ **บังคับ** ต้องออก VC ใหม่ผูกกับ `key-2` และ mark VC เดิมเป็น `rotated` ตามนโยบายกำกับดูแล | +| **T2 — Early Decommissioning** | ✅ ใช้ได้จนถึง `deadline` ที่กำหนด | คงค่า `0` (Valid) จนกว่าจะถึง `deadline` | ✅ **บังคับ** ต้องออก VC ใหม่ภายใน grace period (≥ 90 วัน) หากต้องการให้ VC ยังใช้งานได้หลัง `deadline` | +| **T3 — Coordinated Migration** | ✅ ใช้ได้จนถึง `deadline` ที่กำหนด | คงค่า `0` (Valid) จนกว่าจะถึง `deadline` | ✅ **แนะนำ** ให้ออก VC ใหม่ภายใน grace period (≥ 30 วัน) เพื่อให้ผู้ใช้พร้อมใช้อัลกอริทึมใหม่ก่อนกุญแจเดิมถูกถอน | + +**[ข้อวิเคราะห์]** หลักการตอบคำถาม "ต้องออก VC ใหม่หรือไม่" มีสามประเด็น + +1. **T0 Scheduled Rotation** — เป็นทางเลือก ไม่บังคับ เพราะ VC เดิมยังตรวจสอบได้ตราบเท่าที่กุญแจเดิมอยู่ใน `assertionMethod` และ VC ยังไม่หมดอายุ ผู้ออกเอกสาร **SHOULD** กำหนดนโยบายหมุนเวียนประจำปีควบคู่กับ reissue เพื่อลดหน้าต่างความเสี่ยง แต่ไม่จำเป็นต้องออก VC ใหม่ให้ผู้ถือทุกรายทันที [A-KD08 §10] +2. **T1 Key Compromise** — ผู้ออกเอกสาร **MUST** ออก VC ใหม่ให้ผู้ถือที่ได้รับผลกระทบ และ **MUST** mark VC เดิมเป็น status `0x03` (`rotated` ตาม Thai-profile extension) ใน Status List ของตน การตรวจ Trusted List ต้องปฏิเสธกุญแจที่ยืนยันสถานะหรือช่วงเวลาที่มีผลไม่ได้ โดย Thai profile ยังต้องกำหนดฟิลด์ช่วงเวลาต่อกุญแจตาม [research/42](../research/42-trusted-list-lote-jwt-format.md) ขั้นตอน mark VC เดิมเป็น `rotated` **MUST** สำเร็จก่อนลบ key handle เดิม [A-KD08 §3] +3. **T2/T3 Planned Scenarios** — เป็นข้อบังคับในเชิงเวลา ผู้ออกเอกสาร **MUST** แจ้ง campaign ล่วงหน้าตาม grace period ที่กำหนด (≥ 90 วัน สำหรับ T2, ≥ 30 วัน สำหรับ T3) กระเป๋าเอกสารดิจิทัล **MUST** แสดง notification ให้ผู้ใช้ทราบตาม milestone (30d / 7d / 1d / deadline) หากผู้ใช้ไม่ดำเนินการภายใน deadline กระเป๋าเอกสารดิจิทัล **MUST** บล็อกการนำเสนอ VC ที่ลงลายมือชื่อด้วยกุญแจรุ่นเก่าที่ถูกถอนออกจาก `assertionMethod` แล้ว + +**[ข้อวิเคราะห์]** กระเป๋าเอกสารดิจิทัล **MUST NOT** ลบ VC เดิมก่อนได้รับ VC ใหม่ที่ลงลายมือชื่อด้วยกุญแจรุ่นใหม่ เพราะหาก reissue ล้มเหลว (เช่น issuer down) ผู้ใช้จะไม่มีหลักฐานในกระเป๋าฯ เลย ทั้งนี้ กระเป๋าเอกสารดิจิทัล **SHOULD** เก็บ VC เดิมไว้ในสถานะ "superseded" เป็นเวลาอย่างน้อย 30 วันหลัง reissue สำเร็จ เพื่อใช้อ้างอิงย้อนหลังหากผู้ตรวจสอบเอกสารยังไม่ได้รับ Trusted List ฉบับใหม่ + +#### 13.7.7.5 แผนภาพลำดับการหมุนเวียนกุญแจ T1 (Key Compromise) + +**[ข้อวิเคราะห์]** แผนภาพนี้แสดงกระแสงานเต็มเมื่อกุญแจลงลายมือชื่อของผู้ออกเอกสารถูก compromise (T1) ครอบคลุม (1) การ push campaign จาก issuer ผ่าน wallet provider (2) การ pull campaign manifest โดย wallet (3) การ reissue ผ่าน OID4VCI (4) การ mark VC เดิมเป็น `rotated` และ (5) การอัปเดต Trusted List โดย สพธอ. + +```mermaid +sequenceDiagram + autonumber + participant EV as เหตุการณ์
กุญแจถูก compromise + participant ISS as ผู้ออกเอกสาร + participant VSL as VC Token Status List
ของผู้ออกเอกสาร + participant WP as Wallet Provider
(APN/FCM) + participant W as Wallet Unit + actor U as ผู้ใช้ + participant ETDA as สพธอ.
ผู้ดูแล Trusted List + participant TL as Trusted List
(ข้อมูลกุญแจตาม Thai profile) + + EV->>ISS: T1 กุญแจ key-1 ถูก compromise (SLA ≤ 15 นาที) + ISS->>ISS: mark key-1 = COMPROMISED
สร้าง Campaign Manifest JWS
(signed by key-2 ใหม่) + ISS->>WP: POST /notify/reissue-campaign
(Campaign Manifest JWS) + WP->>W: Push notification (silent) + Note over W: ถ้า push ล้มเหลว → poll
GET /.well-known/reissue-campaigns/active
ทุก 6 ชม. เป็น safety net + W->>ISS: GET /.well-known/reissue-campaigns/{id} + ISS-->>W: Campaign Manifest (JWS) + W->>W: verify JWS + match `affected_kid`
กับ VC ที่เก็บไว้ + W-->>U: 🔔 Modal blocking: "VC ต้องออกใหม่ด่วน" + U->>W: กด "Reissue Now" + W->>ISS: OID4VCI + reissue_context.campaign_id + ISS->>VSL: mark VC เดิม status = 0x03 (Thai-profile `rotated`, ต้องประกาศ `bits` ที่รองรับ) + ISS-->>W: VC ใหม่ (signed by key-2) + W->>W: เก็บ VC ใหม่
mark VC เดิม = SUPERSEDED + Note over ETDA,TL: คู่ขนาน: สพธอ. ปรับข้อมูลกุญแจและสถานะตาม Thai profile + ETDA->>TL: เผยแพร่ JWT ฉบับใหม่พร้อม LoTESequenceNumber ใหม่ + TL-->>W: Wallet ตรวจครั้งต่อไป: กุญแจเดิมไม่ผ่านเกณฑ์ → ปฏิเสธ +``` + +**[ข้อวิเคราะห์]** จุดสำคัญสี่ประการที่แผนภาพบังคับไว้ + +1. ผู้ออกเอกสาร **MUST** ลงลายมือชื่อ Campaign Manifest ด้วยกุญแจใหม่ (`key-2`) เพราะผู้โจมตีที่ครอบครอง `key-1` จะปลอม campaign "ยกเลิกฉุกเฉิน" ได้ [research/07-1 §4.3, S1] +2. กระเป๋าเอกสารดิจิทัล **MUST** block UI สำหรับ T1 จนกว่าผู้ใช้จะอนุมัติหรือปฏิเสธ เพราะ VC ที่ลงลายมือชื่อด้วยกุญแจที่ compromise มีความเสี่ยงสูงที่จะถูกปลอม +3. การ mark VC เดิมเป็น `rotated` ใน Status List **MUST** สำเร็จก่อนที่กระเป๋าเอกสารดิจิทัลจะลบ key handle เดิม [A-KD08 §3] +4. สพธอ. **MUST** เผยแพร่ Trusted List ฉบับใหม่ที่ระบุผลต่อกุญแจที่ถูก compromise ตาม Thai profile โดยต้องกำหนดฟิลด์สถานะและช่วงเวลาต่อกุญแจให้ตรวจได้ก่อนใช้งานจริง [research/42](../research/42-trusted-list-lote-jwt-format.md) + +#### 13.7.7.6 ตารางเปรียบเทียบ 4 รูปแบบการหมุนเวียนกุญแจ + +**[ข้อวิเคราะห์]** ตารางต่อไปนี้สรุปมิติสำคัญของการหมุนเวียนกุญแจทั้ง 4 รูปแบบ เพื่อให้ผู้พัฒนาเห็นความแตกต่างชัดเจน + +| มิติ | T0 Scheduled | T1 Compromise | T2 Early Decomm. | T3 Migration | +|------|:------------:|:-------------:|:----------------:|:-------------:| +| **Trigger** | นโยบายหมุนเวียนประจำปี | กุญแจรั่วไหล / ถูกขโมย | Compliance / ยุติใช้ | Algorithm upgrade | +| **SLA แจ้งเตือน** | ไม่ต้องแจ้ง | ≤ 15 นาที push / 6 ชม. pull | ≥ 90 วันล่วงหน้า | ≥ 30 วันล่วงหน้า | +| **Grace Period** | ไม่กำหนด | 0 (ทันที) | ≥ 90 วัน | ≥ 30 วัน | +| **Sign Campaign ด้วย key** | ไม่ต้อง sign | key ใหม่ (key-2) | key ใดก็ได้ | key ใดก็ได้ | +| **Push notification** | ไม่ต้อง | ✅ Required | ✅ ที่ 30/7/1 วัน | ✅ ที่ 14/3 วัน | +| **Pull endpoint** | ไม่ต้อง | ✅ Required | ✅ Required | ✅ Required | +| **VC เดิมใช้ได้ไหม** | ✅ จนกว่า VCs จะหมดอายุ | ❌ verify fail ทันที | ✅ จนถึง deadline | ✅ จนถึง deadline | +| **ต้อง reissue หรือไม่** | ❓ ตามนโยบาย | ✅ บังคับ | ✅ บังคับ (ก่อน deadline) | ✅ แนะนำ | +| **Mark VC เดิมเป็น `rotated`** | ไม่บังคับ | ✅ บังคับ (พร้อม reissue) | ✅ บังคับ (เมื่อ reissue) | ✅ แนะนำ (เมื่อ reissue) | +| **TL update ข้อมูลกุญแจตาม Thai profile** | ไม่บังคับ | ✅ ตามเป้าหมายฉุกเฉิน [A-TM §I3] | ✅ ตาม deadline | ✅ ตาม deadline | +| **Wallet block UI** | ไม่ | ✅ modal blocking | ไม่ (in-app banner) | ไม่ (in-app banner) | + +**[ข้อวิเคราะห์]** ข้อสังเกตที่ผู้พัฒนาต้องไม่สับสน มีดังนี้ + +1. **T0 transparent** ต่างจาก T1–T3 ตรงที่ไม่มี deadline และไม่มีกลไกแจ้ง wallet เนื่องจาก `key-1` ยังอยู่ใน `assertionMethod` และ VC ที่ลงด้วยกุญแจนี้ยังตรวจสอบได้ +2. **T1 มี SLA สั้นที่สุด** (15 นาที) และเป็น trigger เดียวที่ต้อง sign campaign ด้วยกุญแจใหม่ เพราะต้องกันผู้โจมตีปลอม campaign ยกเลิกเหตุฉุกเฉิน +3. **T2 มี grace period ยาวที่สุด** (≥ 90 วัน) เพราะไม่มีเหตุเร่งด่วนด้านความปลอดภัย แต่ต้องการเวลาให้ผู้ถือออก VC ใหม่อย่างทั่วถึง +4. **ทั้ง 4 รูปแบบ** ต้องมี audit log และประวัติ KSN เพื่อให้ตรวจสอบย้อนหลังได้ตาม [A-KD08 §8] + +**[ช่องว่าง G-04 — มีนัยด้านการปฏิบัติตามข้อกำหนด]** แม้เอกสารสถาปัตยกรรม [A-TM §I3] จะกำหนด SLA แพร่กระจายการเพิกถอนฉุกเฉินภายใน 1 ชั่วโมงสำหรับกรณี Issuer key compromise แต่กลไก dual-channel (push + pull) ที่บันทึกไว้ใน [research/07-1] อิงกับ push notification ผ่าน wallet provider ซึ่งไม่มีในเอกสารสถาปัตยกรรมระดับ spec ปัจจุบัน ETDA **MUST** กำหนดสัญญาการให้บริการ (SLA) ระหว่าง สพธอ. กับ wallet provider ว่าด้วยเวลาแจ้งเตือน push notification สำหรับ T1 ให้ชัดเจน และ **MUST** กำหนดให้ wallet unit ตรวจ pull endpoint ทุก 6 ชั่วโมงเป็น safety net ก่อนออกข้อกำหนดการตรวจประเมิน + +--- + +## 13.8 ช่องว่างที่เกี่ยวข้อง + +**[ช่องว่าง]** ช่องว่าง G-02, G-03 และ G-04 ที่พบในบทนี้มีรายละเอียดอยู่ในหัวข้อข้างต้น (§13.4, §13.5 และ §13.7.7 ตามลำดับ) รายการรวมของช่องว่างทั้งหมดเพื่อ escalate ต่อ ETDA Security Team อยู่ในบทที่ 14 §14.4 บทนี้จึงไม่ทำซ้ำตารางรวมดังกล่าว + +--- + +{/* METADATA (agent-only — not rendered to readers) +## 13.9 References + +### 13.9.1 แหล่งข้อมูลหลัก — เอกสารสถาปัตยกรรมในโครงการ + +วันที่เข้าถึงทุกไฟล์: **2026-08-07** โดยอ้างสถานะ repository ณ เวอร์ชันเอกสาร 1.0.0 (อัปเดตเพิ่ม research/07 และ research/07-1 สำหรับ §13.7.7) + +| รหัส | เอกสาร | เวอร์ชันที่ระบุในไฟล์ | +|------|--------|---------------------| +| A-ARCH | [../architecture/01-architecture.md](../architecture/01-architecture.md) — สถาปัตยกรรมความน่าเชื่อถือแบบ Trusted List | v2.3 | +| A-TM | [../architecture/phase2/trustlist/10-threat-model.md](../architecture/phase2/trustlist/10-threat-model.md) — Trust List Verification: Threat Model & Mitigations | Draft v1.0 | +| A-KD08 | [../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md](../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md) — Key Rotation & Lifecycle | Draft v1.0 | +| A-VRP | [../policy/01-verifier-registration-policy.md](../policy/01-verifier-registration-policy.md) — นโยบายการลงทะเบียนผู้ตรวจสอบ | Draft v1.0 | +| research/41 | [../research/41-trustlist-serving-filecdn-etag-binary.md](../research/41-trustlist-serving-filecdn-etag-binary.md) — Trustlist ผ่าน File/Edge CDN และ lazy revalidation | v1.10 | +| research/07 | [../research/07-issuer-key-rotation.md](../research/07-issuer-key-rotation.md) — Issuer Key Rotation (did:web) — 4 สถานะของกุญแจผู้ออก (Created/Active/Inactive/Decommissioned) และ 3 scenarios ที่สมมุติฐาน transparent พัง | v2.1 | +| research/07-1 | [../research/07-1-issuer-key-rotation-wallet-notification.md](../research/07-1-issuer-key-rotation-wallet-notification.md) — Issuer Key Rotation: Wallet Notification & Re-issue Campaign — Campaign Protocol, FSM M₁₃, API endpoints สำหรับ T1/T2/T3 | v1.0 | +| บทที่ 10 | [10-wallet-unit-attestation.md](10-wallet-unit-attestation.md) — Wallet Unit Attestation (WUA) — บทภายในเล่ม (ARF) แหล่งของ §13.7.5 (การเพิกถอน WIA/KA และ cascade) สืบย้อนไปยัง EUDI ARF 2.9.0 TS3 และ CIR 2024/2977 Art. 5(4)(b) | v1.6 | + +### 13.9.2 มาตรฐานภายนอกที่อ้างผ่านเอกสารข้างต้น + +เอกสารนี้ไม่อ้างมาตรฐานภายนอกโดยตรง รายการต่อไปนี้คือมาตรฐานที่ไฟล์สถาปัตยกรรมระบุไว้เป็นแหล่งข้อมูลของตน และปรากฏในเนื้อหาของบทนี้ + +| มาตรฐาน | ส่วนที่อ้าง | ไฟล์ที่อ้าง | +|---------|-----------|-----------| +| IETF Token Status List | `draft-ietf-oauth-status-list-18` (architecture baseline); current technical reference: `draft-ietf-oauth-status-list-21` [13] (`0x03` application-specific; Thai profile may define `rotated`) | A-ARCH, A-TM §10, A-KD08 §9 | +| OID4VP 1.0 Final | §5.10, §11 Security Considerations, §11.5, §11.6 | A-TM §10, §V1, §V4, §V5 | +| SD-JWT VC (draft-ietf-oauth-sd-jwt-vc) | §4.1 Key Binding JWT, §6 | A-TM §10, §W6 | +| CIR (EU) 2024/2979 | Wallet requirements (Art. 5, 6, 7 — รวมการหมุนเวียนกุญแจ) | A-KD08 §8 | +| CIR (EU) 2024/2977 | PID issuance (Art. 5(4)(b) — cascade revocation เมื่อ wallet unit ถูกยกเลิก) | A-KD08, บทที่ 10 §10.5.3 | +| W3C DID Core | Data Model (ข้อจำกัดเรื่องสถานะรายกุญแจ) | research/07 | + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 12 — Key Management และ Trusted List Deployment](12-key-management-and-trustlist-deployment.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 14 — ความมั่นคงปลอดภัย: Threat Model และ Conformance ➡️](14-security-threat-model-and-conformance.md) diff --git a/docs/thai-vc-arf/14-security-threat-model-and-conformance.md b/docs/thai-vc-arf/14-security-threat-model-and-conformance.md new file mode 100644 index 0000000..723ef42 --- /dev/null +++ b/docs/thai-vc-arf/14-security-threat-model-and-conformance.md @@ -0,0 +1,217 @@ +--- +description: "14. ความมั่นคงปลอดภัย: Threat Model และรายการตรวจ Conformance — Thai VC ARF 2.0 DRAFT 0" +--- + +# 14. ความมั่นคงปลอดภัย: Threat Model และรายการตรวจ Conformance + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📐 Specification — Draft สำหรับการทบทวนเชิงกำกับดูแล (S8, MASA-129 → MASA-150) +> **เวอร์ชันเอกสาร:** 1.0.2 (2026-08-06) — ตัดการอ้างถึง Phase 3 ในช่องว่าง G-05 (§14.2) เปลี่ยนเป็น "แนวทางในอนาคต" ตามมติให้ยกเลิกการแบ่งระยะ (MASA-157) +> **เวอร์ชันเอกสาร:** 1.0.1 (2026-08-06) — ตัดข้อมูล Access Certificate และกลไก `cnf.jwk` ใน Verifier Attestation ออกจากช่องว่าง G-07 (§14.4) และลบแหล่งอ้างอิง A-ACP ที่ไม่ถูกอ้างแล้ว ให้สรุป G-07 ตรงกับมติใน §12.2.1 (soft key / TEE-WSCD / HSM และประกาศ public key ผ่าน Trusted List หรือ `did:web`) (MASA-153) +> **เวอร์ชันเอกสาร:** 1.0.0 (2026-08-06) +> **แหล่งข้อมูล:** เอกสารสถาปัตยกรรมภายใต้ `th/architecture/` เท่านั้น — ดู §14.5 References +> **ขอบเขต:** เอกสารกำกับดูแลและข้อกำหนดสำหรับการตรวจประเมิน ห้ามตีความเป็นผลทดสอบ production +> **เอกสารที่เกี่ยวข้อง:** [11-cryptographic-suites.md](11-cryptographic-suites.md), [12-key-management-and-trustlist-deployment.md](12-key-management-and-trustlist-deployment.md), [13-vc-status-and-revocation.md](13-vc-status-and-revocation.md), [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +บทที่ 14 รวม threat model, abuse case, รายการตรวจ conformance ที่ตรวจสอบได้ และสรุปช่องว่างที่ต้อง escalate ของทั้งสามเรื่องในบทที่ 11–13 คือ cryptographic suites, key management/Trusted List deployment และ VC status/revocation ไว้ในบทเดียว เพื่อให้ผู้ตรวจประเมินใช้เป็นกรอบเดียวกัน + +--- + +## 14.1 ขอบเขตและการจำแนกข้อความ + +หัวข้อนี้รวม threat model และรายการตรวจ conformance ของบทที่ 11–13 คือ (1) Cryptographic Suites (2) Key Management/Rotation และ Trusted List Deployment (3) VC Revocation ด้วย IETF Token Status List + +**กฎการอ้างอิงของหัวข้อนี้:** ข้อกำหนดทุกข้อ **MUST** สืบย้อนไปยังไฟล์ภายใต้ `th/architecture/` มาตรฐานภายนอกอ้างผ่านไฟล์สถาปัตยกรรมที่ระบุมาตรฐานนั้นไว้แล้ว หัวข้อนี้ **MUST NOT** สร้างข้อกำหนดใหม่ที่ไม่มีฐานในเอกสารสถาปัตยกรรม + +การจำแนกข้อความ: + +| ป้าย | ความหมาย | +|------|----------| +| **[ข้อเท็จจริง]** | ข้อความที่ปรากฏในเอกสารสถาปัตยกรรมโดยตรง พร้อมเลขอ้างอิง | +| **[ข้อวิเคราะห์]** | การประมวลข้อเท็จจริงหลายแหล่งเข้าเป็นข้อกำหนดเชิงกำกับดูแล | +| **[ช่องว่าง]** | ประเด็นที่เอกสารสถาปัตยกรรมยังขัดกันเองหรือยังไม่กำหนด ต้องมีมติก่อนบังคับใช้ | + +คำ **MUST / MUST NOT / SHOULD / MAY** ใช้ตามความหมายเชิงข้อกำหนด: ต้อง / ห้าม / ควร / อาจ + +--- + +## 14.2 Threat Model และ Abuse Case + +**[ข้อเท็จจริง]** เอกสารสถาปัตยกรรมใช้กรอบ **STRIDE ร่วมกับ VC Trust Triangle** ครอบคลุม 4 actor และกำหนดรหัสภัยคุกคามไว้ 32 รายการ [A-TM §1, §8.1] + +| ชุด | ขอบเขต | จำนวน | +|-----|--------|:-----:| +| W1–W8 | Wallet ปลอมหรือถูกฝัง malware | 8 | +| I1–I8 | Issuer ปลอมหรือถูก impersonate | 8 | +| V1–V9 | Verifier ปลอม MITM หรือขอข้อมูลเกิน | 9 | +| T1–T7 | โครงสร้างพื้นฐาน Trusted List ถูกโจมตี | 7 | + +**[ข้อเท็จจริง]** ข้อความสำคัญของ threat model คือ ทุก attack ต้องผ่านทุก checkpoint จึงจะถึงสถานะ `BREACH_RISK` ซึ่งเกิดได้เมื่อทุก layer fail พร้อมกันเท่านั้น [A-TM §2.0] + +### 14.2.1 Abuse Case ที่เกี่ยวกับ Crypto, Key และ Status โดยตรง + +**[ข้อวิเคราะห์]** ตารางนี้คัดรหัสภัยคุกคามที่เกี่ยวกับสามหัวข้อของเอกสารนี้ พร้อมมาตรการที่ตรวจสอบได้ ทุกแถวอ้างรหัสจาก [A-TM] + +| รหัส | Abuse case | ผลกระทบ | มาตรการที่ตรวจสอบได้ | +|------|-----------|---------|---------------------| +| W2 | Wallet binary ถูกแก้ให้ข้ามการตรวจลายมือชื่อ TL | ยอมรับ TL ปลอม | pin TL public key ใน binary, code signing, runtime integrity check และถ้า pubkey ไม่ตรงให้ app block ตัวเอง | +| W4 | Wallet ใช้ soft key ที่ export ได้ | กุญแจ holder ถูกขโมยไปสร้าง wallet ปลอม | Issuer ปฏิเสธกุญแจที่ไม่มี `key_storage_verified` และตรวจ WSCD attestation chain; หากจะใช้ข้อกำหนดฮาร์ดแวร์จาก Trusted List ต้องกำหนดฟิลด์และกฎใน Thai profile ก่อน [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| W5 | TL rollback หรือ downgrade | ใช้ TL เก่าที่องค์กรหรือบริการถูกเพิกถอนแล้วยังปรากฏว่า active | ตรวจ `LoTE.ListAndSchemeInformation.LoTESequenceNumber` ไม่ให้ย้อนกลับ และตรวจ `NextUpdate` ก่อนใช้ cache [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| W6 | Holder ส่ง VC และ key handle ให้ผู้อื่น | ใช้ VC ของบุคคลอื่น | ผูก `cnf` กับกุญแจใน WSCD ที่ส่งต่อไม่ได้, ตรวจ PoP ใน VP และ biometric gate ก่อนปล่อยกุญแจ | +| W7 | Cache poisoning บนเครื่องที่ root | ใช้ TL ที่ถูกแก้ในเครื่อง | re-sign cached TL ด้วยกุญแจจาก WSCD ก่อนเก็บ, encrypted storage และตรวจ HMAC ทุกครั้งที่ load | +| I3 | กุญแจ Issuer เก่าถูกขโมยแต่ยังถูก trust | ปลอม VC ด้วยกุญแจเก่า | Thai profile ต้องกำหนดสถานะและช่วงเวลาต่อกุญแจ; หากตรวจไม่ได้ให้ปฏิเสธ [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| I6 | Status List endpoint ถูก takeover | ส่งค่า active ให้ VC ที่ถูกเพิกถอน | Status List ต้องเป็น signed JWS; หากจะอ้าง URI จาก Trusted List ต้องกำหนดตำแหน่ง URI และกฎการผูกกับ Issuer ใน Thai profile ก่อน ห้ามเชื่อ URI จาก `status` claim เพียงลำพัง และต้องตรวจลายมือชื่อด้วยกุญแจที่อนุญาต [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| I7 | DID Document ถูกแก้ให้เปลี่ยน controller key | หลอกให้ trust กุญแจของผู้โจมตี | TL เป็นแหล่งข้อมูลอ้างอิงหลักของกุญแจ, monitor การเปลี่ยนกุญแจใน DID Document และเผยแพร่ TL ใหม่ภายใน 24 ชั่วโมง | +| I8 | Replay Issuer ที่ถูกเพิกถอนแล้ว | Wallet ที่ cache เก่ายังยอมรับ VC | Verifier ตรวจ Status List รายใบและสถานะ Issuer ใน Trusted List ที่ยังไม่เกิน `LoTE.ListAndSchemeInformation.NextUpdate` [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| V7 | ใช้ Verifier Attestation ที่หมดอายุจาก cache | Verifier ที่หมดสิทธิ์ยังขอข้อมูลได้ | เพดาน TTL ที่ override ไม่ได้, ห้าม cache attestation และตรวจ `iat` กับ `exp` โดย clock skew ไม่เกิน 60 วินาที | +| V8 | Verifier ถูก compromise หลัง onboard | รายการ Verifier ยังมีผลใช้ได้ | สพธอ. ต้องเผยแพร่การเปลี่ยนสถานะ Verifier เป็น `suspended` หรือ `withdrawn` ตามฟิลด์ที่ Thai profile กำหนด; Wallet ดึงไฟล์ Verifier Trusted List ฉบับเต็มเมื่อเกิดการตรวจสอบ และตรวจสถานะก่อนนำเสนอ [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| T1 | HSM ที่ลงลายมือชื่อ TL ถูก breach | ลงลายมือชื่อ TL ปลอมได้ | กุญแจอยู่ใน HSM ที่ export ไม่ได้, quorum M-of-N แบบ 3-of-5, emergency key แบบ air-gapped และ HSM กระจายตามภูมิศาสตร์ | +| T4 | Rollback หรือ freeze attack ด้วย TL เก่าที่ลายมือชื่อถูกต้อง | ไม่เห็นการเพิกถอนล่าสุด | ตรวจ `LoTESequenceNumber`, `ListIssueDateTime` และ `NextUpdate` ใน `LoTE.ListAndSchemeInformation` พร้อมตรวจ clock skew [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| T5 | เนื้อหา JWT ที่เผยแพร่กับข้อมูลต้นทางไม่ตรงกัน | consumer ตัดสิน trust จากข้อมูลผิด | ตรวจความสอดคล้องของ payload แบบ LoTE ใน JWT ทั้งสามรายการกับข้อมูลต้นทางก่อนลงลายมือชื่อ และใช้ CI gate ปฏิเสธเมื่อพบความคลาดเคลื่อน [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| T6 | ผู้ดูแล TL ภายในกระทำโดยทุจริต | แก้รายการหรือขอบเขตสิทธิ์ | Transparency Log แบบ append-only, 2-person rule ที่แยกหน้าที่ admin ไม่เท่ากับ approver และไม่เท่ากับ signer, public diff feed และบันทึก privileged session | + +**[ข้อเท็จจริง]** หลักการ defense-in-depth ที่บันทึกไว้ 4 ข้อคือ ทุกการตัดสินใจผ่านหลาย layer / Trusted List เป็นแหล่งข้อมูลอ้างอิงหลักของกุญแจและขอบเขตสิทธิ์ตาม Thai profile / มีการเพิกถอนกุญแจ Issuer แบบเรียลไทม์ และเพิกถอนผู้ตรวจสอบเอกสารผ่านการเปลี่ยนสถานะใน Trusted List / มี append-only log ที่ตรวจสอบได้จากภายนอก [A-TM §6] ทั้งนี้ [JWT ตัวอย่างแบบ LoTE](../research/42-trusted-list-lote-jwt-format.md) ยังไม่แสดงฟิลด์ขอบเขตสิทธิ์ครบถ้วน + +**[ช่องว่าง G-05]** threat model ระบุประเด็นที่ยังไม่ปิดไว้เอง 5 รายการ ได้แก่ การย้ายไป PQC ในปี 2028 เป็นต้นไป การ compromise ที่ผู้ผลิต WSCD ซึ่งอยู่นอกขอบเขต TL การทำ side-channel บนกุญแจ holder ซึ่งเป็นความรับผิดของผู้ผลิต การต้านการสอดส่องเป็นวงกว้างด้วย BBS+ ซึ่งเป็นแนวทางในอนาคต และ Bridge TL specification ที่กำหนดกรอบ Q4 2026 [A-TM §9] เอกสารนี้ไม่ขยายขอบเขตเกินรายการดังกล่าว + +--- + +## 14.3 Security Checklist ที่ตรวจสอบได้ + +**[ข้อวิเคราะห์]** รายการนี้ประกอบจาก pen-test scope checklist สำหรับ onboarding ผู้ผลิต Wallet [A-TM §8.2] ขอบเขต conformance ของ Issuer และ Verifier [A-TM §8.3] และรายการตรวจประเมินของ ETDA [A-ARCH §8] ทุกแถวผูกกับรหัสภัยคุกคามหรือรหัสข้อตรวจที่มีอยู่แล้ว + +### 14.3.1 Wallet + +| # | ข้อกำหนด | รหัสที่เกี่ยวข้อง | หลักฐานที่ต้องมี | เกณฑ์ผ่าน | +|---|---------|-----------------|-----------------|-----------| +| SC-01 | App attestation ทำงานจริง | W1 | ผล Play Integrity หรือ App Attest ตอน enrollment | enrollment จาก app ที่ไม่ผ่าน attestation ถูกปฏิเสธ | +| SC-02 | การตรวจลายมือชื่อ TL แก้ไม่ได้ | W2 | code review และ binary ที่ pin pubkey | TL ที่ลายมือชื่อผิดถูกปฏิเสธทุกกรณี | +| SC-03 | บังคับขอบเขตสิทธิ์ตาม Thai profile โดยข้ามไม่ได้ | W3, V3 | negative conformance test เมื่อ Thai profile กำหนดฟิลด์ขอบเขตสิทธิ์แล้ว | VC หรือคำขอที่อยู่นอก scope ถูกปฏิเสธ และผู้ใช้ override ไม่ได้ [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| SC-04 | กุญแจใน WSCD export ไม่ได้ | W4 | WSCD attestation chain | กุญแจที่ไม่มี `key_storage_verified` ถูกปฏิเสธ | +| SC-05 | บังคับ `LoTESequenceNumber` ไม่ย้อนกลับ | W5, T4 | fixture JWT ที่ `LoTESequenceNumber` ย้อนหลังหรือ `NextUpdate` หมดอายุ | JWT ที่ย้อนหลังหรือหมดอายุถูกปฏิเสธ [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| SC-06 | ตรวจ `cnf` key binding | W6, V9 | fixture ที่ `cnf` ไม่ตรง | VP ที่ `cnf` ไม่ตรงถูกปฏิเสธ | +| SC-07 | Cache integrity ของ TL | W7 | ผลตรวจ HMAC และการทดสอบแก้ cache บนเครื่อง root | cache ที่ถูกแก้ถูกตรวจจับและไม่ถูกใช้ | +| SC-08 | ป้องกัน overlay และ phishing UI | W8, V6 | ผลทดสอบ anti-overlay | prompt สำหรับยืนยันสำคัญมาจาก WSCD และ UI แสดงชื่อจาก TL เท่านั้น | +| SC-09 | บังคับ `client_id_scheme` อย่างเข้มงวด | V1, V4 | fixture ที่ SAN ไม่ตรงและ `response_uri` นอก SAN | ถูกปฏิเสธทั้งสองกรณี | +| SC-10 | ไม่ cache Verifier Attestation | V7 | code review และ fixture ที่หมดอายุ | revalidate ทุกครั้งที่นำเสนอ และ clock skew ที่ยอมรับไม่เกิน 60 วินาที | +| SC-11 | ตรวจสถานะ Verifier ใน Trusted List | V8 | fixture JWT แบบ LoTE ที่มีสถานะ `suspended` และ `withdrawn` ตามฟิลด์ที่ Thai profile กำหนด | ปฏิเสธ **ก่อน** แสดงหน้าขอความยินยอม; หากไม่มีฟิลด์สถานะที่ตรวจสอบได้ ให้ปฏิเสธ [research/42](../research/42-trusted-list-lote-jwt-format.md) | + +### 14.3.2 Issuer + +| # | ข้อกำหนด | รหัสที่เกี่ยวข้อง | หลักฐานที่ต้องมี | เกณฑ์ผ่าน | +|---|---------|-----------------|-----------------|-----------| +| SC-12 | กุญแจลงลายมือชื่ออยู่ใน HSM | A-ARCH §8 I1 | ใบรับรอง HSM | ระดับตรงตามข้อกำหนด และไม่มีทางส่งออกกุญแจแบบ plaintext | +| SC-13 | พิธีสร้างกุญแจมีพยาน | A-ARCH §8 I2 | รายงานพิธีและบันทึกวิดีโอ | ครบทั้งพยานและบันทึก | +| SC-14 | แผนหมุนเวียนกุญแจประจำปี | A-ARCH §8 I3 | เอกสารนโยบาย | ระบุรอบ ผู้รับผิดชอบ และขั้นตอน rollback | +| SC-15 | Status List endpoint ตรงตามรูปแบบ | A-ARCH §8 I7 | ผลทดสอบ endpoint | ส่งกลับ `application/statuslist+jwt` ที่ `typ` ถูกต้อง | +| SC-16 | SLA อัปเดต Status List | A-ARCH §8 I8 | เอกสาร SLA และ log การอัปเดต | ไม่เกิน 15 นาที และวัดจาก log ได้ | +| SC-17 | Status List JWT ครบองค์ประกอบ | A-ARCH §8 I9 | ตรวจ token | ลงลายมือชื่อด้วยกุญแจผู้ออก และมีทั้ง `exp` กับ `ttl` โดย `ttl` ≤ `exp` | +| SC-18 | Rotation endpoint ตรวจ PoP ด้วยกุญแจเดิม | A-KD08 §7 | fixture PoP ที่ลงลายมือชื่อด้วยกุญแจผิด | คำขอที่ PoP ไม่ถูกต้องถูกปฏิเสธ | +| SC-19 | mark VC เดิมเป็น `rotated` | A-KD08 §3, §8 | log การหมุนเวียนและสถานะใน list | VC เดิมเปลี่ยนสถานะสำเร็จก่อน Wallet ลบ key handle | +| SC-20 | ตรวจ WSCD attestation ก่อนออก VC | W4, A-KD06 | ผลตรวจ attestation chain | กุญแจที่เป็น software หรือมาจากเครื่อง root ถูกปฏิเสธ | + +### 14.3.3 Verifier + +| # | ข้อกำหนด | รหัสที่เกี่ยวข้อง | หลักฐานที่ต้องมี | เกณฑ์ผ่าน | +|---|---------|-----------------|-----------------|-----------| +| SC-21 | ตรวจการอนุญาตของ Issuer ผ่าน Trusted List | A-ARCH §8 V2 | code review | ตัดสิน trust จาก entry ใน Trusted List เท่านั้น ไม่ใช้ผล resolve DID เป็นหลักฐานการอนุญาต | +| SC-22 | ตรวจ KB-JWT | A-ARCH §8 V3 | ผลทดสอบ | KB-JWT ที่ผิดถูกปฏิเสธ | +| SC-23 | ตรวจ Status List JWT ครบสามขั้น | A-ARCH §8 V4 | fixture ที่ลายมือชื่อผิด, `typ` ผิด, `exp` หมด และ index เกินขอบเขต | ยอมรับเฉพาะ fixture ที่ถูกต้องครบทุกขั้น | +| SC-24 | ตรวจแหล่ง status URI ตาม Thai profile | I6 | code review และ fixture ที่ `status` claim ชี้ไป host อื่น เมื่อ profile กำหนด URI อ้างอิงแล้ว | ไม่เชื่อ URI ที่ credential กำหนดเองโดยไม่มีการตรวจผูกกับแหล่งที่อนุญาต [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| SC-25 | ตรวจลายมือชื่อก่อนคลาย ZLIB | I6 | code review และ fixture ที่ลายมือชื่อผิดแต่ payload ใหญ่ | ไม่คลายข้อมูลที่ยังไม่ผ่านการตรวจลายมือชื่อ | +| SC-26 | ตรวจ `iat` ของ VC ในช่วงอายุกุญแจ | I3 | fixture VC ที่ `iat` อยู่นอกช่วง | ถูกปฏิเสธ | +| SC-27 | ตรวจ `nonce` และ `aud` | V5 | fixture VP ที่ `aud` เป็นของ Verifier อื่น | ถูกปฏิเสธ และอายุ token ไม่เกิน 5 นาที | +| SC-28 | ทดสอบเจาะระบบ VP verification endpoint | A-ARCH §8 V9 | รายงาน pen test | ไม่มีช่องข้ามการตรวจลายมือชื่อหรือการตรวจสถานะ | + +### 14.3.4 โครงสร้างพื้นฐาน Trusted List (ETDA) + +| # | ข้อกำหนด | รหัสที่เกี่ยวข้อง | หลักฐานที่ต้องมี | เกณฑ์ผ่าน | +|---|---------|-----------------|-----------------|-----------| +| SC-29 | quorum M-of-N ในการลงลายมือชื่อ TL | T1 | บันทึกการลงลายมือชื่อ | การลงลายมือชื่อด้วยผู้ถือ share น้อยกว่า quorum ไม่สำเร็จ | +| SC-30 | 2-person rule และแยกหน้าที่ | I4, T6 | signed change log และบันทึก session | admin ไม่เท่ากับ approver และไม่เท่ากับ signer พร้อม audit record ที่ลงลายมือชื่อทุกการแก้ไข | +| SC-31 | Transparency Log แบบ append-only | I4, T4, T6 | public diff feed และผล query witness | ทุกการเผยแพร่ปรากฏใน log และตรวจสอบจากภายนอกได้ | +| SC-32 | ความสอดคล้องระหว่างข้อมูลต้นทางกับ JWT แบบ LoTE | T5 | ผล CI gate ของ JWT ทั้งสามรายการ | CI block การเผยแพร่เมื่อ payload ไม่ตรงกับข้อมูลต้นทาง [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| SC-33 | Multi-CDN และ DNS fallback | T2, T3 | ผลทดสอบ fault injection | ปิด primary แล้วยัง fetch TL ได้จาก endpoint สำรอง | +| SC-34 | ขั้นตอนเพิกถอนฉุกเฉิน | I3, T1 | บันทึกการซ้อม | การเพิกถอนแพร่กระจายภายในเป้าหมายที่กำหนด และมี emergency key แบบ air-gapped | + +> **ห้ามรายงานว่า "ผ่าน"** จนกว่าจะมี artifact จากการรันจริง ได้แก่ hash ของ fixture คำสั่งที่ใช้ timestamp สภาพแวดล้อม และผลลัพธ์ เอกสารฉบับนี้ยัง**ไม่มี**ผลการทดสอบใด ๆ แนบมา + +**[ข้อเท็จจริง]** ขอบเขต TTA Conformance v2.0 สาย Trusted List กำหนด negative test case เพิ่ม 32 รายการ แบ่งเป็น W-series 8 รายการ I-series 8 รายการ V-series 9 รายการ และ T-series 7 รายการ [A-TM §8.1] และทุก state ที่อยู่ในคอลัมน์ Critical States ของตาราง mapping **MUST** มีทั้ง unit test และ negative conformance test สำหรับรหัสภัยคุกคามที่เกี่ยวข้อง [A-TM §7] + +--- + +## 14.4 สรุปช่องว่างที่ต้อง Escalate + +**[ช่องว่าง]** ประเด็นทั้งหมดที่พบจากการตรวจความสอดคล้องภายใน `th/architecture/` เรียงตามความสำคัญ + +| รหัส | ประเด็น | นัยสำคัญ | ผู้ตัดสิน | อ้างอิงที่ขัดกัน | +|------|--------|---------|----------|-----------------| +| G-02 | เอกสารต้นทางบางแห่งประกาศ `bits: 1` แต่กำหนด status `SUSPENDED` (`0x02`) และ Thai-profile `rotated` (`0x03`) ซึ่งแทนด้วย 1 บิตไม่ได้ | interoperability — issuer ต้องใช้ `bits: 2` ขึ้นไปสำหรับ status เหล่านี้; `rotated` เป็นค่าเฉพาะ Thai profile ไม่ใช่ status ที่ IETF ลงทะเบียนหรือข้อกำหนดที่ยืนยันได้จาก CIR โดยตรง | ETDA Security Team | [A-ARCH §ลำดับที่ 3] กับ [A-KD08 §8, §9]; TSL draft-21 §§4.1, 7.1, 14.5.2 | +| G-03 | `ttl` 12 ชั่วโมงขัดกับ SLA อัปเดต 15 นาทีและเป้าหมายเพิกถอนฉุกเฉิน 1 ชั่วโมง | ความมั่นคงปลอดภัย เพราะ Verifier อาจไม่เห็นการเพิกถอนได้นานถึง 12 ชั่วโมง | ETDA Security Team | [A-ARCH §ลำดับที่ 3] กับ [A-ARCH §8 I8] และ [A-TM §I3] | +| G-06 | เอกสารสถาปัตยกรรมกำหนด algorithm profile แบบ mandatory และ optional ไว้เฉพาะกุญแจ Wallet Level 1–3 ยังไม่มี profile ที่บังคับสำหรับกุญแจลงลายมือชื่อ VC ของ Issuer และกุญแจ TL ของ ETDA มีเพียงค่าที่ปรากฏในตัวอย่าง | ต้องมี profile ที่บังคับได้ก่อนใช้เป็นเกณฑ์ตรวจประเมิน | ETDA Security Team | [A-KD01 §9] เทียบกับ [A-ARCH §ลำดับที่ 3] | +| G-01 | HSM ของ Issuer กำหนด FIPS 140-2 Level 3 ขณะที่ HSM ของ ETDA กำหนด FIPS 140-3 Level 3 ขึ้นไป | **มีมติแล้ว (ดู §12.2):** เกณฑ์ขั้นต่ำคือ FIPS 140-2 Level 3 [N1] และยอมรับ FIPS 140-3 Level 3 [N2] เป็นมาตรฐานสืบทอด เนื่องจาก NIST เปลี่ยนใบรับรอง FIPS 140-2 เป็น Historical วันที่ 21 กันยายน 2569 [N3] | ETDA Security Team | [A-ARCH §8 I1] กับ [A-TM §T1] | +| G-07 | ผู้ตรวจสอบเอกสารต้องมีกุญแจลงลายมือชื่อ Request Object และการบังคับใช้ HSM ทุกรายมีต้นทุนสูง | **มีมติแล้ว (ดู §12.2.1):** กำหนดทางเลือกการเก็บกุญแจ 3 แบบตามระดับความเชื่อมั่น คือ soft key (**MAY**) TEE หรือ WSCD (**ควร** เป็นอย่างน้อย) และ HSM (**MAY** ความเชื่อมั่นสูงสุดแต่ต้นทุนสูง) ทุกแบบต้องประกาศ public key ผ่าน Trusted List entry หรือ `did:web` ที่ `/.well-known/did.json` | ETDA Security Team | [A-HSM §2], [A-VRP] | +| G-05 | ประเด็นค้างที่ threat model ระบุไว้เอง 5 รายการ รวมถึงการย้ายไป PQC และ Bridge TL | ต้องมีเจ้าภาพและกรอบเวลา | ETDA Security Team | [A-TM §9] | + +**[ข้อวิเคราะห์]** การจัดทำเอกสารนี้**ไม่พบ** critical security finding ที่ต้องหยุดงาน ช่องว่างข้างต้นเป็นความไม่สอดคล้องของเอกสารที่ต้องมีมติ และยังไม่มีหลักฐานว่าเป็นช่องโหว่ที่ถูกใช้โจมตีได้ทันที หากการทดสอบใน staging พบการข้ามการตรวจลายมือชื่อ การข้ามการตรวจสถานะ หรือการข้าม gate ของ Trusted List **MUST** หยุดการนำขึ้นใช้งานและรายงานทันที + +**[ข้อเท็จจริง]** threat model กำหนดตัวเองเป็น living document ที่ต้องปรับทุกไตรมาสหรือเมื่อมี attack surface ใหม่ ผู้ดูแลคือ ETDA Security Team และต้องทบทวนทุกครั้งที่ TL ขึ้น minor version [A-TM §สถานะเอกสาร] + +--- + +{/* METADATA (agent-only — not rendered to readers) +## 14.5 References + +### 14.5.1 แหล่งข้อมูลหลัก — เอกสารสถาปัตยกรรมในโครงการ + +วันที่เข้าถึงทุกไฟล์: **2026-08-04** โดยอ้างสถานะ repository ณ เวอร์ชันเอกสาร 1.0.0 + +| รหัส | เอกสาร | เวอร์ชันที่ระบุในไฟล์ | +|------|--------|---------------------| +| A-ARCH | [../architecture/01-architecture.md](../architecture/01-architecture.md) — สถาปัตยกรรมความน่าเชื่อถือแบบ Trusted List | v2.3 | +| A-TM | [../architecture/phase2/trustlist/10-threat-model.md](../architecture/phase2/trustlist/10-threat-model.md) — Trust List Verification: Threat Model & Mitigations | Draft v1.0 | +| A-KD01 | [../architecture/phase2/key-derivation/01-key-derivation-architecture.md](../architecture/phase2/key-derivation/01-key-derivation-architecture.md) — Key Derivation Architecture | Draft v1.0 | +| A-KD08 | [../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md](../architecture/phase2/key-derivation/08-key-rotation-lifecycle.md) — Key Rotation & Lifecycle | Draft v1.0 | +| A-KD06 | [../architecture/phase2/key-derivation/06-wscd-key-attestation.md](../architecture/phase2/key-derivation/06-wscd-key-attestation.md) — WSCD Key Attestation | Draft v1.0 | +| A-VRP | [../policy/01-verifier-registration-policy.md](../policy/01-verifier-registration-policy.md) — นโยบายการลงทะเบียนผู้ตรวจสอบ | Draft v1.0 | +| A-HSM | [../policy/07-hsm-and-schema-governance-policy.md](../policy/07-hsm-and-schema-governance-policy.md) — นโยบาย HSM Service Model และ Schema Governance | Draft v1.0 | + +### 14.5.2 มาตรฐานภายนอกที่อ้างผ่านเอกสารข้างต้น + +เอกสารนี้ไม่อ้างมาตรฐานภายนอกโดยตรง รายการต่อไปนี้คือมาตรฐานที่ไฟล์สถาปัตยกรรมระบุไว้เป็นแหล่งข้อมูลของตน + +| มาตรฐาน | ส่วนที่อ้าง | ไฟล์ที่อ้าง | +|---------|-----------|-----------| +| IETF Token Status List | Architecture baseline: `draft-ietf-oauth-status-list-18`; current technical reference: `draft-ietf-oauth-status-list-21` [13] (Internet-Draft) | A-ARCH, A-TM §10 | +| OID4VP 1.0 Final | §5.10, §11 Security Considerations, §11.5, §11.6 | A-TM §10, §V1, §V4, §V5 | +| OID4VCI 1.0 Final | §11 | A-TM §10 | +| SD-JWT VC (draft-ietf-oauth-sd-jwt-vc) | §4.1 Key Binding JWT, §6 | A-TM §10, §W6 | +| EU eIDAS ARF | §2.5, §6 WSCD, §6.6.3.8, Annex 2 Threat Model | A-TM §10, A-KD08, A-KD06 | +| CIR 2024/2979 | ข้อกำหนดการหมุนเวียนกุญแจ | A-KD08 | +| NIST SP 800-63 | IAL และ AAL | A-TM §10 | +| RFC 4033 | DNSSEC | A-TM §I1 | +| RFC 9162 | Certificate Transparency v2 | A-TM §I4, §10 | +| RFC 5891 และ Unicode TR 39 | IDN และการตรวจ homograph | A-TM §I2 | +| OWASP STRIDE | กรอบการทำ threat model | A-TM §1, §10 | +| Apple App Attest และ Android Key Attestation | กลไก attestation ระดับ platform | A-TM §W1, A-KD06 | + +### 14.5.3 แหล่งอ้างอิง NIST สำหรับข้อกำหนด HSM + +ระดับการรับรอง HSM ในหัวข้อนี้อ้างอิงมาตรฐานของ National Institute of Standards and Technology (NIST) โดยตรง เนื่องจากเอกสารสถาปัตยกรรม [A-ARCH §8 I1] และ [A-TM §T1] ระบุระดับ FIPS ไว้แล้ว รายการนี้จึงระบุแหล่งที่มาที่ตรวจสอบได้ของมาตรฐานดังกล่าว + +- [N1] NIST, "FIPS PUB 140-2 — Security Requirements for Cryptographic Modules", พฤษภาคม ค.ศ. 2001 (ปรับปรุงตาม Change Notice ธันวาคม ค.ศ. 2002) — https://csrc.nist.gov/pubs/fips/140-2/upd2/final +- [N2] NIST, "FIPS PUB 140-3 — Security Requirements for Cryptographic Modules", มีนาคม ค.ศ. 2019 — https://csrc.nist.gov/pubs/fips/140-3/final +- [N3] NIST, "Cryptographic Module Validation Program (CMVP) — FIPS 140-2 Transition" — ใบรับรองตาม FIPS 140-2 เปลี่ยนสถานะเป็น Historical ตั้งแต่วันที่ 21 กันยายน ค.ศ. 2026 — https://csrc.nist.gov/projects/cryptographic-module-validation-program + +--- + +**สถานะเอกสาร:** Living document — ทบทวนพร้อม [A-TM] ทุกไตรมาส หรือเมื่อ Trusted List ขึ้น minor version +**ผู้ดูแล:** ETDA Security Team + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 13 — VC Status และ Revocation](13-vc-status-and-revocation.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 15 — ภาคผนวก ➡️](15-appendix.md) diff --git a/docs/thai-vc-arf/15-appendix.md b/docs/thai-vc-arf/15-appendix.md new file mode 100644 index 0000000..daa6b13 --- /dev/null +++ b/docs/thai-vc-arf/15-appendix.md @@ -0,0 +1,220 @@ +--- +description: "15. ภาคผนวก — Thai VC ARF 2.0 DRAFT 0" +--- + +# 15. ภาคผนวก + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) พร้อมภาคผนวก ข ที่บันทึกการเปลี่ยนแปลงเป็นเวอร์ชัน 2.0 +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +ภาคผนวกนี้ประกอบด้วยสองส่วน ได้แก่ ส่วน ก ว่าด้วยการทำงานร่วมกัน (interoperability) ระหว่างผู้ออกเอกสาร (issuer) ผู้ถือเอกสาร (holder) และผู้ตรวจสอบเอกสาร (verifier) และส่วน ข ว่าด้วยบันทึกการเปลี่ยนแปลงจากเวอร์ชัน 1.1 เป็นเวอร์ชัน 2.0 + +สถานะปัจจุบันของรูปแบบเอกสารให้ยึด [บทที่ 5](05-standards-and-compliance.md): ระบบยังรองรับ W3C VCDM v1.1 สำหรับเอกสารเดิม และเพิ่ม SD-JWT VC (`dc+sd-jwt`) ใน ARF ฉบับนี้ ข้อความในส่วน ข บันทึกมติและการแก้ไขในอดีตตามลำดับเวลา + +## ก. การทำงานร่วมกัน (Interoperability) ระหว่าง Issuer, Holder และ Verifier + +{/* pdf page 53 */} + +![ภาพรวมของการศึกษา Digital Document](images/p53-0.png) + +**รูปที่ 28 ภาพรวมของการศึกษา Digital Document** + +การออกแบบแนวทางการ Interoperability ระหว่าง Issuer และ Wallet Holder และ Verifier ในโครงการ แสดงได้ดังรูปที่ 28 โดยมีขั้นตอน ดังนี้ + +(1) กำหนด Registry สำหรับการทดสอบขึ้นมา 1 Registry เพื่อให้ Issuer ทำการ Register + +(2) กำหนด Issuer เพื่อใช้ในการทดสอบ โดย Issuer จะทำการสร้าง DID ไว้ เพื่อใช้สำหรับส่งข้อมูล และทำการ Register กับ Registry ที่ได้ทำการจัดเตรียมไว้ + +(3) กำหนด Holder เพื่อใช้ในการ Request ข้อมูลกับทาง Issuer และรับข้อมูล VC ที่จะได้จาก Issuer รวมถึงส่งข้อมูลในรูปแบบ VP ให้กับทาง Verifier + +(4) กำหนด Verifier เพื่อใช้ในการรับข้อมูล VP จาก Holder พร้อมทั้งต้องตรวจสอบความถูกต้องของข้อมูล ตลอดจนการรับ-ส่งข้อมูลกับทาง DIF Universal Resolver + +(5) สร้าง http get เพื่อใช้ในการเข้าถึง Registry พร้อมกับส่งข้อมูลให้กับทาง DIF Universal Resolver + +{/* pdf page 54 */} + +--- + +{/* METADATA (agent-only — not rendered to readers) +## ข. บันทึกการเปลี่ยนแปลงจากเวอร์ชัน 1.1 เป็นเวอร์ชัน 2.0 + +> **ฐานเปรียบเทียบ:** Thai VC ARF เวอร์ชัน 1.1 กับเนื้อหาที่กำหนดสำหรับเวอร์ชัน 2.0 — จัดทำ 4 สิงหาคม 2569 + +### ข.1 วัตถุประสงค์ + +บันทึกนี้สรุปการเพิ่มและการเปลี่ยนแปลงสาระสำคัญใน Thai VC ARF เวอร์ชัน 2.0 เพื่อให้ผู้อ่านประเมินผลกระทบต่อการออก การเก็บ และการแสดง Verifiable Credential (VC) ได้โดยไม่ต้องเปรียบเทียบเอกสารทั้งสองฉบับทีละหน้า + +คำว่า **ต้อง (MUST)** **ควร (SHOULD)** และ **อาจ (MAY)** ในบันทึกนี้ใช้ตาม RFC 2119 และ RFC 8174 [S01] [S02] + +### ข.2 สรุปการเปลี่ยนแปลง + +| รหัส | สถานะ | รายการเปลี่ยนแปลง | ผลต่อผู้ดำเนินการ | +|---|---|---|---| +| CHG-01 | เพิ่ม | เพิ่ม Trust Model 3 (Trusted List + DID) เป็นกลไกความน่าเชื่อถือสำหรับ Issuer, Verifier และ Wallet Provider | ผู้เข้าร่วม MUST ตรวจลายมือชื่อ สถานะ บทบาท ช่วงเวลาที่มีผล และสิทธิ์ที่เกี่ยวข้องจาก ETDA Signed Trusted List ก่อนเชื่อถือเอนทิตี | +| CHG-02 | เพิ่ม | เพิ่ม §7 Interoperability อธิบายการทำงานร่วมกันข้าม ecosystem และข้อจำกัดในการเชื่อมโยงกับ EU | ผู้ให้บริการ SHOULD รองรับมาตรฐานเปิดและกำหนด trust mapping ก่อนแลกเปลี่ยนข้อมูลข้าม ecosystem | +| CHG-03 | เพิ่ม | เพิ่ม sequence diagrams สำหรับ OID4VCI และ OID4VP พร้อม trust checkpoints | Implementer MUST ตรวจ trust ก่อนเปิดเผยข้อมูลหรือยอมรับ VC; diagram เป็นคำอธิบายประกอบและไม่แทนข้อกำหนดของมาตรฐานต้นทาง | +| CHG-04 | เปลี่ยน | เปลี่ยนคำและแนวคิดจาก Wallet Trust Evidence (WTE) เป็น Wallet Unit Attestation (WUA) ตาม EUDI ARF 2.9.0 | เอกสารและ implementation ใหม่ MUST ใช้ WUA; การอ้าง WTE เดิม SHOULD ระบุว่าเป็นคำจาก baseline เก่า | +| CHG-05 | เพิ่ม | เพิ่มข้อกำหนด Cryptographic Suites | Profile MUST ระบุ algorithm, key type, curve, key identifier (`kid`) และเงื่อนไขยกเลิกใช้อย่างชัดเจน; ห้ามอนุมาน interoperability จากชื่อ algorithm เพียงอย่างเดียว | +| CHG-06 | เพิ่ม | เพิ่ม Key Management และ Key Rotation | ผู้ควบคุมกุญแจ MUST กำหนด lifecycle, cryptoperiod, overlap, emergency rotation, audit trail และการป้องกัน private key | +| CHG-07 | เพิ่ม | เพิ่ม VC Revocation และ status checking โดยอ้าง IETF Token Status List | Verifier MUST ตรวจ credential status ตาม policy และ MUST กำหนดพฤติกรรมเมื่อข้อมูลสถานะหมดอายุหรือเข้าถึงไม่ได้ | +| CHG-08 | เพิ่ม | เพิ่มบทนิยามใหม่ โดยคงความหมายของนิยามเดิมในเวอร์ชัน 1.1 | ผู้จัดทำ profile SHOULD ใช้คำตามบทนิยามเดียวกันเพื่อลดความคลาดเคลื่อนระหว่างเอกสารและระบบ | +| CHG-09 | เพิ่ม | เพิ่มหลักการเผยแพร่ Trusted List แบบ signed object ผ่าน CDN และ local cache | Consumer MUST ตรวจลายมือชื่อ Trusted List และ `LoTE.ListAndSchemeInformation.NextUpdate` ก่อนใช้ cache [research/42](../research/42-trusted-list-lote-jwt-format.md) | +| CHG-10 | เพิ่ม | เพิ่มข้อกำหนดด้าน privacy, selective disclosure และ verifier authorization | Wallet MUST แสดง purpose และ claims ที่ร้องขอแก่ผู้ใช้ก่อนให้ความยินยอม และ MUST ไม่ส่งข้อมูลแก่ Verifier ที่ไม่ผ่าน trust policy | +| CHG-11 | เพิ่มหมายเหตุ | เพิ่มหมายเหตุปรับปรุงมาตรฐานใน [§5](05-standards-and-compliance.md) ให้ชี้ไปยัง SD-JWT VC (`dc+sd-jwt`), OID4VCI 1.0 Final และ OID4VP 1.0 Final (พร้อม DCQL) โดยไม่แก้ถ้อยคำตัวอย่างต้นฉบับ v1.1 | ผู้อ่านที่เปิด §5 โดยตรง MUST เห็นหมายเหตุระบุมาตรฐานปัจจุบันและลิงก์ไปยัง §8/§8.1/§8.2 ก่อนนำตัวอย่างในรายงานต้นฉบับไปใช้งานจริง | + +### ข.3 รายละเอียดตามหมวด + +#### ข.3.1 Trust Model 3 และ Trusted List + +เวอร์ชัน 2.0 เพิ่ม Trust Model 3 ซึ่งใช้ DID หรือ key reference ร่วมกับ ETDA Signed Trusted List แทนการใช้สายใบรับรอง X.509 เป็น trust mechanism หลัก รายละเอียดโครงสร้าง การลงทะเบียน การ cache และจุดตรวจอยู่ใน [§9 Trust Model 3](09-trust-model-3.md) + +ข้อกำหนดสำหรับผู้ใช้ Trusted List มีอย่างน้อยดังนี้ + +1. MUST ตรวจลายมือชื่อของ Trusted List และระบุตัว Trusted List signer ที่เชื่อถือได้ +2. MUST ตรวจสถานะระดับองค์กรและระดับ service +3. MUST ตรวจ `LoTESequenceNumber`, `ListIssueDateTime` และ `NextUpdate` ใน `LoTE.ListAndSchemeInformation` พร้อมตรวจช่วงเวลาบริการตาม Thai profile ที่ประกาศใช้ [research/42](../research/42-trusted-list-lote-jwt-format.md) +4. MUST ตรวจ role และ `allowed credential types` ก่อนเชื่อถือการออก VC +5. MUST ปฏิเสธข้อมูลเมื่อ trust check ไม่ผ่าน ก่อนเรียก network service อื่นโดยไม่จำเป็น + +#### ข.3.2 Interoperability + +เวอร์ชัน 2.0 เพิ่มการวิเคราะห์ผลของ Trusted List ต่อ interoperability ในประเทศและข้ามพรมแดนตาม [§7](07-cross-ecosystem-interoperability.md) การใช้ OID4VCI, OID4VP, SD-JWT VC และ DID ร่วมกันช่วยให้แลกเปลี่ยนข้อความมาตรฐานได้ แต่ **มิได้ทำให้เกิดการยอมรับความน่าเชื่อถือข้ามเขตอำนาจโดยอัตโนมัติ** + +ผู้ดำเนินการข้าม ecosystem MUST กำหนด trust mapping, governance, liability, status semantics และ assurance level ให้ตรงกันก่อนเปิดใช้งาน ส่วนการเชื่อมโยง EU MAY ใช้ bridge หรือ certificate wrapping ตาม profile ที่ได้รับอนุมัติ แต่ยังไม่ถือว่า Trust Model 3 ได้รับการยอมรับข้ามพรมแดนโดยปริยาย + +#### ข.3.3 OID4VCI และ OID4VP + +เวอร์ชัน 2.0 เพิ่ม sequence diagrams สำหรับ issuance และ presentation เพื่อแสดงจุดที่ระบบต้องตรวจ Trusted List, WUA, issuer key, verifier authorization และ credential status + +- OID4VCI flow MUST ตรวจ Issuer และ Wallet Provider ตาม trust policy ก่อนออกหรือบันทึก VC +- OID4VP flow MUST ตรวจ Verifier ก่อนเปิดเผยข้อมูล และ Verifier MUST ตรวจ Issuer, credential status และ holder binding ก่อนยอมรับผล +- ทุก flow MUST มี timeout, error path และพฤติกรรมที่กำหนดไว้เมื่อข้อมูล trust หรือ status ไม่พร้อมใช้งาน + +#### ข.3.4 WTE เปลี่ยนเป็น WUA + +คำว่า Wallet Trust Evidence (WTE) ใน baseline เดิมถูกแทนด้วย Wallet Unit Attestation (WUA) ตาม EUDI ARF 2.9.0 [S07] WUA ใช้ยืนยันคุณลักษณะและสถานะที่เกี่ยวข้องกับ Wallet Unit ตาม profile ที่กำหนด การเปลี่ยนชื่อไม่อนุญาตให้ระบบข้ามการตรวจ issuer, validity, key binding หรือ status ของ WUA + +ข้อความใหม่ MUST ใช้คำว่า WUA การเก็บคำว่า WTE ไว้ MAY ทำได้เฉพาะในเชิงประวัติหรือการอ้างเอกสารเวอร์ชัน 1.1 โดยต้องระบุว่าเป็นคำที่เลิกใช้ในเวอร์ชัน 2.0 + +#### ข.3.5 Security + +เวอร์ชัน 2.0 เพิ่มหมวด security ตามข้อเสนอจากการรับฟังความเห็นอุตสาหกรรม [S10] + +- Cryptographic profile MUST ระบุชุดอัลกอริทึมที่อนุญาตและวิธี algorithm negotiation/downgrade prevention +- Private signing key MUST ได้รับการป้องกันตามระดับความเสี่ยง และการใช้กุญแจ MUST มี audit trail ที่ตรวจสอบย้อนหลังได้ +- Key rotation MUST รองรับ `kid`, overlap และ emergency revocation โดยไม่ทำให้การตรวจ VC ที่ออกก่อนหน้าผิดพลาดเกิน policy +- Status mechanism MUST ป้องกัน replay ของข้อมูลสถานะเก่า และ Verifier MUST ตรวจ freshness ก่อนตัดสินใจ +- การใช้ local cache MAY ทำได้ภายในอายุที่กำหนดเท่านั้น; policy MUST ระบุ fail-open หรือ fail-closed แยกตามระดับความเสี่ยง + +#### ข.3.6 หมายเหตุปรับปรุงมาตรฐานใน §5 (MASA-169) + +[§5](05-standards-and-compliance.md) เดิมคงถ้อยคำและตัวอย่างจากรายงานต้นฉบับ v1.1 ไว้ทั้งหมด (JSON-LD VC/VP, OID4VC draft 13, OID4VP draft 20) โดยยังไม่มีหมายเหตุชี้ว่ามาตรฐานที่ประกาศใช้จริงในเวอร์ชัน 2.0 เปลี่ยนไปแล้ว (ต่างจาก [§8](08-implementation-guidelines.md) ที่ปรับตามงาน MASA-158 ไปก่อนหน้า) งาน MASA-169 แก้ช่องว่างนี้โดยเพิ่มหมายเหตุกำกับในบทดังกล่าว (ไม่แก้ถ้อยคำตัวอย่างต้นฉบับ ตามหลักการเดียวกับที่ใช้ในบทที่ 1–8 อื่น ๆ) ระบุว่าเวอร์ชัน 2.0 ใช้: + +- **SD-JWT VC (`dc+sd-jwt`)** [12] แทนเค้าร่าง JSON-LD — เพิ่มเป็น §5.1.1 และ §5.2.1 +- **OID4VCI 1.0 Final** [10] แทน OID4VC draft 13 — เพิ่มหมายเหตุใน §5.3 +- **OID4VP 1.0 Final พร้อม DCQL** [11] แทน OID4VP draft 20 — เพิ่มหมายเหตุใน §5.4 + +ทุกหมายเหตุชี้กลับไปยัง [§8](08-implementation-guidelines.md), [§8.1](08.1-issuance-full-flow-detail.md) และ [§8.2](08.2-oid4vp-full-flow-detail.md) ซึ่งเป็นแหล่งรายละเอียดทางเทคนิคระดับ field-by-field ของเวอร์ชัน 2.0 อยู่แล้ว จึงไม่มีการเขียนตัวอย่างซ้ำใน §5 + +> **หมายเหตุ:** แนวทางแบบ "เพิ่มหมายเหตุกำกับ" ในข้อ ข.3.6 ถูกแทนที่ด้วยแนวทาง "แทนที่เนื้อหาทั้งบท" ตามข้อ ข.3.7 ด้านล่าง (MASA-170) รายละเอียดในข้อนี้คงไว้เป็นบันทึกประวัติการเปลี่ยนแปลงตามกฎ Version History Protection ส่วนสถานะปัจจุบันให้ยึด [§5](05-standards-and-compliance.md) + +#### ข.3.7 แทนที่เนื้อหา §5 ทั้งบทด้วยมาตรฐานเวอร์ชัน 2.0 (MASA-170) + +หลังจากงาน MASA-169 เพิ่มหมายเหตุกำกับตามข้อ ข.3.6 คณะกรรมการทบทวนเห็นว่าแนวทาง "คงถ้อยคำเดิมพร้อมหมายเหตุ" ทำให้ผู้อ่านต้องเทียบสองมาตรฐานพร้อมกันในบทเดียว (SD-JWT VC กับ JSON-LD, OID4VCI 1.0 Final กับ OID4VC draft 13, OID4VP 1.0 Final กับ OID4VP draft 20) ทั้งที่ระบบใช้งานจริงเพียงชุดเดียว จึงมีมติให้ **แทนที่เนื้อหาทั้งบทแทนการเพิ่มหมายเหตุ** งาน MASA-170 จึงเขียน [§5](05-standards-and-compliance.md) ใหม่ทั้งหมดตามหลักการนี้: + +- **ไม่คงตัวอย่างหรือถ้อยคำจากรายงานต้นฉบับเวอร์ชัน 1.1** — เค้าร่างเอกสาร JSON-LD ในตัวอย่างที่ 1–2 (§5.1–§5.2 เดิม) และการอ้างอิง OID4VC draft 13 / OID4VP draft 20 (§5.3–§5.4 เดิม) ถูกลบออกทั้งหมด แทนที่ด้วยตัวอย่างและคำอธิบายของมาตรฐานที่ประกาศใช้จริงโดยตรง +- **§5.1–§5.2** เขียนใหม่ให้ใช้ **SD-JWT VC (`dc+sd-jwt`)** [12] เป็นเค้าร่างเดียว อธิบายโครงสร้าง Issuer-signed JWT / Disclosures / Key Binding JWT (KB-JWT) พร้อมตัวอย่าง JSON ที่ตัดตรงจากมาตรฐาน แทนที่ตัวอย่าง JSON-LD เดิม และปรับขั้นตอนตรวจสอบ VP ให้ตรงกับกลไก selective disclosure ของ SD-JWT +- **§5.3** เขียนใหม่ให้ใช้ **OID4VCI 1.0 Final** [10] โดยตรง (ลบข้อความ "draft Version 13" ทั้งหมด) และปรับตัวอย่าง Metadata/Credential Request ให้ใช้ `format: "dc+sd-jwt"`, `credential_configuration_id` และโครงสร้าง `claims` ตามที่ [§8.1](08.1-issuance-full-flow-detail.md) ใช้งานจริง +- **§5.4** เขียนใหม่ให้ใช้ **OID4VP 1.0 Final พร้อม DCQL** [11] โดยตรง (ลบข้อความ "draft 20" และ Presentation Exchange ทั้งหมด) และปรับตัวอย่าง Authorization Request/Response ให้ใช้ `dcql_query` แทน `presentation_definition`/`presentation_definition_uri` ตามที่ [§8.2](08.2-oid4vp-full-flow-detail.md) ใช้งานจริง +- **เหตุผลที่เปลี่ยน** ระบุไว้ในกล่องเหตุผลที่ต้นบท [§5](05-standards-and-compliance.md): SD-JWT VC รองรับ selective disclosure ระดับ field โดยไม่ต้องสังเคราะห์ VP ทั้งฉบับ และเป็นรูปแบบเดียวที่ OID4VCI/OID4VP ฉบับทางการรองรับโดยตรง ส่วน OID4VCI/OID4VP 1.0 Final เป็นฉบับทางการที่แทนที่ฉบับร่างที่ใช้ในรายงานต้นฉบับแล้ว +- **ไม่กระทบ** [§8](08-implementation-guidelines.md), [§8.1](08.1-issuance-full-flow-detail.md), [§8.2](08.2-oid4vp-full-flow-detail.md) และ [§11](11-cryptographic-suites.md) ซึ่งใช้มาตรฐานชุดนี้อยู่แล้วตั้งแต่ก่อนงาน MASA-158 — งานนี้ทำให้ [§5](05-standards-and-compliance.md) สอดคล้องกับบทเหล่านั้น + +#### ข.3.8 แก้ไขข้อความอ้างอิง W3C VC Data Model v1.1 ที่ตกค้าง (MASA-170) + +หลังจากงาน MASA-170 แทนที่เนื้อหา [§5](05-standards-and-compliance.md) ทั้งบทตามข้อ ข.3.7 คณะกรรมการทบทวนตรวจพบว่ายังมีประโยคตกค้างจากรายงานต้นฉบับ 5 จุดที่ระบุว่ารายงานฉบับนี้ "อ้างอิงโครงสร้างตาม W3C VC Data Model v1.1" หรือ "ตามมาตรฐานของ World Wide Web Consortium (W3C)" ซึ่งขัดแย้งกับเนื้อหาส่วนอื่นของบทเดียวกันที่ระบุว่าเค้าร่างเอกสารรับรองเปลี่ยนเป็น SD-JWT VC แล้ว จึงแก้ไขให้สอดคล้องกันทั้งบท ดังนี้: + +- ย่อหน้าเปิดบท (ก่อน §5.0): ตัดข้อความ "จะอ้างอิงรูปแบบเอกสารรับรองตามโครงสร้าง W3C VC Data Model v1.1 [5]" ออก ระบุแทนว่ารายงานฉบับนี้**ไม่**อ้างอิงโครงสร้างดังกล่าวอีกต่อไป +- §5.1 และ §5.2 (โครงสร้าง VC และ VP): แก้ประโยค "อ้างอิงโครงสร้างตาม World Wide Web Consortium (W3C) [5]" เป็นระบุว่าทั้ง 3 ส่วนบันทึกตามเค้าร่าง IETF SD-JWT VC (`dc+sd-jwt`) [12] ในการปรับปรุงรอบนั้น ส่วน W3C VC Data Model v1.1 [5] เป็นโครงสร้างในรายงานต้นฉบับ +- §5.1 ข้อเปรียบเทียบ claim `vct`: ระบุชัดว่า `type` ตามโครงสร้าง W3C VC Data Model v1.1 เป็นคุณสมบัติที่รายงานต้นฉบับเวอร์ชัน 1.1 เคยใช้ และไม่ใช้แล้วในเวอร์ชัน 2.0 +- §5.3 (OID4VCI): ตัดวลี "รองรับมาตรฐานเอกสารรับรองหลากหลายรูปแบบ รวมถึง W3C Verifiable Credentials" ระบุแทนว่ารายงานฉบับนี้เลือกใช้เฉพาะ SD-JWT VC เพียงรูปแบบเดียว +- กล่องเหตุผลที่ต้นบท: เพิ่มประโยคยืนยันชัดเจนว่าไม่อ้างอิง W3C VC Data Model v1.1 อีกต่อไป + +การแก้ไขนี้ไม่เปลี่ยนแปลงเนื้อหาทางเทคนิคที่ประกาศใช้จริง (ยังเป็น SD-JWT VC, OID4VCI 1.0 Final, OID4VP 1.0 Final พร้อม DCQL ตามข้อ ข.3.7 เดิม) เป็นเพียงการแก้ถ้อยคำอ้างอิงที่ไม่สอดคล้องกันภายในบทเดียวกันให้ถูกต้องตรงกันทั้งหมด + +### ข.4 Traceability + +> **อัปเดต 4 สิงหาคม 2569 (รอบตรวจ QA gate ครั้งที่ 2):** S2–S8 ทั้งหมดถูกรวมเข้า canonical tree `th/thai-vc-arf/` + `en/thai-vc-arf/` แล้วผ่านคอมมิต integration (`docs(arf-v2.0): integrate S0,S1,S3,S4,S5,S6,S9`) และคอมมิต fix ตามหลัง (S6/S8 gap recovery, cross-language link fix) ตารางด้านล่างแสดงสถานะและ path ของ repository ณ เวลาที่ตรวจ + +| รหัส | หัวข้อในเวอร์ชัน 2.0 | แหล่งภายใน | แหล่งมาตรฐานหลัก | สถานะการรวม ณ วันที่จัดทำ | +|---|---|---|---|---| +| CHG-01 | Trust Model 3 | [§9](09-trust-model-3.md) | W3C DID Core [S05] | รวมแล้ว (S2, MASA-123) | +| CHG-02 | Interoperability | [§7](07-cross-ecosystem-interoperability.md) | OID4VCI [S03], OID4VP [S04] | รวมแล้ว (S4, MASA-125) | +| CHG-03 | OID4VCI/OID4VP sequences | [§8](08-implementation-guidelines.md) | OID4VCI [S03], OID4VP [S04] | รวมแล้ว (S5 รายละเอียดและ S7 ภาพรวมวงจรชีวิต end-to-end รวมอยู่ที่ §8, MASA-126/128) | +| CHG-04 | WUA | [§10](10-wallet-unit-attestation.md) | EUDI ARF 2.9.0 [S07] | รวมแล้ว (S6, MASA-127); ย้ายจากคำอธิบายใน §9.2 มาเป็นบทเฉพาะ §10 | +| CHG-05 | Cryptographic Suites | [§11](11-cryptographic-suites.md) | JOSE/JWS และ profile ที่อนุมัติ [S08] | รวมแล้ว (S8, MASA-129 → MASA-135 → แยกบทที่ MASA-150) | +| CHG-06 | Key Management/Rotation | [§12](12-key-management-and-trustlist-deployment.md) | NIST SP 800-57 Part 1 Rev.5 [S09] | รวมแล้ว (S8, MASA-129 → MASA-135 → แยกบทที่ MASA-150) | +| CHG-07 | VC Revocation | [§13](13-vc-status-and-revocation.md) | IETF Token Status List [S06] | รวมแล้ว (S8, MASA-129 → MASA-135 → แยกบทที่ MASA-150) | +| CHG-08 | Definitions | [§2](02-definitions.md) | คำศัพท์จาก [S03]–[S07] | รวมแล้ว (S3, MASA-124); นิยามเดิมคงอยู่ เพิ่มข้อ 2.23–2.42 | +| CHG-09 | CDN/cache | [§9.3 และ §9.9](09-trust-model-3.md) | Signed-object security model [S08] | รวมแล้ว | +| CHG-10 | Privacy/authorization | [§8](08-implementation-guidelines.md) | OID4VP [S04] | รวมแล้ว; ผ่าน QA gate อัตโนมัติ (traceability/RFC2119/mermaid/link/README/KNOWLEDGE.yaml) — ดู ข.4.1 | +| CHG-11 | แทนที่เนื้อหา §5 ทั้งบทด้วยมาตรฐานเวอร์ชัน 2.0 | [§5](05-standards-and-compliance.md) | OID4VCI 1.0 Final [10], OID4VP 1.0 Final [11], SD-JWT VC [12] | รวมแล้ว (MASA-169 เพิ่มหมายเหตุ → MASA-170 แทนที่เต็มรูปแบบ → MASA-170 แก้ข้อความ W3C VC Data Model v1.1 ตกค้าง) — ดู ข.3.6, ข.3.7, ข.3.8 | + +#### ข.4.1 QA gate ล่าสุด + +- รัน `scripts/qa/run_all.sh` วันที่ 4 สิงหาคม 2569 เวลา 08:51 UTC — ผลลัพธ์ ✅ PASS (Critical 0, Major 0, Minor 7, Suggestion 0) +- ข้อค้นพบระดับ Minor ที่เหลือเป็นสำนวนภาษาไทยในเนื้อหาฐานเวอร์ชัน 1.1 (§5 และ §6) ซึ่งคงไว้ตรงตามต้นฉบับ PDF เพื่อรักษาความตรง 1:1 กับต้นฉบับ จึงไม่ปรับถ้อยคำในส่วนนี้ ไม่กระทบความถูกต้องเชิงเทคนิค +- `link_check`, `mermaid_syntax_check`, `traceability_check`, `readme_sync_check`, `knowledge_yaml_sync_check` ผ่านทั้งหมดโดยไม่มีข้อค้นพบ + +> **ข้อเท็จจริง:** ตารางนี้ระบุสถานะไฟล์ใน repository ณ วันที่จัดทำ การรับรอง conformance ของระบบจริงต้องตรวจจากผลทดสอบที่เกี่ยวข้อง + +### ข.5 การจัดประเภทข้อความ + +#### ข้อเท็จจริง + +- OID4VCI 1.0 และ OID4VP 1.0 เป็น Final Specification ของ OpenID Foundation [S03] [S04] +- W3C DID Core 1.0 เป็น W3C Recommendation ลงวันที่ 19 กรกฎาคม 2022 [S05] +- EUDI ARF มีเอกสารเวอร์ชัน 2.9.0 ที่ใช้คำว่า Wallet Unit Attestation [S07] +- IETF Token Status List ยังเป็น Internet-Draft ณ วันที่เข้าถึง จึงอาจเปลี่ยนแปลงก่อนเป็น RFC [S06] + +#### ข้อวิเคราะห์ + +- Trust Model 3 ลดการพึ่ง CA สำหรับ entity trust ภายในประเทศ แต่ยังต้องมี trust anchor, governance, audit และ revocation ที่ตรวจสอบได้ +- การรองรับ protocol เดียวกันไม่เพียงพอต่อ cross-border trust หาก assurance, liability และ trusted-list semantics ไม่ตรงกัน +- อายุ cache ที่ยาวขึ้นเพิ่ม availability แต่ทำให้ช่วงเวลาที่ระบบอาจไม่เห็นการเพิกถอนยาวขึ้น + +#### สมมติฐานและช่องว่าง + +- สมมติให้ สพธอ. เป็นผู้กำกับดูแลและลงลายมือชื่อ Trusted List; รูปแบบอำนาจตามกฎหมายและ operating model ต้องได้รับมติแยกต่างหาก +- ค่า TTL, cryptoperiod, overlap, fail-open/fail-closed และ assurance mapping ยังต้องได้รับอนุมัติจากผู้มีอำนาจกำกับ +- เนื้อหาจาก S2–S8 รวมเข้า canonical tree ครบแล้ว ณ วันที่ตรวจปรับปรุงนี้ (4 สิงหาคม 2569); ตาราง traceability ใน §ข.4 ปรับให้ตรงกับสถานะปัจจุบัน อย่างไรก็ตาม MASA-131 (QA Gate ก่อนเผยแพร่จริง) และ MASA-132 (Publish/build Docusaurus + เปิด MR) ยังอยู่ระหว่างดำเนินการ — เอกสารนี้จึงยังเป็นสถานะ **Draft for approval** จนกว่าทั้งสอง milestone จะปิด + +### ข.6 แนวทางย้ายจากเวอร์ชัน 1.1 + +1. ผู้ดูแลเอกสาร MUST เปลี่ยนคำ WTE เป็น WUA ในข้อกำหนดที่มีผลบังคับ และคง WTE ไว้เฉพาะข้อความเชิงประวัติ +2. ผู้ให้บริการ MUST จัดทำรายการ trust checkpoints ของ OID4VCI และ OID4VP ให้สอดคล้องกับ §9 +3. ผู้ให้บริการ MUST เพิ่ม key lifecycle และ credential status policy ก่อนประกาศ conformance กับเวอร์ชัน 2.0 +4. ผู้ให้บริการ SHOULD ตรวจ interoperability กับ profile คู่เชื่อมต่อโดยใช้ test evidence ที่ตรวจสอบย้อนกลับได้ +5. ผู้ดูแลเอกสาร MUST ปิดรายการ “รอรวม” ใน §ข.4 และ QA ลิงก์ Mermaid และ reference ก่อนเผยแพร่ + +### ข.7 แหล่งอ้างอิง + +- [S01] IETF, **RFC 2119 — Key words for use in RFCs to Indicate Requirement Levels**, March 1997, https://www.rfc-editor.org/rfc/rfc2119 — เข้าถึง 4 สิงหาคม 2569 +- [S02] IETF, **RFC 8174 — Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words**, May 2017, https://www.rfc-editor.org/rfc/rfc8174 — เข้าถึง 4 สิงหาคม 2569 +- [S03] OpenID Foundation, **OpenID for Verifiable Credential Issuance 1.0**, Final, 16 September 2025, https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html — เข้าถึง 4 สิงหาคม 2569 +- [S04] OpenID Foundation, **OpenID for Verifiable Presentations 1.0**, Final, 9 July 2025, https://openid.net/specs/openid-4-verifiable-presentations-1_0.html — เข้าถึง 4 สิงหาคม 2569 +- [S05] W3C, **Decentralized Identifiers (DIDs) v1.0**, W3C Recommendation, 19 July 2022, https://www.w3.org/TR/did-core/ — เข้าถึง 4 สิงหาคม 2569 +- [S06] IETF OAuth Working Group, **Token Status List**, Internet-Draft (current draft at URL), https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ — เข้าถึง 4 สิงหาคม 2569 +- [S07] European Commission, **European Digital Identity Wallet Architecture and Reference Framework**, version 2.9.0, https://eudi.dev/2.9.0/main/ — เข้าถึง 4 สิงหาคม 2569 +- [S08] IETF, **RFC 7515 — JSON Web Signature (JWS)**, May 2015, https://www.rfc-editor.org/rfc/rfc7515 — เข้าถึง 4 สิงหาคม 2569 +- [S09] NIST, **SP 800-57 Part 1 Rev.5 — Recommendation for Key Management: Part 1 — General**, May 2020, https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final — เข้าถึง 4 สิงหาคม 2569 +- [S10] คณะทำงาน VC, **Trusted List 3 Models Industry Survey**, repository revision ณ 4 สิงหาคม 2569 — [research/37-trustlist-3models-industry-survey.md](../research/37-trustlist-3models-industry-survey.md) — เข้าถึง 4 สิงหาคม 2569 (ยืนยันแล้วว่าไฟล์อยู่ใน branch `docs/arf-v2.0` / `origin/main` ปัจจุบัน) + +--- +*/} + +**การนำทาง:** [⬅️ บทที่ 14 — ความมั่นคงปลอดภัย: Threat Model และ Conformance](14-security-threat-model-and-conformance.md) · [⬆️ สารบัญ ARF](README.md) · [บทที่ 16 — บรรณานุกรม ➡️](16-bibliography.md) diff --git a/docs/thai-vc-arf/16-bibliography.md b/docs/thai-vc-arf/16-bibliography.md new file mode 100644 index 0000000..5ae865a --- /dev/null +++ b/docs/thai-vc-arf/16-bibliography.md @@ -0,0 +1,55 @@ +--- +description: "16. บรรณานุกรม — Thai VC ARF 2.0 DRAFT 0" +--- + +# 16. บรรณานุกรม + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — เอกสารแปลงจาก PDF ต้นฉบับของ สพธอ. (Thai VC ARF v1.1, มกราคม 2568) และเพิ่มรายการอ้างอิงที่ใช้ในบทที่ 8 (Implementation Guidelines) ฉบับปรับปรุง MASA-126 +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย +> **เอกสารที่เกี่ยวข้อง:** [ดัชนีเอกสาร ARF](README.md) +*/} + +--- + +บทนี้รวบรวมรายการอ้างอิงทั้งหมดที่ใช้ในรายงานฉบับนี้ ประกอบด้วยแหล่งอ้างอิงจากเอกสารต้นฉบับเวอร์ชัน 1.1 และแหล่งอ้างอิงเพิ่มเติมที่ใช้ในบทที่ 8 ว่าด้วย Implementation Guidelines + +{/* METADATA (agent-only — not rendered to readers) +> **หมายเหตุขอบเขตของบทนี้:** บทที่ 16 เป็นบรรณานุกรมรวมหลัก (master bibliography) แบบ superset ของทั้งรายงาน โดยรวบรวมแหล่งอ้างอิงที่รายงานฉบับนี้ใช้ทั้งเล่มไว้ในที่เดียว บทที่แปลงจาก PDF ต้นฉบับเวอร์ชัน 1.1 คือบทที่ 1 ถึงบทที่ 8 อ้างอิงรายการในบทนี้ด้วยเลขรวม (global) ในรูปแบบ `[n]` ตามลำดับที่ 1 ถึง 22 ส่วนบทเพิ่มเติมฉบับปรับปรุง (v2.0) ได้แก่ บทที่ 6.5, 7, 9 ถึง 15 มีรายการอ้างอิงเฉพาะบทของตนเองที่ใช้ prefix กำกับ เช่น `[D*]` (บทที่ 2), `[G*]` (บทที่ 6.5), `[R*]` (บทที่ 7), `[T*]` (บทที่ 9), `[S*]` (บทที่ 15) และ `[REF-*]` (บทที่ 8) เพื่อมิให้เลขซ้ำชนกับเลขรวมในบทนี้ ดังนั้น รายการในบทนี้ที่ไม่มีเลข `[n]` แบบเปล่ากำกับ เป็นแหล่งอ้างอิงหลักที่ตั้งใจคงไว้สำหรับทั้งรายงาน ทั้งนี้ การตรวจความสอดคล้องสองทางของการอ้างอิงตาม AGENTS.md ให้ดำเนินการภายในขอบเขตของแต่ละรายการอ้างอิง (บทนี้สำหรับเลขรวม และรายการเฉพาะบทสำหรับเลขที่มี prefix) +*/} + +## A. แหล่งอ้างอิงจาก PDF ต้นฉบับ v1.1 (มกราคม 2568) + +- [1] European Commission, "The European Digital Identity Wallet Architecture and Reference Framework Version 1.0.0", January 2023. +- [2] ข้อเสนอแนะมาตรฐานด้านเทคโนโลยีสารสนเทศและการสื่อสารที่จำเป็นต่อธุรกรรมทางอิเล็กทรอนิกส์ ว่าด้วยโครงสร้างข้อมูลของเอกสารรับรองและเอกสารสำแดง เลขที่ ขมธอ. 24-2563, เวอร์ชัน 1.0. +- [3] ข้อเสนอแนะมาตรฐานด้านเทคโนโลยีสารสนเทศและการสื่อสารที่จำเป็นต่อธุรกรรมทางอิเล็กทรอนิกส์ ว่าด้วยแนวทางการลงลายมือชื่ออิเล็กทรอนิกส์ เลขที่ ขมธอ. 23-2563, เวอร์ชัน 1.0. +- [4] W3C, "Decentralized Identifiers (DIDs) v1.0", 19 July 2022. +- [5] W3C, "Verifiable Credentials Data Model v1.1", 03 March 2022. +- [6] ข้อเสนอแนะมาตรฐานด้านเทคโนโลยีสารสนเทศและการสื่อสารที่จำเป็นต่อธุรกรรมทางอิเล็กทรอนิกส์ ว่าด้วยการพิสูจน์และยืนยันตัวตนทางดิจิทัล – ข้อกำหนดของการยืนยันตัวตน เลขที่ ขมธอ. 20-2566, เวอร์ชัน 3.0. +- [7] ข้อเสนอแนะมาตรฐานด้านเทคโนโลยีสารสนเทศและการสื่อสารที่จำเป็นต่อธุรกรรมทางอิเล็กทรอนิกส์ ว่าด้วยการพิสูจน์และยืนยันตัวตนทางดิจิทัล – ข้อกำหนดของการพิสูจน์ตัวตน เลขที่ ขมธอ. 19-2566, เวอร์ชัน 3.0. +- [8] OpenID Foundation, "OpenID for Verifiable Presentations", 30 December 2022. +- [9] OpenID Foundation, "OpenID for Verifiable Credential Issuance", 30 December 2022. + +## B. แหล่งอ้างอิงเพิ่มเติม (MASA-126) + +- [10] OpenID Foundation, "OpenID for Verifiable Credential Issuance 1.0 Final", 17 September 2025. — https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html +- [11] OpenID Foundation, "OpenID for Verifiable Presentations 1.0 Final", 15 July 2025. — https://openid.net/specs/openid-4-verifiable-presentations-1_0.html +- [12] IETF, “SD-JWT-based Verifiable Digital Credentials (SD-JWT VC),” draft-ietf-oauth-sd-jwt-vc-19, 31 August 2026 (Internet-Draft; submitted to IESG, Waiting for AD Go-Ahead as accessed 1 October 2026). — https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/ +- [13] IETF, “Token Status List (TSL),” draft-ietf-oauth-status-list-21, 21 June 2026 (Internet-Draft; RFC Editor status: Awaiting First editor as accessed 1 October 2026). — https://datatracker.ietf.org/doc/draft-ietf-oauth-status-list/ +- [14] European Commission, "EUDI Architecture and Reference Framework v2.9.0", 2025. — https://eudi.dev/2.9.0/main/ +- [15] IETF RFC 8032, "Edwards-Curve Digital Signature Algorithm (EdDSA)", January 2017. +- [16] Decentralized Identity Foundation, "Universal Resolver", 2024. — https://github.com/decentralized-identity/universal-resolver +- [17] IETF RFC 9449, "OAuth 2.0 Demonstrating Proof-of-Possession (DPoP)", September 2023. +- [18] IETF RFC 7636, "Proof Key for Code Exchange (PKCE)", September 2015. +- [19] (EU) CIR 2024/2979, "Implementing Regulation on Wallet Unit Attestation", 2024. +- [20] Thailand, พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล พ.ศ. 2562, ราชกิจจานุเบกษา, 27 พฤษภาคม 2562. +- [21] Thailand, พ.ร.บ. ว่าด้วยธุรกรรมทางอิเล็กทรอนิกส์ พ.ศ. 2544, ราชกิจจานุเบกษา, 4 ธันวาคม 2544 (แก้ไขเพิ่มเติม พ.ศ. 2551 และ 2562). +- [22] สพธอ., เอกสารร่าง "trust-flow-minimal-explained.md" และ "trust-framework-template.md" ภายใต้โครงการ Trusted List public doc (MASA-126), 2569. + +> **หมายเหตุ:** การอ้างอิงแบบ `[n]` ในบทที่ 8 ใช้ prefix `REF-` เพื่อแยกระหว่างรายการบรรณานุกรมของ PDF ต้นฉบับ (เช่น `[1]`, `[8]`) และแหล่งอ้างอิงเพิ่มเติม (เช่น `REF-OID4VCI` → `[10]`, `REF-ARF` → `[14]`) ผู้อ่านสามารถค้นหาเลข `[n]` ในรายการข้างต้นเพื่อตรวจสอบการอ้างอิงสองทางตาม AGENTS.md §Output & Writing + +{/* pdf page 55 */} + +--- + +**การนำทาง:** [⬅️ บทที่ 15 — ภาคผนวก](15-appendix.md) · [⬆️ สารบัญ ARF](README.md) diff --git a/docs/thai-vc-arf/README.md b/docs/thai-vc-arf/README.md new file mode 100644 index 0000000..52c836d --- /dev/null +++ b/docs/thai-vc-arf/README.md @@ -0,0 +1,63 @@ +--- +description: "Thai VC ARF — 2.0 DRAFT 0 — Thai VC ARF 2.0 DRAFT 0" +--- + +# Thai VC ARF — กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัล (เวอร์ชัน 1.1 + ส่วนขยาย 2.1) + +{/* METADATA (agent-only — not rendered to readers) +> **สถานะ:** 📄 Reference — บทที่ 1–8 แปลงจาก PDF ต้นฉบับ Thai VC ARF v1.1 ของ สพธอ. (มกราคม 2568) และเพิ่มส่วนขยายเวอร์ชัน 2.1 (บทที่ 6.5, 8.1, 8.2, 9–16) +> **แหล่งข้อมูล:** [Thai-VC-ARF-v1-1.pdf](https://www.etda.or.th/getattachment/Our-Service/Digital-Trusted-services-Infrastructure/VC-and-Digital-Document-Wallet/Information/รายงานทางเทคนค-Thai-VC-ARF-v1-1.pdf) — รายงานทางเทคนิค: THAI VC ARCHITECTURE AND REFERENCE FRAMEWORK เวอร์ชัน 1.1 (มกราคม 2568) +> **เอกสารที่เกี่ยวข้อง:** [research/34 — Trusted List domestic + cross-border](../research/34-trustlist-domestic-and-crossborder.md) · [governance/VCGF](../governance/README.md) +*/} + +--- + +## เอกสารนี้คืออะไร + +นี่คือ **รายงานทางเทคนิค Thai VC ARF** ของ สพธอ. ในรูปแบบ Markdown เพื่อใช้บนเว็บ (Docusaurus) +เอกสารต้นฉบับวางกรอบการทำงานร่วมกัน (interoperability) ของเอกสารรับรองดิจิทัล (VC) และเอกสารสำแดงดิจิทัล (VP) สำหรับประเทศไทย + +บทที่ 1–8 มีฐานจากต้นฉบับเวอร์ชัน 1.1 แต่มีการปรับปรุงมาตรฐานและแนวทางปฏิบัติในบางบท; บทที่ 6.5 และบทที่ 9–14 เป็นส่วนขยายหลักเวอร์ชัน 2.0 (บทที่ 6.5 เป็นบทเกริ่นนำเรื่องกลไกการสร้างความน่าเชื่อถือ แทรกก่อนบทที่ 7) ส่วนบทที่ 8.1, 8.2 และ 12.1 เพิ่มเติมในเวอร์ชัน 2.1 และบทที่ 8 มี revision ย่อยตาม metadata ของบท แต่ละบทอยู่คนละไฟล์เพื่อให้อ่านง่ายบนเว็บ + +{/* METADATA (agent-only — not rendered to readers) +## หมายเหตุการแปลงและการปรับปรุง + +- เนื้อความไทยและศัพท์เทคนิคภาษาอังกฤษในบทที่ 1–8 เก็บไว้ตรงตามต้นฉบับ ไม่ได้เขียนใหม่ (บทที่ 5 มีข้อยกเว้นเป็นหมายเหตุกำกับเพิ่มเติม — ดูรายการถัดไป) +- **บทที่ 5 ปรับปรุงมาตรฐานในรอบ v2.0 (MASA-170)** — ระบุการรองรับ W3C VCDM v1.1 สำหรับเอกสารเดิม และ SD-JWT VC (`dc+sd-jwt`) สำหรับโปรไฟล์เอกสารใหม่ พร้อม OID4VCI 1.0 Final และ OID4VP 1.0 Final (DCQL); รายละเอียดทางเทคนิคอยู่ที่บทที่ 8/8.1/8.2 +- รูปทั้ง 28 รูปถูกดึงออกมาเป็นไฟล์ภาพและฝังไว้ในตำแหน่งเดิม (ดูโฟลเดอร์ `images/`) +- คอมเมนต์ `` บอกเลขหน้าของ PDF ต้นฉบับไว้เพื่ออ้างอิง +- **บทที่ 6.5 (กลไกการสร้างความน่าเชื่อถือ — Trusted List และแบบจำลองความน่าเชื่อถือ 3 รูปแบบ) และบทที่ 9–14 (Trust Model 3, WUA, Cryptographic Suites, Key Management/Trusted List Deployment, VC Status/Revocation และ Threat Model/Conformance) เป็นส่วนขยายเวอร์ชัน 2.0** ที่คณะทำงานเพิ่ม ไม่ได้อยู่ใน PDF ต้นฉบับ +- **บทที่ 8.1 (OID4VCI Full Flow) และ 8.2 (OID4VP Full Flow) เป็นส่วนขยายเวอร์ชัน 2.1** ที่เพิ่มเติมภายใต้ MASA-158 — รวมแผนภาพฉบับสมบูรณ์ รายละเอียด field-by-field และนโยบาย DPoP จาก trust-guide เข้าเป็นภาคผนวกของบทที่ 8 +- **บันทึกการเปลี่ยนแปลงจากเวอร์ชัน 1.1 เป็น 2.0** อยู่ใน [ภาคผนวก ข](15-appendix.md) +- **[บทที่ 0](00-minimal-interoperability-reference.md) เป็นบทสรุปหนึ่งหน้าที่จัดทำเพิ่มเติม** เพื่อให้ระบบของคู่ภาคีใช้ตรวจสอบความสอดคล้องกัน (interoperability) โดยรายละเอียดโครงสร้าง Trusted List ให้ยึด [research/42](../research/42-trusted-list-lote-jwt-format.md) และบทที่ 0 เป็นแหล่งข้อมูลอ้างอิงหลัก +*/} + +## สารบัญ + +| บท | หัวข้อ | ไฟล์ | +|---|--------|------| +| 0 | **ชุดมาตรฐานและเทคโนโลยีของเอกสารรับรองดิจิทัลของประเทศไทย — สรุปหนึ่งหน้า** (บทสรุปสำหรับระบบของคู่ภาคี) | [00-minimal-interoperability-reference.md](00-minimal-interoperability-reference.md) | +| 1 | ขอบข่าย | [01-scope.md](01-scope.md) | +| 2 | บทนิยาม | [02-definitions.md](02-definitions.md) | +| 3 | ภาพรวมการใช้งาน | [03-usage-overview.md](03-usage-overview.md) | +| 4 | แนวคิดและองค์ประกอบที่ส่งเสริมการทำงานร่วมกัน | [04-interoperability-concepts.md](04-interoperability-concepts.md) | +| 5 | มาตรฐานและข้อปฏิบัติสำหรับ VC และ VP | [05-standards-and-compliance.md](05-standards-and-compliance.md) | +| 6 | Decentralized Identifiers Methodologies | [06-did-methodologies.md](06-did-methodologies.md) | +| 6.5 | **กลไกการสร้างความน่าเชื่อถือ (Trust-Building Mechanism) — Trusted List และแบบจำลองความน่าเชื่อถือ 3 รูปแบบ** (ส่วนขยาย v2.0) | [06.5-trust-building-mechanism.md](06.5-trust-building-mechanism.md) | +| 7 | การทำงานร่วมกันข้ามระบบนิเวศและผลของ Trusted List | [07-cross-ecosystem-interoperability.md](07-cross-ecosystem-interoperability.md) | +| 8 | Implementation Guidelines (OID4VCI / OID4VP) | [08-implementation-guidelines.md](08-implementation-guidelines.md) | +| 8.1 | **ภาคผนวกบทที่ 8 — Full Flow OID4VCI ทางเทคนิคโดยละเอียด** (ส่วนขยาย v2.1 — MASA-158, STEP 1.5 → 2.5) | [08.1-issuance-full-flow-detail.md](08.1-issuance-full-flow-detail.md) | +| 8.2 | **ภาคผนวกบทที่ 8 — Full Flow OID4VP ทางเทคนิคโดยละเอียด** (ส่วนขยาย v2.1 — MASA-158) | [08.2-oid4vp-full-flow-detail.md](08.2-oid4vp-full-flow-detail.md) | +| 9 | **Trust Model 3 — Trusted List + DID** (ส่วนขยาย v2.0) | [09-trust-model-3.md](09-trust-model-3.md) | +| 10 | **Wallet Unit Attestation (WUA)** (ส่วนขยาย v2.0) | [10-wallet-unit-attestation.md](10-wallet-unit-attestation.md) | +| 11 | **Cryptographic Suites** (ส่วนขยาย v2.0) | [11-cryptographic-suites.md](11-cryptographic-suites.md) | +| 12 | **Key Management, Key Rotation และ Trusted List Deployment** (ส่วนขยาย v2.0) | [12-key-management-and-trustlist-deployment.md](12-key-management-and-trustlist-deployment.md) | +| 12.1 | **ข้อกำหนดการเผยแพร่ Trusted List — JWT แบบ LoTE จำนวน 3 ไฟล์ จุดเผยแพร่ โครงสร้างข้อมูล และตัวอย่าง** (ส่วนขยาย v2.1) | [12.1-trust-list-publication-profile.md](12.1-trust-list-publication-profile.md) | +| 13 | **VC Status และ Revocation** (ส่วนขยาย v2.0) | [13-vc-status-and-revocation.md](13-vc-status-and-revocation.md) | +| 14 | **ความมั่นคงปลอดภัย: Threat Model และรายการตรวจ Conformance** (ส่วนขยาย v2.0) | [14-security-threat-model-and-conformance.md](14-security-threat-model-and-conformance.md) | +| 15 | ภาคผนวก (ก. การทำงานร่วมกัน · ข. บันทึกการเปลี่ยนแปลง v1.1 → v2.0) | [15-appendix.md](15-appendix.md) | +| 16 | บรรณานุกรม | [16-bibliography.md](16-bibliography.md) | + +--- + +> 📌 กลับไปที่ [th/](../README.md) | [README.md หลัก](../../README.md) diff --git a/docs/thai-vc-arf/_category_.json b/docs/thai-vc-arf/_category_.json new file mode 100644 index 0000000..8e0328c --- /dev/null +++ b/docs/thai-vc-arf/_category_.json @@ -0,0 +1,10 @@ +{ + "label": "Thai VC ARF — 2.0 DRAFT 0", + "position": 0, + "link": { + "type": "generated-index", + "slug": "/", + "title": "Thai VC ARF — 2.0 DRAFT 0", + "description": "กรอบแนวทางการทำงานร่วมกันของเอกสารรับรองดิจิทัลสำหรับประเทศไทย ฉบับร่าง 2.0 DRAFT 0" + } +} diff --git a/docs/thai-vc-arf/images/p10-0.png b/docs/thai-vc-arf/images/p10-0.png new file mode 100644 index 0000000000000000000000000000000000000000..168fc55c2081d8efe83fe38aee4cae85ac840554 GIT binary patch literal 291605 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

&E@vmtWg^6(vwM<6*WR)&B_q z$Rz;M2H$_DPXj`XNTdKu3SDYRO)-jq0BBAbSP2pvG&+gp_p|EwW!C&qV{$HtkLoL&~ zLr)wDt~=PVZesn>A3~|2TVH<41|Z)VC4YS6KF-&F$9C{F$wf;5z%(F?92o!-p_Xx9 z+vcd@EvZ3almV6GYLW#nwNKeK?vm77dn0#_LiK9|N?%X`8u=mE+J6_5{&z=*M==ll z&f$)`L+w2n{uw%ZI6Qn8J3UkYkoXUbhK_uK{D3BdMtfSWk9I&hfJFhC9smH9Sx5ow zPp{5aM2!Ls=f*3$5p|oD0-uv+n zH=AC&ayz)bWB+3(AsSfH+?{x$K zlZMwmQS-m}JMEq*0=Dohz`s_QVwb;JW-&=)O@hS(36Twk0Du&M0@+&V_El1^_#RZa zucQ?a?fHgCTSNUd7B=FLo1XS-TKJzrM3tZJ?_?*!%*HSN{>8Tf0B9VzMw0-L zG?o}QPGuu8f#j&A-ys1&)jSCR*MxT;0RRX)d}3n2;qQMVw<3J@H5WTR{ODE)DhyZZ z8*YXk>uH*Qw&(0)M{t2|_rB0_tEsf-_K|hrhSxeSx6KJQZ11^tGwcrDLiYDPYeIiF zrvFdv)33i40x_&bND)B5mtXul06X-3INky^AbdcTj}ig^z^>N*kx*kxsB@HN zi2FlLKVU}i?w!NI5$X{f9)IvqN`es&AWNUyl1xCb>=^)11F)4D!X0P@zGujFM;d`5 zZ|@ELruA~ik(aBsO=<~O2e0;a{P9T3YiRKu*%o@C?MBNVLhDplYTJd5;6f~0mCyCtOkj+Rk@=A7P zpa)Sbj9d9^R(|EwKX%{#~MZ#UTI!fAZ_HSvzbkLf%#{FMjztOb$==`(c1<=mySl+h(mv!6gYq3&p zT)+NdL*3<@SHBd5J9-M5GW?8fvpBGk)zfdjM}y(hzf&8~T&lTpN@`s4GU+-$@%J=u zEqXUCDKUX+x$y=GjUoUHqA8eK0O1$KMM~F%(z(b0zS4ah07+=qqM~x`W(c}px7t>9 z?BDzS-txWwW8KD3OFfE!)c^oj_pP>?P{Z1Wog24@>RWGJx!F+_y7k@H24(A>BEWaT zGW2^f40L6`iN=A8ewPDHK%>WGrtve&xC+z}wi91E6xAL|TUm-LRcadt03zc51OOpg z`)&QC|2cBB<#_*ah+IEfD90xN=m-BN*mHL%+;R3eeFZ&`U>LF?LG*QohQq*%!yQl! zYQy7@2x)D-p9>L10GUt(vX-yTHvJdL1e`1`hX4TS3-Cfn&H{Ave#}-N(jnx%_jDEi z-j1sMm!XjX9hRmr!pj@sdF@AD=(yI~P#;>|cB5%+sBU}jwaYz?zd3uk<&khxUH9ei z>LXVIyWkJd^4oB4#0%v8cOx4=QwZfiKyTZmC!ThAatHvXj8j2QG6Vpadd+WqqHaAe z0btU~XXm=gX3goi{n7RBqQ-&0qJ956JsbF%YFgiYf#{O^^&kIm>&Q|h#F#|?p(hv@ zynVIjz+-LCwcNVh_CmN}b-1Ua=i_yIQAQ6hY`gW1-UyWags;(Lka_>-JeR|tB7gqk zZy$g4CDLWpKJQrr04x!GNqJ8t=~_pT?vuq5@d$rJDSw6Bf&EWBa^%)`0(`#a>cywb z|Aj}$r&I@^XaJ9V!QIU-kOFl7vE@epj;3#KhhGdfp)Go?es5?=xLY}L>-NbfLamQM zBBT4t{+(C9#R&d>NE;%GAYl2F8}VOJB=FTof9C-p5+KA%!W%{o1fc3yPc4O-bTJ|T zb8KjAi3kGlsX!=97HuO9G$uDpKm=gbihLDu4S)MP0vLMrplmSLn##7Mdh`XGe4$Ru z*%f(&-aPwg=*G>C*Xp6>((+iiGu(5vWe2o>keD@90s!hdcGP!cWV>VCky}@9hGC^f z=8xB7Nk4MQBLMtLZw!9(1zM!F@leNb7O%8VNQ_zH=7=qIv_N%K8X$Rt7ODZ*^Bu*W z)O%9^-Qx=YK%&1LNCAc^3&1)C0Ngzq9vvM#+IhFL<(a{7mg8QKX{K5;N{pL_; zQbT*o(Z;30(7L!#{o3vu;c2bcYAf49?>A5pP?`bIT7UOF-GIEiJK`YNi-bAg@Ytgw zfO~i{V8)H*cz+7)iLBO{Hs`*jLm=@X)w^^*WP)z7keoTq6IBSIAeQ z2uOhN9U_EpuU@~gzwU=0<~PFq;OC+6wEdy|rn4RM>O=K&+e7P616aK`9BRAVu==~} zx5K{*-Tv@%S?S}@g;NVU1=$Gr%s9UN_#?F3W)T3C*0@dPXl?V@3zZbr;1okyYf)4Q|@qr&a8J4hS;hwD+azepsYHwO3tSfqr1ogRSj zl2&Cm{kR*Dy!8Z(>)ji8o&x~TNbs7+7X*Mu7+57^KFj~^og9B~j6RA2x=kqb4-Pi}lFE;!G8ep{s2hU)veF)xCeyuA}?Hw}KltzR+^D^#~Ly zw(o_%OcW33D`V{wTMcBj&kZUdXog>3y?rt+e}Vds^PaCXjbFvE#0r~>PZJQz7%h)v z)BrRRZYoQ9t%LvgcT(2ib7|?zc)*%{pV0&iHS)gr{Nt;)!=})c{YSpM(Xs37tx)}2 z^}!pxEzh-IX{u=ow&0N+^*fJVZEOAF=C!>qbl<%4CFDghHTXHLIuLPK&xD$pOfp0^ zgHj2KrkK{f{^5RQ$s(w?m%jqKhWTD930sfLF+KoTVh0^9Q7XYvgice+ z$_f~Rl)D}R035zQ0)PTY$6@e*j*|euVH)wrod0ne{pU(SD~0tW7tqo~G(qtjAO<$I zuwnp>2*Nd_{rHiV)(2UH(Kv9H=EB_8GgmMnAlF2E6-&SURt>cme0Nt}w z68$1AJ7@rO?>7f8qq*PxVMhQe;N6!mH?4y`z{N|KKIrH`^Z)%`$n11qM!*cpFwqGv zb@zY?(9^MDFNzHB3Php8|GTmh@Sb5eB)Wi^OO`qb0Jsg9WQ>?|!OWOAjVj7S)&BTD zI;aTfSUO{6hosGYE89({FsTC(Xny$i$2?p64M!AQ?f(>0E8j^uK%NBthD|$Bt^4@qmkp+3 zx6@|-Z&eeKep$>hWZxu9l(Int04(I;8u2q0f0Y15oI9Y6rG`R#p zAnF2qOG*T?6^JYVR=;0T+!Ux&Yg4kj3L*KgsBKxg_}&lU9luim-|>e~zZpO*cM*I~VI3Bl7>|>u-(WD*2W&ME{Kj8X)lZLL-`hS8rbb zgiq<_tq(!fy3zmfmp$-xyxaqbxZHCU6yR@fe0*?S_f0AUlT(w7*8a{<3(bMAzlx~| zT>t3il?J6kMLt|qC29aMA?H|AFbnsjgsG+J2lTfsYHN0J+@TVGo930RDDFHeehV0@4G3&Y^ul6ad8QA%G45F82a| zW_$0ur0k)uOkVtW;Jp}I@Jk>sfaTZQeJgBjyL|cm-Yff;gdzLGgkLfW2KNuFe@q47 z3yccjVfz1N(hL*JoFL}?XbVE)@4ZXrz!Rz$V5_rMtjaXS&}0#0$>M92*W`VMwW?NS zEzrsMg8hOynNXj?fDEa&8| zK^qWd7fZA`5Vw!Vo)!H+AtCz4BS|ou3qE>*rIYr8*>as`=Q#SOwjIaEpUWW{ng*uz zf*RmQ82Y{58-f_twQJvA|Mp`d$bJ0bx3B;tIUvl;dwC`%m{q@$?edzC(2w-m#t)Fj%jSTZ{%u8 z_X-0fMX83HQmP36%02f_0U}nw$MqQ?InYCpa5&;4d|XcX$XTD`#vmXIhUn(w$D`K2 zZY>-mLDpKHTIBc7Es-&`MF#-0J`IQ(0QtP8uA?HIuFl&X;rYi9cCeN&@ru3N9qgb9 zzur)ghyyI>ML+z(yBy#fjYRPgb3&IyMS&K4_xt*{*o{~R06baSl!{8f8vp=fkk~sb zdj2X&W?lCP&`uWJ^QzzB8ffL&<=Cu0N97uXc`j`Up-XWSe1`jiw>avVf5!XWM{taU zSPmrruR=Blvj7++BVif1gtHy^=a>utZSET?hkeTfa?ygBy!YbqZ@ys}0B~47{TmwQ zm+L2zjc$(pWuXXU*8d?jfFvfyg9jk$%zS3TL^Dx8xx~o{@smv@&->vHTC7!geu)s^ z>UElg=ina$ai7cT->0kvK)C>!cZk7xvc$al;YTnEhy6E9v_Jm*BUT8y@*&K!zx)*E z_%S&3-+yuA*7XlDT}v;TRL7Z6NN?Jwawbru;Ga_6;k)nPcwREUdP%Y7oF5SdHR5|7 zX^1ui)(LdcWDT+JLT7=R*&u0mNDbj6WrOKUeV| z(f_#z09vUCSmgIvsRkgLmJkHd15N<|E?2J8<)~ElawkwW=;S|R$UqnM86k}ST^8J7 zkb+}yVq7_Z50GBGrxz98m*Qc%;Xt?C|50Jc%Bs+wbZUXQR0OF3w5?EjA1 z8GVW5oqvRu^WQ#at)p*AQh>U9Fv7ZDzeBljAT z69A+a`}3^PMZhSA3EF@J0IG^JpRk`1pgSr6cz~AAyYDllx0^eMKj!`^DhL<#m|uDg z3udr>bYBjYq?g$=kKbREQ?UxZ02cFjCA0Xkbd2b0!^;LKKt6We{7RTZ-u~n(md;?A zTdtakA{`ITNv^rPv-E%_G9Zj8nCbDZ%ko#OGkLZR&NV$bkFUe8yurQVpOsH?R z#m!%W!m`I^UmL9n$O}Gd>VIq~lavs#2&2nX@)7_5wOXfjQNka>x4)w)C#L^VaQ-=K z;Y2jSd z2_2+Q;0jc)R4xcWX3FhYfD~X#)EMJ~U?kxVrguBuA4B zOQ?N)fr5q(b99M5q}s$+dMHPwTsW}){6?fFT)15E5fTa9FPu=m3CvE!O~&#%cl*4?v)>t=I=~d~D}J zolj@y-g88)*o%@h81v2Oydmn7s9%#jpo`H$0H_|mAAD|NnGLH2FD9oXQUkEu=VF-6 zF&@;B@5d1UAg}QT%9PC=w@LEv8*E=0p!Z87C|!owl4DYuUu-;edzygkBv^=VP(mf5cK|9~t;XXGEH%+$Q+w zZ#tlnTM=H}-#PQaz%askez~7P^z^H*KA|_@BYN&nK9x`?A@MWuIff)}chs567CBrh z;u^F8UAi-nB`N+srStJ8ps5S6)DB+&oR!^cf2^hF_GkFp{PK+V^{dZVi0o4mW`!Ip z3AEBH#H;&+S`#2AikJ1Zlx_HozY?b;AHh{7wbQ7B{>0z^Mlxcb(H9?GB{!8_N&!R; z0RVojgd>0l7=b5^V-%p9gIcPg2;>SxA^@0?hnn7rUc?ag?#JZvhiA`*=n?n>^@NVM z^M{t>(PCiXaI5&dHCFxixKR*bPC*A-101J@f(!}ZI?~f~oP>o00OYFyN3k&5Bjtt| zQP7v6p|4R9K(pn0mD4W!qyp+lT;GR@edn06M9FL#c-iz>Vua^}zf5-Sz)J9C(tO zunDVEX8DN%fL$ZMIoJTmA-rfjjf&E&Uf`ejn0x zw{JxqLTDcyge&1Dhf-FGvr&;?<=9_fB2W^><;}4vObo?L44IDs3A5>G)BxO0@#f?P za+H_ayD#4mFXHA6dC-fZ4|GawULa3eKbITwRBpwb!i^i(_2;2?;AZ5FivC0#KV0p> zh(}h%62C_8uBI~q?@7kur9SYuOs*td6EO9eih21iXReB~a+l;Q_NH*pm$$|o(J$nt ze0}`7Z{E6o>;A`0fXUYCM)Y8<}b_B%Vj+Wp%tsTQ> zkQKCxPC(P~BS&rzwY0W1wYD4`?r))?XLj=uvxQF_b004_V=#czy>MK?ATrM9YfYX^On)-{*hD7xEd}o9arGxfSI;zu%kd#D!R3 zt*Etfayjm<63qpOIg*nZ0A7A2-S5&o8h}k(uq4j3Vi#UVDENRQ^uX`RpZU-H>e0P* zGZoL$vH;FW#nOc{P?5shUlcpe5|vZxX5rDAGdjP)Y^qvow|giyf|r)d>G7m0CG|%h z^a?}brTvui`sv5Ph80SJH{jGDo{zUyE6yo@+Ykg{*h(5N$gzw~)38`3Cr(i^*Hq=? z^C>x9McS|ZnaacKnu7m}k5K!re^ZnN<@tO{xMPa!MKuAkJibT2J<8-HDN@Ze$6Tz5 zDTn~@Bsr!=>hi;!`-kDSFe3iro&BMXq1)m1p8k%ZtNlF~=I`h{6YS|9>JMVX_miQ{ zHUL0NxF6=<q&@9(+Of4p-5WWkR|Mt%tQ58WBS*gsT*dSDnnbh`&sE?9^6cZBf- z{R911?~DxMcZeX^ig5wV4WDfh08o{g&j64v{kD^oL}|B?V409wvyzyAF2BpK(*B~A zJ)NrjuRlz)t11`y{n%M>GvwIZSyiG*oo`p^7}Dj_C_(O0w)o$jaLNVwruja=BMVk?6oWBdQ`qlPB%`fsAAFo zmMfJ}Rv8GO#e%E`VGTq1VVPqyIy9NBS`W1Y6Gz%=UEl_l)*K?E?>Wc8r|GkWkMZ$a`Q~XtW;_e_^cX zk^UZX4DH8{3?Q%XxjRa~9KJIc8Xd;Z^z@H>J~D*w4vpODyMt$fYj9Kl2;2obo47X6 zS_N}ZkG-rqLIg6Rn`BdV%~C7wC}5w@hl;G*)zn^o0S^xRcTE0&7i!AE?zqReIU zLG{w-dBSD0Ig6}Sug;fL;BlB`V>H3X?l=Sh1ftnpN{k@HVgoK2IadA93KK+GitB+C%mz&ld0-Oa)tE(&IpRMA%N1PO1Z*`S^mGDn> zwYYca%2exDv{K%eOXVfQRah$Sz$*QF#yQaqK=&^G!E^Zw;Rxt1?7nEht1cVJ8LlFKVIgG(ZkJb8{aBnh3SEVC6CwhHgBsp3x^^zNhXXfGPWks~gY$ZwP87{cv#S5>P^K7Z zmf14?>c6)Eog@Gtwb%p<1_4rX`n&))q7tvoUDk|i^D_#*^W`0qCGKGB1fj{}A z--lD=m-VDuD+&a>g@trtelLC!-@)(TQJ*^yC@RAJ?Xn@|g z9JIJ;OUd_Zs>koL*)a}`aadzsHX?3rI7~%JXCy_NP?#wKz%Y=HHh-7XuWERc9XU45 z?ZPY#tTlWtda*@?8ol>ke;E>w1$d?YfWIh!ejTob<}1{SaiTuF1Nr#JkINIthst1a zpcwoj_~GFx@C{r9oSQEY;EU+v(+~LZ4Sx|f2%9y>sTO*iAj`o2*01GT%Y`$LIVnob zJVN+EM#g(*LUgmt5(5A*ruBF!XX(bp@_Pa}BfrY0olkFAzSFJw z0ys}^p?jV!$K}WU?D4oz+QfCV<=2*)%<)kgQwdQvhX4TWL(mTh!8RP_0DK_z zV7!DX8oHiaQkC^^qKKXqgH@MoO09u4817Ugm|omSbQNeF;{z>Bl&{>*!bOGruu8=m zuj51j*-QW?&ioL0Ft4`Zn2wb_1GqD+p8g_DvZss>3?Sk7n&j46JwFMwUVsT{50 z<%@H`tM!2LB>q0$R*&CHfJN^*pc-+tR_OF&h2gF6P_u{Lcw8VXcKoED3niXFU;&;3 z*T|3CfL^=D<;}xWVX@JP0lui@=ixFDiZodNY9U=vfLm7i8!iAq;+RR;U7^0RS+1_W01y z4|l^5_Bu;zwSN#Rx$`cl_F>3>;*-OnJHsQS8FU9Vf~LW{XOEMRVCz{d?*8F$@NB4i zw4*6JI?zK#;^C40?vb-CC@36m@4quN(A?C4fIv`z%V-wBR$i5DvWRq9iMj|V0x|&j z>FP2DiZ>b8z^(BOM~g!~ifi2^P{`$&^RLr6(=jQ)jlUjt$!cRAW znu{m)FrE=+xm{eqcJXFH%h@Fsyhs*Yxo*5FS{S^H=`G+F>-T$9d55|@yaEepantv3 z@3{rixSjMzL>$E3Ox%%fxA@d=a{>U2YPnh5LsCs&j>@oS-Z%|T0RXvnx{>kHe1(2G z58TWul4k+{^4P`;pxZd$)mIXNAG$C&e-Cy-Y<>90$ESjeTI8cWZ@~ghoC9r=2p8zB zr{#g)bYkB{^-TphHot>kQ4x(cJuCpj0^!JB`sZKC(bGY*dsw7bTU<7DG^@C0T%4mp)0Ilz| zsF{em9Yh40tfv5pl5Pe7s9BZ6=kHWG3*!~#9_%>>+@wCnIiqkqH>k84Eh#Oo!5z`v>*@KV&_;^!p*^5GgWh8Ja3y`G~Bf+UTx zm>Q=8lN4P^XIXFre12ZQyy9sUVoP^%c!G7~<$^EnbmTE^TIErsv?3Qy1VRng7XoH zP+diX%|Ub3fZwahOTf5G+rFqUipAmb@zvplfOnB@dv35f8Q{GOu);KdaiC}cEp-(? z$8bfL+0Dr1=V*tX3bz9OQeK|w_sciJ#j8zpiwQa1F1l9WYmM~4G1sSxB8lH6UMDrAT;e?yE1AF-f7#7ZBrRO8htZi}i8pU*++n}r9m=2Q z@)YSCj0Z8kR>a>^J)*`Sw|fRi`j5jtq_T{0d^xEU&b|QV7%D^Zedy>BQlLHzl)ADc z$E5~JAE`S`Oq_Q}uc4=n8e7?HTGkegusI zi2dE^NB<6;gFzGsg9E7ScebMr5bhl8zt9PrkWdfW{b&0J2Rhq>sQM50cXyucAHde% zN)^KnvKK+jfFPs4jU0v!AKx`~o?G=h%2!ew5b;Z*MG-wtOwJe)08TyEz(xuK5GZ;z z-tlo~^Bv&ig^zcb)(O@H-c7C>`se~VortUP#^$;C9d)}rxeTcsadE|%x^f<@cW0rC z+m49n3i&$H-}bq%qson#aoJi`E1iKX<`{kUq{#M?WTXX2(i4a#PUvo1^83;I>7fAEDLVDuLcTNP-tDLP2+mG`2|oTcEG&;EmLCD23|MG` za&pc?K;m{Ir*OIn)tus8#W{QEMs?0J0Dz`|%;MHb8i!qCjIF7}Z?=Hj( z7aJCpWxPHL(SS>$MCjxF6!41E%T+m`=K_n8ykGFEaHA5#D2ua2=FV4A<1~>j1%s}qkYP}~99&vwF75T2zbK#HBRt^ZmQ)x{02Q8Xp8U%E5sg)jglC0Sy4|H=0N8P#!<#uTYdX(;~UNz2n- zY!x{`YtQIe^yz7Ouk~=7^!(;g-@|Qa<{v$BxDA8;O>IZ;^GEP-`w>AKIu4z%_QP#Q z#o+(ZmbRlU)ZqvD2S0@ej=&rw)PDAE*WvcVtw)I#&~oGmQ4iYAj`SaILq$>WhT7}n ze~lMp7XZLy1;x;90RXJ2u+k2vs&W(OO^`uf1V@x>71Eu|@d0jkPp(%L*Podw9@@=; z3w}mw%_DL*jdoO@KhKlLks2)s{w0xbX|(ROLcceUGHZ_~Pb3Rm0icao&CjYJ05Ffy z&W<-r8C`u4n+CM>k!;bGB|MI+dUj4eKN&8mpQ;RgCOeAqgPX%h7e||UKF&^@9@#_YbsTaU z&~lG^cKm&-nlx3HtVaOO9I<3^UX)*Xcr{WPf^To?%mbsmRIpX~(m7=eBG^N@xlFL+ zHAIC>K3@Qdhps%Xu&NePJmC^+n*s=xz=igI3N19vsh2kB%tZKs!x{h+FgYo9vrmX6 z|5~Cb!4c&Xcpd`)R@zbF%gdt}2`51L7>a(PWTEDYE66xUIUL;{y!X4gUgr}Ln8x`W zeanMn$3v%2rBIiT>VhK0L*S?8QR;*<#t%~8k?@TRJ$xr}xl@3+8?F#twaO{A>i#F9|1!6~?DxnPr} zY*LeVr&E8!M9qMg9GzIMTr)@*urwX>bO3meb6!$ROVi*rFaS8IM9L96)mI26y;Rbm zGnAM{d#BH9XbTU412kQ44Wigx_dHBY~^YJyuy{n2^HtqPTUz9^dCa8)GPuu{iWW&>2rWXM% z_pnUIi2&lq&On%^R1|>-Ai$7KWy^iKLTuYR?t+8Q~SVjH9{2NZ!!QrIl&HcE;iINnG9kN}{@Y18Bx(VFyf<%O%9K7v+`Y`H{B z4>I@wujn;fanOgXIrDNHIXS<|asJCc{nJ0?{FBpxujb9M&dHgV!{4CL8hfCO^9#KK zJp5E-^yGSs8W8W72y755t4?b%B7hX((Z}J>V(y@-uol>Z2-%=5gzHD78P) z2%^LY#ZCM{iVwt1>g8WUnu=es=dTmiV6?O&otZH8o&7wP5wO zMS1t$f3A0ogh%Xr@8MWg;b@1kCK3l5YXwF@#c_!^h#S^sQkz$ElvQUwEXp;Bk#S(~ z0M=C@1#t4Ri_}9k(UDVSwC>cm6Rs+W&&4Nsc`o^tESb3kh`98Mk^DhFrxjj7W}`Ta z>b!1AZ4oHI3(?Pkw~8)6ZBC3Ta10^a63faM!_6iD$P9>*j#u;{8FN(LHbh8?8-uF& zd^d9i6Wwk3nq~2iZX30oOjVju?RX1NUC+&!gJsJ}^3q=IOF|n3YR9U@r*|KF!460nQ zoEbubCM1rk$`#ei@gMPO{I(|pRN?0&hWlyU?iUM=dZOa)pa_TdODYOzejA2?9!|bz zP<|X4tuZ|ST&9!>Fw(V(mu=ipZf+A(8sp?!kIu}+ZF;&MPB-@nMZeD@g9g7y^$O($ z;lO|hpv*AzQ~kiGZE~GorJ@yINB&(IAvt9@fgi9rb#Fj(G@lU>fQ9xU%lLtgOn^*j z75O&2J%K<~Ry~CPVt6llvj3gKKO*Sylhr?j?C-sX05bMx;lR2$R7LzW4Oo>$TE|I= zmdT27MF0TnS6gNGo#eNJOT$MMY z-XrmIG9|cCqO|Ox8!j&=`z6C2*mBQwxn;b$Km*!D7r-uqe0k4$s4wA?FN8}t)X;Eq zy2e?I>*=b%BR`oAJFTJ`Z32p9D6~VU=H>#1rpbjVkU%q{W+xL8=NH$wCUQ`Ntv@;W zeu;oNY6#E}a{&+FMMMC!hl|^ba&SL4RsCG0FvMsr7`rY}KNLHSD!Kxq zi%iKqs@Rkoan*#-5U@?XDIXPqR6%>s^N8Lv5jb34ejch}&x>IKj^pAsPFvdeoB+U1 zHP)h%(yYeg`tBby*MIo_iXQid2oFL8IXHZe9cYy9VB<7vG2I>k>H-h|P?a`{2Ot4J z?%jEL9wQF$7#p15*vBJjr6!AAGR$_09Ev-MvIoZXJ?^}C_1lQ|LbrY+(e@}Vqf3&H zoO;mUdNMOo1SFGLMqbNUPHECT!hrlK0YG*>w;o+yzaH7(KBI2Aq$Kz`ht|I*UL50v z=;!&VE*L1we5SF1j{4`;uX}Fo+CM5_nQ3~%Q@k;v1maPnk{ua}OG<#77id7W)vPp) zYcG`)r4kYi0a0e*1ORTENK-}KT16c~>{(pMVET{dGS(~p`ImCLGG)iX=Gf!FzP*hH zn(saKZAnvHl^%g5bUWmFM1?~}I*cfhx}s!#Lb*-o0Wdtr(0*bB&&M5u7UrOoP3SM$ zC3>r}gel6!wEggwAzD&?qqf1Rj!WEwPN(tC`(;ic-Yd6L)ALbL8l_~;B{^bL400kw z6F=eA(KJ6NM-%}gAzDn6L*9k=F{?67DKE0|^>-KB9^2o3{P39V|0ik${UiX8!r%85 z1V#bCo*H1Dooin4(sUYeqA4Inzuy1=nVbUfJ4O{S(aw(U`Rf~~1OQdOyQ=;jmtSXn|$&^qqz zX^2}YHbHTg;ukrE;6I^Wk%S1x!s;r`{nh}lWxUW+(UfeJj&?vnt? z`=Vx)Pw8CbD&-h~uAtLy3rzAK?HYua#PIO&2!FVPga47oh&br`!^1=UM^{WLCAuH? z4h7AF7NjK180n!VLUBeLzco;^NcWpcj`ci<;>}3L%-D&IxXfplT0NqIV&qQx9wR`; z>C&Sy(Jb`y+limEIW$O;F*OZH$N)jlgi39`pl9-Rp!9u=vz9%ma|IlgfFr%Ne!B#R5RC1ONoh5&#P2YR>cc z^;NAG-u&VVRhIo^6CnZ&ej^1#P%h{lqLx5<0MF~b0LlEGgR=ktkZ*m`II8ne(v;?E zQC#x-{dy3?nWUeH01^N=M|bKSKuQICTzguwLo>lWYapQ&MlE3MgKAqC8&PEJ{NTw zZhZPwdV_&%cuTdhqM()-QZw#C^F7Q*{YoiRRnHeCHE4@Wd8LUm^45qL(3s<$!&26l zt9{4+bI0MRcEP>R+}85Ol$;_D=W2e}tfgzwu@zImN;1thN_(a?G6E3gF@4`RYV%Gb z1Tb!9`8oB-#RGaPUF7`6JI#zZSxJz?x#ANUZumt4#@SeIZmv@@xfzgI5on5j2PH&O zu5q)8;hj_u_^j(@B_vG6BO8pOaKDh?z0DVA$ zzb)u%ZIbg4w+8PBeUU16H~$j zw?vh-2TjCMq~uGzcvns!A`7075WUv#nGL?DGhk)_$QSU*e=sVj;y=TUNsp%QA1)cr z=VjYVi;MG1$|FZ<R-_)h%--50Yor|OQk(X z6m-l?^O$Q!{O0nx)Jx(}qp0YSY0o#d9KK(I|Knx8{~tpFkOrFS7fmTG^=R_uuve|I zD(2WWU<3f1kph3Db1%wgxw7W%jI@`Xyyw$5_y*S(k0yB{QI!KdCeT!UA2GQ1)N~Pq zI+1q@7K&aIu(FDItZ%l(lI4s>00961Nkl2%(X94w*PSFhifeLN6taLH_s|dev>N;eX`*%5kNBtjKB z@!V#AscK?EtVE{8{9wJgXnSz724mP1e@#=PG8QjU14Ke2N_E;YWy`?m5J=`H4;>Ai zJUt!&$VWy-P8~XW>?m|7fB-}Llx2&YPG@Ahl-aV2QBPI^ouc?gKL!9`V-Sm+`%N$g z{w$WUqnl&Zo3K_^mRlF-OHvRU{YDSjB|1>_cQ{|yvAbwVO2a+cEbaH`e6;>9wUnC{ z^73jrr#Z5nae+{N$)7wJ04(w22vpspQ^^3J(a0oKQJv0W*CVEqnuh;n$7}Wcp{}MX zRdGP&L|<&qoT^tO03^l~0kd8qCZJOlJ25lysMX{VVKOmD1VnqI_B3YJJDftxDOap2 z;))P1sN(MtIo8F@xI#?~`Z9M-6J$<5M|H#=0*6pQfto9_bdB-GBSehNv1&|~gqWKu zNg9KjEfMocRyr}STs0@(C1M!vVF&;at5G$Q0Fm{PA~MltWzCC!hwDP~>=XgqzDD-p zERTB`DS*T4Q2icB8gc6PEJ~*Ivc24M^6)e0btzrN$C2~my#Qbt$4@KzUtN}p?7{6e zJ_#mKYx3F%01#CZ0Ycaxo!Y;Y%_=xIdS`U#=!;b^|GsAB#vy&NM^?W80L+>W?tQGL z=9!mYJ_-{0NaynGWi}@db#h!xM0}lXBkKPeHyWskL;rvZ92EgD0*q14j*oVBi@`S; z0W9F~2}z79qI13o7`3E(1%wRF(}@QtsacLvHLk7qgZD07>WDhRQJ=q0|8#dWOoV%} zlN+)$>*&$+OQpxKlu==JKrd`yhC_gx4gluyI88~?7$C_q#`{ptqsj;XHQGYW$pe&u zic(t&H(Jn1dgPHQapUUYjPqFBBxTYgQzrdqWoX3n$EBpZD@w82iil86Y3p2Q${4cX zi7@~$4*>9lysA_}@))a~Za7(aB18b+A0zZM4oU&L?N=^`!{!jHh$07%Z2VDynu7|Y zc0S_&^Qz;CRgcFbs$$IgE(EJq{9TaiaJhLm&ZYQ5MgTG0wW-sT@Gz?@r5OZ`Ie=H`Ld4j1Jw2S^EY842=xz|4V&c zUETJoI_S>aIRtA~&Yf{akt#4nQ5cP;#)HSj97<}R0(fktuh>xopf+GKkIRl5Cv!bh zJ`lll0)VA<*?1OXN8IJ(QB!OO)V2{E3kuGCUVP@x^{C~pX)WNt{n!z1oVa8GRWvod z;E%m5kBSXGzh9C!nb1L#Y4m3_9@|zi4(fDOSxrd^QT7edq1sp`U@Uuka$M@m6alD2 z&tl3vh6_ufutE|z75tG8$m-Ci@*xspsi-1#lBLlqE!Cvof}bp>pQ~c^9sRe(?}#s0 zm4^-_Kvm`ZgLt}fME^x1{N)XeQUJkkOo)#r0%g@yT8Y(`E3*J<;EDa;B}(1A=QEYu zPq$mHCzlF=C^I{Kfzl;Qu(xqUkgH0Xg&HXp5F5tjG*}oa-J-dIVNX<6<_ZvJQ{>Ki znL)*#tmPOH0N0k{V_g{|qX744O;VlBTt!MVGPd*6jA0&)govQV$E0srs!+AuT&_$I zv#d~J8Evp&{^pk{I|lE3as@s!FwwI%fLE`TPucY{-`}PL_05x_;K;^+iRby}wiIplyPMCRei|_@1(NS7zIeque zXlP}9{kEMucW(WCkTU%7jyofxCtupQbL-ZP+v=Zep%9>8PNi2cj#UvoiKlhS0t2vG zb~?CJGfz-~BiF}_LioL$`LU-Xtes4$&n&eHUY1kz7VJE<)f zBWW&QE@-yyveJBCz6UKljNW)5l4YAm#5|PU=8*)1yU^)H*~~*v$03f(F>l^HdaijC zjjDx(Hk*T|r$xPk)Z35(m>!p1fXVv3_Ba3lRA5yO%!;VeD{EJJZpKl6p3@`Cfwjx80mzAy+-j0)PrE7kVz2wLSh^&dzCX)3<46pX73nh=LDIKpU&0`2EGD z#TAow^xyg6GJGaKMl0~@$5(EJl_jbzuTV09G?y_Gthwccp^Kl7h7PDd!h;BcTW#Z6 zfJD~A9Os-S(vnT=HQmfLfE+DC#gHHL0S!-d4MLyOgzKJb(vk3w z9RPs6N_nwY6E|X^kh`LRRT6{YTC`JY0Eh^gh(H8O~xZWNVbD0vH;Z(XD*=ObdG;mkftz@Pf|zFIV#nPit~$+#Irnw zo=X;TnF@g6DPs92O#-t=)$~qqp_H)VX07;LLOgp_ja5mGE&^IO0{&& zQBe?F2>LabV{TRP!@ThcSJs52#H9H909mAgF1j{c18_Jrr?{htwdt4iRj!gFgW|$D zvERW5v@eU>)HgcX)A(8)um7#vYS$ktpmMIL#ua*9MrtVgsgmu3>3`BHLOB4}iH5LBo}AMZ+3D|pG}x9FIY>zeS04N} zA5*5V)+m$Vnjkf9k*=cW=oKv~`oqX{0Pa;30mP)1lVeSeES6Z-V*<~2BW*A%006rt z>Ps5)PIV%aXkpSAlVnk7kXD5J8734+iAmHryijKf1WJk^)D|GMH&V<{1$9}7Yv8VS z`$04ET10-SKr-$tJ5 zP;(tN52OaM792L4m-7T4N1A@bJOWyJQ_1xaGgMOj~p?E&XhlF(r=3zSwqwtH}-GuXbrDTGZ0 zg{DxAwSwT0*0zT-A`Tw?PMuEx9Xpl3Qgi)&y@SdUWGG(Qs!As$N)1!&6q6?>B_)nG zG84l(rInIsXaWj$7OFZlu9*{fc^(5m^5g`)=x2#30z?BqycDCJoW!MC001~BOekj-g#>^?S*&yGT0S)5 zM>y&s3a?*XxxTKEj$Mt$5%sD3d{^VnjjO;5;$bfg9D78igcax{Gt2{Wh{wkz8hq~2 zI4?xxQ)tV7$rTF#iT474B}VQ@4hoq?1Yp-hx?3nqjcz@h1`v?YnouJ_rLd4e+eb+x z->oi;X+oX}P?WFzi;9TeX8R{DI1zuvtBSEtmFAbco?Ie?a&+&Z6p43WG~S8*$UyC- z88j`I^;YmtAcrD=6mcGkQLZ6X;0i0RdkTU80f>|GL|sNUu$@E&qex0@)2iG0)Urv+ zmSY$Chxr(|aAJ$Hs4UBBw-X5Ps>-Fw;Uefw21s%e3KZzfmXwzk!%{j>T%z%^Q+-_Y z^XU?Bkg&q0O23M0RFuB-ZM$e%BtT<^hJTXT7tk`kI2HyJ#EL}$jQg7isE?o_s`V)zGlYc3Xwk2 zxD+w|X`dDD2B6OZkO+u*a$@2*c83NV z&=NcGD2jkwd-I4H1QMhW+HxAV1_ip&21rXfpITxnRn{>;1fdp}?N?4$DOO22*Yzr% zUV@#|=J0aB4={G~7!Aq2Aq|kClbX=g;${$6h`c-v;q`D2h54Z%ZK4M7v#FE$>L^B3 zlWdyt5*%9TIY~9iV`u{5KPQ#voU)%yfd-+3nlon+n#`vMhM8c3f9{Ts4mAHV`>9zu z6a_e(v<8rF1qctQ!sY}jtZ5FzCtREi~6z zlv@3kom5#U^cRBc36V|zp0!WdAe(CD$?K3SV2dak+9r$rH+ z=;C_{bDa)5UN{;VPfr39FqpY~Ss;7r^y!aIP5;LV+Jq#_PqO0+J#LTaaxmGPXV&sa zqmm_1#9(!9F6d>BwE%$VRgq{h|EL8m&ukk2Km$JiEOf3g`vOK8DAw`88eVLH2JsVAE>=&Ria@;$cWvZOkxGQo=Z8 zn?y@uG_gBb4yZ~VfQ)N64foRBAqE+|^1k!1;;tLgq+T{8a0{gzhx*T+awwTEEh$@M zpKqU!|1GI3Bgymf@&z`BjpR$jy{a(+`r>@K0oCDB$^c z%e4e;M}IyGIoLC42pxdnKxU9_&2g7MT~bm}UQu55Px+ZkkehhK_!q@KntzF?sMB8; zZMo9S>bG)~sBz%rqJ=l>^0 zy?B8NcqB1$iivt$6PHp|m9s!BKp(5ox&*L!b@*W#hwAaj?hHQU&npH1L{3YbQr)(l zu@CH|53iS#cYzRSV(B9%vr^p5J0x)@a8GDnjHQ4$RAZS1XO3%q1OO~!LK>aa1V~6s zP5~!4+SffH(J~>Oc>r!v!lYRg<|K=yuaDUll4OGyjT^TnXP%0D9*3tCwiIQvW+ZcI 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 L)z4*}Q$iB}%XOe% literal 0 HcmV?d00001 diff --git a/docs/thai-vc-arf/images/p15-0.png b/docs/thai-vc-arf/images/p15-0.png new file mode 100644 index 0000000000000000000000000000000000000000..095b796b2cf81ab16363b2be41b0edee949afe4b GIT binary patch literal 21462 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 literal 0 HcmV?d00001 diff --git a/docs/thai-vc-arf/images/p15-1.png b/docs/thai-vc-arf/images/p15-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c16e5d3f0ac4a1bd16e706e9b9bd03b5a131216 GIT binary patch literal 194715 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 CUth)m literal 0 HcmV?d00001 diff --git a/docs/thai-vc-arf/images/p16-0.png b/docs/thai-vc-arf/images/p16-0.png new file mode 100644 index 0000000000000000000000000000000000000000..52953eaa07f37e7976f9ec30170300d40a777e0e GIT binary patch literal 275629 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%0D!G1*ld;E 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

ow^R@02psEQyW2vzgZyzR3m}96>Jl6 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