DS10 — Gói container FES (gcpn.zip)
Yếu tố kích hoạt S4, kết thúc Phần II
Người kiểm định (hoặc đối tác kinh doanh) muốn nhìn thấy chuỗi — chứ không chỉ dưới dạng tóm tắt. Họ không nhận repo, không có quyền truy cập Git, không có lịch sử. Họ nhận một gói: *.gcpn.zip — bộ xác minh vật lý của quy trình ký.
Manifest và kho lưu trữ ZIP — hai nhiệm vụ tách biệt
| Nhiệm vụ | Nơi chứa | Nội dung |
|---|---|---|
| Manifest | chính tệp .gcpn.md |
Liệt kê tất cả artifact kèm SHA-256 (bảng xác minh + các JSON artifact được nhúng) — nó xác định những gì thuộc về giao dịch |
| Kho lưu trữ ZIP | *.gcpn.zip |
Các tệp vật lý để bàn giao: các artifact dạng văn bản (được trích xuất từ .gcpn.md dưới dạng .json/.txt/.md/.v7g.md) cộng với các artifact nhị phân dưới dạng tệp riêng biệt |
Các artifact dạng văn bản (.json, .txt, .md, .v7g.md) tồn tại bên trong .gcpn.md (MD-Fences) — trong ZIP, chúng được hiển thị dưới dạng tệp riêng lẻ (có thể trích xuất). Các artifact nhị phân (PDF, PNG, SVG, …) không thể tồn tại trong tệp MD — chúng được đưa vào ZIP dưới dạng tệp riêng biệt; thông thường chúng đã được tham chiếu hoặc xác định bằng hash SHA-256 trong các cấu trúc dữ liệu JSON artifact (ví dụ evidence.facsimile_ref.sha256) — hash là định danh, ZIP cung cấp phần thân.
Cấu trúc gói
GCPN-SIG-260913-001.gcpn.zip
│
├── container.gcpn.md ← Manifest + textbasierte Artefakte (JSON-Fences) + .v7g.md
│ (identisch mit der Form im Git-Repo)
├── MANIFEST.json ← maschinen-lesbares Verzeichnis (alle SHA-256, package_sha256)
│
├── source/ ← textbasiert: Quell-Dokument, aus dem Container extrahierbar
│ ├── gvb.md ← Quell-Dokument (referenced_doc)
│ └── gvb.md.v7g.md ← Sidecar
├── signature/ ← textbasiert: Signatur-Doc + Events (aus MD-Fences)
│ ├── signature-doc.json ← Signatur-Doc (DS02) + .v7g.md
│ ├── event-offered.json ← Events (DS03) + .v7g.md
│ ├── event-accepted.json
│ ├── event-signed.json
│ ├── facsimile.svg ← BINÄR: Grafik physisch (Standard) — im JSON nur als SHA-256 referenziert
│ ├── facsimile.png ← BINÄR: Fallback
│ └── facsimile.sha256 ← Checksums
├── fes/ ← binäre FES-Artefakte
│ ├── fes-envelope-report.json ← Envelope-Report (DS09) + .v7g.md (textbasiert)
│ ├── contract-signed.pdf ← BINÄR: signiertes PDF (PAdES)
│ ├── certificate-of-completion.pdf ← BINÄR: Dienst-Report
│ └── pdfsig-report.txt ← Krypto-Prüfung (externes Tool)
└── README.md ← Verifikations-Anleitung (DS04-Routine)
Cách đọc: Manifest (.gcpn.md) nêu tên từng artifact kèm SHA-256 — ZIP cung cấp phần thân tương ứng. Các artifact dạng văn bản được chứa ngay trong manifest (và trong ZIP được trích xuất thêm dưới dạng tệp riêng lẻ); các artifact nhị phân chỉ tồn tại vật lý trong ZIP, nhưng trong manifest được xác định đầy đủ qua SHA-256 của chúng. Nhờ vậy, người kiểm định có thể xác minh từng phần thân đối chiếu với giá trị hash nêu trong manifest.
Manifest xác minh
MANIFEST.json gộp tất cả SHA-256 của gói:
{
"$schema": "https://gitcover.org/schemas/gcpn-manifest-1.0.schema.json",
"uuidV7": "<deterministische uuidV7>",
"package": "GCPN-SIG-260913-001",
"created_at": "2026-09-13T16:45:00Z",
"created_by": "E1",
"artifacts": [
{"path": "container.md", "sha256": "…"},
{"path": "source/gvb.md", "sha256": "…"},
{"path": "signature/signature-doc.json", "sha256": "…"},
{"path": "signature/event-offered.json", "sha256": "…"},
{"path": "signature/event-accepted.json", "sha256": "…"},
{"path": "signature/event-signed.json", "sha256": "…"},
{"path": "signature/facsimile.svg", "sha256": "8fcffe0b…1006"},
{"path": "signature/facsimile.png", "sha256": "d330348e…81fef"},
{"path": "fes/fes-envelope-report.json", "sha256": "…"},
{"path": "fes/contract-signed.pdf", "sha256": "7a054fa5…272b"}
],
"verification_routine": "siehe README.md (DS04-Routine)",
"package_sha256": "<SHA-256 des ZIP selbst>"
}
Quy tắc Facsimile: vật lý với FES, tham chiếu trong các trường hợp còn lại
Quan trọng (quy tắc cốt lõi của Saga):
| Phương thức | Facsimile trong gói | Lý do |
|---|---|---|
| Textform (Phần I) | Tham chiếu (SHA-256 + dấu guid) | Đồ họa nằm trong thư mục PII của tenant repo; chuỗi chỉ tham chiếu, gói ghi nhận tham chiếu đó |
| FES (Phần II) | Vật lý (SVG + PNG) | Gói là bản bàn giao hoàn chỉnh; người kiểm định cần đồ họa để kiểm tra mà không cần quyền truy cập repo |
Sự khác biệt này là có chủ ý: Với Textform, asset vẫn nằm tại nơi nó được quản lý theo đúng nghĩa GoBD (thư mục PII, sidecar, xác minh SHA); với FES, nó được sao chép — gói là bản đầy đủ (bản gốc vẫn giữ nguyên trong repo; SHA-256 chứng minh tính đồng nhất).
Quy trình xác minh trong gói
README.md dẫn người kiểm định qua quy trình (DS04, nguyên sinh trong gói):
# 1. Manifest-Integrität
sha256sum -c <(jq -r '.artifacts[] | "\(.sha256) \(.path)"' MANIFEST.json)
# 2. Kette prüfen (Quell-Dokument → Signatur-Doc → Events)
jq -r '.target.sha256' signature/signature-doc.json # = sha256(source/gvb.md)
# 3. Event-Kette
jq -r '.prev_event_sha256' signature/event-*.json # Verkettung prüfen
# 4. Facsimile
sha256sum signature/facsimile.svg # = 8fcffe0b…1006 (Tabelle)
# 5. PDF-Signatur (externes Tool, optional)
pdfsig fes/contract-signed.pdf # VALID, PAdES-B-T
Export-ZIP so với Git-Repo: định nghĩa Manifest
Hai hình thức thể hiện của cùng một container:
| Hình thức | Tên | Vai trò |
|---|---|---|
| Trong Git repo | <Referenced-Doc-Basisname>.gcpn.md |
Chính container đó — các JSON artifact được nhúng của nó + bảng xác minh chính là manifest (repo hiển thị nội dung trực tiếp; tệp ZIP không thể biểu diễn trong Git) |
| Dạng export | <Referenced-Doc-Basisname>.gcpn.zip |
Bàn giao vật lý (ZIP) — kèm thêm MANIFEST.json (tất cả SHA-256 + package_sha256) làm mục lục đọc được bằng máy |
Vậy định nghĩa Manifest có hợp lệ không? Có — ở cả hai hình thức: Trong Git repo, .gcpn.md đảm nhận chức năng manifest (nó liệt kê từng artifact kèm SHA-256, quy trình xác minh kiểm tra đối chiếu với các thông tin được nhúng); trong export-ZIP, cùng chức năng manifest đó được đính kèm thêm về mặt vật lý dưới dạng MANIFEST.json, để người nhận có thể kiểm tra mà không cần bộ phân tích MD (sha256sum -c). Hai hình thức là tương đương — SHA-256 của các artifact chứa trong đó là định danh (luôn luôn và ở mọi nơi).
| Hậu tố | Ý nghĩa |
|---|---|
.gcpn |
Container GitCover-PrimaNota (các nghiệp vụ kinh doanh được gộp chung) |
.md |
Dựa trên Markdown (các JSON artifact trong MD-Fences, tương thích Typora) — chức năng manifest trong repo |
.zip |
Dạng export (bàn giao vật lý, kèm MANIFEST.json) |
Saga khép lại Phần II
Vòng tròn đã khép:
- Phần I: Chuỗi Textform (tài liệu nguồn, tài liệu chữ ký, events, sidecar, container GCPN) — § 126b BGB, đánh giá chứng cứ tự do.
- Phần II: Gắn nối FES (các cấp độ eIDAS, lớp Facsimile, Signaturplatte, Envelope-Report, gói vật lý).
- Phần III (dự kiến): Vòng PII/GPG — quản lý khóa, các signing-identity JSON schema, cơ chế SSH so với OpenPGP, trust registry.
Saga cho thấy: GitCover không thay thế các dịch vụ chữ ký — nó neo giữ chúng. Repo vẫn là tầng bằng chứng; các phương thức bên ngoài gắn nối vào mà không làm đứt chuỗi.
Được tạo: 260913 | Phần II, bài DS10 | Loạt bài: digital-signage