รับชมวิดีโอบทเรียน: การรักษาความปลอดภัยเอเจนต์ AI ด้วยใบเสร็จเข้ารหัส
(วิดีโอบทเรียนและภาพปกจะถูกเพิ่มโดยทีมเนื้อหาของ Microsoft หลังการรวม ร่วมกับรูปแบบบทเรียนที่ 14 / 15)
บทเรียนนี้จะครอบคลุม:
หลังจากจบบทเรียนนี้ คุณจะรู้วิธี:
ลองนึกภาพว่าคุณได้ปรับใช้เอเจนต์ AI สำหรับ Contoso Travel เอเจนต์อ่านคำขอของลูกค้า เรียกใช้ API ของสายการบินเพื่อค้นหาตัวเลือก และจองที่นั่งแทนลูกค้า เมื่อไตรมาสที่ผ่านมา เอเจนต์ได้ประมวลผลการจองไป 50,000 รายการ
วันนี้มีผู้ตรวจสอบมา พวกเขาถามคำถามง่าย ๆ ว่า “แสดงให้ฉันดูว่าเอเจนต์ของคุณทำอะไรไปบ้าง”
คุณส่งไฟล์บันทึกให้ ผู้ตรวจสอบดูไฟล์แล้วถามคำถามที่ยากขึ้นคือ “แล้วฉันจะรู้ได้อย่างไรว่าไฟล์บันทึกเหล่านี้ไม่ได้ถูกแก้ไข?”
นี่คือปัญหาเส้นทางตรวจสอบส่วนใหญ่ เอเจนต์ที่ปรับใช้ส่วนใหญ่ในวันนี้พึ่งพา:
ไม่มีวิธีใดเหล่านี้ที่จะตอบคำถามของผู้ตรวจสอบโดยไม่ต้องให้ผู้ตรวจสอบไว้วางใจใครบางคน (คุณ ผู้ให้บริการคลาวด์ของคุณ หรือผู้ขายฐานข้อมูลของคุณ) สำหรับการใช้งานภายใน ความไว้วางใจนั้นมักจะยอมรับได้ แต่สำหรับงานที่ถูกกำกับดูแล (การเงิน ดูแลสุขภาพ หรือการบังคับใช้กฎหมายของสหภาพยุโรป) ไม่เป็นเช่นนั้น
ใบเสร็จเข้ารหัสแก้ปัญหานี้โดยทำให้แต่ละการกระทำของเอเจนต์ตรวจสอบได้อย่างเป็นอิสระ ผู้ตรวจสอบไม่ต้องไว้วางใจคุณ พวกเขาต้องการเพียงกุญแจสาธารณะและใบเสร็จเท่านั้น
ใบเสร็จเป็นวัตถุ JSON ที่บันทึกสิ่งที่เอเจนต์ทำ โดยลงลายเซ็นดิจิทัล
flowchart LR
A[ตัวแทนเรียกใช้เครื่องมือ] --> B[สร้างเพย์โหลดใบเสร็จ]
B --> C[ทำให้ JSON เป็นมาตรฐาน RFC 8785]
C --> D[แฮช SHA-256]
D --> E[เซ็น Ed25519]
E --> F[ใบเสร็จพร้อมลายเซ็น]
F --> G[ผู้ตรวจสอบยืนยันแบบออฟไลน์]
G --> H{ลายเซ็นถูกต้องหรือไม่?}
H -- yes --> I[หลักฐานป้องกันการปลอมแปลง]
H -- no --> J[ปฏิเสธใบเสร็จ]
ใบเสร็จขั้นต่ำมีลักษณะดังนี้:
{
"type": "agent.tool_call.v1",
"agent_id": "contoso-travel-bot",
"tool_name": "lookup_flights",
"tool_args_hash": "sha256:a3f9c1...",
"result_hash": "sha256:7b2e1d...",
"policy_id": "contoso-travel-policy-v3",
"timestamp": "2026-04-25T14:30:00Z",
"sequence": 47,
"previous_receipt_hash": "sha256:9d4e6a...",
"signature": {
"alg": "EdDSA",
"sig": "c5af83...",
"public_key": "8f3b2c..."
}
}
มีสามคุณสมบัติที่ทำงานนี้:
ลายเซ็น ใบเสร็จได้รับการลงลายเซ็นโดยเกตเวย์ของเอเจนต์โดยใช้กุญแจส่วนตัว Ed25519 ใครก็ตามที่มีคีย์สาธารณะที่ตรงกันสามารถตรวจสอบลายเซ็นแบบออฟไลน์ได้ การปลอมแปลงในช่องใด ๆ จะทำให้ลายเซ็นเป็นโมฆะ
การเข้ารหัสแบบมาตรฐาน ก่อนลงลายเซ็น ใบเสร็จถูกจัดเก็บเป็นลำดับไบต์โดยใช้ JSON Canonicalization Scheme (JCS, RFC 8785) ซึ่งรับรองว่าในสองการประมวลผลที่เหมือนกันจะได้ไบต์ที่เหมือนกันโดยสมบูรณ์ หากไม่มีการเข้ารหัสแบบมาตรฐาน ชุด JSON serializer ที่ต่างกันจะทำให้ลายเซ็นต่างกันสำหรับเนื้อหาเดียวกัน
การเชนแฮช ช่อง previous_receipt_hash ทำหน้าที่เชื่อมใบเสร็จแต่ละฉบับกับใบเสร็จก่อนหน้า การลบหรือเปลี่ยนลำดับใบเสร็จจะทำลายใบเสร็จที่ตามมาในโซ่ทั้งหมด การปลอมแปลงจะเห็นได้ในระดับโซ่แม้ว่าจะข้ามลายเซ็นรายบุคคลไปได้
คุณสมบัติเหล่านี้ทำหน้าที่ให้การรับประกันสามประการ:
คุณไม่จำเป็นต้องใช้ไลบรารีพิเศษเพื่อสร้างใบเสร็จ ฟังก์ชันคริปโตกราฟีที่จำเป็นมีทั่วไปและตรรกะมีเพียงไม่กี่สิบบรรทัดใน Python
แบบฝึกหัดในไฟล์ code_samples/18-signed-receipts.ipynb จะเดินผ่านกระบวนการทั้งหมด เวอร์ชันสรุปคือ:
import json
import hashlib
import base64
from nacl import signing
from jcs import canonicalize # JSON canonical ตาม RFC 8785
def b64url_nopad(data: bytes) -> str:
return base64.urlsafe_b64encode(data).decode("ascii").rstrip("=")
def sha256_canonical(obj) -> str:
"""SHA-256 of a Python object's JCS-canonical JSON form."""
return f"sha256:{hashlib.sha256(canonicalize(obj)).hexdigest()}"
# สร้างหรือโหลดกุญแจสำหรับลงชื่อ (ในสภาพแวดล้อมจริง ให้เก็บไว้ในที่เก็บกุญแจ)
signing_key = signing.SigningKey.generate()
verify_key = signing_key.verify_key
# สร้างข้อมูลใบเสร็จ (ยังไม่มีลายเซ็น)
tool_args = {"origin": "SYD", "destination": "LAX"}
tool_result = [{"flight": "QF11", "price": 1850, "stops": 0}]
payload = {
"type": "agent.tool_call.v1",
"agent_id": "contoso-travel-bot",
"tool_name": "lookup_flights",
"tool_args_hash": sha256_canonical(tool_args),
"result_hash": sha256_canonical(tool_result),
"policy_id": "contoso-travel-policy-v3",
"timestamp": "2026-04-25T14:30:00Z",
"sequence": 0,
"previous_receipt_hash": None,
}
# ทำให้เป็นแบบ canonical, แฮช, ลงชื่อ
canonical_bytes = canonicalize(payload)
message_hash = hashlib.sha256(canonical_bytes).digest()
signature_bytes = signing_key.sign(message_hash).signature
# แนบวัตถุลายเซ็นที่มีโครงสร้าง
receipt = {
**payload,
"signature": {
"alg": "EdDSA",
"sig": b64url_nopad(signature_bytes),
"public_key": b64url_nopad(bytes(verify_key)),
},
}
นั่นคือขั้นตอนการลงลายเซ็นทั้งหมด แบบฝึกหัดในโน้ตบุ๊กจะอธิบายแต่ละขั้นตอน
การตรวจสอบเป็นการทำงานตรงกันข้าม:
import base64
import hashlib
from nacl import signing
from nacl.exceptions import BadSignatureError
from jcs import canonicalize
def b64url_decode(s: str) -> bytes:
padding = "=" * ((4 - len(s) % 4) % 4)
return base64.urlsafe_b64decode(s + padding)
def verify_receipt(receipt: dict) -> bool:
# ลายเซ็นเป็นวัตถุที่มีโครงสร้าง: {"alg", "sig", "public_key"}.
sig_obj = receipt.get("signature")
if not sig_obj or sig_obj.get("alg") != "EdDSA":
return False
# สร้างข้อมูลเพย์โหลดที่ถูกเซ็นจริง ๆ ใหม่ (ทุกอย่างยกเว้นลายเซ็น).
payload = {k: v for k, v in receipt.items() if k != "signature"}
canonical_bytes = canonicalize(payload)
message_hash = hashlib.sha256(canonical_bytes).digest()
try:
verify_key = signing.VerifyKey(b64url_decode(sig_obj["public_key"]))
verify_key.verify(message_hash, b64url_decode(sig_obj["sig"]))
return True
except BadSignatureError:
return False
ฟังก์ชันนี้รับใบเสร็จและคืนค่า True หากลายเซ็นถูกต้อง และคืนค่า False หากไม่ถูกต้อง ไม่มีการเรียกใช้เครือข่าย ไม่มีการพึ่งพาบริการ ไม่มีความไว้วางใจจำเป็นสำหรับบุคคลที่สามใด ๆ
เพื่อดูการตรวจจับการปลอมแปลงในทางปฏิบัติ โน้ตบุ๊กจะเดินผ่าน:
tool_args_hashนี่คือการสาธิตในทางปฏิบัติว่าใบเสร็จสามารถบ่งชี้การปลอมแปลงได้: การแก้ไขใด ๆ ไม่ว่าจะเล็กน้อยเพียงใดก็จะทำให้ลายเซ็นขาดความถูกต้อง
ใบเสร็จหนึ่งใบลงลายเซ็นปกป้องการกระทำหนึ่งอย่าง โซ่ของใบเสร็จจะปกป้องลำดับของหลายการกระทำ
flowchart LR
R0[ใบเสร็จ 0<br/>ต้นกำเนิด] --> R1[ใบเสร็จ 1]
R1 --> R2[ใบเสร็จ 2]
R2 --> R3[ใบเสร็จ 3]
R1 -. previous_receipt_hash .-> R0
R2 -. previous_receipt_hash .-> R1
R3 -. previous_receipt_hash .-> R2
ใบเสร็จแต่ละฉบับบันทึกแฮชของใบเสร็จก่อนหน้า หากต้องการลบใบเสร็จ 2 โดยเงียบ ๆ ผู้โจมตีต้อง:
previous_receipt_hash ของใบเสร็จ 3 (จะทำลายลายเซ็นของใบเสร็จ 3) หรือหากกุญแจส่วนตัวเก็บอยู่ในตู้นิรภัยฮาร์ดแวร์และคุณเผยแพร่กุญแจสาธารณะกับแต่ละใบเสร็จ การโจมตีทั้งสองแบบนี้จะไม่สามารถทำได้โดยไม่ถูกตรวจจับ
โน้ตบุ๊กจะอธิบาย:
previous_receipt_hash ของแต่ละใบเสร็จตรงกับแฮชจริงของใบเสร็จก่อนหน้านี่คือวิธีการสร้างเส้นทางตรวจสอบที่ผู้ตรวจสอบภายนอกสามารถตรวจสอบได้โดยไม่ต้องไว้วางใจคุณ
นี่คือส่วนที่สำคัญที่สุดของบทเรียน ใบเสร็จมีพลังแต่พลังนั้นมีขอบเขตจำกัด
ใบเสร็จพิสูจน์สามสิ่ง:
ใบเสร็จไม่ได้พิสูจน์:
policy_id ถูกประเมินจริงหรือไม่ หรือว่านโยบายนั้นจะอนุญาตให้ทำการกระทำนี้เมื่อมีการตรวจสอบ ใบเสร็จบันทึกสิ่งที่ระบุ แต่ไม่ใช่สิ่งที่ถูกบังคับใช้ขอบเขตนี้สำคัญด้วยเหตุผลสองประการ:
ความผิดพลาดทั่วไปคือคิดว่า “เรามีใบเสร็จ” หมายถึง “เรามีการปกครอง” ซึ่งไม่ใช่ ใบเสร็จเป็นรากฐาน การปกครองคือระบบที่คุณสร้างบนรากฐานนั้น
ข้อ 3 ข้างต้นมีความสำคัญจนควรมีส่วนแยก: ใบเสร็จการกระทำพูดว่า “กุญแจนี้ลงลายเซ็นเนื้อหานี้” แต่ไม่เคยกล่าวว่า “มนุษย์อนุญาต” สำหรับการกระทำที่มีความเสี่ยงสูง (การคืนเงิน การลบ การโอนเงิน) กรอบการกำกับดูแลกำลังเพิ่มความต้องการคำชี้แจงที่หายไปนี้ ซึ่งสามารถสร้างด้วยองค์ประกอบเดียวกับที่คุณสร้างในบทเรียนนี้แล้ว
โน้ตบุ๊ก code_samples/human-authorization-receipts.ipynb ที่ต่อเนื่องเพิ่มใบเสร็จชนิดที่สอง คือ human.approval.v1 ในรูปแบบซองเหมือนกับใบเสร็จบทเรียน (ข้อมูลที่พิมพ์ถูกเซ็นด้วย Ed25519 จาก SHA-256 แบบมาตรฐานโดยมีอ็อบเจ็กต์ signature อยู่ด้านนอกของไบต์ที่ลงลายเซ็น) ผู้อนุมัติที่มีชื่อเซ็นรับรอง การกระทำแบบมาตรฐานเต็มรูปแบบและแฮชของมัน ก่อนการดำเนินการ ใบเสร็จการกระทำของเอเจนต์จะมี แฮชการกระทำเดียวกัน พร้อม parent_approval_ref ซึ่งเป็น receipt_hash ของใบอนุมัติ ตามรูปแบบเดียวกับ previous_receipt_hash ในโซ่ที่คุณสร้างข้างต้น verify_chain เดียวตรวจสอบชิ้นงานทั้งสองโดยใช้ เรจิสทรีของกุญแจติดหมุดแยกต่างหาก (กุญแจผู้อนุมัติกับกุญแจเอเจนต์) ดังนั้นเส้นทางโค้ดถูกแชร์แต่เจ้าหน้าที่ไม่เคยซ้ำกัน
คุณสมบัติที่ได้นี้ อธิบายอย่างละเอียด: มนุษย์อนุมัติการกระทำที่แน่นอนนี้ และเอเจนต์จะดำเนินการการกระทำที่อนุมัติถูกต้องเท่านั้น อุปกรณ์ปฏิเสธในโน้ตบุ๊กทำให้คุณสมบัตินี้เป็นเรื่องจริงแทนที่จะเป็นคำแถลง:
ข้อผิดพลาดแต่ละข้อปฏิเสธพร้อมสาเหตุเฉพาะ ตัวอย่างที่ผู้ตรวจสอบอ่านการปฏิเสธสามารถบอกได้ว่าสิทธิ์หมดอายุหรือการกระทำที่ดำเนินการเปลี่ยนแปลง กฎที่โน้ตบุ๊กสอนคือ: ใบอนุมัติที่ลงลายเซ็นไม่ใช่สิทธิ์โดยตัวมันเอง สิทธิ์มีอยู่เฉพาะเมื่อใบเสร็จทั้งสองยังผูกติดกับการกระทำมาตรฐานเดียวกันในเวลาการดำเนินการ เส้นทางการร่วมลงนามใน Internet-Draft เดียวกันกับบทเรียนนี้ (draft-farley-acta-signed-receipts) คือรูปแบบมาตรฐานของแบบแผนนี้
โค้ด Python ในบทเรียนนี้ตั้งใจทำให้เล็กที่สุดเพื่อให้คุณอ่านทุกบรรทัดและเข้าใจอย่างชัดเจน ในการใช้งานจริงคุณมีสองทางเลือก:
สร้างโดยตรงบนองค์ประกอบคริปโตกราฟี 50 บรรทัดด้านบนเพียงพอสำหรับกรณีใช้งานหลายอย่าง PyNaCl (Ed25519) และแพ็กเกจ jcs (JSON canonical) เป็นไลบรารีที่ได้รับการดูแลและตรวจสอบคุณภาพ
ใช้ไลบรารีใบเสร็จสำหรับการใช้งานจริง โครงการโอเพนซอร์สหลายโครงการประยุกต์รูปแบบเดียวกันพร้อมฟีเจอร์เพิ่มเติม (การหมุนกุญแจ การตรวจสอบเป็นชุด การแจกจ่าย JWK Set การรวมกับเครื่องยนต์นโยบาย):
draft-farley-acta-signed-receipts, ฉบับปรับปรุง 02) ที่กำลังอยู่ในกระบวนการมาตรฐาน พร้อมชุดทดสอบความสอดคล้องร่วม (agent-governance-testvectors) ที่การนำไปใช้งานอิสระตรวจสอบข้ามกันเพื่อให้ผลลัพธ์ไบต์เดียวกันprotect-mcp (npm) และ @veritasacta/verify (npm) ให้การใช้งานการลงลายเซ็นและการตรวจสอบแบบออฟไลน์บน Node สำหรับการเพิ่มเส้นทางตรวจสอบการปลอมแปลงของเซิร์ฟเวอร์ MCP ใด ๆ รวมถึงการถือครองก่อนร่วมลงนามซึ่งการกระทำที่หยุดชั่วคราวจะสร้างใบเสร็จอนุมัติผูกกับแฮชการกระทำ (รองรับ WebAuthn ในโหมดเดสก์ท็อป) ซึ่งรูปแบบใบอนุมัติอนุมัตินี้เหมือนกับโน้ตบุ๊กการอนุมัติของมนุษย์ด้านบนpip install nobulex) ให้รูปแบบการเซ็น Ed25519 + JCS เหมือนกันใน Python พร้อมรวมกับ LangChain และ CrewAI รวมชุดทดสอบการตรวจสอบข้ามและแผนที่การปฏิบัติตามซึ่งมีการส่งเสริมผ่าน OWASP PR #2210การตัดสินใจระหว่างการสร้างเองและใช้ไลบรารีก็เหมือนการตัดสินใจระหว่างเขียนไลบรารี JWT เองหรือใช้ไลบรารีที่ทดสอบแล้ว: ทั้งสองทางเลือกสมเหตุสมผล ไลบรารีช่วยประหยัดเวลาและลดพื้นที่ตรวจสอบ โครงสร้างจากศูนย์ช่วยให้คุณเข้าใจทุกองค์ประกอบ บทเรียนนี้สอนวิธีจากศูนย์เพื่อให้คุณมีพื้นฐานสำหรับทั้งสองทางเลือก
ทดสอบความเข้าใจก่อนเข้าสู่แบบฝึกหัดปฏิบัติ
1. ใบเสร็จลงลายเซ็นด้วยกุญแจส่วนตัว Ed25519 ของเอเจนต์ แต่ผู้ตรวจสอบมีเพียงกุญแจสาธารณะเท่านั้น ผู้ตรวจสอบสามารถตรวจสอบใบเสร็จแบบออฟไลน์ได้หรือไม่?
2. ผู้โจมตีแก้ไขช่อง policy_id ในใบเสร็จเพื่ออ้างว่าถูกควบคุมโดยนโยบายที่อนุญาตมากกว่า ในขณะที่ลายเซ็นถูกสร้างบนข้อมูลต้นฉบับเกิดอะไรขึ้นในขณะตรวจสอบ?
3. ทำไมใบเสร็จถึงรวม tool_args_hash และ result_hash แทนที่จะเป็นอาร์กิวเมนต์และผลลัพธ์ดิบ?
4. ฟิลด์ previous_receipt_hash เชื่อมโยงใบเสร็จแต่ละใบกับใบเสร็จก่อนหน้า ถ้าผู้โจมตีลบใบเสร็จหนึ่งใบจากกลางโซ่โดยเงียบ ๆ อะไรจะกลายเป็นโมฆะ?
5. ใบเสร็จได้รับการตรวจสอบอย่างถูกต้อง นั่นพิสูจน์ว่าการกระทำของตัวแทนนั้นถูกต้อง สมเหตุสมผล หรือสอดคล้องกับนโยบายหรือไม่?
เปิดไฟล์ code_samples/18-signed-receipts.ipynb และทำให้ครบทั้งสี่ส่วน:
ความท้าทายเพิ่มเติม 1: ขยายสคีมาใบเสร็จด้วยฟิลด์เพิ่มเติมตามที่คุณเลือก (ตัวอย่างเช่น รหัสคำขอสําหรับการติดตาม), อัปเดตตรรกะการลงยันแบบ canonical เพื่อรวมถึงฟิลด์นี้ และยืนยันว่าใบเสร็จยังคงไป-กลับผ่านการตรวจสอบ จากนั้นแก้ไขฟิลด์หลังจากลงนามและยืนยันว่าการตรวจสอบล้มเหลว นี่ช่วยให้คุณเข้าใจว่าแต่ละไบต์ในรหัส canonical มีส่วนอย่างไรต่อการลงลายมือชื่อ
ความท้าทายเพิ่มเติม 2: แฮช SHA-256 ของใบเสร็จสองใบของคุณเข้าด้วยกัน (เชื่อมไบต์ canonical ของพวกเขาในลำดับที่กำหนด) และฝังผลลัพธ์แฮชลงในฟิลด์ใหม่บนใบเสร็จใบที่สามก่อนลงนาม ตรวจสอบให้แน่ใจว่าใบเสร็จสามใบยังคงไป-กลับได้ คุณเพิ่งสร้างหลักฐานการรวมขั้นตอนเดียว: คนที่ถือใบเสร็จใบที่สามสามารถพิสูจน์ว่าใบเสร็จสองใบแรกมีอยู่ในช่วงเวลาที่ลงนาม โดยไม่ต้องเปิดเผยเนื้อหาของพวกมัน นี่คือรูปแบบที่ใบเสร็จแบบเปิดเผยเลือกใช้ในระดับขนาดใหญ่ (พันธะ Merkle, RFC 6962)
ใบเสร็จเข้ารหัสให้กับตัวแทน AI เส้นทางตรวจสอบที่:
พวกมันไม่ใช่การทดแทนการตรวจสอบข้อมูลนำเข้า, การบังคับใช้กฎ, หรือโครงสร้างพื้นฐานของตัวตน แต่เป็นพื้นฐานสำหรับชั้นเหล่านั้น เมื่อคุณปรับใช้ตัวแทนในงานที่มีการควบคุม, ขั้นตอนการทำงานหลายองค์กร หรือสภาพแวดล้อมที่ผู้ตรวจสอบในอนาคตไม่สามารถเชื่อถือคุณได้ ใบเสร็จคือวิธีที่คุณทำให้เส้นทางตรวจสอบเป็นธรรม
สิ่งที่สำคัญที่สุดคือ: ใบเสร็จพิสูจน์ว่าใครพูดอะไรและเมื่อไหร่ มันไม่ได้พิสูจน์ว่าสิ่งที่พูดนั้นเป็นความจริงหรือถูกต้อง ให้รักษาความแตกต่างนี้ไว้อย่างเข้มงวด นี่คือความแตกต่างระหว่างระบบแหล่งที่มาที่ซื่อสัตย์และระบบที่ทำให้เข้าใจผิด
เมื่อคุณพร้อมที่จะก้าวไปจากบทเรียนนี้สู่การปรับใช้ตัวแทนที่ลงลายมือชื่อใบเสร็จในสภาพแวดล้อมจริง:
https://your-org.example.com/.well-known/agent-keys.jsonเข้าร่วม Microsoft Foundry Discord เพื่อติดต่อกับผู้เรียนคนอื่น ๆ เข้าร่วมชั่วโมงสำนักงาน และรับคำตอบคำถามเกี่ยวกับ AI Agents ของคุณ
บทเรียนนี้ครอบคลุมการลงชื่อใบเสร็จเดี่ยวและลำดับโซ่แฮช ไพรเมทีฟเดียวกันนี้ประกอบเข้าด้วยกันเป็นรูปแบบขั้นสูงอื่น ๆ หลายแบบที่คุณอาจพบเมื่อการกำกับดูแลของคุณพัฒนาขึ้น:
authorization_*) และหลังประมวลผล (result_*) มีลายเซ็นอิสระ เหมาะเมื่อการตัดสินใจอนุญาตและผลลัพธ์ที่สังเกตแตกต่างกันโดยผู้กระทำหรือเวลาที่ต่างกัน รูปแบบนี้เสริมเพิ่มเติมบนรูปแบบใบเสร็จที่สอนในบทนี้result_hash payload ในโลกความจริงมักมีรายละเอียดมากกว่าผลการเรียกใช้เครื่องมือเพียงอย่างเดียว: การเหตุผลก่อนตัดสินใจ (การทำนายจากโมเดล, ตัวเลือกที่พิจารณา, หลักฐานและความครบถ้วนของมัน, ท่าทีความเสี่ยง, โซ่ความรับผิดชอบ, ผลของจุดตรวจ) ทั้งหมดนี้สามารถอยู่ใน payload ซึ่งผนึกด้วยใบเสร็จใบเดี่ยว วิธีนี้ทำให้รูปแบบใบเสร็จเรียบง่ายในขณะที่อนุญาตให้สคีมาของ payload พัฒนาแยกตามโดเมนsignature.alg สามารถใส่ ML-DSA-65 (มาตรฐานลายเซ็นหลังยุคควอนตัมของ NIST) เมื่อคุณต้องการย้ายข้อมูล วางแผนช่วงเปลี่ยนผ่านที่ใบเสร็จเซ็นชื่อสองแบบคู่กันปฏิเสธความรับผิดชอบ: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator ขณะที่เราพยายามให้ความถูกต้อง โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาต้นทางควรถูกพิจารณาเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้การแปลโดยมนุษย์มืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดที่เกิดขึ้นจากการใช้การแปลนี้