亲自验证一个分数
无需听我们的一面之词。三项独立检查。
1. 在测试向量上重放验证器
向量(vectors/*.json)是 (护照, 期望裁决) 对。公开验证器(ref/)必须精确返回
这些裁决-每种实现(C#、PHP、C++…)逐字节相同的裁决。这是协议的出口标准。
cd ref/csharp/NelfeScoring.Vectors
dotnet run -c Release # → 11/11 向量达到期望裁决
2. 验证护照签名
每份护照由本机对其规范形式(JSON Canonicalization Scheme, RFC 8785)签名 (ECDSA P-256):
- 移除
signature字段; - 将其余部分按 JCS 规范化(键排序、无空格、最小转义);
- 用设备公钥(
key_id = SHA-256(SPKI DER))验证签名(ASN.1 DER, base64url)。
签名覆盖一切:分数,核心/内容/MEM/监听器指纹,检查点,票据。事后改动一个字节 = 签名无效。
3. 验证先后性(区块链锚定)
每个上榜分数-以及每款游戏的开局-都归入一棵 Merkle 树,其根通过 OpenTimestamps 锚定 于 Bitcoin。用标准客户端,任何人都能在没有我们的情况下验证数据存在于某个 Bitcoin 区块 之前。
锚定证明先后性,而非真伪:它保证记录未被回填到开局之前,且后续撤回同样带时间戳(历史 只增不改)。
三者共同确立
| 检查 | 证明什么 |
|---|---|
| 向量 | 所应用的规则正是已公布的。 |
| 签名 | 护照未被篡改且来自那台机器。 |
| 锚定 | 数据存在于 Bitcoin 区块之前-无回填。 |
它们不证明:闭源监听器读取了正确的内存地址。那份信任来自监听器认证。