nsec 与 npub:它们各是什么,以及如何避免混淆
每个 Nostr 用户都会看到的两个前缀。其中一个是您的公开身份。另一个是拥有您账户的秘密。如何区分它们。
每个 Nostr 用户在创建账户后的一分钟内都会看到两个以 npub1 和 nsec1 开头的字符串。它们看起来几乎相同,长度相同,都看起来像随机字符。混淆它们是网络上最常见也最严重的错误之一。
本指南通过视觉和概念上的区分,让您永远不会再混淆它们。
简版。
npub1...是您的公钥:安全分享,这是您交给别人的。nsec1...是您的私钥:永远不要分享,永远不要粘贴到网站,永远不要保存到云笔记。两者都是 63 个字符长。前三个字母是唯一重要的。
准备好后, 领取你的 @nostr.blog 地址
一句话的区分
您的密钥对有两部分。
- npub = nostr public(Nostr 公钥)。您发布、分享和用作"账户名称"的标识符。
- nsec = nostr secret(Nostr 秘密)。证明您拥有该账户的密码学秘密。
"npub" 包含单词 "pub" 表示公开。"nsec" 包含 "sec" 表示秘密。这个助记法不是偶然的;设计者选择前缀是为了一目了然。
您实际看到的
两个字符串都是 63 个字符。都以 n 开头,然后是三个字母的前缀。都使用受限 Bech32 字母表中的小写 a-z 和数字 0-9。
npub 示例:
npub1pf8hkx3ang2jngcgpsawtmj48c90pgqasmgpva7qhvnsty5j87yqwk3vy5
nsec 示例(这个是虚构的;永远不要分享真实的 nsec):
nsec1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
它们仅在 n 后的前缀不同。pub 对比 sec。其他每个字符可以是任何东西;该前缀是您唯一可以区分它们的地方。
每个来自何处
当您第一次启动 Nostr 客户端时,它会生成 32 个随机字节并将其称为您的私钥。这在 Bech32 编码后成为您的 nsec。然后客户端运行一个数学操作(secp256k1 上的椭圆曲线乘法)来导出匹配的公钥,并将其 Bech32 编码为您的 npub。
这种关系是单向的。给定 nsec,导出 npub 很快。给定 npub,导出 nsec 回来被认为对任何存在或可能存在的计算机都是不可能的。
这就是为什么您可以在网站上、Twitter 上、商业卡片上和电子邮件签名中发布您的 npub,而没有任何安全后果。这也是为什么丢失您的 nsec 是一场无法恢复的灾难:任何人,甚至您自己,都无法从 npub 重建它。
每个密钥的用途
nsec 只有一个作用:签署事件。每次您发布、做出反应、关注某人、更新您的资料或发送直接消息时,您的客户端都会创建一个事件并使用 nsec 签署它。签名在发布到中继之前进入事件。
npub 有多个作用:
- 身份。当有人关注您时,他们引用您的 npub。
- 验证。接收事件的每个客户端都根据附加到事件的 npub 检查签名。有效的签名意味着事件来自拥有匹配 nsec 的人。
- 路由。中继在过滤器中使用 npub。订阅"来自 npub X 的事件"是您的关注者获取您的帖子的方式。
- 提及。当有人在帖子中标记您时,他们会在事件标签中嵌入您的 npub。
nsec 从不出现在网络上。它留在您的设备上(或受信任的签名者,如 NIP-07 扩展或远程签名应用程序)。npub 在网络上不断出现,附加到您签署的每个事件上。
常见混淆及其后果
混淆 1:在要求 npub 的地方粘贴您的 nsec。
场景:资料编辑表单说"您的公钥",您不小心粘贴了 nsec。后果:根据客户端,表单可能会警告您(好的客户端会检查前缀并拒绝公开字段中的 nsec)。坏的客户端可能会在不应该的地方发布 nsec。粘贴前始终检查三个字母的前缀。
混淆 2:在社交媒体上作为演示发布您的 nsec。
每年,新用户都会发布一个包含两个字符串的"Nostr 账户详情"屏幕截图。后果:看到屏幕截图的任何人现在都可以以该用户的名义签署事件,直到他们意识到发生了什么并轮换。解决方案是仅分享 npub 部分。
混淆 3:将 nsec 暂时保存在云笔记中。
场景:您生成一个密钥对,想将其复制到第二台设备,并将 nsec 粘贴到 iCloud Notes 或 Gmail 草稿中来跨设备移动它。后果:该提供商现在以他们可以读取的形式拥有您的 nsec。该提供商的泄露是 Nostr 身份的泄露。使用具有端到端加密的密码管理器,或(对于一次性转移)扫描设备之间的二维码,而不将其保存到云同步位置。
混淆 4:将 nsec 粘贴到网站登录表单中。
场景:新的 Nostr 网络应用要求您的 nsec 来"登录"。后果:该网站现在永久拥有您的 nsec,即使在您关闭标签页后也是如此。永远不要这样做。有信誉的网络客户端改为使用 NIP-07 浏览器扩展;扩展拥有 nsec 并仅在请求时签署,永远不会将原始秘密暴露给网页。
Bech32 校验和技巧
npub 和 nsec 都使用 Bech32 编码,其中包括内置的错误检测校验和。如果您更改 npub 或 nsec 的一个字符,校验和失败,任何兼容的工具都会拒绝该字符串为无效。
这在实践中很有用:如果您复制粘贴一个密钥,一个字符被删除或替换,接收工具会立即告诉您,而不是无声地接受不同的(看起来有效的)身份。
十六进制编码的密钥没有这个属性。十六进制密钥中的一个错误字符会产生不同但"有效"的密钥,指向完全不同的身份。在系统之间粘贴密钥时,始终首选 Bech32 形式(npub/nsec)。
如何检查您看的是哪个
前四个字符。这就是全部检查。
- 以
npub1开头:安全分享,这是公开部分。 - 以
nsec1开头:在任何情况下都不要分享,这是秘密部分。 - 以
note1开头:这是一个事件 ID(用于特定帖子),不是密钥。 - 以
nprofile1开头:这是一个与推荐中继捆绑的公钥。 - 以
nevent1开头:这是一个与作者和中继捆绑的事件 ID。 - 以
naddr1开头:这是一个长形式文章地址。
一个有用的心理规则:任何以 nsec 开头的 Bech32 字符串都保存在您的设备上。其他所有的(npub、note、nprofile、nevent、naddr)都是用来分享的。
一个具体的安全仪式
生成新的 Nostr 身份的时刻,做这个:
- 打开您的密码管理器。
- 创建一个标记为"Nostr nsec [账户名称]"的新条目。
- 将 nsec 粘贴到密码字段中。
- 保存。
- 关闭应用。
总时间:30 秒。替代方案:用可靠的打印机在纸上打印 nsec,并将纸张存储在您不会丢失的地方。五分钟。
现在您有了一个恢复路径。nsec 在用您的主密码加密的地方或完全离线。如果您丢失手机,您可以通过将 nsec 粘贴回来登录新手机。如果您丢失笔记本电脑,也是一样。
人们抵制这一点的地方:他们在手机上生成密钥,nsec 在钥匙链中,"我稍后会备份它"。稍后永远不会来。然后他们擦拭手机,或升级,或丢失它,身份就消失了。备份是防止这种情况的单一步骤,耗时少于阅读这段话。