文档
安全模型
设备身份、配对证明、签名信令与"先鉴权后串流"。
Nearshell 的安全目标很直接:只有你亲自配对过的两台设备,才能互相控制;即使我们的服务器被攻破,也无法冒充任一端、篡改内容,或看到你的屏幕。
设备身份
- Mac 拥有一个稳定且不可编辑的设备身份;
- 双方各自持有一对 Curve25519 密钥,私钥存于 Keychain,永不离开设备;
- 配对完成后,双方各自固定(pin)对端的公钥。
配对:一次性二维码 + HMAC 双向证明
- Mac 生成一个一次性邀请,包含设备名称、型号与一个一次性 secret,以二维码 / 文本形式展示;
- iPhone 导入后,双方基于该一次性 secret 通过 HMAC 双向证明彼此身份,并自动固定对端公钥;
- Mac 随即销毁一次性 secret,之后全程使用签名信令。
一次性 secret 只在配对窗口内有效,证明完成即失效,不会长期驻留。
签名信令
一旦对端公钥被固定,建连所需的每一条信令(accept / offer / answer / candidate)都会被签名。对端在处理前会校验:
- 会话:属于当前会话;
- 端点身份:签名者是你固定过的对端;
- 时间窗:在允许的时钟窗口内(抗重放);
- 单调序列:序列号单调递增(抗重放 / 乱序注入);
- 签名:内容摘要与 Curve25519 签名匹配。
先鉴权,后串流
连接建立后并不会立刻传画面。只有在控制通道上完成双向 challenge-response、双方都证明了身份之后,连接才进入串流状态,画面在此之后才开始传输。对端在拿到任何屏幕内容之前,必须先证明自己是谁。
端到端加密
画面、键鼠输入与终端文本走端到端加密的实时通道。信令服务器只转发签名后的建连信息,拿不到、也解不开你的内容;即使连接必须经过我们的 TURN 中转,节点转发的也只是密文。参见首页隐私一节。
输入注入的边界
- Mac 端仅在你授予辅助功能权限后才注入键鼠输入;
- 连接离开串流状态时,会立即释放所有仍按下的鼠标 / 键盘按键,避免”卡键”。