Skip to content

DID 身份管理 (did)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 🪪 W3C DID 标准: 基于 W3C DID Core 规范子集
  • 🔑 Ed25519 签名: 高性能椭圆曲线数字签名
  • 🏠 本地存储: 密钥对安全存储在本地 SQLite
  • ✍️ 消息签名/验证: 对任意消息进行数字签名和验证
  • 📤 身份导出: 支持导出 DID 文档(可选含私钥)
  • 🔒 零外部依赖: 完全使用 Node.js 内置 crypto 模块

概述

ChainlessChain CLI 提供基于 Ed25519 的 W3C DID 去中心化身份管理功能。

  • 算法: Ed25519 签名密钥对
  • DID 格式: did:chainless:<base64url-of-sha256-of-pubkey>
  • 标准: W3C DID Core 子集
  • 存储: 本地 SQLite did_identities

命令参考

did create — 创建身份

bash
chainlesschain did create
chainlesschain did create --label "work"    # 指定标签

生成 Ed25519 密钥对,计算 DID 标识符,创建 W3C DID 文档,保存到数据库。

did list — 列出所有身份(默认)

bash
chainlesschain did list
chainlesschain did                          # 等同于 did list

显示所有已创建的 DID 身份,标记默认身份。

did show — 查看身份详情

bash
chainlesschain did show <did>

显示完整的 DID 文档,包括公钥、验证方法等。

did resolve — 解析 DID

bash
chainlesschain did resolve <did>

解析 DID 并返回 DID 文档(本地解析)。

did sign — 签名消息

bash
chainlesschain did sign "message to sign"
chainlesschain did sign "message" --did <specific-did>

使用默认(或指定)DID 的私钥对消息进行 Ed25519 签名。

did verify — 验证签名

bash
chainlesschain did verify "message" --signature <base64sig> --did <did>

验证 Ed25519 签名的有效性。

did export — 导出身份

bash
chainlesschain did export <did>
chainlesschain did export <did> --include-private   # 包含私钥(危险)

导出 DID 文档和公钥信息。使用 --include-private 导出私钥(需谨慎)。

did set-default — 设置默认身份

bash
chainlesschain did set-default <did>

设置指定 DID 为默认签名身份。

did delete — 删除身份

bash
chainlesschain did delete <did>

删除指定 DID 身份(需确认)。

DID 文档格式

json
{
  "@context": ["https://www.w3.org/ns/did/v1"],
  "id": "did:chainless:abc123...",
  "verificationMethod": [{
    "id": "did:chainless:abc123...#key-1",
    "type": "Ed25519VerificationKey2020",
    "controller": "did:chainless:abc123...",
    "publicKeyMultibase": "z..."
  }],
  "authentication": ["did:chainless:abc123...#key-1"],
  "assertionMethod": ["did:chainless:abc123...#key-1"]
}

技术实现

  • 密钥生成: crypto.generateKeyPairSync("ed25519") (Node.js 内置)
  • DID 计算: SHA-256(公钥) → base64url 编码
  • 签名: Ed25519 签名 → base64 编码
  • 零外部依赖: 完全使用 Node.js 内置 crypto 模块

系统架构

用户命令 → did.js (Commander) → did-manager.js

                    ┌────────────────┼────────────────┐
                    ▼                ▼                ▼
             crypto.generateKeyPairSync   SHA-256 哈希   Ed25519 签名
                    │                │                │
                    ▼                ▼                ▼
              私钥/公钥对      DID 标识符       数字签名/验证


             SQLite did_identities 表

安全考虑

  • 私钥存储在本地 SQLite 数据库,建议配合数据库加密使用
  • export --include-private 导出私钥极其危险,仅用于备份迁移
  • Ed25519 签名使用 Node.js 内置 crypto 模块,零外部依赖
  • DID 标识符基于公钥 SHA-256 哈希,不可逆推出私钥

故障排查

问题解决方案
create 失败确认数据库已初始化:chainlesschain db init
sign 找不到默认身份先创建身份:chainlesschain did create
verify 验证失败确认消息内容、签名、DID 三者匹配
resolve 返回空DID 仅支持本地解析,确认 DID 存在于本地数据库

关键文件

  • packages/cli/src/commands/did.js — 命令实现
  • packages/cli/src/lib/did-manager.js — DID 管理库

相关文档

基于 MIT 许可发布