6 位验证码:加密握手的最后一跳
验证码出现在哪
当你用 LANDrop 第一次给某台设备发文件(或对端不是你的"可信设备"白名单里的成员)时:
- 发送端:界面上会显示一个 6 位数字,同时弹出等待框;
- 接收端:界面上会弹出握手请求,内容是"来自 [发送设备名] 的传输请求",旁边也显示同样的 6 位数字。
接收方在核对数字一致后,点"是"或对应确认按钮,双方的 libsodium 加密握手才算正式完成,之后才开始真正传输文件。
为什么一定要核对
这个 6 位验证码本质上是 SAS(Short Authentication String) 的一种实现。在 libsodium 的 X25519 密钥交换里,双方各自算出的共享密钥可以派生出一个短字符串(验证码)——如果两个人看到的数字完全一致,就可以证明中间人不存在。如果有人在中间篡改了密钥交换过程,两边算出的验证码就会不同。
这比让用户手动对比公钥指纹要友好得多——6 位数字一目了然,用户体验极佳,同时安全性上已经足够防御绝大多数中间人攻击。
什么时候可以跳过
可信设备白名单(见下一页)里的设备,LANDrop 会记住它的公钥指纹——下次再收到这台设备的请求时,直接跳过验证码核对,自动完成握手。第一次之后就顺畅了。
验证码显示多长时间
窗口很短——LANDrop v2.x 里验证码通常只显示 30-60 秒,超时没确认就自动取消。这是为了防止你出门离开设备没处理,浪费对方的传输请求。