Pairing và quyền
| Cơ chế | Chi tiết |
|---|---|
| PIN | 6 số ngẫu nhiên lần đầu. Rotate: dùng một lần rồi tự đổi. Fixed: giữ tới khi đổi. Pair lại bằng PIN với một thiết bị đã có luôn hạ về vai trò user. |
| Token thiết bị | 32 byte ngẫu nhiên, cấp khi PIN đúng. Host chỉ lưu SHA-256 của token, không lưu token thật. |
| Chống dò PIN | 5 lần sai từ một IP: khóa 60 giây. 30 lần sai trong 10 phút từ mọi IP: khóa pairing và đổi PIN nếu đang Rotate. |
| Owner | Thiết bị pair đầu tiên. Chỉ owner xem và đổi PIN, đổi vai trò, thu hồi thiết bị, đọc nhật ký, tự nhận clipboard của host và mở AI Terminal. |
| Duyệt kết nối | Bật “Ask me before anyone connects”: thiết bị không phải owner phải được bấm Accept trên máy host trong 30 giây. |
| Thu hồi | Từ khay, trang quản trị, app của owner hoặc cloud. Phiên đang mở của thiết bị đó bị ngắt ngay. |
| Giới hạn | Tối đa 6 phiên cùng lúc; kết nối không chào trong 10 giây bị đóng. |
| Trang quản trị | /admin chỉ phục vụ chính máy host (loopback). |
Dữ liệu trong phiên
- Clipboard: host chỉ gửi clipboard cho phiên của owner. Thiết bị thường dán sang host được nhưng không đọc được clipboard của host.
- File gửi lên host: lưu vào
Downloads/SwiftDesk/, tên file được làm sạch, gắn nhãn tải từ internet (Mark of the Web trên Windows, quarantine trên macOS), tối đa 16 GB mỗi phiên, có ghi nhật ký. - Khóa màn hình từ xa: chỉ khóa được, không mở khóa được qua SwiftDesk. Đây là chủ ý.
- Trình duyệt: chỉ được mở kết nối tới host khi Origin trùng với Host, chặn tấn công từ trang web khác.
- SSH: dấu vân tay khóa máy chủ được ghim lần đầu; nếu khóa đổi, app cảnh báo rõ và hỏi trước khi chấp nhận.
AI Terminal
- AI Terminal mở shell trên máy host với quyền của người dùng đang đăng nhập, tức là toàn quyền như ngồi trước máy. Vì vậy chỉ thiết bị owner mở được.
- Muốn cấp quyền này cho một thiết bị, người ở máy host phải bấm Make owner trong cửa sổ SwiftDesk → Paired devices. Thu hồi thiết bị là thiết bị đó mất quyền ngay.
- Phiên chạy tiếp sau khi bạn đóng trình duyệt hoặc app. Trên macOS và Linux, phiên nằm trong tmux (socket
swiftdesk) và còn sau khi host khởi động lại; hãy đóng phiên không dùng nữa. - AI Terminal chưa đi qua relay của cloud; chỉ dùng trực tiếp trong LAN hoặc Tailscale.
Mật khẩu đã lưu và file export
- Remember password lưu mật khẩu SSH và VNC trong keychain của hệ điều hành, không lưu trong file danh bạ.
- Export Hosts only không chứa mật khẩu hay token.
- Export Hosts + saved passwords (encrypted) mã hóa bằng AES-256-GCM với passphrase bạn đặt. Dùng passphrase dài, không gửi passphrase chung đường với file.
SwiftDesk Cloud (tùy chọn)
- Đăng nhập bằng passkey, tài khoản mới chỉ qua lời mời.
- Cloud ký token kết nối Ed25519 sống 5 phút, gắn với đúng host và đúng thiết bị; token cloud không tạo pairing lâu dài.
- Relay chỉ chuyển bước bắt tay (SDP, ICE). Hình và tiếng vẫn mã hóa đầu cuối.
- Token của app lưu trong Keychain/Keystore, hết hạn sau 180 ngày. Dashboard có nút Sign out everywhere.
Những gì bạn cần biết
| Rủi ro | Giải thích | Nên làm |
|---|---|---|
| Bắt tay chưa có TLS | Kênh WebSocket trên cổng 7340 là ws://. Trong tailnet đã được WireGuard bọc; hình và tiếng luôn mã hóa. | Không mở cổng 7340 ra internet. Ở mạng công cộng, chỉ kết nối qua Tailscale. |
/api/info không cần đăng nhập | Lộ tên máy và kích thước màn hình, chỉ trong phạm vi mạng cho phép. | Đặt tên host trung tính. |
| Token nằm trên thiết bị | Ai mở khóa được thiết bị đã pair là vào được host. | Khóa thiết bị. Mất máy thì thu hồi ngay. |
| Quyền hệ điều hành | Host chạy với quyền của người dùng đang đăng nhập. | Không chạy host dưới tài khoản admin nếu không cần. |
Danh sách việc nên làm
- Bật Ask me before anyone connects trên máy có dữ liệu nhạy cảm, hoặc khi cho người khác mượn PIN.
- Dùng PIN Rotate trừ khi bạn thật sự cần PIN cố định.
- Chỉ cấp owner cho thiết bị của chính bạn: owner mở được terminal trên host.
- Ra ngoài mạng nhà: chạy host với
--network tailnetvà chỉ kết nối qua Tailscale. - Vài tháng một lần, xem danh sách thiết bị đã pair và thu hồi thiết bị không còn dùng.
- Mất điện thoại: thu hồi thiết bị trên từng host; nếu dùng cloud, bấm Sign out everywhere.
- Không bao giờ duyệt mã thiết bị mà người khác gửi cho bạn.
- Mở file nhận qua SwiftDesk như file tải từ internet; đừng bỏ qua cảnh báo SmartScreen hay Gatekeeper với file lạ.
- Cập nhật host khi có bản mới.