物理隔离(Air-gap)终结者:如何用屏幕和摄像头实现高速数据传输?
关于二维码的小知识
二维码可太常见了,现在啥不是扫一扫,扫一扫关个注,扫一扫跳转网页,扫一扫跳转小程序。其实二维码是一种信息存储方式,但存储的信息非常有限,存储的容量通常有两个因素决定:
版本因素
版本从版本 1 (21×21 模块) 到版本 40 (177×177 模块),版本越高,尺寸越大,容量越大
纠错级别
纠错级别,也就是容错。分为四个级别:
- L (7% 错误恢复):容量最大
- M (15% 错误恢复)
- Q (25% 错误恢复)
- H (30% 错误恢复):容量最小
我们生活中一般用 M 及以上级别。

二维码中间部分打码了还是能正常扫描识别,这就是二维码的容错性
在这个万物互联的时代,如果一台电脑被物理隔离(Air-gapped),拔掉了网线、禁用了蓝牙、封死了 USB 口,你还能把里面的文件取出来吗?今天介绍的这个开源项目 libcimbar,用硬核的 C++ 代码和屏幕上的 "赛博霓虹",给出了一个完美的答案。
想象这样一个场景
你面对着一台存储着绝密数据的服务器,或者是一台感染了超级病毒需要提取日志的电脑。出于安全原因,这台设备处于 物理隔离(Air-gapped) 状态 —— 没有 Wi-Fi,没有蓝牙,没有 NFC,甚至 USB 接口都被物理熔断了。(这不就是大家工作环境的内网么😏)
你手里只有一台手机,如何把电脑里的文件 "吸" 出来?
过去,你可能需要对着屏幕拍照,然后回去用 OCR 识别文字;或者手抄十六进制代码。但今天,Github 上一个名为 libcimbar 的开源项目,为我们提供了一种极具科幻感且高效率的解决方案。

什么是 libcimbar?
简单来说,libcimbar 是一个基于 C++ 编写的高性能库,它实现了一种名为 Cimbar (Color Icon Matrix Barcode) 的协议。
普通的二维码(QR Code)是静态的,黑白的,存储几 KB 的数据都要变得密密麻麻。而 libcimbar 把它变成了一场动态的彩色电影。
- 发送端:利用电脑屏幕,将文件编码成一连串高速闪烁的彩色方块矩阵(就像在播放一段乱码视频)
- 接收端:利用手机摄像头,实时捕捉这些图像流,并解码还原成文件
你可能会问:"这不就是把文件切成一堆二维码轮播吗?"
不,完全不同。普通二维码轮播如果有某一帧没扫到,文件就损坏了。而 libcimbar 采用了类似卫星通信的技术,即使你手抖了、对焦慢了、丢帧了,依然能完美还原文件。
令人咋舌的性能(比百度网盘还快😂)
在光学传输领域(Optical Data Transfer),速度通常是最大的瓶颈。但 libcimbar 的表现令人印象深刻:
- 传输速度:约 850 Kbps (即 106 KB/s,网友戏称:比百度网盘传输速度还快😂)
- 容量限制:支持最大约 33MB 的文件
100 多 KB/s 的速度意味着什么?意味着传输一张高清照片只需要几秒钟,传输一份复杂的 PDF 文档也是瞬间的事,甚至可以传输小型的可执行程序或加密密钥。在没有物理连接的情况下,这个带宽简直是 "高速公路",我甚至想到了把扫描端安在眼镜镜脚上,然后对着屏幕一顿扫扫扫就把机密文件偷走了。

核心黑科技:喷泉码与计算机视觉
libcimbar 之所以能做到这一点,是因为它在技术栈上叠满了 Buff。它不仅仅是图像处理,更是通信原理的教科书级应用。
喷泉码 (Fountain Codes)
这是该项目最核心的魔法。
在传统的 TCP 网络传输中,丢包了需要重传。但在单向的光学传输中,接收端(手机)没法告诉发送端(屏幕):"喂,第 5 帧没看清,重发一下!"
于是,作者引入了 Wirehair(一种喷泉码实现)。它的原理就像喷泉一样:
发送端源源不断地产生 "水滴"(数据包),这些水滴包含了原始文件的冗余信息。接收端不需要按顺序接收,也不在乎丢了中间的哪几滴水,只要接满了一定数量的水滴(比如总量的 110%),就能瞬间通过数学算法还原出完整的 "一桶水"。
这意味着:你可以随时开始扫,中间手抖移开了也不怕,只要最后进度条跑满,文件就是完整的。
极致的 C++ 优化
其实这个项目最早有一个 Python 版本叫 cimbar,但速度较慢。现在的 libcimbar 是其 C++ 重写版。
- 使用了 OpenCV 进行图像识别
- 利用 SIMD 指令集 加速 Reed-Solomon 纠错运算
- 针对 Android 端进行了专门的 neon 优化
这就是为什么它能在手机上跑出近 1Mbps 的解码速度,而不会把手机卡死。
实际上手体验
想要体验这个黑科技,你甚至不需要自己编译代码,作者非常贴心地提供了 Web 端和 Android App。
第一步:发送端(网页 https://cimbar.org/)
打开项目提供的演示网页(基于 WebAssembly 技术),直接把你想传的文件拖进去。屏幕上瞬间会出现一个以极高频率闪烁的彩色矩阵,看起来既像故障艺术,又像黑客帝国的数字雨。

第二步:接收端(手机)
在安卓手机上安装配套的 cfc 应用。打开 App,授予摄像头权限,然后保存文件即可!
它有什么用?
除了觉得酷,libcimbar 解决了真实世界中的不少痛点:
绝密环境数据导出
在涉密单位或金融机构,内网与外网完全物理隔离。运维人员如果需要导出日志进行分析,使用这种光学传输方式,既能保证数据单向流动(防病毒注入内网),又能避开 USB 管控。
应急通信
在极端灾害或战术环境下,无线电静默或信道拥堵时,屏幕和摄像头就是最后的数据生命线。
结语
sz3/libcimbar 是那种典型的 "虽然小众,但极其惊艳" 的开源项目。它没有使用什么昂贵的专有硬件,仅仅利用了我们手边最普通的屏幕和摄像头,通过精妙的算法设计,打通了一条不可见的 "光缆"。
项目地址:https://github.com/sz3/libcimbar
app下载: https://github.com/sz3/cfc/releases/
在线体验:https://cimbar.org/ 手机接收需安装app