大家好,最近做了一个比较特别的浏览器实验项目:ParticlePair。
它尝试把 128 位配对秘密编码进一片动态粒子星系中。
人眼看到的是由蓝色、紫罗兰色和洋红色粒子组成的三臂旋转星系;手机摄像头看到的则是隐藏在连续动画中的光学信号,并能从真实拍摄画面中恢复原始数据。

怎么体验
推荐使用两台设备:
- 在 Windows 或 macOS 电脑上打开在线体验页面。
- 在发送端生成一个新的配对秘密,保持粒子动画完整显示。
- 用 iPhone 或 Android 手机打开同一个网站。
- 进入摄像头扫描模式,并允许网页访问摄像头。
- 将电脑屏幕上的完整粒子方形区域放进手机扫描框。
- 保持距离适中,尽量避免反光和大幅晃动。
- 页面会逐步搜索画面的位置、比例和方向。
- 完成纠错并通过 CRC-16 校验后,手机会显示恢复出的秘密。
也就是说,它不是读取一张静态截图,而是让手机摄像头观察另一台设备浏览器中的动态画面,通过连续帧之间的变化恢复数据。
移动端调用摄像头一般需要 HTTPS,所以建议直接使用上面的在线体验地址。
背后的原理
屏幕上实际存在一个 18×18 的光学网格。
系统把 128 位秘密封装为 21 字节协议帧,经过 Hamming(12,8) 纠错后得到 252 个光学数据位。一个以绿色分量为主的青色载波,每隔 300 毫秒在两个相反相位之间切换。
接收端比较手机摄像头连续画面的绿色通道,搜索不同的位置、缩放比例、旋转和镜像方向,并跨多个画面累积证据。
完整流程大致是:
128 位配对秘密
→ 21 字节协议帧
→ Hamming(12,8)
→ 252 个光学数据位
→ 18×18 光学网格
→ 相反相位调制
→ 摄像头绿色通道帧差分
→ 位置、比例和方向恢复
→ Hamming 纠错
→ CRC-16 校验
→ 恢复配对秘密
只有数据完成纠错并通过 CRC-16 校验后,接收端才会释放恢复出的秘密,避免把摄像头噪声或错误识别结果当成有效数据。
为什么做这个
二维码很成熟,但它通常是一块明确、静态、以机器识别为主要目标的图形。
我想尝试另一种表达:机器可读的信息能否同时成为动态视觉的一部分?
因此,ParticlePair 没有直接显示传统二维码,而是把光学数据通道融合进旋转、呼吸、聚合和飘散的粒子星系中。希望它首先看起来像一件动态视觉作品,同时又确实可以被另一台设备的摄像头解码。
整个项目都运行在浏览器中,使用的主要技术包括:
- Canvas 2D
- Web Crypto
getUserMedia()- 摄像头帧差分
- 多尺度和位置搜索
- 旋转及镜像恢复
- Hamming 前向纠错
- CRC-16 完整性校验
不需要安装原生应用,也不依赖数据库或服务端图像识别。界面目前支持英文、西班牙文和中文。
可以用在哪里
目前能想到的一些方向:
- 手机与电脑、平板或电视之间的临时配对
- 用手机确认网页端登录
- 大屏设备与个人设备之间的授权
- 局域网设备首次配置
- 跨屏互动和现场活动
- 数字艺术或展览中的隐藏机器信息
- 屏幕到摄像头通信研究
- 空气隔离环境中的低带宽数据传递实验
当前定位和局限
这个项目目前还是实验性质,重点是验证浏览器中的动态光学编码、真实摄像头恢复以及跨设备可用性。
它不是一种新的加密算法,也没有经过生产级安全审计。如果用于真正的身份认证或设备配对,还需要在应用层加入:
- 有效期和会话绑定
- 防重放机制
- 秘密的一次性消费
- 设备身份认证
- 经过认证的密钥交换
- 安全密钥存储
- 独立安全审计
目前最希望收集的是不同设备上的扫描结果,尤其是:
- 不同型号的 iPhone 和 Android
- Windows 与 macOS 不同屏幕
- 高刷新率、缩放和不同亮度设置
- 手机与屏幕之间的距离和角度
- 弱光、反光以及复杂背景
- 误码率和识别速度
如果遇到一直停留在“正在搜索位置、比例和方向”,或者粒子信号百分比来回跳动,也欢迎回复设备型号、浏览器、发送端屏幕和大概距离,我会继续优化。
欢迎大家试玩,也欢迎对光学调制、摄像头识别、纠错方式和实际使用场景提出建议。
苹果设备配对也有类似的,挺有意思
高大上
苹果的watch配对好像也是粒子
使用摄像头进行识别,你得考虑不同屏幕分辨率比例,dpi缩放,还有对色彩色准上的辨别,
不同显示器色差大的离谱的,拍摄角度不同也会有形变的;
太多要考虑的东西了,之前看到一个项目上利用动态二维码实时传输数据,最高可以连续传输30kb,
你看研究研究对你这个项目是否有帮助