#onion-service #chat #encryption-key #session-keys #anonymous #identity #private-key

程序+库 voynich

用于创建匿名、端到端加密和认证的聊天应用程序的库

2 个版本

0.1.1 2024 年 3 月 18 日
0.1.0 2024 年 3 月 14 日

#4 in #session-keys

Download history 20/week @ 2024-03-08 265/week @ 2024-03-15 21/week @ 2024-03-22 38/week @ 2024-03-29 4/week @ 2024-04-05

每月下载 56 次

MIT/Apache

160KB
3.5K SLoC

Voynich

用于创建匿名、端到端加密和认证的聊天应用程序的库

Build Release Crates.io Docs Badge License License

Voynich 是一个 Rust 库,用于创建匿名、端到端加密和认证的聊天应用程序。它包括一个示例终端聊天应用程序 voynich-term。它使用 Tor 环 onion 服务 来实现匿名性,以及外层加密;此外,每条消息都使用临时会话密钥进行加密和认证,并使用 onion 服务密钥进行签名。

Voynich 使用 onion 服务的标识符作为聊天参与者的身份标识 - onion 服务 就是 你的身份。它可以动态生成新的 onion 服务,可以是临时的(仅存在于聊天会话期间)或持久的(在多个会话中重复使用相同的 onion 服务),由于 onion 服务的 IP 地址是隐藏的,因此你的身份也是隐藏的。

除了使用 onion 服务来实现匿名性(不用说基本的 TLS 级别加密),Voynich 还使用会话密钥对每条消息进行加密和认证,该密钥是针对每个会话重新生成的。

注意:加密代码尚未经过任何人(除了我自己)的审计 - 使用风险自负!!!

概述

我开始这个项目是因为我想知道是否有可能有一个完全匿名、加密、认证的消息系统。因此,它更像是一个概念验证,而不是一个功能齐全的聊天系统。

Voynich 使用 tor-client-lib 库与本地运行的 Tor 服务器进行交互,允许它使用 Tor 服务器中配置的现有 onion 服务,或者动态创建 onion 服务。onion 服务的 ID(onion 主机名中 ".onion" 前的部分)作为每个聊天参与者的身份标识。由于 onion 服务的 ID 在理论上无法与特定的 IP 地址关联,因此它提供了匿名性;然而,由于会话加密密钥通过私钥与 onion 服务的 ID 相关联,因此它还提供了认证 - 你知道当你连接到特定的 onion 服务时,与你交谈的人有权访问服务的私钥。

因为您可以将洋葱服务创建为持久性服务(由Voynich创建,并在随后的聊天会话中重复使用),或短暂服务(由Voynich在启动时创建,只持续聊天会话的长度),因此您可以将它视为支持长期或短暂的身份,这在一些不同的环境中可能很有用。

  • Alice和Bbob都使用持久洋葱服务,并且已通过(带外)相互告知他们洋葱服务的身份。因此,Alice和Bbob都将知道对方是谁,但除了他们之外,没有人会知道或能够确定他们的身份。
  • Alice和Bbob互不相识,但想要进行某种匿名交易。他们在启动时各自创建了短暂洋葱服务,并通过某种匿名带外方法(可能是他们用来确定想要进行交易所使用的通信渠道)交换他们的ID。然后他们可以完全匿名地进行通信 - 如果Bbob(或第三方)决定想要找出Alice的身份,他将不得不基本上打破Tor匿名模型,这将很困难(但并非不可能)。

功能

已检查的功能目前已实现;未检查的功能预计将在未来的版本中实现。

  • 多用户聊天会话
  • 多聊天 - 多用户之间的聊天会话
  • 可序列化为TOML的配置对象
  • 能够在会话之间保存持久洋葱服务
  • 联系名单(可能)将洋葱服务映射到昵称
  • 授权用户/密钥列表类似于SSH
  • 提供Kyber作为替代PKE选项

错误和附加功能

如前所述,这实际上更多的是一个概念验证,而不是一个功能齐全的应用程序库(至少到目前为止)。话虽如此,我愿意接受以下任何一项

  • 通过GitHub问题提交功能请求或错误报告
  • PR以添加功能或修复错误

我特别希望有比我更多加密经验的人愿意检查加密设置(更多内容见下文)和代码,并提出改进建议。

加密细节

维基百科

voynich-term

还包括一个基于终端的聊天应用程序,称为voynich-term,主要用于示例,使用ratatui进行终端UI代码。有关更多信息,请参阅维基百科

依赖项

~28–41MB
~627K SLoC