跳到正文

18 · README

返回:Agent 安全 · 不可变原始文件

原课程补充材料

根据对应简体中文译本整理。原代码片段未进行云端验证。

示例收据夹具

三个预生成的收据文件,可在不运行笔记本的情况下进行检查。

文件内容说明
01_valid_receipt.json一个有效的签名收据,针对 lookup_flights 工具调用。验证结果为 True。
02_tampered_receipt.json同一收据,在签名后修改了一个字段。验证结果为 False。
03_chain_three_receipts.json三个有效收据的链(搜索、保留、预订),通过 previous_receipt_hash 将每个收据链接到前一个。

验证示例

笔记本分四部分讲解验证过程。要直接验证这些夹具文件而不运行笔记本叙述:

python
import json
from pathlib import Path

# 假设您已经完成了导入和辅助函数的编写
# 来自18-signed-receipts.ipynb的第1和第2部分。

valid = json.loads(Path("01_valid_receipt.json").read_text())
print(f"Valid receipt: {verify_receipt(valid)}")        # 真

tampered = json.loads(Path("02_tampered_receipt.json").read_text())
print(f"Tampered receipt: {verify_receipt(tampered)}")  # 假

chain = json.loads(Path("03_chain_three_receipts.json").read_text())
for r in verify_chain(chain):
    print(f"  Receipt {r['index']} ({r['tool']}): {'VALID' if r['overall_valid'] else 'INVALID'}")

这些文件是如何生成的

这些夹具使用与笔记本相同的代码路径,采用固定签名密钥和固定时间戳以实现字节级可复现。重新生成方法:

bash
python3 generate_fixtures.py

(脚本位于本目录的 generate_fixtures.py。)

学生从检查原始 JSON 中学到的内容

阅读原始收据格式有助于建立直观认识,而这些认识在笔记本单元格中并不总是提供。快速浏览 JSON 的学生通常会注意到:

  1. 签名是一个不透明的 base64url 字符串,而其他字段都是纯可读的 JSON。签名不对内容加密;它是内容的证明。
  2. 收据中嵌入了 public_key。审核者无需其他东西即可验证(前提是信任该密钥确实属于声称的发行者;参考课程 README 中关于身份基础设施的部分)。
  3. 修改任何字段的单个字符,然后将该文件与 02_tampered_receipt.json 进行字节级比较,使机制更具体。

基于 Microsoft AI Agents for Beginners · 非官方中文学习版

100%