物理隔离(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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注