跳至主要內容
Trustfolio

TRUSTFOLIO · TRUST PACKET

有效的可驗證背書

簽章相符,且此刻仍為有效狀態。

於『信義區 320 坪住宅』室內設計案擔任概念主導與客戶溝通,2022–2023

簽發於 2026年6月24日、有效期限:永久

背書人 綠亦 設計總監 · 綠亦有限公司 · 設計總監

關係 前主管

機構已驗證

簽署於 6/24/2026, 3:34:40 AM · kid k1

自行離線驗章

離線驗證只證明內容沒被改、由哪把金鑰簽;是否仍有效(撤銷、效期)要以本頁的即時狀態為準。

kid
k1
演算法
Ed25519

簽章(完整 base64)

Q5DSefhp/QsAH7bcPD6VGkFxx7GKsewUGKgoh8I3aGa7JwyOxnDMWQUgjIO7OxjCzH+6e0Wfy4AFn8p++Ah3Aw==

正規化 payload(驗簽位元組,原樣、不重排、不美化)

{"domain":"verified_claim","letterId":"c52f4b12-8eb6-45c4-8824-8512cf994476","signerUserId":"8e9400ab-f29e-40fa-906c-f36bd42891c6","contentSha256":"eb932bd10b8d2b61a5e7a877736be2ddc2b1104bd47d2873f9efb6580e7573c5","sealedAt":"2026-06-24T03:34:40.596Z","kid":"k1"}

公鑰端點 /.well-known/trustfolio-keys.json

在已安裝 Node 18 以上的電腦:把下面內容存成 check.mjs,執行 node check.mjs。三個值已填本憑證的原樣,公鑰會自動從公開端點取得;印出 true 代表內容未被改、由這把金鑰簽。

import { verify } from "node:crypto";
const payload = "{\"domain\":\"verified_claim\",\"letterId\":\"c52f4b12-8eb6-45c4-8824-8512cf994476\",\"signerUserId\":\"8e9400ab-f29e-40fa-906c-f36bd42891c6\",\"contentSha256\":\"eb932bd10b8d2b61a5e7a877736be2ddc2b1104bd47d2873f9efb6580e7573c5\",\"sealedAt\":\"2026-06-24T03:34:40.596Z\",\"kid\":\"k1\"}";
const sig = "Q5DSefhp/QsAH7bcPD6VGkFxx7GKsewUGKgoh8I3aGa7JwyOxnDMWQUgjIO7OxjCzH+6e0Wfy4AFn8p++Ah3Aw==";
const kid = "k1";
// 公鑰從公開端點取,不用手貼多行 PEM(Node 18+ 內建 fetch)
const { keys } = await (await fetch("https://trustfolio.andgreen.org/.well-known/trustfolio-keys.json")).json();
const key = keys.find((k) => k.kid === kid);
if (!key) throw new Error("這把金鑰尚未公開:" + kid);
const publicKeyPem = key.pem;
console.log(verify(null, Buffer.from(payload), publicKeyPem, Buffer.from(sig, "base64")));
驗證 QR

掃描或開啟連結即可即時驗證;送審文件可附此 QR。

每次開啟都會即時檢查撤銷狀態——簽章有效 ≠ 目前仍有效。背書一旦被撤銷,這裡會顯示「已撤銷」並不再揭露背書人姓名。