โครงการ Tor กำลังเปลี่ยนผ่านไปสู่ Rust
(itsfoss.com)- โค้ดแกนหลักของเครือข่าย Tor กำลังเปลี่ยนจากภาษา C เดิมไปเป็น Arti ที่พัฒนาบน Rust
- โค้ด C เดิมมีช่องโหว่ เช่น buffer overflow, use-after-free และ memory corruption
- เวอร์ชันใหม่ Arti 1.8.0 ได้ ออกแบบ circuit timeout ใหม่ เพื่อลบรูปแบบที่คาดเดาได้และลดความเสี่ยงจากการติดตาม
- มีการเพิ่มคำสั่งใหม่ที่ช่วยให้ ผู้ดูแล onion service สามารถ ย้ายคีย์โดยอัตโนมัติ จาก Tor ที่พัฒนาด้วย C ไปยัง Arti ได้
- การเปลี่ยนผ่านครั้งนี้ถือเป็นความก้าวหน้าทางเทคนิคสำคัญของโครงการ Tor เพื่อ ยกระดับความปลอดภัยและความเสถียร
การเปลี่ยนแปลงสำคัญใน Arti 1.8.0
-
หัวใจสำคัญของรีลีสนี้คือการนำ การปรับปรุง circuit timeout ใหม่ (circuit timeout rework) มาใช้
- Circuit Dirty Timeout (CDT) ของ Tor เดิมควบคุมช่วงเวลาปิดวงจรด้วยตัวจับเวลาเพียงตัวเดียว
- วิธีนี้คาดเดาได้ ทำให้ผู้สังเกตการณ์ทราฟฟิกสามารถระบุรูปแบบได้
- Arti 1.8.0 ได้นำ timeout ตามการใช้งานและตัวจับเวลาแยกเป็นรายวงจร มาใช้ ทำให้วงจรถูกปิด ในช่วงเวลาสุ่ม เมื่อรับการเชื่อมต่อใหม่หรืออยู่ในสถานะ idle
- ช่วยลดความเสี่ยงจาก การทำ fingerprinting
-
เพิ่ม คำสั่งทดลอง
arti hsc ctor-migrateใหม่- ผู้ดูแล onion service สามารถย้าย restricted discovery keys จาก Tor ที่พัฒนาด้วย C ไปยัง keystore ของ Arti ได้
- คีย์เหล่านี้ใช้สำหรับ การยืนยันตัวตนของไคลเอนต์ และคำสั่งใหม่นี้รองรับการย้ายอัตโนมัติโดยไม่ต้องทำงานด้วยตนเอง
-
การปรับปรุงเพิ่มเติม
- มีการปรับปรุงองค์ประกอบภายในหลายส่วน เช่น สถาปัตยกรรมการกำหนดเส้นทาง, การอิมพลีเมนต์โปรโตคอล, การรองรับ directory cache และ การตั้งค่า OR port listener
- รายละเอียดการเปลี่ยนแปลงเพิ่มเติมดูได้จาก บันทึกการเปลี่ยนแปลงอย่างเป็นทางการ ของ Arti 1.8.0
เบื้องหลังของการเปลี่ยนผ่านสู่ Rust
- เครือข่าย Tor ดำเนินงานบนพื้นฐานของ ภาษา C มาตั้งแต่ช่วงต้นทศวรรษ 2000
- อย่างไรก็ตาม โค้ดเบสภาษา C มี ปัญหาด้าน memory safety ทำให้เกิดช่องโหว่ด้านความปลอดภัยอย่างต่อเนื่อง
- ด้วยเหตุนี้ โครงการ Tor จึงกำลังผลักดัน โครงการเขียนใหม่ Arti โดยใช้ memory safety ของ Rust
- Arti คือการนำความสามารถของ Tor มาเขียนใหม่ด้วย Rust โดยมีเป้าหมายเพื่อเสริม ความปลอดภัย ความเสถียร และการบำรุงรักษา
นัยสำคัญทางเทคนิค
- การเปลี่ยนผ่านสู่ Rust เป็นทิศทางที่ช่วย เสริมโครงสร้างการรักษาความไม่ระบุตัวตนของ Tor ให้แข็งแกร่งยิ่งขึ้นในระดับพื้นฐาน
- การลบพฤติกรรมของวงจรที่คาดเดาได้และการทำให้การจัดการคีย์เป็นอัตโนมัติ ช่วย ยกระดับการปกป้องความเป็นส่วนตัวของผู้ใช้
- การอัปเดตอย่างต่อเนื่องของ Arti ถูกมองว่าเป็นสัญญาณที่เร่ง การแทนที่ Tor ที่พัฒนาด้วย C แบบค่อยเป็นค่อยไป
2 ความคิดเห็น
Arti 1.0.0 เปิดตัวแล้ว - อิมพลีเมนเทชัน Tor ที่เขียนด้วย Rust
ความคิดเห็นบน Hacker News
เมื่อเร็ว ๆ นี้ลองทดสอบ EFF's Cover Your Tracks แล้วพบว่า มีเพียง Tor Browser ที่ปิด JS เท่านั้นที่ต้านทานการทำฟิงเกอร์พรินต์ได้อย่างสมบูรณ์
แม้แต่ Tor ที่เปิด JS ก็ยังถูกประเมินว่าต้านทานได้แค่ ‘บางส่วน’ ส่วน Firefox นั้นถึงจะปิด JS ก็ยังได้ผลลัพธ์ที่ไม่ดีนัก เป็นผลที่ค่อนข้างน่ากลัวเลยอยากรู้ว่าคนอื่นทดลองแล้วได้ผลอย่างไรบ้าง
ในทางกลับกัน เครื่องมือที่ทดสอบแค่ความคงอยู่ของฟิงเกอร์พรินต์อย่าง fingerprinting.com/demo ก็มีปัญหาเช่นกัน
สัญญาณอันตรายที่แท้จริงคือกรณีที่ไม่ผ่านทั้งสองการทดสอบ
แต่ถึงแม้ Tor Browser จะสังเกตเห็นได้ชัดเจน ก็ยังยากจะสรุปจากการทดสอบนี้เพียงอย่างเดียวว่า การแยกแยะฟิงเกอร์พรินต์ ระหว่างผู้ใช้ Tor ทำได้ง่าย
ยิ่งเพิ่มระดับความปลอดภัย จำนวนบิตที่ใช้ระบุตัวตนกลับยิ่งเพิ่มขึ้น แต่พอปิด JS ทั้งหมดแล้วจึงลดลงอีกครั้ง
กล่าวคือ การปิด JS ให้ความไม่ระบุตัวตนสูงสุด
น่าเสียดายที่ Mozilla ไม่ได้เดินหน้าการ เปลี่ยนผ่านสู่ Rust (oxidizing) ของ Firefox ต่อให้มากกว่านี้ เพราะน่าจะส่งผลดีต่อ ecosystem ของ Rust ด้วย
ถ้า Rust ยังคงเป็น ‘อาวุธลับ’ ของ Mozilla ต่อไป บางทีการแพร่หลายของ Rust อาจกลับยิ่งช้าลงก็ได้
ถ้าการใช้ Rust ช่วยแก้ปัญหาของพวกเขาได้ ก็ถือเป็น ทางเลือกที่สมเหตุสมผล
ภาษาเป็นเครื่องมือที่ต้องเลือกให้เหมาะกับโปรเจกต์ ทีม และปัญหา
นี่ไม่ใช่คำอวยของแฟนบอย Rust แต่คล้ายกับแรงต้านในยุคที่แพทย์หรือนักบินไม่ยอมรับ checklist มากกว่า
งาน UI ต้องการการวนซ้ำที่รวดเร็วและ GC สำคัญกว่า ขณะที่ประสิทธิภาพไม่ใช่เรื่องหลัก หากเขียน UI ด้วย Rust ก็อาจกลายเป็นนรกของการดูแลรักษาได้
เพราะ Tor เป็น สภาพแวดล้อมมัลติเธรดที่ทั้งความปลอดภัยและประสิทธิภาพสำคัญพอ ๆ กัน
Zig อาจเป็นทางเลือกได้เช่นกัน แต่ยังไม่ mature พอ แนวทางที่ให้ความสำคัญกับ determinism แบบ Tigerbeetle ก็น่าสนใจ
ข้อบ่นใหญ่ที่สุดเกี่ยวกับ Tor คือ ความช้า การย้ายไป Rust ไม่น่าจะทำให้มันเร็วขึ้น
การเปลี่ยนผ่านสู่ Rust ครั้งนี้เกิดขึ้นได้ด้วยการสนับสนุนจาก Zcash Community Grants แสดงให้เห็นว่าแม้แต่งาน R&D ในวงการคริปโตก็อาจให้ผลลัพธ์ที่ดีได้
แม้จะมีการแซวต่อว่าคริปโตอาจแย่กว่าปัสสาวะเสียอีก
เวลารัน exit node ของ Tor ก็อดกังวลเรื่องความเสี่ยงทางกฎหมายไม่ได้ เลยสงสัยว่ามีวิธีจำกัดให้อนุญาตเฉพาะแบบ whitelist ได้หรือไม่
หากเป็นไปได้ แนะนำให้ จดทะเบียนในนามองค์กร และถ้าอยากช่วยแบบปลอดภัยกว่า การรัน relay จะดีกว่า
หรือจะรัน guard/middle relay ก็ช่วยเครือข่ายได้มากเช่นกัน
เพียงแต่ต้องบล็อก ASN บางส่วนของจีน เพราะมีทราฟฟิกดาวน์โหลดปลอมจำนวนมาก
การนำ Rust มาใช้ก็เหมือน การเปลี่ยนเสาไม้ของป้อมปราการเก่าเป็นเหล็กทีละต้น
โค้ด C ของ Tor สะสมทั้งร่องรอยของการประนีประนอมด้านความปลอดภัยและการปรับแต่งประสิทธิภาพมานานหลายสิบปี ดังนั้นการค่อย ๆ เปลี่ยนเป็น Rust จึงเป็นวิธีที่สมจริงที่สุดในการเพิ่มความปลอดภัย
แก่นสำคัญไม่ใช่ “เขียนใหม่ทั้งหมด” แต่คือ การลดพื้นที่ที่ยังไม่ memory-safe
หากย้ายเฉพาะส่วน parsing, cryptography และขอบเขตของโปรโตคอลที่มีความเสี่ยงสูงไปเป็น Rust ได้ Tor ก็จะแข็งแกร่งขึ้นมาก
อีกจุดที่น่าสนใจคืออนาคตอาจพัฒนาไปสู่ plugin transport ที่เขียนด้วย Rust หรือ hybrid runtime
จริง ๆ แล้วการตัดสินใจนี้ไม่ใช่เรื่องใหม่ Tor เริ่มโครงการ Arti ที่ใช้ Rust มาตั้งแต่ปี 2020 และประกาศ Arti 1.0 ในปี 2022
พวกเขามองว่าการรีแฟกเตอร์ codebase ฝั่ง C แบบค่อยเป็นค่อยไปทำได้ยาก และพอใจกับ ความเร็วในการพัฒนา ความสามารถในการพกพาข้ามแพลตฟอร์ม และการดึงดูดผู้ร่วมพัฒนา ของ Rust
แม้แต่ตอนนี้ จาก Arti changelog ก็ยังเห็นได้ว่ามีการพัฒนาอย่างต่อเนื่อง
ตัวอย่างเช่น แอปส่งข้อความสามารถใช้งานเครือข่ายนี้ได้โดยไม่ต้องมี Tor daemon แยกต่างหาก ซึ่งอาจเป็นการเปลี่ยนแปลงที่ใหญ่กว่าด้วยซ้ำ
Tor ไม่ได้เป็นแค่แนวคิด แต่เป็นชื่อที่ครอบคลุมทั้ง โปรโตคอล (onion routing), เครือข่าย และ reference implementation
มีข้อเสนอเชิงขำ ๆ ว่า ถ้า คอมไพล์ Tor ด้วย Fil-C ก็น่าจะได้ความปลอดภัยของหน่วยความจำมาแบบฟรี ๆ