验证

验证一份 ParkProof 证据记录

每份 ParkProof 证据 PDF 都带有密码学签名附录。本页面是公开的离线指南,供任何人 — 市政官员、保险公司、法院书记员或司机本人 — 确认该记录自保存的那一刻起未被篡改。

诚实表态。 签名证明的是完整性:该记录中的字节与扫描时签名的字节完全一致。它不证明记录的真实性(AI 可能读错了路牌),也不决定证据的法律效力。那是审阅者的独立判断。

你在验证什么

每个 ParkProof 会话包含一个载荷(一个小文本文件,含规范的会话元数据以及路牌+车辆照片的 SHA-256 哈希)和一个签名(用 AWS KMS 管理的 ECDSA P-256 私钥对载荷签名,该私钥永远不会离开 AWS)。两者都打印在每份导出的证据 PDF 的签名附录中。

验证签名所需的公钥发布在 /parkproof-public-key.pem — 在浏览器中打开以确认加载,然后保存到本地。

你需要的

一步一步

打开证据 PDF,滚动到末尾的"签名附录"页面。你会看到三块文本:payloadsig.base64 以及对公钥 URL 的引用。把前两块保存到本地文件,然后运行验证:

# 1. 把 PDF 附录中的载荷块保存到 payload.txt
#    (精确复制粘贴;保留行尾)。
# 2. 把 base64 签名块保存到 sig.base64。
# 3. 获取公钥。
curl -O https://www.parkproof.com.au/parkproof-public-key.pem

# 4. 将 base64 签名解码为原始字节。
base64 -d sig.base64 > sig.bin

# 5. 运行验证。
openssl dgst -sha256 -verify parkproof-public-key.pem \
  -signature sig.bin payload.txt

上面的命令只验证载荷 — 它确认元数据以及载荷中记录的照片哈希值未被改变。它不会检查 PDF 中实际显示的照片是否仍与那些哈希值相符。要确认照片本身,你必须重新计算每张照片的哈希并与载荷比对:

# 6. 对 PDF 中的每张照片重新计算 SHA-256,
#    并与载荷中对应的字段逐一比对:
#      路牌照片  → sign_photo_sha256
#      车辆照片  → car_photo_sha256
#      环境照片  → ambient_photo_sha256
#    先从 PDF 中导出每张图片为独立文件,然后:
sha256sum sign_photo.jpg
sha256sum car_photo.jpg
sha256sum ambient_photo.jpg

# 若系统没有 sha256sum,可改用 openssl:
openssl dgst -sha256 sign_photo.jpg
这一步不可省略。 把每条输出的哈希与载荷中相应的 sign_photo_sha256 / car_photo_sha256 / ambient_photo_sha256 字段逐字符比对。哈希一致表示该照片自签名以来未被改动;哈希不一致表示这张照片在签名之后被替换或修改过 — 即使第 5 步显示 Verified OK 也是如此。单凭 Verified OK验证图片本身;只有完成本步的重新计算并匹配,才能确认你所看到的照片就是被签名的那些照片。

结果意味着什么

已验证 通过

Verified OK — 你 PDF 中的载荷与 ParkProof 扫描时签名的字节完全一致。这确认了元数据(路牌规则、GPS、时间戳、地址)以及载荷中记录的照片哈希值自那时起未被更改。但要确认照片本身,仍需完成上面的第 6 步重新计算哈希;只有这一步才能验证 PDF 中显示的图片确实与这些哈希相符。

失败 不通过

Verification failure — 载荷、签名或两者自记录保存以来已被修改。PDF 可能被编辑、附录被篡改,或复制粘贴引入了空白差异。在得出结论之前,请仔细重复复制操作。

不止"字节是否改变?"

验证成功只确认完整性。它不确认:

为什么存在

大多数生成"证据"的停车应用只产出截图。截图没有完整性的故事 — 它们可能在拍摄到发送之间的任何时刻被编辑。密码学签名是"这是我看到的""这是我看到的,这是数学证明我此后没有改变它"之间的差别。

公钥已发布,因此验证完全离线 — 你不需要信任 ParkProof、联系我们的服务器或运行我们的应用来确认完整性声明。即使 ParkProof 多年后不再维护,只要 openssl 仍然存在,验证就可以进行。

有疑问?

发邮件到 hello@parkproof.com.au。我们会回复。

Continue in your language → ×