4 điểm bởi GN⁺ 2025-12-14 | 2 bình luận | Chia sẻ qua WhatsApp
  • Phần mã cốt lõi của mạng Tor đang được chuyển từ ngôn ngữ C hiện có sang Arti dựa trên Rust
  • Trong mã C hiện tại tồn tại các lỗ hổng như tràn bộ đệm, use-after-free, hỏng bộ nhớ
  • Phiên bản mới Arti 1.8.0 loại bỏ các mẫu có thể dự đoán thông qua thiết kế lại thời gian chờ mạch, từ đó giảm nguy cơ bị theo dõi
  • Đã bổ sung lệnh mới để nhà vận hành onion service có thể tự động di chuyển khóa từ Tor dựa trên C sang Arti
  • Đợt chuyển đổi này là một bước tiến kỹ thuật quan trọng của dự án Tor nhằm cải thiện bảo mật và độ ổn định

Những thay đổi chính trong Arti 1.8.0

  • Trọng tâm của bản phát hành này là áp dụng làm lại thời gian chờ mạch (circuit timeout rework)

    • Circuit Dirty Timeout (CDT) của Tor trước đây điều khiển thời điểm đóng mạch bằng một bộ hẹn giờ duy nhất
    • Cách này có tính dự đoán, nên kẻ giám sát lưu lượng có thể nhận diện các mẫu
    • Arti 1.8.0 đưa vào thời gian chờ dựa trên mức sử dụng và các bộ hẹn giờ riêng lẻ, thay đổi để mạch kết thúc tại thời điểm ngẫu nhiên khi chấp nhận kết nối mới hoặc ở trạng thái nhàn rỗi
    • Nhờ đó giảm rủi ro lấy dấu vân tay (fingerprinting)
  • Bổ sung lệnh thử nghiệm arti hsc ctor-migrate mới

    • Nhà vận hành onion service có thể di chuyển restricted discovery keys từ Tor dựa trên C sang kho khóa (keystore) của Arti
    • Các khóa này được dùng cho xác thực máy khách, và lệnh mới hỗ trợ di chuyển tự động mà không cần thao tác thủ công
  • Các cải tiến bổ sung

    • Cải thiện nhiều thành phần nội bộ như kiến trúc định tuyến, triển khai giao thức, hỗ trợ bộ nhớ đệm thư mục, thiết lập trình lắng nghe cổng OR
    • Có thể xem chi tiết thay đổi trong nhật ký thay đổi chính thức của Arti 1.8.0

Bối cảnh của quá trình chuyển sang Rust

  • Mạng Tor đã được vận hành trên nền tảng ngôn ngữ C từ đầu những năm 2000
  • Tuy nhiên, codebase C liên tục phát sinh lỗ hổng bảo mật do vấn đề an toàn bộ nhớ
  • Vì vậy, dự án Tor đang thúc đẩy dự án viết lại Arti tận dụng tính an toàn bộ nhớ của Rust
  • Arti tái triển khai các chức năng của Tor bằng Rust, với mục tiêu tăng cường bảo mật, độ ổn định và khả năng bảo trì

Ý nghĩa kỹ thuật

  • Việc chuyển sang Rust là hướng đi củng cố tận gốc cấu trúc đảm bảo tính ẩn danh của Tor
  • Loại bỏ hành vi mạch có thể dự đoán và tự động hóa quản lý khóa góp phần nâng cao mức độ bảo vệ quyền riêng tư của người dùng
  • Các bản cập nhật liên tục của Arti được xem là tín hiệu thúc đẩy thay thế từng bước Tor dựa trên C

