#p2p #secret-sharing #sharing #security #secure-communication #networking

app scs

开源 p2p 共享,方便开发者安全地在多台机器间共享任何内容

6 个版本

0.1.5 2023 年 8 月 22 日
0.1.4 2023 年 8 月 11 日
0.0.17 2023 年 8 月 1 日

开发工具 中排名 437

Download history 2/week @ 2024-03-30

每月下载量 61

Apache-2.0 许可协议

80KB
2K SLoC

安全共享 codecov Lint

通过 CLI 与队友在多台机器间共享任何内容。Share 是一个安全点对点连接工具,允许在无法直接访问互联网的机器之间直接通信和高效交换秘密、文件和消息。

内容

依赖项

  • bash, curl, tar: 安装这些实用程序。

安装

要使用 scs

yarn add @onboardbase/secure-share # npm i @onboardbase/secure-share

或者,如果你的机器上安装了 Rust

cargo install scs

或者,使用 curl

curl https://onboardbase.github.io/secure-share-sh/ | bash

备注

  • 对于 Windows 用户,请使用 Git Bash 或任何其他带有 Bourne Shell 的 CLI。
  • 对于使用 Rust 的机器,确保 rustup 目录在您的 PATH 中。
scs --help

您应该会看到一个显示 scs 服务的响应。

Share anything with teammates across machines via CLI.

Usage: scs [OPTIONS] <MODE>

Arguments:
  <MODE>  The mode (send secrets, or receive secrets). e,g `scs send` or `scs receive`
Options:
  -s, --secret <SECRET>
          Separated list of secrets to share. The key-Value pair is separated by a comma. "my_key,my_value"
  -m, --message <MESSAGE>
          List of messages or a message string to deliver to the receiver. e,g -m "Hi there" -m "See me"
  -f, --file <FILE>
          List of file paths of files to deliver to the receiver. e,g -f "/path/to/file1" -f "../path/to/file2"
  -r, --remote-peer-id <REMOTE_PEER_ID>
          Peer ID of the remote to send secrets to
  -p, --port <PORT>
          Port to establish a connection on
  -d, --debug...
          Turn debugging information on
  -h, --help
          Print help
  -V, --version
          Print version

用法

scs 允许在不同机器和不同网络背后的团队成员之间传输秘密或消息。要分享一个秘密,发送者和接收者必须像上面描述的那样获取 scs 并遵循以下说明。

接收者

打开终端或 cdscs 安装的位置,然后

scs receive

scs 以监听模式启动并分配一个 PeerId,并随机选择一个端口开始。可选的 -p 标志可以用来指定端口。应该会显示如下类似的响应

INFO  Your PeerId is: 12D3KooWA768LzHMatxkjD1f9DrYW375GZJr6MHPCNEdDtHeTNRt
INFO  Listening on "/ip4/172.19.192.1/tcp/54654"
INFO  Listening on "/ip4/192.168.0.197/tcp/54654"
INFO  Listening on "/ip4/127.0.0.1/tcp/54654"
INFO  Listening on "/ip4/157.245.40.97/tcp/4001/p2p/12D3KooWDpJ7As7BWAwRMfu1VU2WCqNjvq387JEYKDBj4kx6nXTN/p2p-circuit/p2p/12D3KooWA768LzHMatxkjD1f9DrYW375GZJr6MHPCNEdDtHeTNRt"

发送者

获取您想发送秘密的队友的 PeerId,然后

scs send -r 12D3KooWA768LzHMatxkjD1f9DrYW375GZJr6MHPCNEdDtHeTNRt -s "hello, world"

scs 会打印出您的 IP 地址和您的 PeerId。为了验证连接是否建立以及您的机器是否可以与队友通信,您应该在终端中看到类似以下内容

INFO  Your PeerId is: 12D3KooWRpqX3QUvPNHXW5utkceLbx2b1LKfuAKa3iLdXXBGB2bY
INFO  Listening on "/ip4/127.0.0.1/tcp/40479"
INFO  Listening on "/ip4/192.168.212.254/tcp/40479"
INFO  Established connection to 12D3KooWA768LzHMatxkjD1f9DrYW375GZJr6MHPCNEdDtHeTNRt via /ip4/157.245.40.97/tcp/4001/p2p/12D3KooWDpJ7As7BWAwRMfu1VU2WCqNjvq387JEYKDBj4kx6nXTN/p2p-circuit/p2p/12D3KooWA768LzHMatxkjD1f9DrYW375GZJr6MHPCNEdDtHeTNRt

