跳到主要内容

12. 录制数据加密

面向管理员

本章面向持有云账号与密钥的管理员。现场采集人员不需要阅读,可直接跳过。

设备可以为一支团队绑定一把录制密钥。绑定之后,每一段录制在写入 SD 卡的那一刻就已经是密文——卡被拔走、设备遗失,或者中途换手,拿到卡的人没有密钥也读不出任何画面。

密钥只在管理员手里。拿着设备的采集人员看不到、也改不了密钥;手机 App 只显示「已加密 / 未加密」一个状态,不提供任何开关。这是刻意的:现场设备本身就是要防的一环。

开启之后有什么不同​

  • 文件名、分片大小、目录结构都不变,仍然是 .mcap。
  • 文件内容变成密文。没有密钥的工具打开会直接报错,而不是读出一段坏数据。
  • 加密格式支持随机读取:用 visio-schema 的 read_mcap 读取时不需要先整段解密,速度与未加密文件基本相同。要在 Foxglove 中拖动进度条查看,需先用 visio-decrypt 生成明文副本。
  • 录制帧率、时长、上传都不受影响。
  • session.json 中的 recording_key_fingerprint 字段会填入 16 位十六进制的密钥指纹(未加密时为空),用来标明「这批文件要用哪一把钥匙打开」。它只是钥匙的指纹,不是钥匙本身,可以随文件一起分发。

两种开启方式​

需 visio-schema 0.9.1 及以上。方式一可直接用「5. 取数与在 Foxglove 查看」附件中的 visio-display 打包版(双击运行即进入该控制台);visio-settings-qr 与 visio-decrypt 需通过 pip 安装:pip install "visio_schema-0.9.1.tar.gz[display,qr]"(见「7. 工程集成与数据格式」)。

方式一:用 visio-display 直接设置(推荐)​

在电脑上启动 visio-display 的本地控制台:

visio-display --serve

连上设备后,在页面的密钥区域即可完成设置、轮换、清除,并可查看当前设备正在使用哪一把密钥。密钥在写入设备之前会先存进本机钥匙串,所以不会出现「设备已经加密、管理员却没有钥匙」的情况。

方式二:扫码配置(适合批量出厂 / 远程团队)​

管理员在自己电脑上生成一张二维码,采集人员用 App 的「扫码设置」扫一下即可(见第 8 页)。二维码里的密钥经过加密封装,只有设备固件能解开,任何人都无法从二维码或截图中读出密钥;如需限定只能用于指定设备,请加 --device。

# 生成一把新密钥(请务必备份这个文件;同时会存入本机钥匙串)
visio-settings-qr keygen --out recording.key

# 首次为一批从未加密过的设备制作二维码(会依次询问其他可选设置,直接回车跳过;默认输出 settings_qr.png)
visio-settings-qr qr --recording-key-file recording.key --first-provision

之后要更换密钥,需要同时提供当前正在用的那把(--old-recording-key-file);要停止加密则用 --clear-recording-key,同样需要当前密钥。二维码还可以限定只对某几台设备生效(--device),或设置有效期(--expires-in)。

怎么读取加密后的录制​

把密钥放进本机钥匙串之后,日常使用和未加密时完全一样,不必每次都指定:

# 1) visio-display 控制台:运行 visio-display --serve,选择加密录制后按提示粘贴 64 位十六进制密钥
# (验证通过后自动存入钥匙串)

# 2) 命令行直接指定密钥文件(本机 Rerun 回放,需 pip 安装版)
visio-display --mcap-in ego_0000.mcap --key-file recording.key --rerun

# 3) 钥匙串位置(按指纹索引,可同时保存多个团队的密钥)
# ~/.config/visio/recording-keys.json

# 4) 给不接受密钥的工具(如 Foxglove Studio)生成一份明文副本
visio-decrypt ego_0000.mcap ego_0000_plain.mcap

密钥丢失等于数据永久丢失。加密后的录制没有任何后门,我们也无法帮您恢复。请把密钥文件备份到至少两个地方,并与设备分开保管。

深入了解​

密钥管理清单​

  • 备份到至少两个地方,与设备分开保管——密钥丢失即数据永久丢失,没有恢复途径。
  • 轮换时用 --old-recording-key-file 提供当前密钥;旧密钥仍要保留,用来打开轮换前录制的文件(钥匙串按指纹索引,可同时保存多把)。
  • 指纹可以随文件分发,它不是密钥;靠 session.json 里的 recording_key_fingerprint 就能知道一批文件对应哪把钥匙。
  • 设备端没有开关,采集人员无法关闭加密;停止加密只能由管理员用当前密钥执行 --clear-recording-key。
  • 二维码里的录制密钥是封装的,只对目标设备有效,可以限定设备(--device)与有效期(--expires-in),与第 8 章明文携带 Wi-Fi 密码的普通设置二维码不同。

工程细节​

在电脑上用 visio-display、钥匙串文件或 visio-decrypt 打开加密录制的具体方法,见 7.6 读取加密录制。