nostr - 最简单的开放协议,能够一劳永逸地创建一个抗审查的全球“社交”网络。

Created at: 2020-11-09 11:17:41
Language:

nostr - 通过中继传输的音符和其他东西

最简单的开放协议,能够一劳永逸地创建一个抗审查的全球“社交”网络。

它不依赖于任何受信任的中央服务器,因此它是有弹性的;它基于加密密钥和签名,因此是防篡改的;它不依赖于P2P技术,因此它可以工作。

这是一项正在进行的工作。加入电报组!

如果你不打算阅读其他任何内容,请简要总结其工作原理:

每个人都在经营一个客户。它可以是本机客户端、Web 客户端等。要发布某些内容,你需要撰写一篇文章,用你的密钥签名并将其发送到多个中继(由其他人或你自己托管的服务器)。要从其他人那里获取更新,你需要询问多个中继是否知道有关其他人的任何信息。任何人都可以运行中继。继电器非常简单和愚蠢。除了接受某些人的帖子并转发给其他人之外,它什么也没做。中继不必受信任。签名在客户端进行验证。

如何开始使用诺斯特

诺斯特客户端功能比较

在诺斯特尔上构建的项目列表

这是必需的,因为其他解决方案已损坏:

推特的问题

  • 推特有广告;
  • 推特使用奇怪的技术让你上瘾;
  • Twitter 不会显示你关注的人的实际历史提要;
  • 推特禁止人们;
  • 推特影子禁止人们。
  • Twitter有很多垃圾邮件。

乳齿象和类似程序的问题

  • 用户身份附加到由第三方控制的域名;
  • 服务器所有者可以禁止你,就像推特一样;服务器所有者还可以阻止其他服务器;
  • 服务器之间的迁移是事后的想法,只有在服务器合作的情况下才能完成。它在对抗性环境中不起作用(所有关注者都丢失了);
  • 运行服务器没有明确的动机,因此它们往往由爱好者和希望将自己的名字附加到一个很酷的域的人运行。然后,用户受制于一个人的专制,这往往比Twitter这样的大公司更糟糕,他们无法迁移出去;
  • 由于服务器往往是业余运行的,因此它们通常会在一段时间后被放弃——这实际上与禁止所有人相同;
  • 如果来自每个服务器的更新必须痛苦地推送(并保存!)到大量其他服务器,那么拥有大量服务器是没有意义的。服务器往往大量存在,因此必须更频繁地将更多数据传递到更多地方,这一事实加剧了这一点;
  • 对于视频共享的具体示例,ActivityPub 爱好者意识到完全不可能像文本注释那样在服务器之间传输视频,因此他们决定仅从发布视频的单个实例托管视频,这类似于 Nostr 方法。

SSB(Secure Scuttlebutt)的问题

  • 它没有太多问题。我认为这很棒。事实上,我打算用它来作为基础,但是
  • 它的协议太复杂了,因为它根本没有被认为是一个开放的协议。它只是用JavaScript编写的,可能是一种快速解决特定问题的方法,并从中发展而来,因此它具有奇怪和不必要的怪癖,例如签署必须严格遵守ECMA-262第6版规则的JSON字符串;
  • 它坚持从单个用户那里获得一系列更新,这对我来说是不必要的,并且增加了膨胀和僵化的东西——每个服务器/用户都需要存储所有帖子链以确保新的帖子是有效的。为什么?(也许他们有充分的理由);
  • 它不像 Nostr 那么简单,因为它主要用于 P2P 同步,“酒吧”是事后的想法;
  • 尽管如此,可能值得考虑使用 SSB 而不是这个自定义协议,并使其适应客户端中继服务器模型,因为重用标准总是比想让人们使用新标准更好。

其他解决方案的问题,要求每个人都运行自己的服务器

  • 他们要求每个人都运行自己的服务器;
  • 有时人们仍然可以在这些中被审查,因为域名可以被审查。

诺斯特如何工作?

  • 有两个组件:客户端中继。每个用户运行一个客户端。任何人都可以运行中继。
  • 每个用户都由公钥标识。每个帖子都有签名。每个客户端都会验证这些签名。
  • 客户端从他们选择的中继获取数据,并将数据发布到他们选择的其他中继。一个中继不与另一个中继通信,仅直接与用户通信。
  • 例如,要“关注”某人,用户只需指示他们的客户端查询它知道的中继以获取来自该公钥的帖子。
  • 在启动时,客户端会查询它所知道的所有用户的所有中继的数据(例如,最后一天的所有更新),然后按时间顺序向用户显示该数据。
  • “帖子”可以包含任何类型的结构化数据,但最常用的数据将进入标准,以便所有客户端和中继都可以无缝处理它们。