发送者尝试发送秘密,如果成功,scs 会将消息转发给双方,并通知他们秘密共享会话的状态和进度。

文件

scs 也支持发送文件

scs send -r 12D3KooWLaLnHjKhQmB46jweVXCDKVy4AL58a4S4ZgHZGuJkzBf9 -f ../path/to/file1 -f path/to/file2

消息

普通消息也可以共享

scs send -r 12D3KooWLaLnHjKhQmB46jweVXCDKVy4AL58a4S4ZgHZGuJkzBf9 -m "hi there" -m "foo"

这三个项目也可以一起发送。

配置

截至 v0.0.12scs 允许传递配置文件。端口、白名单和项目都可以直接配置,而不是作为参数传递。示例配置文件可以在这里找到。例如

port: 5555 #An optional port defaults to 0 if not present
save_path: "default"
secret: # Optional during receive
  - key: foo
    value: bar
  - key: baz
    value: woo
message: # Optional during receive
  - new message from me
  - test message
file: # Optional during receive
  - "./dev_build.sh"
debug: 1 # Compulsory. 0 is for off, and 1 and above for on
blacklists:
  - 34.138.139.178
whitelists:
  - 34.193.14.12
connection: trusted # or self
seed: "scsiscool"
scs receive -c ./config.yml

或对于发送者

scs send -r 12D3KooWLaLnHjKhQmB46jweVXCDKVy4AL58a4S4ZgHZGuJkzBf9 -c ./config.yml

白名单/黑名单 IP 地址

白名单和黑名单控制来自指定 IP 的流量。要启用此功能,请将 IP 列表添加到配置文件中。如果没有提供白名单 IP,则允许所有连接。但是,如果指定了白名单 IP,则只允许来自这些地址的流量。例如 127.0.0.1(本地主机)或 192.0.0.0(防火墙访问点)这样的通用 IP 不会起作用。

签名证书

接收者可以配置 scs 只允许来自使用 CA 签名的证书的用户或仅来自自签名证书的用户连接。将 connection: trustedconnection: self 添加到配置文件中。

种子(种子密钥)

scs 的核心是 PeerId。每当接收者和发送者开始一个会话时,都会随机生成一个 PeerId。截至 v0.1.3scsPeerId 现在是确定的;单个 PeerId 可以使用一生。为此,您需要设置一个“种子”。PeerId 是根据这个种子生成的。只要种子密钥保持不变,PeerId 就会保持不变。种子密钥是一个长度小于 32 的字符串。但为了方便和最佳配置,我们建议使用 4 或 5 个字母的单词,如上面的配置文件所示。

保存 Peer 信息

在初始设置之后,为了让使用 scs 更容易,scs 实现了一种简单的机制来存储接收者的信息。在与新同伴的每次会话之后,scs 会询问你是否想保存已连接同伴的信息。如果你决定向该同一同伴发送信息,可以将同伴的名称传递给以下 -n 参数

scs send -n dante -c config.yml

注意:出于安全原因,我们不会在每台机器上保存已连接同伴的 IP 地址。

查看所有已保存的同伴

scs list

项目存储位置

发送的项目(秘密、文件和消息)存储在机器的本地文件夹中。要查找已保存的项目

  • Windows: /c/Users/<name_of_user>/AppData/Local/onboardbase/secureshare/data
  • Linux: /home/<name_of_user>/.local/share/secureshare
  • Mac: /Users/<name_of_user>/Library/Application Support/com.onboardbase.secureshare

贡献

欢迎任何形式的贡献!请参阅贡献指南

感谢以下贡献者!

路线图

协议

  • AutoNat:如果你仔细观察,scs 假设两个同伴都在 NAT、防火墙或代理后面。但有时情况可能并非如此,仅仅为了这个就进行打洞是过度的。实现 AutoNat 将首先检查两个同伴是否可以直接通信。如果不能,它将接着进行打洞。使用 TCP 可能需要 3 到 10 秒钟,这就是 QUIC 如何提高 scs 速度的地方。

许可协议

请参阅 LICENSE © Onboardbase

技术细节

scs 在幕后采用的重要技术细节是 P2P 共享。以下是一些关于 P2P 共享和打洞的优秀和详细资源。祝您阅读愉快!!

依赖项

~55–92MB
~1.5M SLoC