forgesworn/nsec-tree-cli

GitHub: forgesworn/nsec-tree-cli

一个离线优先的命令行工具,让用户从单个根密钥派生和管理无限个层级化的 Nostr 身份,并支持密码学所有权证明与 Shamir 恢复。

Stars: 0 | Forks: 0

# nsec-tree-cli **Nostr:** [`npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2`](https://njump.me/npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2) ``` npx nsec-tree-cli root create ``` 一个根密钥。无限的 Nostr 身份。完全离线。 `nsec-tree-cli` 是一个用于**层级化 Nostr 身份管理**的命令行工具,基于 [`nsec-tree`](https://www.npmjs.com/package/nsec-tree) 库构建。它允许你从单个根密钥派生出任意数量的独立密钥对——就像锁匠用一把主钥匙打孔出无数把独一无二的钥匙一样。每个派生的身份都有自己的 npub 和 nsec,彼此之间完全不可关联,但当你选择证明时,它们都可以追溯到你的根身份。整个工具完全离线工作。你的根密钥永远不会接触到网络。 ## 实际运行效果 **创建根身份** — 生成一个 BIP-39 助记词并将其保存为本地配置文件。写下这个助记词;它是你的恢复途径。 ``` $ nsec-tree root create --name main root type mnemonic-backed recoverable yes master npub npub1wk7lycqxj5x05thzl59fszlhcmpxe4ya045662skh8elk8zy6rzs6r7hle profile main mnemonic misery robust expire sand reflect stove life hold patch electric vessel rebuild Store this mnemonic offline. It cannot be recovered. Try next: nsec-tree derive path personal nsec-tree export nsec personal ``` **派生特定用途的身份** — 通过斜杠分隔的路径创建一棵树。在这里,`personal` 是一个类别,而 `forum-burner` 是一个叶子身份。 ``` $ nsec-tree derive path personal/forum-burner --mnemonic "abandon ... about" root └─ personal@0 npub1nleq...n47ps └─ forum-burner@0 npub1fakn...kym592 (leaf) ``` **导出私钥** — 当你需要将派生的身份加载到 Nostr 客户端时使用。 ``` $ nsec-tree export nsec personal/forum-burner --mnemonic "abandon ... about" path personal@0/forum-burner@0 nsec nsec1gpd5p2chjuqc9jr72hk6sj662x85v23rzv283wr99cuc0n2068sscuu5wu This is a private key. Store it securely. ``` **证明两个身份共享同一个根** — 一种密码学证明,证明你的 forum-burner 与你的主身份属于同一个根,而无需泄露派生路径或根密钥本身。 ``` $ nsec-tree prove private personal/forum-burner --mnemonic "abandon ... about" proof type private master pubkey 3eb14b...8d656 child pubkey 4f6d38...f61f26 attestation nsec-tree:own|3eb14b...8d656|4f6d38...f61f26 signature e3086d...56be4 This proof shows shared root ownership without revealing how the child was derived. ``` **验证证明** — 任何人都可以检查它。直接将 JSON 证明通过管道传入即可。 ``` $ nsec-tree prove private personal/forum-burner --json | nsec-tree verify proof --stdin ✓ Proof is valid proof type private master pubkey 3eb14b...8d656 child pubkey 4f6d38...f61f26 ``` ## 为什么需要层级化身份? 大多数 Nostr 用户只有一个密钥。一个 npub,一个 nsec,在任何地方都只有一个身份。这在行不通之前看似没问题——你可能想要为某个论坛使用一个一次性身份,为一个项目使用一个单独的身份,或者使用一个无法被关联回你主账号的化名。 你可以生成独立的密钥,但这样你就会失去它们之间的联系线索。如果其中一个身份被泄露,或者你需要证明它们是相关的,你就会陷入困境。 层级化派生解决了这个问题。一个根身份可以生成一棵身份树。每个分支在密码学上都是独立的——不同的密钥,没有可见的关联。但正因为它们都派生自同一个根,你可以根据需要选择性地证明所有权。可以把它想象成带有可选逃生舱的隔离式身份。 ## 为什么要证明所有权? 默认情况下,`nsec-tree` 中的所有内容都是私密且完全隔离的。但有时你*想要*在无需泄露你整个身份树的情况下,向一个无需信任的网络注入不可否认的真相。关联证明能够支持强大的工作流: - **建立信任:** 要发布一个新的 bot 或项目?生成一个证明,将你高声誉的主账号与新的 npub 关联起来,让人们知道它是你官方拥有的。 - **安全密钥轮换:** 如果你的手机被黑客入侵且日常使用的密钥被泄露,你可以从离线的根身份派生一个新密钥并发布一个证明。你的关注者将确切知道该迁移到哪里。 - **自愿去匿名化:** 以完全匿名的方式运营一个举报人或化名账号,然后在日后你想获取认可时,通过密码学证明那就是你。 - **企业层级结构:** 一个主公司根身份委托给 `@marketing` 和 `@support`,在员工不持有主密钥的情况下证明官方从属关系。 ## 完全离线 `nsec-tree` 不会发起任何网络调用。没有 DNS 查询,没有 TLS 握手,没有中继连接,没有遥测。每一项操作——根身份创建、派生、导出、证明、Shamir 拆分——都完全在你的机器上运行。 这意味着它可以在物理隔离的硬件上运行。这意味着你的根助记词永远不会离开运行该命令的设备。这也意味着你可以确切地验证该工具的功能,因为没有任何需要信任的服务器端组件。 ## 你可以做什么? | 命令组 | 功能 | |---------------|-------------| | `root` | 创建、恢复或导入根身份(助记词或现有的 nsec) | | `derive` | 在你身份树的任意路径派生子身份 | | `export` | 为派生的密钥提取 npub、nsec 或完整的身份包 | | `prove` | 生成将子身份与其根关联起来的密码学证明 | | `verify` | 在不需要根密钥的情况下验证证明 | | `shamir` | 将你的助记词拆分为多个份额;并从达到阈值的份额中恢复 | | `profile` | 在本地保存并在命名的根配置文件之间切换 | | `inspect` | 检查路径和根元数据,而无需派生密钥 | | `explain` | 五个关于该工具背后概念的内置迷你教程 | 每个命令都支持 `--json`(用于脚本编写)、`--quiet`(用于流水线操作)和 `--no-hints`(用于禁止“下一步尝试”的建议)。设置 `NSEC_TREE_NO_HINTS=1` 可永久禁用提示。 ## 安装 免安装试用: ``` npx nsec-tree-cli root create ``` 全局安装以便永久保留它: ``` npm install -g nsec-tree-cli ``` 需要 Node.js 22 或更高版本。 ## 从 CLI 本身学习 `explain` 命令包含五个主题,会在你使用过程中逐步讲解相关概念: ``` nsec-tree explain model # What is nsec-tree? The mental model. nsec-tree explain proofs # How ownership proofs work. nsec-tree explain recovery # Mnemonics, Shamir, and backup strategies. nsec-tree explain paths # How derivation paths and indices work. nsec-tree explain offline # Why offline-first matters for key management. ``` 无需离开终端即可理解你在做什么。 ## 用于脚本的 JSON 输出 每个命令都支持 `--json` 以输出机器可读的内容: ``` $ nsec-tree root create --json { "rootType": "mnemonic-backed", "recoverable": true, "masterNpub": "npub139ps...vexeg", "mnemonic": "educate bitter aspect nerve step three knife clutch lake auction accident decide" } ``` 将派生操作通过管道传递给证明生成,将证明输入到验证中,拆分助记词并恢复它们——所有这些都可以编写成脚本。 ## 文档 - [CLI-SPEC.md](./CLI-SPEC.md) — 命令语法和设计原则 - [JSON-SCHEMAS.md](./JSON-SCHEMAS.md) — 所有命令的稳定 JSON 输出 schema - [ARCHITECTURE.md](./ARCHITECTURE.md) — CLI 与库之间的关注点分离 - [MISSION.md](./MISSION.md) — 该项目存在的原因 ## 构建基于 - [`nsec-tree`](https://www.npmjs.com/package/nsec-tree) — 派生和证明库 - [`@forgesworn/shamir-words`](https://www.npmjs.com/package/@forgesworn/shamir-words) — 支持人类可读的 BIP-39 单词编码的 Shamir 秘密共享 ## 支持 有关问题和功能请求,请参阅 [GitHub Issues](https://github.com/forgesworn/nsec-tree-cli/issues)。 ## ForgeSworn 工具包的一部分 [ForgeSworn](https://forgesworn.dev) 为 Nostr 构建开源的密码学身份、支付和协同工具。 | 库 | 功能 | |---------|-------------| | [nsec-tree](https://github.com/forgesworn/nsec-tree) | 确定性子身份派生 | | [ring-sig](https://github.com/forgesworn/ring-sig) | secp256k1 上的 SAG/LSAG 环签名 | | [range-proof](https://github.com/forgesworn/range-proof) | Pedersen 承诺范围证明 | | [canary-kit](https://github.com/forgesworn/canary-kit) | 抗胁迫的口语验证 | | [spoken-token](https://github.com/forgesworn/spoken-token) | 人类可发音的验证 token | | [toll-booth](https://github.com/forgesworn/toll-booth) | L402 支付中间件 | | [geohash-kit](https://github.com/forgesworn/geohash-kit) | 带有多边形覆盖的 Geohash 工具包 | | [nostr-attestations](https://github.com/forgesworn/nostr-attestations) | NIP-VA 可验证认证 | | [dominion](https://github.com/forgesworn/dominion) | 基于 epoch 的加密访问控制 | | [nostr-veil](https://github.com/forgesworn/nostr-veil) | 隐私保护的信任网络 | ## 许可证 MIT 针对层级化 Nostr 身份的 NIP 提案正在开发中。
标签:BIP-39, MITM代理, Nostr, Shamir碎片恢复, 暗色界面, 离线优先, 自定义脚本, 身份生成