公钥 ID:LANDrop 怎么区分两台叫"iPhone"的设备
问题:两台都叫"iPhone"怎么办
在同一局域网里跑 LANDrop 的时候,很容易出现两台设备的设备名一样的情况——比如两个 iPhone 都默认叫"iPhone",两台 Windows 都叫"DESKTOP-XXXX"的自动生成名。如果只靠设备名做识别,那同名设备会互相混淆。
LANDrop v1.x 时代确实有这个问题,设备名就是唯一身份标识,重名时体验很混乱。
公钥 ID 怎么解决的
v2.0 协议升级时,LANDrop 为每台设备引入了 Ed25519 密钥对作为唯一身份:
- 私钥:首次启动时随机生成,永远只保存在本设备的密钥链或系统安全存储里,不会外传;
- 公钥:通过 mDNS 组播(同 LAN)或 WebRTC 近场发现(不同 LAN)广播出去,长度 32 字节,通常在界面上会显示为一个短哈希或"公钥 ID"。
现在两台同名设备:
- 各自启动时生成一对不同的 Ed25519 密钥;
- 组播广播时带出去的公钥完全不同;
- 接收端看到两个设备名相同,但公钥 ID 不同——LANDrop 内部把它们当成两个完全独立的设备,互不干扰。
它还支撑了什么其他特性
公钥 ID 是 LANDrop 好几个重要特性的基础:
- 可信设备白名单:白名单里记录的不是设备名,而是对方的公钥指纹——设备名改了也不影响白名单;
- 安全握手:X25519 密钥交换 + Ed25519 签名验证依赖的就是双方的公钥;
- 设备名可自定义:正因为有公钥 ID 打底,LANDrop 允许你随便改自己显示在其他设备上的名字——改名不会让别人认不出你。
重装系统会发生什么
因为公私钥对是首次启动时生成并持久化在设备上的,如果你重装了 LANDrop(或清除了它的数据目录),公私钥对会重新生成——其他设备会把你当成一台全新的设备。这意味着:
- 你之前在其他设备上的可信设备白名单记录会失效,需要重新加;
- 其他设备上可能会同时看到"旧的你(公钥过期,离线状态)"和"新的你(新公钥,在线)"。
这是设计选择而不是 bug——LANDrop 选择了"重装 = 新身份"这条更严格的安全路线,而不是"保留旧身份方便连接"。