Croc:基于 PAKE 密码认证的跨平台端到端加密文件传输工具
posts posts 2026-07-23T03:00:00+08:00Croc 是一个 CLI 文件传输工具,使用 PAKE 密码认证密钥交换协议实现端到端加密,支持跨平台、断点续传和多文件传输。技术笔记文件传输, 端到端加密, PAKE, CLI工具Croc:基于 PAKE 密码认证的跨平台端到端加密文件传输工具
Croc 真正解决的是“如何在两台任意电脑之间安全地传文件”这个老问题——不需要公网 IP、不需要端口映射、不需要注册账号、不需要上传到第三方服务器,同时还能保证端到端加密。
在它之前,大多数方案都有明显的短板:scp/sftp 需要双方能直连;WeTransfer 之类的网页工具需要上传到中间服务器;局域网传输工具出了内网就用不了。而 Croc 用一个优雅的技术组合解决了所有这些问题。
系统地图:Croc 的四层技术架构
| 层级 | 职责 | 关键技术 |
|---|---|---|
| 用户层 | 交互与发现 | 4 个助记词 + code phrase |
| 加密层 | 密钥协商与加密 | PAKE 协议 + AES-GCM |
| 传输层 | 数据传输与中继 | TCP 中继 + WebSocket |
| 协议层 | 传输控制逻辑 | 断点续传、多文件、进度管理 |
这四层设计的核心优势是:用户只需要记住 4 个单词,就能在底层获得完整的加密安全保障——不需要理解密码学,也不需要手动交换密钥。
为什么 PAKE 是这项技术的核心
Croc 使用的是 PAKE(Password Authenticated Key Exchange,密码认证密钥交换) 协议,这是它与其他文件传输工具最大的区别。
传统的密钥交换有两种模式:
- 公钥加密:双方需要先知道对方的公钥,但如何安全地交换公钥本身就是个问题
- 对称加密:需要一个共享密钥,但如何在不安全的信道上安全地交换密钥?
PAKE 解决的就是这个问题:双方只需要共享一个简单的口令(比如 4 个单词),就可以通过协议协商出一个安全的会话密钥,而攻击者即使截获了所有流量,也无法获得这个密钥。
更重要的是:即使口令强度不高,PAKE 协议也能保证攻击者无法通过暴力破解来获得密钥——因为每一次猜测都需要与服务器进行一次完整的网络交互,这让离线暴力攻击成为不可能。
这就是为什么 Croc 只需要 4 个简单的助记词就能达到很高的安全性——不是因为口令本身很难猜,而是因为协议本身防止了暴力破解。
核心机制拆解
1. 中继模式:无需直连
Croc 使用中继服务器来连接两台无法直连的电脑:
- 发送方连接到中继服务器,生成一个 code phrase(比如
croc-apple-banana-cherry) - 接收方用同一个 code phrase 连接到中继服务器
- 中继服务器把两方的连接对接起来,数据开始流动
关键在于:中继服务器只能看到加密后的数据流,无法解密内容。中继服务器的作用只是转发数据,而不是存储或解密。
这意味着即使中继服务器被攻破,攻击者也无法获得传输的文件内容——因为密钥只存在于发送方和接收方的本地。
2. 端到端加密流程
一次完整的加密传输流程是这样的:
- 发送方和接收方通过 PAKE 协议协商出一个共享会话密钥(双方都不需要暴露自己的私钥)
- 发送方用 AES-GCM 加密文件内容
- 加密后的数据通过中继服务器转发
- 接收方用会话密钥解密数据
- 传输完成后会话密钥立即丢弃
整个过程中,未加密的明文数据永远不会离开发送方和接收方的本地机器。
3. 断点续传与多文件支持
Croc 支持在传输中断后从断点恢复,而不需要从头开始:
- 发送方和接收方会交换文件的哈希值
- 如果接收方已经有部分数据,会通知发送方从哪里继续
- 传输进度会实时显示在终端上
同时支持一次传输多个文件或整个文件夹——这是很多同类工具不具备的功能。
4. IPv6 优先与代理支持
Croc 默认优先使用 IPv6,这在未来的网络环境中会越来越重要。同时也支持通过 Tor 等代理传输,可以满足更高的匿名性需求。
一个典型的文件传输流程
让我们看看“发送方 A 给接收方 B 传一个大文件”的完整流程:
- A 在终端输入
croc send big-file.zip - Croc 生成 code phrase:
croc-apple-banana-cherry - A 通过聊天工具把这个 code phrase 发给 B
- B 在终端输入
croc croc-apple-banana-cherry - A 和 B 通过 PAKE 协议在本地协商出共享会话密钥(中继服务器全程看不到这个密钥)
- A 开始用 AES-GCM 加密文件,并通过中继服务器转发给 B
- B 接收加密数据,在本地解密,实时显示进度
- 如果网络中断,任何一方重新执行命令即可从断点继续
- 传输完成,会话密钥被丢弃
整个过程中,A 和 B 都不需要知道对方的 IP 地址,也不需要配置任何网络参数。
适用边界与采用建议
谁应该优先使用
- 需要跨平台传文件的人:Windows、Linux、Mac 之间互传,再也不用找 U 盘了。
- 需要传大文件的人:断点续传意味着即使传几十 GB 的文件也不怕断网。
- 注重隐私的用户:文件不会在第三方服务器落地,只有发送方和接收方能解密。
- CLI 用户:在终端就能完成所有操作,不需要打开浏览器。
谁可以暂时不用
- 只在同一局域网内传输:局域网直连速度更快,不需要中继。
- 传输极度敏感的数据:虽然 PAKE 很安全,但极端敏感场景可能还是需要物理介质。
- 完全不会用命令行的用户:Croc 目前主要是 CLI 工具,GUI 版本还在开发中。
采用顺序
- 先安装:
brew install croc或对应系统的包管理器。 - 试传一个小文件,体验基本流程。
- 尝试传文件夹和大文件,测试断点续传功能。
- 如果有特殊需求,可以尝试自建中继服务器(Croc 完全开源)。
- 如果需要更高的匿名性,配置通过 Tor 代理传输。
总结
Croc 是那种“用了就再也回不去”的工具——它把一个复杂的问题(安全跨平台文件传输)封装成了极其简单的用户体验:发送方输入命令得到 4 个单词,接收方输入这 4 个单词,文件就开始传了。
这种“简单的用户界面 + 扎实的底层技术”的组合,在开源工具中并不多见。大多数工具要么界面简单但技术上有妥协,要么技术很牛但用户体验一塌糊涂。而 Croc 两者都做到了。
如果你还在为“怎么把这个大文件传给另一台电脑”而烦恼,Croc 值得你立即尝试。