- Công cụ liên lạc kiểu bộ đàm dựa trên Bash cho phép trao đổi giọng nói và văn bản ẩn danh, mã hóa đầu cuối (E2EE) qua mạng Tor
- Không cần máy chủ, tài khoản hay số điện thoại, kết nối trực tiếp với đối phương chỉ bằng địa chỉ
.onion, theo cơ chế push-to-talk (PTT) ghi âm rồi gửi
- Cung cấp các tính năng bảo mật mạnh như lựa chọn 21 loại mã hóa gồm AES, ChaCha20, Camellia, ARIA, xác thực HMAC-SHA256, dẫn xuất khóa PBKDF2
- Hỗ trợ cả môi trường Linux và Android Termux, hoạt động chỉ với các công cụ tiêu chuẩn như sox·opus-tools·Tor·openssl
- Được cấu thành từ một script duy nhất nên cài đặt và bảo trì đơn giản, có thể dùng cho nghiên cứu bảo mật và thử nghiệm liên lạc ưu tiên quyền riêng tư
Tổng quan
- TerminalPhone là một script Bash sử dụng Tor Hidden Service để hai người dùng có thể trao đổi giọng nói và văn bản một cách ẩn danh
- Mọi liên lạc đều được bảo vệ bằng các mã hóa có thể lựa chọn như AES-256-CBC (mặc định)
- Địa chỉ
.onion đóng vai trò làm định danh người dùng
- Không cần hạ tầng máy chủ hay đăng ký tài khoản
Tính năng chính
- Tin nhắn thoại kiểu bộ đàm: ghi âm xong rồi gửi, không có streaming thời gian thực
- Chat mã hóa trong khi gọi: gửi và nhận tin nhắn văn bản bằng phím
T
- Tự động phát hiện ngắt kết nối và hiển thị trạng thái đối phương (đang ghi âm/đang chờ)
- Lựa chọn 21 loại mã hóa và hiển thị thương lượng theo thời gian thực, có thể đổi mã hóa ngay trong cuộc gọi
- Hỗ trợ cầu nối Snowflake để vượt kiểm duyệt
- Nhiều tính năng bổ sung như chia sẻ địa chỉ bằng mã QR, biến đổi giọng nói (voice changer), âm báo PTT, tự động nhận (auto-listen)
- Xác thực giao thức bằng HMAC-SHA256 để ngăn tấn công phát lại
- Hỗ trợ hiển thị tuyến mạch Tor và cấu hình loại trừ một số quốc gia cụ thể
- Một file Bash duy nhất, không cần quyền root, vẫn hoạt động trong môi trường băng thông thấp (16kbps)
Cài đặt
- Linux: chạy
git clone rồi bash terminalphone.sh, dùng mục 7 trong menu để tự động cài phụ thuộc
- Các gói cần cài:
tor, opus-tools, sox, socat, openssl, alsa-utils
- Android Termux:
- Cài ứng dụng Termux và Termux:API từ F-Droid
- Sau
pkg install termux-api, chạy bash terminalphone.sh
- Gói bổ sung:
ffmpeg, openssl-tool, tor, sox, socat v.v.
Cách dùng
- Quy trình cơ bản
- Chạy
bash terminalphone.sh
- Cài phụ thuộc bằng mục 7 trong menu
- Khởi động Tor bằng mục 8 trong menu
- Đặt khóa bí mật dùng chung ở mục 4 trong menu
- Gửi địa chỉ
.onion cho đối phương
- Nhận cuộc gọi: mục 1 “Listen for calls”
- Gọi đi: mục 2 “Call an onion address”
- Ví dụ lệnh chế độ CLI:
bash terminalphone.sh call ADDRESS
bash terminalphone.sh listen
Cách hoạt động
- Mô hình ghi âm rồi gửi (record-then-send)
- Âm thanh đã ghi được mã hóa Opus → mã hóa AES → mã hóa Base64 → truyền qua Tor
- Bên nhận thực hiện theo thứ tự ngược lại để giải mã và phát lại
- Thông điệp giao thức ở dạng văn bản, gồm
ID, CIPHER, PTT_START, AUDIO, MSG, HANGUP, PING v.v.
- Trên Termux,
ffmpeg được dùng để chuyển M4A sang PCM trước khi xử lý
Cấu trúc bảo mật
- Mã hóa: dùng khóa được dẫn xuất bằng PBKDF2 (10.000 vòng lặp), bổ sung lớp bảo vệ ở tầng ứng dụng tách biệt với mã hóa truyền tải của Tor
- Thương lượng mã hóa: trao đổi lẫn nhau khi kết nối và khi thay đổi, nếu không khớp sẽ hiển thị màu đỏ ở phần header
- Đường truyền: liên lạc qua mạch Tor Hidden Service mà không lộ IP
- Khả năng chống phân tích lưu lượng: mẫu truyền không đều để tránh bị tạo dấu vân tay
- Xác thực: nếu khóa bí mật dùng chung không khớp thì giải mã sẽ thất bại
- Chữ ký HMAC-SHA256: mọi thông điệp đều kèm nonce ngẫu nhiên để chặn tấn công phát lại
- Giới hạn:
- Khóa bí mật phải được trao đổi qua một kênh an toàn bên ngoài
- Không có perfect forward secrecy, nếu lộ khóa thì có thể giải mã liên lạc trong quá khứ
- Không thể bảo vệ nếu an ninh ở endpoint bị xâm phạm
Giấy phép
1 bình luận
Ý kiến trên Hacker News
Cấu trúc dùng địa chỉ onion v3 đồng thời làm ID mật mã và tầng NAT traversal thật sự rất gọn gàng
Không cần STUN/TURN server hay hole punching, chỉ cần chạy script là Tor sẽ xử lý việc định tuyến
Tò mò không biết độ trễ thực tế khi truyền các đoạn âm thanh Opus khoảng 20KB qua Tor là bao nhiêu — tầm 2~3 giây hay còn tệ hơn nữa
Kiểu walkie-talkie buộc người dùng phải theo thứ tự “nghe-rồi-nói”, nên độ trễ không còn là vấn đề lớn
Với STUN, lưu lượng chỉ đi giữa hai thiết bị, còn VPN như Tor phải đi qua toàn bộ các máy chủ trung gian nên chi phí lưu lượng cao
Nếu VPS chỉ có giới hạn vài GB mỗi tháng thì đây là một ràng buộc lớn
Có lẽ tin nhắn văn bản sẽ tốt hơn. Dù vậy bản thân dự án vẫn rất ngầu
Thật thú vị khi thấy một ví dụ thực tế dùng onion service làm backend
Sắp tới cũng sẽ hỗ trợ Arti onion client, cho phép nhúng Tor trực tiếp vào ứng dụng dưới dạng thư viện Rust
Càng nhiều thử nghiệm như vậy thì cover traffic của mạng cũng sẽ tăng lên
Vì vậy trong các môi trường bị kiểm soát như mạng doanh nghiệp hay Wi‑Fi công cộng, gần như không thể dùng Tor
Nếu không cần thời gian thực thì phía nhận có thể thêm điều chỉnh tốc độ phát hoặc xử lý loại bỏ khoảng lặng để giảm độ trễ
Cũng có thể phát nhanh âm thanh do nhiều người gửi cùng lúc
Nếu đang dùng Opus thì có thể thử dùng cơ chế khôi phục lỗi DRED thử nghiệm làm codec
Có thể thiết kế theo kiểu gửi dữ liệu DRED trước để người nhận vẫn nghe được tối thiểu một phần giọng nói ngay cả khi Tor bị ngắt trong lúc truyền
Phần “cung cấp 21 thuật toán mã hóa” khá thú vị. Có vẻ hơi nhiều
Tôi muốn dùng AES-GCM nhưng chỉ với riêng OpenSSL thì việc xử lý xác thực khá khó
Bản thân Tor đã là E2EE, nên tầng này thực chất là mã hóa chồng thêm. Dù vậy tôi vẫn thích việc dữ liệu được mã hóa thêm một lần trước khi chạm tới mạng
Gần đây GitLab có cảm giác nhanh hơn, không biết là thật sự đã được tối ưu hay chỉ là ảo giác do lazy loading
Tôi thật sự thích dự án này. Người dùng nên trao đổi thông tin xác thực một cách an toàn như thế nào? Email PGP có ổn không?
Nếu có thể thì trao đổi trực tiếp khi gặp mặt, hoặc qua messenger bảo mật là lý tưởng nhất
hay để lại nó trong không gian vật lý (bảng đen, bảng thông báo, biển hiệu, v.v.)
Cách này cho phép kết nối với đối tượng trong tương lai ngay cả khi hoàn toàn offline
Tính năng loại trừ quốc gia (Exclude Countries) trong mạch Tor khá thú vị
Có cả preset như Five Eyes, Nine Eyes, Fourteen Eyes, và dùng ExcludeNodes cùng StrictNodes trong cấu hình torrc
Tò mò không biết nó có thực sự giúp cải thiện bảo mật hay không
Việc tồn tại node bị xâm phạm là có thật, nên dù có hiệu quả hay không thì việc có quyền kiểm soát vẫn rất đáng chú ý
Xét đến đặc tính độ trễ của Tor thì mô hình walkie-talkie là một thiết kế rất thông minh
Âm thanh hai chiều thời gian thực sẽ trở nên gượng gạo nếu độ trễ khứ hồi vượt quá 150ms, trong khi Tor cộng thêm 50~200ms cho mỗi hop
Nếu thiết kế theo kiểu store-and-forward thì không cần phải chống lại bản chất của mạng
Tôi tò mò không biết dùng codec nào — nếu không phải thời gian thực thì trade-off của Opus có thể sẽ khác
Tôi khá ngạc nhiên vì ngay cả ở 6kbps thì khả năng nhận diện giọng nói vẫn khá cao
Trên Termux không thể truy cập microphone, nên phải chuyển đổi âm thanh qua ứng dụng Termux API và ffmpeg
Chỉ với vài giây độ trễ cũng có thể giảm bớt những đoạn đối thoại thừa không cần thiết
Không biết liệu có thể cấu hình cái này thành kiểu liên lạc nhóm, để nhiều người cùng tham gia một kênh hay không
Trông khá vui nên tôi lướt qua code,
'|| true'xuất hiện 76 lần,'echo ""'50 lần,' [ '261 lần,'=$('90 lần'['không được khuyến nghị,nhưng muốn biết vì sao các pattern như
'|| true'lại bị xem là vấn đề. Tôi khá hay dùng nó cùngset -euo pipefailđể xử lý lỗi tùy chỉnh