设备 ID 是什么:一串大写字母数字背后的证书指纹
它从哪来
第一次启动时,程序会生成一对椭圆曲线加密密钥(存为配置目录里的 cert.pem 和 key.pem)。设备 ID 就是这张证书的 SHA-256 指纹,按人类友好的方式编码成一串大写字母数字,格式是七段、每段四个字符、之间用连字符分隔,形如:
P56IOI7-MZJNU2Y-IQGDREY-DM2MGTI-MGL3BXN-PQ6W5BM-TBBZ4TJ-XZWICQ2
这个设计意味着:设备 ID 不是随机的用户名,而是密码学意义上的身份——伪造一个特定 ID 等价于伪造一张特定指纹的 TLS 证书,实际不可行。
为什么不需要保密
新用户常问:设备 ID 要不要藏好?官方 FAQ 的回答是不用。两个原因:
- 配对是双向的。两台设备只有在都添加了对方 ID 时才会连接。别人知道了你的 ID,最多能探测到这台设备的存在,无法建立连接、无法读取任何文件。
- 知道 ID 可能查到 IP。开着全局发现时,ID 与外部地址的映射存在于发现服务器上——这算不上秘密泄露,但隐私敏感用户可以据此决定是否关闭全局发现,见[全局发现与本地发现(../07-网络与连通/03-discovery.md)。
官方文档的措辞是:设备 ID 本质上是公钥的一部分,公钥本来就是拿来公开的。
配对为什么必须两边操作
这是它与「输个分享码就能进」的账号制工具最直观的不同。安全模型是「双方明确同意」:
- A 加了 B,只是 A 单方面愿意;
- B 不加 A,连接不会建立;
- 两边都加了,TLS 握手时互相核对证书指纹,对得上才开始交换索引。
这套机制保证「不被邀请的设备进不了集群」,是官方安全原则的第一条。代价就是初始设置多一步——FAQ 里也承认这是用便利换安全。
丢了密钥会怎样
key.pem 是设备身份本体:拿到它的人可以冒充这台设备接入所有配对关系。所以官方安全建议里明确两条:设备丢失后立刻在其他设备上移除它;加密盘上的数据,就把配置目录也放进同一块加密盘。详见[配置文件与密钥都在哪(../09-配置与进阶/01-config-files.md)。