技术深度解析
KERIpy实现了KERI协议,该协议在根本上与传统PKI不同。其核心是一个事件溯源的状态机。每个标识符(即自证标识符,SCID)都拥有一系列事件:初始创建、密钥轮换和委托。这些事件由当前密钥集签名,并形成哈希链接的链条,类似于区块链,但无需全局共识的开销。
架构:
- 密钥事件日志(KEL): 针对给定标识符的本地、仅追加的日志,记录所有密钥事件。每个事件包含一个序列化的数据结构,其中包括新公钥、序列号、前一个事件的哈希值以及来自前一个密钥集的签名。
- 密钥事件收据(KER): 收据是见证人(第三方验证者)对已查看并验证特定事件的签名确认。这些收据被收集起来,可用于向验证者证明标识符的状态,而无需验证者信任标识符的控制者。
- 见证人: 一组可配置的实体,负责观察并证明密钥事件。见证人并非区块链;它们是一个可轮换的轻量级共识组。默认配置使用3/5的见证人阈值。
- 重复性检测: KERI的安全模型基于一个假设:攻击者可能试图创建冲突事件(即重复性)。该协议采用“见证人观察者”机制,任何一方都可以通过比较来自不同来源的KEL来检测并报告重复性。这是一种“环境式”安全。
算法:
- 自证标识符(SCID): 标识符本身源自初始公钥,因此标识符在密码学上与第一个密钥对绑定。这消除了CA将密钥绑定到身份的需求。
- 事件序列化: 使用CESR(可组合事件流表示),这是一种紧凑的二进制编码,允许高效地流式传输和解析事件。CESR专为低延迟、高吞吐量的环境而设计。
- 密钥轮换: 轮换事件包含一个新公钥,并由旧私钥签名。新密钥在轮换事件被见证并确认之前不会被使用。这提供了一种清晰、可审计的过渡。
GitHub仓库: `weboftrust/keripy` 仓库是主要的Python实现。它包括用于创建、签名、验证和存储KEL的库。代码库采用模块化设计,包含用于事件创建、见证人通信和数据库存储(使用LMDB实现持久化)的独立模块。最近的提交侧重于提升性能并增加对最新CESR规范的支持。该仓库拥有76颗星,表明其拥有一个小众但专注的社区。
基准数据:
| 指标 | KERIpy (Python) | did:key (简单) | did:indy (Hyperledger) |
|---|---|---|---|
| 事件创建延迟 (ms) | 2.3 | 0.1 | 50 (依赖区块链) |
| 验证延迟 (ms) | 1.8 | 0.1 | 100+ |
| 每个标识符的存储 (KB) | 每事件0.5 | 0.1 | 1-5 (在账本上) |
| 密钥轮换成本 (计算) | 低 (仅CPU) | 无 (静态) | 高 (区块链交易费) |
| 去中心化程度 | 中等 (基于见证人) | 低 (静态密钥) | 高 (区块链) |
数据洞察: KERIpy提供了一个引人注目的中间地带:它比基于区块链的DID方法(如did:indy)明显更快、更便宜,同时提供了静态方法(如did:key)所缺乏的动态密钥轮换和恢复能力。其代价是更复杂的设置(见证人管理)和更小、未经充分实战检验的生态系统。
关键参与者与案例研究
Web of Trust(WeT)组织是KERI协议和KERIpy的主要管理者。关键贡献者包括KERI白皮书的原作者Samuel M. Smith,以及核心开发者Phil Feairheller。该项目并非由某家大型公司支持,而是由专注于SSI的组织联盟共同维护。
案例研究:安全多方通信
一个实际用例是安全消息协议。例如,一个去中心化的消息应用可以使用KERIpy来管理用户密钥。当用户在新设备上登录时,他们会创建一个由旧设备密钥签名的轮换事件。见证人(例如其他用户或基础设施节点)会证明该事件。其他用户的客户端随后可以从见证人处获取最新的KEL并验证新密钥,从而在无需中心服务器的情况下实现无缝的密钥迁移。
与替代方案的比较:
| 解决方案 | 密钥管理 | 信任模型 | 可扩展性 | 成熟度 |
|---|---|---|---|---|
| KERIpy | 事件驱动,自证 | 基于见证人 (环境式) | 高 (无全局账本) | 早期 (76颗星) |
| did:key | 静态,无轮换 | 无 | 非常高 | 高 (W3C标准) |
| did:indy | 基于区块链 | 许可制账本 | 低 (区块链瓶颈) | 中等 (Hyperledger) |
| did:web | 基于DNS | DNS信任 (中心化) | 非常高 | 高 (W3C标准) |