DS03 — Quy trình chữ ký (Accept/Deny/Sign)
Yếu tố kích hoạt S2
Sau khi Signatur-Doc (DS02) đã được định nghĩa, người kiểm tra đặt ra câu hỏi đúng: Vậy cuối cùng đã quyết định điều gì? Một Signatur-Doc chỉ nói rằng: "E1 ký Doc X." Quy trình — chấp nhận (Accept), từ chối (Deny), ký (Sign), rút lại (Withdraw) — là một sự kiện riêng với dòng thời gian riêng của nó.
Máy trạng thái của quy trình chữ ký
Một quy trình đi qua một máy trạng thái tất định:
Mỗi thay đổi trạng thái là một Event-Artefakt trong Repo — một tài liệu JSON theo schema signature-event-1.0:
{
"$schema": "https://gitcover.org/schemas/signature-event-1.0.schema.json",
"uuidV7": "<deterministische uuidV7>",
"type": "signature-event",
"event": "sign",
"actor": {
"name": "Erich Mustermann",
"role": "Geschäftsführer",
"capacity": "handelnd für PARTNER-ORG"
},
"on": {
"signature_doc_sha256": "<SHA-256 des Signatur-Docs (DS02)>",
"target_doc_sha256": "<SHA-256 des Quell-Dokuments>"
},
"prev_event_sha256": "<SHA-256 des vorherigen Events, null beim ersten>",
"statement": "Ich zeichne das Dokument in der angegebenen Funktion und bestätige den in der Textform übermittelten Wortlaut.",
"evidence": {
"facsimile_ref": {
"file": "E1.Signature.transparent.FES.svg",
"sha256": "8fcffe0b313f8a1e5b44c1c33cd8073e699b338b6450aa1ba9f33f5587501006",
"guid_stamp": "01a09b48-4580-76f9-b789-024691b989c5"
},
"timestamp_utc": "2026-09-13T15:20:00Z"
}
}
Sự nối chuỗi: prev_event_sha256
Mỗi Event tham chiếu đến Event liền trước của nó — lịch sử chữ ký tạo thành một chuỗi SHA-256 (nguyên tắc prev_sha256 của GCPN, ở đây trên cấp Event):
offered (event 1) ──► accepted (event 2) ──► signed (event 3)
│ │ │
sha256 sha256 sha256
└── prev=null ─────────┴── prev=sha(ev1) ───┴── prev=sha(ev2)
Người kiểm tra có thể xác minh toàn bộ lịch sử chỉ với ba lệnh:
sha256sum ev1.json # stimmt mit prev in ev2?
jq -r '.event' ev*.json | sort # Zustandsfolge korrekt?
jq -r '.actor.name' ev*.json | sort -u # Zeichner konsistent?
Các loại Event
| Event | Ý nghĩa | Giá trị chứng cứ |
|---|---|---|
offered |
Đã yêu cầu ký (tài liệu được trình để ký) | Điểm bắt đầu thời hạn, tính công bằng của thủ tục |
accepted |
Người nhận đã ghi nhận (xác nhận quyền truy cập theo Textform) | § 126b (1): Đã chứng minh quyền truy cập |
denied |
Người nhận từ chối (kèm lý do) | Ghi nhận việc từ chối — quan trọng khi có các phiên bản mâu thuẫn nhau |
sign |
Người ký ký tên (tham chiếu Facsimile/khóa) | § 371a ZPO: Kèm tên + thông báo hình thức |
withdraw |
Người ký rút lại (trước khi xảy ra Verwirkung) | Rút lại đáng tin cậy cho soát xét thay vì xóa im lặng |
Không có nguyên tắc xóa im lặng: Một Event không bao giờ bị xóa hoặc ghi đè. Việc rút lại là một Event
withdraw— lịch sử vẫn còn nguyên vẹn (nguyên tắc của GoBD: khả năng truy vết).
Multi-Signatur: Hai người ký, một tài liệu nguồn
Với một GVB có hai dòng chữ ký, mỗi người ký tạo ra chuỗi Event riêng của mình trên cùng một tài liệu nguồn:
Quell-Dokument (sha256 T)
├── E1: offered → accepted → signed (Kette A)
└── PARTNER-1: offered → accepted → signed (Kette B)
Việc xác minh (DS04) kiểm tra cả hai chuỗi một cách độc lập — và GCPN-Container (DS05) gộp cả hai lại dưới một Container-ID.
Tính tất định
Mỗi Event đều có thể được mô tả một cách tất định: uuidV7 từ dấu thời gian + SHA-256 của Event, máy trạng thái không có chuyển trạng thái nào không xác định, không có văn bản tự do ngoài khai báo statement. Đó chính là chất lượng Saga: Quy trình có thể được bất kỳ người kiểm tra nào tái hiện và hiểu được mà không cần kiến thức bối cảnh.
Tóm tắt
- Quy trình chữ ký là một máy trạng thái (drafted → offered → accepted/denied → signed → withdrawn).
- Mỗi thay đổi trạng thái là một JSON-Event (schema
signature-event-1.0) với chuỗi SHA-256 (prev_event_sha256). - Event không bao giờ bị xóa — rút lại là một Event, không phải một thao tác xóa.
- Bài viết tiếp theo (DS04): quy trình xác minh của người kiểm tra.
Đã tạo: 260913 | Phần I, bài DS03 | Loạt bài: digital-signage