它如何解决上述网络无法解决的问题?

  • 用户被禁止,服务器被关闭

    • 中继可以阻止用户在那里发布任何内容,但这对他们没有影响,因为他们仍然可以发布到其他中继。由于用户由公钥标识,因此当他们被禁止时,他们不会失去他们的身份和关注者基础。
    • 而不是要求用户手动键入新的中继地址(尽管这也应该得到支持),每当你关注的人发布服务器建议时,客户端应自动将其添加到它将查询的中继列表中。
    • 如果有人正在使用中继发布其数据,但想要迁移到另一个中继,他们可以将服务器推荐发布到以前的中继并继续;
    • 如果有人被禁止使用许多中继,以至于他们无法广播他们的服务器推荐,他们仍然可以通过其他方式让一些亲密的朋友知道他们现在正在发布哪个中继。然后,这些亲密的朋友可以将服务器推荐发布到该新服务器,慢慢地,被禁止用户的旧关注者群将开始从新中继中再次找到他们的帖子。
    • 上述所有内容对于中继停止运行时也有效。
  • 抗审查

    • 每个用户都可以将其更新发布到任意数量的中继。
    • 中继可以向用户收取费用(该费用的协商目前不在协议范围内)以在那里发布,这确保了抗审查性(总会有一些俄罗斯服务器愿意拿你的钱来换取你的帖子)。
  • 垃圾邮件

    • 如果垃圾邮件是中继关注的问题,则可能需要为发布或其他形式的身份验证(例如电子邮件地址或电话)付费,并在内部将这些与发布到该中继的公钥或其他反垃圾邮件技术(如hashcash或验证码)相关联。如果中继被用作垃圾邮件媒介,则客户端可以轻松地将其取消列出,客户端可以继续从其他中继获取更新。
  • 数据存储

    • 为了使网络保持健康,不需要数百个活动中继。事实上,它只需少数几个就可以正常工作,因为如果现有的继电器开始行为不端,可以很容易地创建新的中继并通过网络传播。因此,所需的数据存储量,一般来说,相对小于Mastodon或类似的软件。
    • 或者考虑一个不同的结果:其中存在数百个由业余爱好者运行的利基中继,每个中继来自一小群用户的更新。该架构的扩展性也一样高:数据从用户发送到单个服务器,然后从该服务器直接发送到将使用该服务器的用户。它不必由其他任何人存储。在这种情况下,任何单个服务器处理来自其他服务器的更新都不是一个很大的负担,拥有业余服务器也不是问题。
  • 视频和其他重内容

    • 中继很容易拒绝大型内容,或者为接受和托管大型内容收费。当信息和激励措施明确时,市场力量很容易解决问题。
  • 欺骗用户的技术

    • 每个客户都可以决定如何最好地向用户显示帖子,因此始终可以选择以你想要的方式消费你想要的内容 - 从使用 AI 来决定你将看到的更新顺序到按时间顺序阅读它们。

常见问题

  • 这很简单。为什么以前没有人这样做过?

    我不知道,但我想这与这样一个事实有关,即制作社交网络的人要么是想要赚钱的公司,要么是想要完全没有服务器的 P2P 活动家。他们都看不到Nostr使用的两个世界的具体组合。

  • 如何找到要关注的人?

    首先,你必须了解它们并以某种方式获取它们的公钥,无论是通过询问还是在某处看到它被引用。一旦你进入了Nostr社交网络,你将能够看到他们与其他人互动,然后你也可以开始关注和与其他人互动。

  • 如何找到继电器?如果我没有连接到其他人的相同中继会怎样?

    你将无法与该人交流。但是有一些关于事件的提示,可以使用,以便你的客户端软件(或你,手动)知道如何连接到其他人的中继并与他们交互。关于将来如何解决这个问题还有其他想法,但我们不能保证完美的可达性,没有协议可以。

  • 我能知道有多少人在关注我吗?

    否,但你可以得到一些估计,如果中继以协议外的方式合作。

  • 人们跑步接力有什么动力?

    这个问题具有误导性。它假设中继是存在的自由哑管道,以便人们可以通过它们移动数据。在这种情况下,是的,激励措施将不存在。事实上,对于所有其他p2p网络堆栈中的DHT节点来说,这可以说是这样:人们运行DHT节点有什么动力?

  • Nostr 使你能够在服务器中继之间移动或使用多个中继,但如果这些中继仅在 AWS 或 Azure 上,有什么区别?

    今天,全球有成千上万的VPS提供商,不仅有AWS或Azure。AWS或Azure正是单个集中式服务提供商使用的提供商,这些提供商需要大量规模,即使如此,也不仅仅是这两者。对于较小的中继服务器,任何VPS都可以很好地完成这项工作。

协议规范

请参阅NIP,尤其是NIP-01,以获取协议规范的合理详细解释(提示:它非常简短和简单)。

软件

有一个列表,列出了大多数使用Nostr构建的软件,https://github.com/aljazceru/awesome-nostr 上次我看的时候似乎几乎完成了。

许可证

公有土地。