Peergos/Peergos

GitHub: Peergos/Peergos

一个点对点加密的全球文件系统,提供安全文件存储、分享、消息和社交网络功能,用户完全掌控自己的数据。

Stars: 2408 | Forks: 190

![Peergos 标志](https://peergos.org/theme/img/peergos/logo-main.svg) # Peergos Peergos 正在构建下一代网络——私密网络,在那里终端用户掌控一切。想象一下,Web 应用默认安全且无法追踪你。想象一下,你能够精确控制每个 Web 应用可以查看哪些个人数据。想象一下,你再也不用登录任何应用了。你拥有自己的数据,并决定数据存储在哪里、由谁查看。在 Peergos,我们相信隐私是一项基本人权,我们希望让每个人都能以尊重这一权利的方式轻松地进行在线互动。 Peergos 的基础是一个点对点加密的全球文件系统,具有细粒度的访问控制,设计用于抵御数据内容或社交关系图的监控。它有一个安全的消息应用、一个加密的邮件客户端和桥接器,以及一个完全私密且安全的社交网络,用户掌控谁能看到什么(通过加密执行)。Peergos 的座右铭是:"掌控你的数据,掌控你的命运。" Peergos 这个名字来自希腊语 Πύργος(Pyrgos),意思是堡垒或塔,但按音韵拼写,与点对点的含义很好地联系起来。发音:peer-goss(如 gossip 中的 goss)。 ## 截图 ![网盘](/assets/images.jpg) 更多截图请查看 web-ui 仓库 [https://github.com/Peergos/web-ui](https://github.com/Peergos/web-ui)。 ## 技术手册 您可以在我们的[技术手册](https://book.peergos.org)中详细了解我们的特性和架构。 ## 最新进展 要了解最新开发动态,请阅读最新的[发布说明](https://peergos.net/public/peergos/releases)或查看我们的 [web-ui 仓库版本](https://github.com/Peergos/web-ui/releases)。 ## 媒体资料 介绍 Peergos 的演讲幻灯片在[这里](https://speakerdeck.com/ianopolous/peergos-architecture) IPFS Camp 2024 深度解析 [![IPFS Camp 2024](https://img.youtube.com/vi/yDU4GHsEo34/0.jpg)](https://www.youtube.com/watch?v=yDU4GHsEo34) Devstaff Crete 深度解析: [![深度解析](https://img.youtube.com/vi/Po_fdZYcfXo/0.jpg)](https://www.youtube.com/watch?v=Po_fdZYcfXo) IPFS Thing 概览: [![概览](https://img.youtube.com/vi/g1vzoZjG9Zo/0.jpg)](https://www.youtube.com/watch?v=g1vzoZjG9Zo) [![架构详情](https://img.youtube.com/vi/HVyrVUI2-RA/0.jpg)](https://www.youtube.com/watch?v=HVyrVUI2-RA) Peergos 上的应用: [![概览](https://img.youtube.com/vi/3i1TtknNw2E/0.jpg)](https://www.youtube.com/watch?v=3i1TtknNw2E) [![更好的网络:安全、私密的点对点应用,用户拥有数据和身份](https://img.youtube.com/vi/mSElk2jcFqY/0.jpg)](https://www.youtube.com/watch?v=mSElk2jcFqY) 应用深度解析: [![概览](https://img.youtube.com/vi/oberD75GU8I/0.jpg)](https://www.youtube.com/watch?v=oberD75GU8I) IPFS Lab Day 架构演讲: [![架构演讲](https://img.youtube.com/vi/h54pShffxvI/0.jpg)](https://www.youtube.com/watch?v=h54pShffxvI) 介绍和 2020 年更新: [![介绍和 2020 年更新](https://img.youtube.com/vi/oXMqYDLKWPc/0.jpg)](https://www.youtube.com/watch?v=oXMqYDLKWPc) 介绍: [![介绍](https://img.youtube.com/vi/dCLboQDlzds/0.jpg)](https://www.youtube.com/watch?v=dCLboQDlzds) ## 审计 ### 2024 https://peergos.org/posts/security-audit-2024 ### 2019 https://peergos.org/posts/security-audit ### 所有审计报告 https://github.com/Peergos/Peergos/tree/master/audits ## 聊天室 Peergos 在 [Matrix](https://matrix.to/#/#peergos-chat:matrix.org) 上有一个公共聊天室。 ## Peergos 的目标 - 允许个人在点对点网络中安全且私密地存储文件,该网络没有中心节点,通常难以中断或监控 - 允许与其他网络用户安全共享文件,且没有可见的元数据(谁与谁分享) - 允许直接从 Peergos 加载和运行 Web 应用,在沙箱中防止数据泄露,并基于用户授予的权限 - 拥有美观的用户界面,任何电脑或移动用户都能理解 - 独立于中心化 TLS 证书颁发机构信任架构 - 可自托管——用户应该能够轻松地在自家机器上运行 Peergos,并从中获得自己的 Peergos 存储空间和社交通信平台 - 拥有安全的 Web 界面 ## 项目反目标 - Peergos 尚未提供匿名性。匿名性可以通过仅通过 Tor 创建和访问用户账户来实现 ## 架构 1.0 架构层次 - 1:点对点和数据层 - [IPFS](https://ipfs.io) 提供数据存储、路由和检索。用户必须至少有一个 Peergos 实例存储其数据才能使其可用。 - 2:授权层 - 密钥对控制谁能够修改文件系统的一部分(每次写入都有签名) - 3:数据存储 - 由给定公钥控制,有一个 [merkle-champ](https://en.wikipedia.org/wiki/Hash_array_mapped_trie) 包含随机标签下的加密块,没有任何交叉链接对服务器可见(服务器无法推断文件大小) - 4:加密 - 在用户机器上使用 [TweetNaCl](http://tweetnacl.cr.yp.to/) 进行强加密,文件的每个 5MiB 块独立加密。 - 5:社交层实现关注或与另一用户成为朋友的概念,而不向任何人暴露社交网络。 - 6:分享 - 与朋友进行安全的加密文件分享。 2.0 编程语言 - IPFS 层使用 Java 编写 - 我们有一个最小的 ipfs 实现 - [Nabu](https://github.com/peergos/nabu) - Peergos 服务器使用 Java 编写以在 JVM 上运行,以获得可移植性和速度,主要使用 Java - Web 界面主要使用 Java 编写并交叉编译为 JavaScript,Tweetnacl 和 scrypt 库除外,以及少量用于 Vue.js 的 JS GUI 代码 - 应用使用 HTML5 编写 3.0 节点 - 有一个 pki 节点确保用户名唯一,使用类似于证书透明度的结构。此数据在每个 peergos 服务器上镜像。 - 新节点联系任何公共 Peergos 服务器以加入网络 4.0 信任 - 新版本的软件将通过 Peergos 本身分发。(如需要,用户可以关闭此功能) - 信任公共 Peergos 服务器(以及 SSL 证书颁发机构链)的用户可以通过 TLS 使用 Web 界面 - 较不信任的用户可以在自己的机器上运行 Peergos 服务器/代理,并通过 localhost 使用 Web 界面 - 更谨慎的用户可以在自己的机器上运行 Peergos 服务器,并使用 CLI 或 fuse/webdav 绑定 - 服务器是无信任的——即使您的服务器被泄露,您的数据和元数据也无法被暴露(假设您的客户端未被泄露) - IPFS 本身不受信任,从中存储或检索的所有数据都是自认证的 - 数据存储(可能不是直接使用 IPFS,而是例如 S3 兼容服务)也不受信任 4.0 登录 - 用户的用户名与随机盐和密码哈希一起通过 scrypt(参数为 17、8、1、96,尽管用户可以选择更难的参数)运行,以生成对称密钥和签名密钥对。然后使用签名密钥对进行身份验证并检索加密的登录数据。然后使用对称密钥解密此登录数据,以获取身份密钥对、社交密钥对和根目录能力。这意味着用户可以从任何机器登录而无需传输任何密钥,并且他们的密钥受到暴力攻击保护(请参阅上面提到的幻灯片以获取成本估算)。 5.0 加密 - 私钥永远不会离开客户端节点。为每个文件或目录生成两个随机对称密钥(明确不是收敛加密,后者会泄露信息) 5.1 后量子加密 - 尚未与另一用户共享的文件已经能够抵抗基于量子计算机的攻击。这是因为从登录到查看明文的操作只包括哈希和对称加密,据目前认为这两者都不会因量子计算机而显著削弱。 - 用户之间共享的文件目前容易受到足够大的量子计算机攻击,如果攻击者能够记录用户之间发送的初始关注请求(在用户检索并删除之前)。一旦出现明确的后量子非对称算法候选,我们将立即替换它。 7.0 社交网络 - 任何人都可以向任何人发送"关注请求"。这相当于"关注"某人,而且是单向协议。这存储在目标用户的服务器上,但服务器无法看到是谁发送了好友请求(它是加密盲化的)。 - 目标用户可以用自己的好友请求回复好友请求,使其成为双向的(通常的朋友概念- 一旦集成了洋葱路由,攻击者(或我们)将无法推断社交关系图(谁与谁是朋友)。 7.0 分享文件(与另一用户、通过秘密链接或公开分享) - 一旦用户 A 被用户 B 关注,A 就可以与 B 分享文件(B 可以随时撤销其关注) - 文件访问控制基于 Wuala 使用的 [cryptree](https://raw.githubusercontent.com/ianopolous/Peergos/master/papers/wuala-cryptree.pdf) 系统 - 可以生成指向文件或文件夹的链接,可以通过任何媒介与任何人分享。链接形式为 https://demo.peergos.net/#KEY_MATERIAL,其特点是即使链接也不会向网络泄露文件内容,因为 # 后的密钥材料不会发送到服务器,而是在浏览器本地解释。我们扩展了 cryptree 以保护更多元数据,包括文件大小、名称、缩略图、目录结构等。 - 用户可以发布对其控制的文件或文件夹的能力,使其公开可见 ## 使用方法 - 本地运行以登录到另一个实例 使用此方法登录到另一个实例上的 Peergos 账户,不依赖 DNS 或 TLS 证书颁发机构。 1. 从 https://peergos.net/public/peergos/releases 下载发布版本 2. 如果下载的是 jar 包,安装 Java - 需要安装 Java >= 25。 3. 运行 Peergos: ``` java -jar Peergos.jar daemon ``` 或对于原生包: ``` peergos daemon ``` 所有 Peergos 数据默认存储在 ~/.peergos 中,可通过环境变量或参数 -PEERGOS_PATH 覆盖。 然后您可以通过 http://localhost:8000 访问 Web 界面并登录。 在这种操作模式下,您的所有写入都直接代理到您的家庭服务器。本地实例会缓存您访问的任何块以加快后续访问。 如果您使用的是打包的桌面应用,或 macOS 上的默认 `peergos` 启动器,您可以使用以下命令指向自托管实例: ``` peergos -server-url https://YOUR_PEERGOS_SERVER_DOMAIN ``` 要使桌面应用持久化,请将以下内容添加到 `~/.peergos/config`: ``` server-url = https://YOUR_PEERGOS_SERVER_DOMAIN ``` 出于安全考虑,远程服务器首选 `https`,仅对环回地址(如 `http://localhost:8000`)使用纯 `http`。 ## 使用方法 - 自托管 使用此方法运行新的家庭服务器(最好使用可公开路由的 IP 和持续运行的机器)来创建或迁移账户。 1. 从 https://peergos.net/public/peergos/releases 下载发布版本 2. 安装 Java - 需要安装 Java >= 25。 3. 运行 Peergos: ``` java -jar Peergos.jar daemon -generate-token true ``` 4. 确保您可以监听公共 IP 地址 某些云主机默认不会将您的公共 IP 添加到网络接口。对于这些情况,您可能需要运行类似以下命令: ``` sudo ip address add MY.PUBLIC.IP dev eth0 ``` 所有 Peergos 数据默认存储在 ~/.peergos 中,可通过环境变量或参数 -PEERGOS_PATH 覆盖 然后您可以通过本地地址打印的 Web 界面进行注册,该地址包含一次性注册令牌。 配置存储在 $PEERGOS_PATH/config 中,因此对于后续运行,您只需使用以下命令,除非您想覆盖任何配置 ``` java -jar Peergos.jar daemon ``` 请注意,无论您通过哪个 Peergos 服务器注册(您的家庭服务器),该服务器都将存储您的数据,因此如果您不打算永久运行 Peergos 服务器,我们建议在 https://peergos.net 上注册,然后您可以通过本地 Peergos 实例登录,您的所有数据最终都会神奇地出现在 peergos.net 服务器上。Peergos 可以在 NAT 和防火墙后工作,但我们建议使用具有公共 IP 的服务器。如果您想公开暴露您的 Web 界面,您需要安排域名和 TLS 证书(我们建议使用 nginx 和 letsencrypt)。 如果您没有设置域名和 TLS,您仍然可以从另一个 Peergos 实例登录,例如您在笔记本电脑上本地运行的实例——连接通过 P2P TLS1.3 流安全路由到您的家庭服务器。在这种情况下,任何写入都会代理到您的家庭服务器,因此您的数据始终保存在那里。如果您确实通过 DNS 名称和 TLS 证书暴露您的实例,您需要添加以下参数: 如果您还使用 nginx 等反向代理来终止 TLS,您需要使用以下参数告诉 Peergos 您使用的域名: 而且 TLS 证书还需要覆盖应用程序的通配符子域(如 PDF 查看器、文本编辑器、日历和自定义第三方应用)才能正常工作。例如,它应该有覆盖 $YOUR_DOMAIN 和 *.$YOUR_DOMAIN 的 A 记录。 如果您使用 nginx 等反向代理来终止 TLS,以下是一个很好的 nginx 配置文件示例(替换 $YOUR_DOMAIN_NAME)(在启用 SELinux 的 Linux 发行版上,您需要确保允许 nginx 访问 8000 端口的 tcp_socket。): ``` # Peergos 服务器配置 server { listen 80 default_server; listen [::]:80 default_server; location ^~ /.well-known { allow all; proxy_pass http://127.0.0.1:8888; } # redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. return 301 https://$host$request_uri; } server { # SSL configuration listen 443 ssl http2; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_ciphers TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:!TLS_AES_128_GCM_SHA256; ssl_certificate /etc/letsencrypt/live/$YOUR_DOMAIN_NAME/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/$YOUR_DOMAIN_NAME/privkey.pem; add_header Strict-Transport-Security "max-age=31536000" always; server_name $YOUR_DOMAIN_NAME; client_max_body_size 2M; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; allow all; } # pass through for letsencrypt location ^~ /.well-known { allow all; proxy_pass http://127.0.0.1:8888; } } ``` ## 使用方法 - 自托管(使用 docker) 获取 docker 镜像: ``` docker pull ghcr.io/peergos/web-ui:master ``` 运行 Peergos 镜像: ``` docker run --volume $(PEERGOS_PATH):/opt/peergos/data ghcr.io/peergos/web-ui:master daemon -listen-host 0.0.0.0 -public-domain $YOUR_DOMAIN_NAME -public-server true -announce-ipfs-addresses /ip4/$IP/tcp/4001,/ip4/$IP/udp/4001/quic-v1 -log-to-console true ``` ## 使用方法 - 自托管(使用 S3 兼容块存储) 按照自托管的说明操作,但添加以下参数(可以在命令行上,也可以在首次运行后的 .peergos/config 文件中): ``` -use-s3 true -authed-s3-reads true -direct-s3-writes true -s3.accessKey $ACCESS_KEY -s3.bucket $BUCKET -s3.region $REGION -s3.region.endpoint $ENDPOINT (e.g. us-east-1.linodeobjects.com) -s3.secretKey #SECRET_KEY ``` 注意:Minio 似乎有一些问题,因此使用 Minio 时请使用:-authed-s3-reads false -direct-s3-writes false 您还需要将桶的 cors.xml 设置为以下内容: ``` https://$YOUR_DOMAIN HEAD GET PUT * ETag Content-Length 3600 ``` ## 使用方法 - 自托管(使用 Postgres 而不是 sqlite) 按照自托管的说明操作,但添加以下参数(可以在命令行上,也可以在首次运行后的 .peergos/config 文件中): ``` -use-postgres true -postgres.database $DATABASE -postgres.host $HOST -postgres.password $PASSWORD -postgres.username $USERNAME ``` ## 使用方法 - 故障排除 * 您可以使用 "-log-to-console true" 也在控制台上显示日志。 * 首次运行将同步 pki,这需要几分钟。后续运行应在几秒钟内启动。 ### CLI 命令行提供了一系列命令。您可以运行 -help 查看可用命令或任何命令或子命令的详细信息。大多数用户只需要 *daemon* 和 *shell* 命令,可能还有 *identity* 或 *fuse*。您可以使用 *migrate* 命令将所有数据迁移到新服务器(在该命令运行的服务器上)。 ``` >> java -Djava.library.path=native-lib -jar Peergos.jar -help Main: Run a Peergos command Sub commands: daemon: The user facing Peergos server shell: An interactive command-line-interface to a Peergos server fuse: Mount a Peergos user's filesystem natively quota: Manage quota of users on this server server-msg: Send and receive messages to/from users of this server gateway: Serve websites directly from Peergos migrate: Move a Peergos account to this server identity: Create or verify an identity proof ipfs: Install, configure and start IPFS daemon pki: Start the Peergos PKI Server that has already been bootstrapped pki-init: Bootstrap and start the Peergos PKI Server ``` 或者 ``` >> java -Djava.library.path=native-lib -jar Peergos.jar identity -help identity: Create or verify an identity proof Sub commands: link: Link your Peergos identity to an account on another service. verify: Verify an identity link post from another service. ``` ## 镜像 要镜像另一台服务器上的所有数据,首先在任意实例上运行以下命令: 它会要求您输入密码,然后打印三个参数,您需要将这些参数提供给镜像守护进程。 然后在您想要镜像数据的实例上运行守护进程,并提供初始化命令返回的附加参数。 这将持续在该实例上镜像该用户的数据。 ## 迁移 要迁移到另一台服务器,首先确保您在该服务器上有足够的配额,然后运行迁移命令。 它会要求您输入用户名和密码,在本地镜像所有数据,然后更新 PKI 使其成为您的家庭服务器。 迁移后,您的身份保持不变,指向您数据的所有链接继续有效,您保留您的社交图谱,无需告诉任何人。 ## Shell 可以使用 shell 进行各种操作。 ``` java -jar Peergos.jar shell ``` 要连接到服务器,您需要提供服务器地址(包括 http/https)、用户名和密码。 ``` Enter Server address > https://peergos.net Enter username > demo Enter password for 'demo' > ************************************** Generating keys Logging in Retrieving Friends demo@https://peergos.net > ``` 显示所有可用命令 ``` demo@https://peergos.net > help ``` 提示:以下命令可能对初始上传较大文件夹很有用。 ``` put local_path remote_path ``` ## 同步 有一个双向同步客户端,允许您将本地目录与 Peergos 目录(或多对目录)同步。设置同步的推荐方式是使用桌面/移动应用。运行应用并登录到它打开的浏览器标签页 http://localhost:7777,然后点击左侧边栏中的同步图标。从那里您可以选择主机和 Peergos 文件夹进行同步,以及是否在任一端同步删除。 如果出于某种原因必须使用 CLI,请继续阅读。 要设置此功能,首先运行: ``` >> java -jar Peergos.jar sync init -peergos-url https://peergos.net ``` 然后按照提示输入您的用户名、密码和您想要同步的 Peergos 目录。这将输出类似以下内容: ``` >> Run the sync dir command with the following args: -links secret/z59vuwzfFDomTEuyeEw7rkofcd2vt5EnVffmAy5fnQe9V9MG36ZiBVY/3615659421#QUq6mf4gz8uk -local-dirs $LOCAL_DIR ``` 然后使用以下命令运行同步客户端: ``` >> java -jar Peergos.jar sync dir -peergos-url https://peergos.net -links secret/z59vuwzfFDomTEuyeEw7rkofcd2vt5EnVffmAy5fnQe9V9MG36ZiBVY/3615659421#QUq6mf4gz8uk -local-dirs /path/to/local/dir ``` ## FUSE(Peergos 的原生文件夹挂载) 您可以使用以下命令挂载您的 Peergos 空间 ``` >> java -Djava.library.path=native-lib -jar Peergos.jar fuse -peergos-url https://peergos.net -username $username -password $password ``` ### MacOS FUSE 前置条件 使用以下命令安装 osxfuse ``` >> brew install --cask osxfuse ``` ### Windows FUSE 前置条件 使用以下命令安装 winfsp ``` >> choco install winfsp ``` ## WebDAV 您可以运行本地 webdav 桥接器,允许您使用任何 webdav 兼容客户端访问您的 Peergos 文件。运行以下命令(选择任意 webdav 用户名和密码): ``` >> peergos webdav -peergos-url https://peergos.net -username $username -PEERGOS_PASSWORD $password -webdav.username $webdav-username -PEERGOS_WEBDAV_PASSWORD $webdav-password ``` 然后您可以通过 http://localhost:8090/$YOUR-USERNAME 浏览您的 home 目录 ## 开发 ### 依赖项 需要 jdk17 和 ant 来构建。使用以下命令安装依赖项: #### 在 Debian 上 ``` sudo apt-get install ant sudo apt-get install openjdk-17-jdk ``` #### 在 macOS 上 ``` brew install ant # installs openjdk as a dependency ant -version Apache Ant(TM) version 1.10.8 compiled on May 10 2020 ``` ### 构建 请注意,这不包含任何 Web UI。包含 Web 界面的完整构建请参阅 https://github.com/peergos/web-ui ### 交叉编译为 JS ``` ant gwtc ``` ### 运行测试 您需要安装 ant-optional: #### 在 Debian 上 ``` sudo apt-get install ant-optional ``` #### 在 macOS 上 macOS 上的 ant 包不需要任何额外内容。 运行测试将自动安装和配置正确版本的 IPFS,运行守护进程,然后终止它。 ``` ant test ``` ### 开发说明 `ant compile` 目标只会编译 src/peergos/{client,server,shared} 文件夹中的源代码。
标签:IPFS, JS文件枚举, Kali工具, P2P, Streamlit, 分布式系统, 加密, 加密文件系统, 加密邮件, 去中心化, 响应大小分析, 域名枚举, 安全信使, 安全通信, 开源, 抗监控, 数据主权, 数据可视化, 文件存储, 漏洞扫描器, 点对点, 社交网络, 端到端加密, 网络安全, 访问控制, 隐私保护