2 bình luận

 
GN⁺ 2025-12-14
Ý kiến trên Hacker News
  • Gần đây tôi đã thử bài test EFF's Cover Your Tracks, và kết quả cho thấy chỉ Tor Browser khi tắt JS mới hoàn toàn chống được fingerprinting.
    Ngay cả Tor khi bật JS cũng chỉ được đánh giá là chống được “một phần”, còn Firefox thì dù tắt JS vẫn không cho ra kết quả. Đây là một kết quả khá đáng sợ nên tôi cũng tò mò về thử nghiệm của những người khác

    • Công cụ này có lỗi trong cách đo mức độ bảo vệ fingerprinting. Nó lại chấm thấp các biện pháp bảo vệ dùng randomization, trong khi chỉ đánh giá cao cách binning.
      Ngược lại, những công cụ chỉ kiểm tra tính bền vững như fingerprinting.com/demo cũng có vấn đề.
      Tín hiệu cảnh báo thật sự là khi thất bại ở cả hai bài test
    • Khi test bằng Safari trên macOS, tôi nhận được kết quả là “bảo vệ mạnh trước web tracking”.
      Tuy vậy, dù Tor Browser chắc chắn rất dễ bị chú ý, nhưng chỉ từ bài test này thì khó kết luận rằng việc phân biệt fingerprint giữa các người dùng Tor là dễ
    • Tor Browser cố mở rộng các bucket fingerprint bằng những cách như làm tròn kích thước canvas. Cuối cùng bucket rộng nhất không thể tránh khỏi vẫn là chính “người dùng Tor”
    • Khi test với Tor Browser mặc định trên Debian, kết quả là 8.24 bit thông tin nhận dạng.
      Mức bảo mật càng cao thì số bit nhận dạng lại càng tăng, rồi khi tắt hẳn JS thì lại giảm xuống.
      Tức là vô hiệu hóa JS cho mức độ ẩn danh cao nhất
  • Giá mà Mozilla tiếp tục đẩy mạnh hơn việc chuyển sang Rust (oxidizing) của Firefox thì tốt biết mấy. Điều đó hẳn cũng sẽ tích cực cho hệ sinh thái Rust

    • Dù vậy, nhóm Chrome hiện vẫn đang tiếp tục đưa Rust vào
    • Ngay cả sau khi Mozilla sa thải hàng loạt lập trình viên Rust, tỷ lệ Rust trong mã nguồn Firefox vẫn tăng lên hơn 12%. Chromium thì dưới 4%, nên tương đối ít hơn.
      Nếu Rust cứ là “vũ khí bí mật” của Mozilla thì có khi việc phổ biến Rust còn bị chậm lại
    • Tôi nghĩ thất bại của dự án Servo không phải lỗi của Rust mà là do giới hạn nội bộ của Mozilla
  • Nếu việc dùng Rust giúp họ giải quyết vấn đề thì đó là một lựa chọn hợp lý.
    Ngôn ngữ là công cụ được chọn khác nhau tùy dự án, đội ngũ và bài toán

    • Nhiều khi tôi lại thấy hứng thú với những câu chuyện như tối ưu dependency hay cải thiện hiệu năng hơn là kiểu “chuyển đổi ngôn ngữ” này
    • Bài blog gốc đâu có chê C, nên tôi nghĩ cũng không cần phải lôi ra nhắc làm gì
    • Việc ngôn ngữ an toàn bộ nhớ vượt trội về mặt kỹ thuật trong khía cạnh bảo mật là điều quá rõ ràng.
      Đây không phải luận điệu fanboy Rust, mà giống vấn đề tâm lý phản kháng như thời các bác sĩ hay phi công từng chống lại checklist
    • Rust phù hợp với trường hợp này, nhưng lại không phù hợp với phần lớn các dự án UI.
      UI cần lặp nhanh và GC quan trọng, còn hiệu năng thì ít quan trọng hơn. Viết UI bằng Rust có thể thành địa ngục bảo trì
    • Tôi không thích kiểu tư duy “hãy viết lại mọi thứ bằng Rust”, nhưng với Tor thì Rust là công cụ phù hợp.
      Vì Tor là môi trường đa luồng nơi cả bảo mật lẫn hiệu năng đều quan trọng.
      Zig cũng có thể là một lựa chọn thay thế nhưng vẫn chưa đủ trưởng thành. Cách tiếp cận coi trọng determinism như Tigerbeetle cũng khá thú vị
  • Điều tôi bất mãn nhất với dự án Tor là tốc độ chậm. Chuyển sang Rust có lẽ cũng không làm nó nhanh hơn

    • Onion routing vốn có sự đánh đổi giữa quyền riêng tư và hiệu năng. Phần lớn nguyên nhân là độ trễ mạng
    • Việc Tor chậm là do thiếu số lượng node hơn là do mã nguồn. Bản mới sẽ chỉ an toàn hơn chứ không nhanh hơn
    • Lưu lượng phải đi vòng quanh Trái Đất hai lần nên về mặt vật lý sẽ có độ trễ. Rốt cuộc đó là giới hạn của tốc độ ánh sáng
    • Tor là để đảm bảo tính ẩn danh, chứ không phải để stream video
    • Tạo ra một mạng ẩn danh mà vẫn nhanh là điều cực kỳ khó. Dù vậy, Tor gần đây đã nhanh hơn rất nhiều so với trước kia, và nếu chỉ hoạt động bên trong onion thì mức ẩn danh còn cao hơn
  • Đợt chuyển sang Rust lần này được thực hiện nhờ tài trợ từ Zcash Community Grants. Ngay cả trong R&D tiền mã hóa cũng có thể có kết quả tốt

    • Điều này khiến tôi nhớ đến câu “Pecunia non olet” (tiền không có mùi), theo nghĩa tiền thì vẫn chỉ là tiền.
      Tuy vậy, cũng có thể đùa rằng tiền mã hóa còn tệ hơn cả nước tiểu
  • Tôi lo về rủi ro pháp lý khi vận hành exit node của Tor. Không biết có cách nào chỉ cho phép theo kiểu whitelist không

    • Nên tham khảo hướng dẫn vận hành exit node trên blog chính thức của Tor.
      Nếu có thể thì nên đăng ký dưới danh nghĩa tổ chức, và nếu chỉ muốn hỗ trợ an toàn hơn thì vận hành relay sẽ tốt hơn
    • Nếu muốn tránh bị chú ý về mặt pháp lý thì cũng có thể vận hành bridge.
      Hoặc chạy guard/middle relay cũng sẽ giúp ích rất nhiều cho mạng
    • Exit node thì khó thật, nhưng bạn cũng có thể đóng góp băng thông bằng cách host torrent Linux ISO hoặc máy chủ tile của OpenMap.
      Chỉ là cần chặn một số ASN của Trung Quốc. Có rất nhiều lưu lượng tải xuống giả
  • Việc đưa Rust vào giống như thay những cột gỗ trong một pháo đài cũ bằng thép.
    Mã C của Tor mang theo dấu vết của hàng chục năm thỏa hiệp về bảo mật và hiệu năng, nên Rust hóa dần dần là cách thực tế nhất để nâng mức an toàn
    Cốt lõi không phải là “viết lại toàn bộ” mà là thu hẹp các vùng không an toàn về bộ nhớ.
    Chỉ cần chuyển những phần parsing, crypto và ranh giới giao thức có mức rủi ro cao sang Rust thì Tor sẽ vững chắc hơn
    Cũng thú vị khi nghĩ rằng sau này nó có thể phát triển theo hướng pluggable transport dựa trên Rust hoặc runtime lai

  • Thực ra đây không phải quyết định mới gần đây. Tor đã bắt đầu dự án Arti viết bằng Rust từ năm 2020, và công bố Arti 1.0 vào năm 2022
    Họ cho rằng việc refactor dần codebase C là rất khó, đồng thời hài lòng với tốc độ phát triển, tính di động và khả năng thu hút contributor của Rust
    Gần đây theo Arti changelog, dự án vẫn đang được phát triển rất tích cực

    • Arti được thiết kế để có thể nhúng vào ứng dụng khác dưới dạng thư viện.
      Ví dụ, app nhắn tin có thể dùng mạng này mà không cần daemon Tor riêng. Tôi nghĩ đây mới là thay đổi lớn hơn
    • Cũng có ý kiến cho rằng tiêu đề đã bị cường điệu hóa. Nhóm Tor đã tiến hành rất thận trọng trong thời gian dài
    • Liên kết này là tài liệu tham khảo tốt hơn nhiều so với bài gốc. Chiến lược thể hiện đủ rõ để chặn trước tranh cãi kiểu “vì sao lại là Rust”
    • Cũng có người đặt câu hỏi liệu Rust có tính di động giữa các hệ điều hành tốt hơn C hay không
  • Tor không chỉ là một khái niệm đơn giản mà là cái tên bao gồm cả giao thức (onion routing), mạng lưới, và bản triển khai tham chiếu

    • Onion routing là giao thức, còn Tor là mạng và bản triển khai ở phía trên nó
    • Tor đúng là một sản phẩm có thể tải về, và bao gồm nhiều thành phần
    • Vì vậy cách nói “viết lại Tor bằng Rust” không hẳn là sai
  • Cũng có một đề xuất nửa đùa nửa thật rằng biết đâu biên dịch Tor bằng Fil-C sẽ có ngay tính an toàn bộ nhớ miễn phí

    • Nhưng dự án chuyển đổi này đã bắt đầu từ trước khi Fil-C xuất hiện