การจัดเส้นทางแบบหัวหอม

การจัดเส้นทางแบบหัวหอม
(onion routing)
เป็นเทคนิคการสื่อสารแบบนิรนามผ่านเครือข่ายคอมพิวเตอร์
ในเครือข่ายหัวหอม ข้อความจะเข้ารหัสลับเป็นชั้น ๆ จึงอุปมาเหมือนกับชั้นหัวหอม
ข้อมูลที่เข้ารหัสจะส่งผ่านโหนด/สถานีรีเลย์ในเครือข่ายที่เรียกว่า เราเตอร์หัวหอม (onion router) โดยแต่ละสถานีจะ "ปอก" ชั้นหนึ่งออกเพื่อเปิดเอาข้อมูลที่จะส่งต่อไป
เมื่อชั้นสุดท้ายได้ถอดรหัสแล้ว ข้อความเดิมก็จะส่งไปยังระบบเป้าหมายจริง ๆ
ผู้ส่งได้สภาวะนิรนามก็เพราะสถานีในระหว่าง ๆ จะรู้ที่อยู่/ตำแหน่งของโหนดก่อนหน้าและโหนดที่ส่งต่อไปเท่านั้น
โดยไม่มีสถานีไหน ๆ ที่รู้ที่อยู่ของทั้งระบบต้นสายและระบบปลายทางทั้งสอง แม้ระบบปลายทางเองก็รู้เพียงแต่ที่อยู่ของสถานีสุดท้ายในเครือข่ายเท่านั้น
แต่ก็มีวิธีที่สามารถทำลายสภาวะนิรนามของเทคนิคเช่นนี้ได้ เช่น การวิเคราะห์เวลา ถ้าสามารถดักฟังข้อมูลทั้งขาเข้าขาออกจากเครือข่ายได้
== พัฒนาการและการทำให้เกิดผล ==
การจัดเส้นทางแบบหัวหอมได้พัฒนาขึ้นในกลางคริสต์ทศวรรษ 1990 ณ แล็บวิจัยกองทัพเรือสหรัฐโดยเจ้าหน้าที่คือ Paul Syverson, Michael G. Reed, และ David Goldschlag
เพื่อป้องกันการสื่อสารราชการลับของสหรัฐออนไลน์
แล้วต่อมาจึงพัฒนายิ่งขึ้นโดยสำนักงานโปรเจ็กต์งานวิจัยก้าวหน้ากระทรวงกลาโหม (DARPA) แล้วจดสิทธิบัตรโดยกองทัพเรือในปี 1998
ต่อมาในปี 2002 นักวิทยาการคอมพิวเตอร์ รอเจอร์ ดิงเกิลไดน์ (Roger Dingledine) และนิก แม็ทธิวสัน (Nick Mathewson) จึงร่วมมือกับ Syverson เพื่อพัฒนาซอฟต์แวร์การจัดเส้นทางแบบหัวหอมในรูปแบบที่รู้จักกันดีที่สุด คือ ทอร์ (Tor) ซึ่งในเวลานั้นเรียกว่า The Onion Routing project หรือ TOR project (โปรเจ็กต์ทอร์)
แล้วต่อมาในปี 2004 จึงได้ตีพิมพ์เอกสารการออกแบบของทอร์รุ่นสองในงานประชุม USENIX Security ครั้งที่ 13
ซึ่งกลายเป็นมูลฐานของการทำให้เกิดผลต่อมา
หลังจากที่แล็บวิจัยกองทัพเรือสหรัฐได้อนุญาตให้ใช้รหัสคำสั่งของทอร์ตามสัญญาเสรี
ดิงเกิลไดน์ แม็ทธิวสัน และบุคลากรอื่น ๆ อีก 5 ท่านก็ได้จัดตั้งโปรเจ็กต์ทอร์เป็นองค์การไม่แสวงหาผลกำไรในปี 2006 โดยได้รับการสนับสนุนทางการเงินจากมูลนิธิชายแดนอิเล็กทรอนิก (EFF) และองค์กรอื่น ๆ
== การดำเนินงาน ==
ให้สังเกตว่า การจัดเส้นทางแบบหัวหอมเป็นโพรโทคอลที่ดำเนินการและพัฒนาการขึ้นเรื่อย ๆ โดยโปรเจ็กต์ทอร์เป็นหลัก
เนื่องจากไม่มีเอกสารที่รวมสรุปการทำให้เกิดผลดังที่ใช้ในปัจจุบันแบบง่าย ๆ นอกเหนือจากเอกสารกำหนดคุณลักษณะทางเทคนิกต่าง ๆ
ข้อมูลในบทความนี้จึงมาจากบทความต่าง ๆ เริ่มตั้งแต่เอกสารแสดงแบบของโพรโทรคอลรุ่นสองของทอร์ในปี 2004
เนื้อความในบทความอาจจะจับใจความสำคัญต่าง ๆ ได้ แต่รายละเอียดบางอย่างอาจเคลื่อนคลาดจากดังที่ทำให้เกิดผลในปัจจุบัน
=== คำอธิบายคร่าว ๆ ===

การจัดเส้นทางแบบหัวหอม (onion routing) ทำให้เกิดผลโดยการเข้ารหัสลับในชั้นโปรแกรมประยุกต์ของโพรโทคอลสแตกทีซีพีที่ใช้ในการสื่อสาร โดยทำเป็นชั้น ๆ เหมือนกับของหัวหอม
คือระบบผู้ใช้จะสร้างวงจรการสื่อสารเสมือนผ่านสถานี/โหนดส่งต่อต่าง ๆ 3 สถานีซึ่งเลือกโดยสุ่มเป็นลำดับ ๆ การสร้างจะเพิ่มสถานีทีละสถานี ๆ เข้าในวงจรด้วยการสื่อสารที่เข้ารหัสลับ โดยสถานีส่งต่อแต่ละสถานี จะรู้แต่เลขที่อยู่ไอพีขาเข้าและขาออกของตน ๆ เท่านั้น และไม่มีสถานีไหนในระหว่าง ที่รู้ทั้งที่อยู่ของต้นสายและของปลายทางทั้งสอง แม้ในมุมมองของระบบปลายทาง ก็จะดูเหมือนว่าการสื่อสารเริ่มมาจากสถานีขาออกของเครือข่าย เมื่อกำลังสร้างวงจร ระบบผู้ใช้จะแลกเปลี่ยนกุญแจเข้ารหัสลับแบบสมมาตรโดยเฉพาะ ๆ กับโหนดส่งต่อแต่ละสถานี เพื่อเมื่อส่งข้อมูลไปยังปลายทาง ระบบผู้ใช้ก็จะเข้ารหัสข้อมูลเป็นชั้น ๆ ด้วยกุญแจที่แลกเปลี่ยนเริ่มตั้งแต่สถานีขาออก (สถานีสุดท้าย) ย้อนลำดับกลับมาจะถึงสถานีขาเข้า เมื่อข้อมูลส่งไปถึงแต่ละสถานี ๆ สถานีก็จะสามารถถอดรหัสชั้นที่เข้ากุญแจซึ่งตนได้แลกเปลี่ยน แล้วทำการที่สมควรเช่นส่งข้อมูลนั้นต่อไปได้ โดยที่ไม่สามารถรู้ข้อมูลที่ส่งต่อเพราะเข้ารหัสด้วยกุญแจที่ตนไม่มี สถานีขาออกจะเป็นผู้ถอดรหัสชั้นสุดท้ายแล้วส่งข้อมูลดั้งเดิมไปยังระบบปลายทางต่อไป
เมื่อระบบปลายทางส่งข้อมูลกลับไปยังระบบผู้ใช้ ข้อมูลก็จะวิ่งผ่านวงจรการสื่อสารเดียวกันโดยกลับลำดับคือจากสถานีขาออกจนไปถึงสถานีขาเข้า โดยสถานีส่งต่อแต่ละสถานี ๆ จะเข้ารหัสลับข้อมูลด้วยกุญแจที่ตนใช้ร่วมกับระบบผู้ใช้ ดังนั้น เมื่อสถานีขาเข้าส่งข้อมูลกลับไปถึงระบบต้นทาง ข้อมูลเซลล์จะเข้ารหัสไว้เป็นสามชั้น ซึ่งระบบผู้ใช้จะถอดรหัสด้วยกุญแจที่ตนใช้ร่วมกันสถานีส่งต่อต่าง ๆ

=== เซลล์ ===
เราเตอร์หัวหอมสื่อสารกับกันและกัน และกับระบบผู้ใช้ ผ่านการเชื่อมต่อกันด้วยทีแอลเอสและการเข้ารหัสด้วยกุญแจอายุสั้น ทีแอลเอสช่วยปกปิดข้อมูลในสายเชื่อมต่อให้เป็นความลับที่แม้เมื่อดักเก็บข้อมูลไว้ได้ ก็จะไม่สามารถถอดรหัสข้อมูลได้ในอนาคต (perfect forward secrecy) และป้องกันผู้โจมตีไม่ให้เปลี่ยนข้อมูลในสาย หรือปลอมตัวว่าเป็นเราเตอร์หัวหอม
ข้อมูลส่งผ่านเครือข่ายโดยมีหน่วยเป็นเซลล์ ซึ่งมีขนาดตายตัวคือ 512 ไบต์ และเมื่อเซลล์แต่ละเซลล์วิ่งผ่านวงจรเริ่มตั้งแต่ระบบผู้ใช้ เซลล์จะเข้ารหัสลับด้วยกุญแจทีแอลเอสของการเชื่อมต่อแบบทีแอลเอสในระหว่างระบบที่อยู่ต่อกันโดยตรง
ส่วนหัวของแต่ละเซลล์มีข้อมูลคือ
cirID บอกว่าเซลล์นี้สำหรับวงจรการสื่อสารไหน เพราะระบบสามารถมีวงจรวิ่งผ่านการเชื่อมต่อแบบทีแอลเอสเดียวกันหลายวงจร
CMD เป็นคำสั่งว่าสถานีส่งต่อควรทำอะไรต่อเซลล์ เพราะเซลล์แบ่งเป็นสามอย่างคือ เซลล์ควบคุม (control cell) หรือเซลล์ส่งต่อ/เซลล์รีเลย์ (relay cell) หรือเซลล์ส่งต่อเบื้องต้น (early relay cell) เซลล์ควบคุมอาจใช้เพื่อขอให้สถานีต่อกันตั้งวงจรหรือยุติวงจรเป็นต้น เซลล์ส่งต่อจะใช้สำหรับส่งข้อมูลการสื่อสารผ่านวงจรโดยมีข้อมูลต่อจากส่วนหัวของเซลล์ และเซลล์ส่งต่อเบื้องต้น ซึ่งเพิ่มขึ้นในปี 2008 ใช้ป้องกันไม่ให้ระบบผู้ใช้สร้างวงจรยาวเกินเพราะสร้างปัญหาการติดขัดในเครือข่ายและสามารถช่วยทำลายสภาพนิรนามได้
เซลล์ควบคุมสามารถมีคำสั่งรวมทั้ง
padding
create หรือ created ที่ใช้ในการสร้างวงจร
relay เพื่อกำหนดว่าเป็นเซลล์ส่งต่อ
destroy เพื่อรื้อวงจร
create fast หรือ created fast
netinfo
relay early เพื่อกำหนดเป็นเซลล์ส่งต่อที่อาจร่วมใช้กับ relay extend เพื่อป้องกันไม่ให้ระบบผู้ใช้สร้างวงจรยาวเกิน รีเลย์รุ่นหลังจาก 0.2.3.11-alpha จะปฏิเสธเซลล์ส่งต่อแบบ relay extend ที่ไม่มีคำสั่งเซลล์เป็น relay early ระบบผู้ใช้อาจส่งเซลล์ relay early ที่ไม่ใช่เซลล์ส่งต่อแบบ relay extend ในการส่งข้อมูลภายในเซลล์ต้น ๆ ของวงจรเพื่ออำพรางความยาวของวงจร
create2 หรือ created2
padding negotiate
สำหรับเซลล์ส่งต่อ ส่วนที่เป็นข้อมูลภายในเซลล์จะเข้ารหัสลับด้วยกุญแจอายุสั้นที่ร่วมใช้ระหว่างระบบผู้ใช้กับสถานีแต่ละสถานี ส่วนนี้ยังมีส่วนหัวรีเลย์ (relay header) ซึ่งอยู่ในลำดับต่อไปจากส่วนหัวของเซลล์ รวมทั้ง
StreamID - วงจรหนึ่งอาจมีกระแสข้อมูลหลายสาย ซึ่งอาจเป็นกระแสข้อมูลทีซีพีจากโปรแกรมผู้ใช้เดียวกันหรือจากหลายโปรแกรม
Digest เป็นผลรวมตรวจสอบ (checksum) ของข้อมูล ปกติใช้เช็คว่ามีการเปลี่ยนข้อมูลระหว่างระบบผู้รับและสถานีสุดท้ายในเครือข่ายหรือไม่
Len ขนาดของส่วน DATA
CMD เป็นคำสั่งรีเลย์สำหรับสถานีที่เป็นเป้าหมาย เช่น ให้ส่งส่วนที่เป็น DATA ต่อไปเป็นต้น
DATA เป็นส่วนข้อมูล เช่น ที่ส่งต่อไปยังระบบเป้าหมายเป็นต้น
เซลล์ส่งต่อสามารถมีคำสั่งดังต่อไปนี้คือ
relay data - ให้ส่งข้อมูล
relay begin - ให้เปิดสายข้อมูล (stream)
relay end - ให้ปิดสายข้อมูลโดยเรียบร้อย
relay teardown - ให้ปิดสายข้อมูลที่เสีย
relay connected - เพื่อแจ้งระบบผู้ใช้ว่า คำสั่ง relay begin ได้ทำสำเร็จแล้ว
relay extend และ relay extended - ให้ต่อวงจรไปอีกหนึ่งสถานี และเพื่อแจ้งว่าต่อสำเร็จแล้ว
relay truncate และ relay truncated - ให้รื้อส่วนหนึ่งของวงจร และเพื่อแจ้งว่ารื้อสำเร็จแล้ว
relay sendme - ใช้ในการควบคุมสายข้อมูลที่ติดขัด (congestion)
relay drop


== การสร้างวงจรเสมือน ==
เพื่อสร้างวงจรเสมือนหนึ่ง ๆ ระบบผู้ใช้จะขอรายการสถานีส่งต่อจากโหนดสารบบ
รายการที่ได้จะเซ็นชื่อโดยกุญแจระบุตัวระยะกลางของโหนดสารบบ และข้อมูลเกี่ยวกับสถานีจะเซ็นชื่อโดยกุญแจระบุตัวของสถานีที่สัมพันธ์กัน
ระบบผู้ใช้ปกติจะเลือกสถานี 3 สถานีจากรายการเพื่อสร้างวงจร
โดยมีการเลือกโหนดขาเข้าจากรายการสุ่มที่เลือกใช้นานเป็นพิเศษที่เรียกว่า สถานียาม (entry guards)
โหนดที่เลือกจะจับเรียงลำดับเป็น "โซ่" หรือ "วงจร" ที่จะส่งผ่านข้อมูล
เพื่อรักษาสภาพนิรนามของผู้ส่ง ไม่มีโหนดไหนในวงจรที่รู้ทั้งที่อยู่ของต้นสายและของปลายทางทั้งสอง แม้ในมุมมองของระบบปลายทาง ก็จะดูเหมือนว่าการสื่อสารเริ่มมาจากสถานีขาออกของเครือข่าย
เช่นกัน ไม่มีโหนดไหนในวงจรที่สามารถบอกว่ามีโหนดจำนวนเท่าไรในวงจรหรือรู้เส้นทางการส่งข้อมูลทั้งหมดภายในวงจร และโหนดสุดท้ายเท่านั้น ซึ่งเรียกว่าโหนดขาออก (exit node) จะสามารถกำหนดตำแหน่งตัวเองภายในลูกโซ่
เมื่อสร้างวงจร ระบบผู้ใช้จะต่อสถานีรีเลย์เข้ากับวงจรทีละสถานี ๆ ต่อ ๆ กัน โดยที่การสื่อสารระหว่างระบบต่าง ๆ จะทำผ่านทีแอลเอสอาศัยกุญแจระบุสถานีระยะยาวที่พบในสารบบ
การต่อสถานีมีรายละเอียดคือคือ (ดูประกอบรูป)
สำหรับสถานีแรก (OR1) ระบบผู้ใช้ขอให้สถานีสร้างวงจร (Create c1) โดยส่งข้อมูล (g^x1) ที่เข้ารหัสลับด้วยกุญแจหัวหอมของสถานีแรก ซึ่งเป็นส่วนแรกของโพรโทคอลต่อรองเพื่อกุญแจสมมาตรคือกุญแจอายุสั้น (ให้สังเกตว่า สถานีแรกรู้ที่อยู่ไอพีของระบบผู้ใช้ และสถานีแรกจะตอบสนองต่อคำขอได้ก็ต่อเมื่อรู้กุญแจหัวหอมส่วนตัวของตน)
สถานีแรกส่งคำตอบยอมรับการสร้างวงจร (Created c1) พร้อมข้อมูลที่กำหนดกุญแจอายุสั้น (g^y1 เป็นต้น) ที่จะใช้เพื่อเข้ารหัสข้อมูลเซลล์ระหว่างระบบผู้ใช้กับสถานีแรก
สำหรับสถานีสอง (OR2) ระบบผู้ใช้จะส่งคำขอให้ต่อวงจรเชื่อมกับสถานีที่สองไปยังสถานีแรก โดยรวมข้อมูลที่เข้ารหัสลับด้วยกุญแจหัวหอมของสถานีที่สอง (g^x2) ซึ่งเป็นส่วนแรกของโพรโทคอลต่อรองเพื่อกุญแจอายุสั้น พร้อมกับคำขอการต่อวงจร (Extend) ซึ่งระบุสถานีที่สองโดยเฉพาะ เข้าเป็นส่วนข้อมูลของเซลล์ แล้วเข้ารหัสลับส่วนข้อมูลด้วยกุญแจอายุสั้นที่ใช้ร่วมกับสถานีแรก (g^x1y1) ต่อจากนั้นจึงส่งคำขอให้ส่ง (Relay/Relay early) ไปยังสถานีแรก (ให้สังเกตว่า ถ้ามีใครสามารถถอดรหัสลับการสื่อสารโดยใช้ทีแอลเอสได้ แต่ไม่มีกุญแจอายุสั้นของสถานีแรก ก็จะไม่สามารถกำหนดได้ว่า เซลล์มีข้อมูลที่จะส่งต่อ หรือเป็นคำขอ/คำตอบรับ คือไม่สามารถรู้ว่าใครกำลังเดินเนินงานกิจกรรมอะไรจริง ๆ)
สถานีแรกถอดรหัสส่วนข้อมูลของเซลล์ด้วยรหัสอายุสั้นที่ใช้ร่วมกับระบบผู้ใช้ (g^x1y1) แล้วพบคำขอให้ต่อวงจร (Extend) จึงขอให้สถานีสองสร้างวงจร (Create c2) โดยส่งคำขอพร้อมกับข้อมูลเข้ารหัสลับ (g^x2) ที่มาจากระบบผู้ใช้ ให้สังเกตว่า สถานีแรกรู้ที่อยู่ไอพีของสถานีสอง แต่ไม่รู้ส่วนข้อมูลที่เข้ารหัสลับด้วยกุญแจหัวหอมของสถานีสองจากระบบผู้ใช้ ข้อมูลซึ่งเป็นส่วนแรกของโพรโทคอลต่อรองเพื่อกุญแจสมมาตรคือกุญแจอายุสั้น สถานีสองจะตอบสนองต่อคำขอได้ก็ต่อเมื่อรู้กุญแจหัวหอมส่วนตัวของตน และจากมุมมองของสถานีสอง คำขอการสร้างวงจรเหมือนกับมาจากสถานีแรก จึงไม่สามารถบอกได้ว่า เป็นการเพิ่มต่อวงจรจากระบบผู้ใช้
สถานีสองส่งคำตอบยอมรับการสร้างวงจร (Created c2) พร้อมข้อมูลที่กำหนดกุญแจอายุสั้น (g^y2 เป็นต้น) ที่จะใช้เพื่อเข้ารหัสส่วนข้อมูลของเซลล์ระหว่างระบบผู้ใช้และสถานีสอง โดยส่งไปยังสถานีหนึ่ง
สถานีแรกรวมการยอมรับการต่อวงจร (Extended) พร้อมกับข้อมูลที่กำหนดกุญแจอายุสั้น (g^y2 เป็นต้น) เข้าในส่วนข้อมูลของเซลล์ แล้วเข้ารหัสลับด้วยกุญแจอายุสั้นที่ใช้ร่วมกับระบบผู้ใช้ ต่อจากนั้นจึงส่งข้อมูลกลับไปยังระบบผู้ใช้โดยเป็นคำขอให้ส่ง (Relay) (ให้สังเกตว่า ถ้ามีใครสามารถถอดรหัสลับการสื่อสารโดยใช้ทีแอลเอสได้ แต่ไม่มีกุญแจอายุสั้นของสถานีแรก ก็จะไม่สามารถกำหนดได้ว่า เซลล์มีข้อมูลที่จะส่งต่อ หรือเป็นคำขอ/คำตอบรับ คือไม่สามารถรู้ว่าใครกำลังเดินเนินงานกิจกรรมอะไรจริง ๆ)
ตัวอย่างนี้ เป็นการสร้างวงจรที่มีโหนดส่งต่อเพียงแค่สองสถานีเท่านั้น การสร้างวงจรเพิ่มเพื่อให้มีโหนดส่งต่อ 3 สถานีก็ทำได้โดยนัยเดียวกัน คือระบบผู้ใช้สามารถส่งคำขอการต่อวงจร (Extend) เชื่อมกับสถานีสามไปยังสถานีสองโดยส่งผ่านสถานีหนึ่ง คล้ายกับลำดับ 3 ที่กล่าวมาแล้ว แต่เข้ารหัสลับส่วนข้อมูลของเซลล์สองครั้งด้วยกุญแจอายุสั้นที่ใช้ร่วมกับสถานีสอง (g^x2y2) แล้วด้วยกุญแจอายุสั้นที่ใช้ร่วมกับสถานีหนึ่ง (g^x1y1)
เพื่อความกระจ่าง อาจกล่าวโดยอีกวิธีหนึ่งก็คือ
โดยใช้การเข้ารหัสลับแบบกุญแจอสมมาตร ระบบผู้ใช้สามารถรับกุญแจสาธารณะ (identity key) เพื่อเริ่มการเชื่อมต่อแบบทีแอลเอสกับโหนดขาเข้า แล้วส่งข้อความผ่านทีแอลเอสซึ่งเข้ารหัสด้วยกุญแจทีแอลเอส เพื่อต่อรองสร้างกุญแจอายุสั้น (ephemeral key) อาศัยกุญแจหัวหอม (onion key) ของสถานี
โดยใช้การเชื่อมต่อที่เข้ารหัสกับโหนดขาเข้า (ด้วยกุญแจทีแอลเอส และกุญแจอายุสั้นเพื่อเข้ารหัสส่วนข้อมูลของเซลล์อีกทีหนึ่ง) ระบบผู้ใช้ส่งคำขอให้ต่อสถานีสองเข้ากับวงจรไปยังสถานีแรก ซึ่งสถานีแรกทำกับสถานีสองคล้ายในขั้นตอนที่หนึ่ง แต่ใช้ข้อมูลการต่อรองสร้างกุญแจอายุสั้นที่ได้จากระบบผู้ใช้ (เพราะสถานีแรกจะไม่รู้กุญแจอายุสั้นของสถานีที่สอง) โดยมุมมองของสถานีที่สอง นี่เป็นเหมือนการขอสร้างวงจรจากสถานีแรก จึงไม่สามารถบอกได้ว่าเป็นการต่อวงจรที่เริ่มจากระบบผู้ใช้
โดยใช้การเชื่อมต่อที่เข้ารหัสกับโหนดขาเข้า (ด้วยกุญแจทีแอลเอส และกุญแจอายุสั้นเพื่อเข้ารหัสส่วนข้อมูลของเซลล์อีกทีหนึ่ง) และการเชื่อมต่อที่เข้ารหัสกับโหนดกลาง (ด้วยกุญแจทีแอลเอสที่ใช้ร่วมกันระหว่างสถานีแรกและสอง และกุญแจอายุสั้นเพื่อเข้ารหัสส่วนข้อมูลของเซลล์อีกทีหนึ่ง) ระบบผู้ใช้ส่งคำขอให้ต่อสถานีสามเข้ากับวงจรไปยังสถานีสอง ซึ่งสถานีสองทำกับสถานีสามเหมือนในขั้นตอนที่หนึ่ง แต่ใช้ข้อมูลการต่อรองสร้างกุญแจอายุสั้นที่ได้จากระบบผู้ใช้ (เพราะสถานีสองจะไม่รู้กุญแจอายุสั้นของสถานีที่สาม) โดยมุมมองของสถานีที่สาม นี่เป็นเหมือนการขอสร้างวงจรจากสถานีสอง จึงไม่สามารถบอกได้ว่าเป็นการต่อวงจรที่เริ่มจากระบบผู้ใช้
เมื่อสร้างวงจรเสร็จแล้ว ระบบผู้ใช้ก็จะสามารถส่งข้อมูลผ่านอินเทอร์เน็ตไปยังระบบปลายทางอย่างนิรนามได้
สำหรับโปรแกรมผู้ใช้ที่ตั้งให้สื่อสารผ่านเครือข่ายหัวหอม ไม่ว่าจะเป็นโปรแกรมเดียว (เช่นทอร์เบราว์เซอร์) หรือหลายโปรแกรม สายข้อมูลทีซีพีต่าง ๆ ที่โปรแกรมผู้ใช้สร้างก็จะส่งผ่านวงจรเดียวกัน แต่ระบบผู้ใช้จะตั้งวงจรใหม่ทุก ๆ 10 นาที ดังนั้น สายข้อมูลใหม่ที่ตั้งขึ้นก็จะใช้วงจรใหม่ ส่วนสายข้อมูลเก่าที่ยังดำเนินการอยู่ก็จะคงอยู่ในวงจรเดิมจนกว่าจะเสร็จ ดังนั้น ในระบบผู้ใช้ อาจมีการส่งข้อมูลผ่านเครือข่ายหัวหอมเป็นหลายวงจร แต่ละวงจรอาจมีสายข้อมูลหลายสาย โดยอาจเป็นสายข้อมูลจากโปรแกรมชุดเดียวหรือหลายโปรแกรม การเปลี่ยนวงจรการสื่อสารเช่นนี้ โดยมีสถานีขาออกที่ต่าง ๆ กัน จะทำให้ระบบปลายทางสัมพันธ์การกระทำของผู้ใช้ที่เกิดในเวลาต่าง ๆ ได้ยากขึ้น
=== การส่งข้อมูล ===

เมื่อวงจรสร้างขึ้นแล้ว ระบบผู้ใช้สามารถเริ่มส่งรับข้อมูลผ่านเครือข่ายนิรนามที่เข้ารหัสลับด้วยกุญแจสองตัวคือ กุญแจอายุสั้นที่ใช้เข้ารหัสเพียงส่วนข้อมูลของเซลล์เป็นชั้น ๆ และกุญแจทีแอลเอสที่ใช้เข้ารหัสเซลล์ทั้งหมดเมื่อส่งผ่านเครือข่ายอินเทอร์เน็ตระหว่างสถานี ๆ โดยที่ไม่มีสถานีส่งต่อใด ๆ รวมทั้งระบบปลายทาง ที่สามารถรู้ทั้งที่อยู่ไอพีของระบบผู้ใช้และของระบบปลายทางทั้งสอง และมีสถานีทางออกเท่านั้น ที่สามารถเข้าถึงข้อมูลดั้งเดิมที่ส่งในระหว่างต้นสายและปลายทาง ยกเว้นถ้าผู้ใช้ใช้โปรแกรมที่เข้ารหัสข้อมูลจากต้นจนถึงปลาย เช่น ทอร์เบราว์เซอร์เมื่อสื่อสารผ่านเอชทีทีพีเอสเป็นต้น
อนึ่ง เพราะกุญแจที่ใช้เข้ารหัสลับเป็นกุญแจชั่วคราว จึงหมายความว่า แม้ถ้ามีใครดักเก็บข้อมูลที่ส่งผ่านระหว่างระบบต่าง ๆ แล้วโจมตีเข้าถึงระบบเหล่านั้นได้ในภายหลัง ก็จะไม่สามารถถอดรหัสข้อมูลเหล่านั้นได้เพราะระบบได้ทิ้งกุญแจไปแล้ว
การรับส่งข้อมูลมีรายละเอียดคือ (ดูรูป)
ระบบผู้ใช้สร้างเซลล์ส่งต่อพร้อมคำสั่งรีเลย์ relay begin โดยมีระบบปลายทางพร้อมหมายเลขช่องทาง (website:80) เป็นข้อมูลรีเลย์ แล้วเข้ารหัสส่วนข้อมูลของเซลล์ด้วยกุญแจอายุสั้นที่ใข้กับสถานีส่งต่อต่าง ๆ เริ่มจากสถานีขาออกกลับมาถึงสถานีขาเข้า แล้วส่งเซลล์รีเลย์ผ่านการเชื่อมต่อทีแอลเอส (และดังนั้นเข้ารหัสลับด้วยกุญแจทีแอลเอส) ไปยังสถานีขาเข้า
สถานีขาเข้าถอดรหัสส่วนข้อมูลของเซลล์ที่ได้รับด้วยกุญแจอายุสั้นที่ตนใช้ร่วมกันระบบผู้รับ แล้วส่งข้อมูลต่อผ่านเซลล์ที่ตนสร้างผ่านการเชื่อมต่อแบบทีแอลเอสไปยังสถานีขาออก
สถานีขาออกถอดรหัสส่วนข้อมูลของเซลล์ที่ได้รับด้วยกุญแจอายุสั้นที่ตนใช้ร่วมกันระบบผู้รับ แล้วพบคำสั่งรีเลย์ relay begin จึงเริ่มการเชื่อมต่อแบบทีซีพีกับระบบปลายทางผ่านช่องทาง 80 แล้วสร้างเซลล์ระบุคำตอบรับการเชื่อมต่อที่สำเร็จโดยเข้ารหัสลับส่วนข้อมูลด้วยกุญแจอายุสั้น แล้วส่งกลับไปยังสถานีขาเข้าผ่านทีแอลเอส
สถานีขาเข้าสร้างเซลล์ส่งต่อโดยเข้ารหัสส่วนข้อมูลที่มาจากสถานีขาออกด้วยกุญแจอายุสั้นของตน แล้วส่งผ่านทีแอลเอสไปยังระบบผู้รับ
ระบบผู้รับถอดรหัสส่วนข้อมูลเซลล์ที่ได้รับด้วยกุญแจสองตัวที่ใช้ร่วมกันสถานีส่งต่อทั้งสอง แล้วพบว่า การเชื่อมต่อแบบทีซีพีกับระบบปลายทางสำเร็จแล้ว และจึงดำเนินการสื่อสารกับระบบปลายทางในนัยเดียวกันต่อไป
== วิธีการโจมตี ==
ผู้ออกแบบการจัดเส้นทางแบบหัวหอมได้พิจารณาการโจมตีและผลต่อระบบหลายอย่าง (ปี 2004) รวมทั้งที่จัดว่าเป็นการดักฟังเฉย ๆ (passive attack) และแบบต้องทำการอย่างแอ๊กถีฟ (active attack)
ต่อไปนี้เป็นตัวอย่างของการโจมตีที่ได้พิจารณา
=== แบบดักฟังเฉย ๆ ===
การโจมตีแบบดักฟังเฉย ๆ (passive attack) รวมทั้ง
การเฝ้าดูรูปแบบการสื่อสาร (observing user traffic patterns) เพราะข้อมูลการสื่อสารของวงจรเข้ารหัสลับอยู่ จึงไม่สามารถตรวจดูโดยตรงภายในวงจรได้ แต่สามารถวิเคราะห์รูปแบบการสื่อสารได้ ทั้งในการรับและส่งข้อมูล
การตรวจดูข้อมูล (observing user content) แม้ข้อมูลทางด้านระบบผู้ใช้จะเข้ารหัสลับ แต่การสื่อสารจากสถานีขาออกกับระบบปลายทางอาจจะไม่ได้เข้ารหัส ถึงแม้การกรองข้อมูลที่ส่งเข้าเครือข่ายอาจไม่ใช่เป้าหมายของโปรเจ็กต์โดยตรง แต่ผู้ใช้อาจใช้โปรแกรมเสริมเช่น Prixvoxy ที่ช่วยกรองข้อมูล ไม่ให้ส่งข้อความซึ่งไม่ได้เข้ารหัสลับที่เปิดเผยตนได้
รูปแบบการสื่อสารต่างกันเนื่องจากตั้งค่าไม่เหมือนกัน (option distinguishability) เนื่องจากพร็อกซีหัวหอมสามารถตั้งค่าต่าง ๆ กันได้ ผู้ใช้การตั้งค่าแบบที่มีจำนวนน้อยอาจเสียสภาพนิรนาม
การสัมพันธ์เวลาระหว่างต้นกับปลาย (end-to-end timing correlation) ระบบสามารถปิดบังข้อมูลทางเวลาได้เพียงเล็กน้อยเท่านั้น ปฏิปักษ์ที่สามารถดูรูปแบบการสื่อสารทั้งที่ต้นสายและปลายทาง จะมีโอกาสยืนยันการสื่อสารระหว่างต้นสายปลายทางได้สูงมาก วิธีป้องกันดีสุดก็คือปิดบังการเชื่อมต่อกันระหว่างระบบผู้ใช้กับสถานีขาเข้า ซึ่งอาจทำได้โดยดำเนินการระบบผู้ใช้และสถานีรีเลย์ในคอมพิวเตอร์เดียวกัน หรือในคอมพิวเตอร์ต่างกันแต่อยู่หลังไฟร์วอลล์เดียวกัน ซึ่งทำให้การโจมตีระบบได้จะต้องแยกแยะการสื่อสารที่เริ่มมาจากที่อื่นหรือเริ่มมาจากระบบผู้ใช้ โดยผู้โจมตีซึ่งจะทำได้ก็คือผู้ที่สามารถทำการได้ทั่วโลก (เช่น หน่วยจารกรรมที่มีทรัพยากรมาก) แต่ผู้ที่มีทรัพยากรจำกัดไม่สามารถทำได้
การสัมพันธ์ขนาดข้อมูลระหว่างต้นกับปลาย (end-to-end size correlation) คือการนับเพียงแค่แพ็กเกต (กลุ่มข้อมูล) ซึ่งส่งที่ต้นสายและรับ ที่ปลายทางก็อาจสามารถสัมพันธ์การสื่อสารได้แล้ว แต่การที่ระบบผู้ใช้สามารถสื่อสารออกนอกวงจรก่อนจะถึงสถานีสุดท้ายอาจช่วยลดระดับปัญหานี้ วิธีการป้องกันและลักษณะผู้โจมตีจะคล้ายกับในปัญหาการสัมพันธ์เวลาระหว่างต้นกับปลาย
การระบุลักษณะเฉพาะของเว็บไซต์ (website fingerprinting) ผู้โจมตีอาจสร้างฐานข้อมูลของเว็บไซต์ต่าง ๆ ที่ระบุขนาดไฟล์ที่เข้าถึง และรูปแบบการสื่อสารเพื่อเข้าถึงไฟล์ แล้วสามารถยืนยันการสื่อสารกับเว็บไซต์ของระบบผู้ใช้โดยใช้ข้อมูลนั้น ๆ โดยมีผู้ชำนาญบางพวกที่วิเคราะห์ว่า ทำได้ยากเนื่องจากในโลกจริง ๆ ผู้โจมตีจะต้องสามารถแยกแยะหน้าเว็บเป็นจำนวนมากโดยอาศัยเพียงแค่รูปแบบการสื่อสาร
=== แบบแอ๊กถีฟ ===
การโจมตีแบบแอ๊กถีฟ (active attack) รวมทั้ง
การได้กุญแจ (compromise key) ผู้โจมตีที่ได้กุญแจทีแอลเอสสามารถมองเห็นเซลล์ควบคุมและเซลล์รีเลย์ที่ยังเข้ารหัสลับอีกชั้นสำหรับวงจรทุก ๆ วงจรที่วิ่งผ่านการเชื่อมต่อแบบทีแอลเอสนั้น ๆ แต่จะดูข้อมูลที่เข้ารหัสในเซลล์รีเลย์ได้ก็จะต้องรู้กุญแจอายุสั้นต่าง ๆ ที่สมควรด้วย ซึ่งอาจเป็นเรื่องทำได้ยากโดยเฉพาะเมื่อกุญแจชั่วคราวเหล่านี้จะทิ้งไปเมื่อการเชื่อมต่อหรือวงจรยุติลง
iterated compromise - ผู้โจมตีที่ทำการต่อระบบต่าง ๆ ต่อ ๆ กันได้ อาจเอาชนะการป้องกันของสถานีส่งต่อ ไม่ว่าจะโดยการแฮ็ก โดยกฎหมาย หรือโดยวิธีการนอกกฎหมาย ต่อ ๆ กันจนถึงระบบผู้ใช้ แต่ก็จะต้องทำการให้สำเร็จก่อนวงจรจะยุติลง ไม่เช่นนั้นแล้ว กุญแจที่เข้ารหัสการสื่อสารก็จะทิ้งไปหมดแล้ว นอกจากนั้น การสร้างวงจรเพื่อให้มีสถานีส่งต่อที่อยู่ในเขตกฎหมายต่าง ๆ กันก็จะทำให้การบังคับตามกฎหมายทำได้ยากขึ้น
การดำเนินการระบบปลายทาง - ผู้โจมตีที่ดำเนินการระบบบริการเว็บไซต์สามารถรู้รูปแบบการสื่อสารกับระบบต้นทางได้ง่าย ๆ หรือสามารถตอบสนองโดยมีรูปแบบโดยเฉพาะ ๆ ซึ่งทำให้การโจมตีแบบจากต้นสายจนถึงปลายทางทำได้ง่ายขึ้น นอกจากนั้น ระบบอาจจะชักจูงให้ระบบต้นสายไม่ว่าจะโดยโพรโทคอลหรือผ่านการทำงานโปรแกรม ให้ส่งข้อมูลเปิดเผยตนเองได้ วิธีการป้องกันและลักษณะผู้โจมตีจะคล้ายกับในปัญหาการสัมพันธ์เวลาระหว่างต้นกับปลาย
การดำเนินงานพร็อกซีหัวหอม - ในสถานการณ์ที่สถาบันต้องการควบคุมการใช้การจัดเส้นทางแบบหัวหอม แล้วให้ใช้พร็อกซีซึ่งดำเนินการในคอมพิวเตอร์ต่างหาก (แทนที่จะดำเนินการแบบปกติในคอมพิวเตอร์ของผู้ใช้) การแฮ็กระบบที่ดำเนินการพร็อกซีได้จะทำให้สามารถทำการต่าง ๆ ต่อการเชื่อมต่อผ่านพร็อกซีในอนาคตทั้งหมด
การโจมตีสถานีที่ลอบฟังไม่ได้เพื่อให้บริการไม่ได้ (DoS non-observed nodes) ผู้โจมตีที่สามารถตรวจดูเครือข่ายเป็นบางส่วนจะได้ข้อมูลเพิ่มขึ้นถ้าโจมตีสถานีส่งต่ออื่น ๆ เพื่อไม่ให้ให้บริการได้ ทำให้ผู้ใช้มีโอกาสเพิ่มในการสร้างวงจรผ่านสถานีที่ผู้โจมตีควบคุมหรือสามารถตรวจดูการใช้ได้
การดำเนินงานสถานีส่งต่อ - นอกจากจะสามารถตรวจดูข้อมูลที่ส่งผ่านสถานีของตน ผู้โจมตียังสามารถเปลี่ยนรูปแบบการสื่อสารผ่านสถานีอื่น ๆ แต่จะสามารถทำลายสภาพนิรนามได้ก็ต่อเมื่อเป็นสถานีส่งต่อแรกสุดและสุดท้าย โดยอาจเพิ่มโอกาสการเชื่อมต่อกับสถานีของตนโดยดำเนินการสถานีขาออกที่ให้บริการอย่างมีข้อจำกัดน้อย หรือทำลายความน่าเชื่อถือของสถานีอื่น ๆ
การส่งเซลล์ต่อโดยมีกำหนดเวลาโดยเฉพาะ ๆ - เป็นการเพิ่มสมรรถภาพวิธีการตรวจดูเวลาของการส่งข้อมูลแบบดักฟังเฉย ๆ ดังที่ได้กล่าวมาแล้ว
การโจมตีโดยการติดป้าย - สถานีโจมตีอาจติดป้ายเซลล์โดยเปลี่ยนข้อมูล แต่การตรวจดูบูรณภาพของข้อมูลก็จะป้องกันการโจมตีเยี่ยงนี้ได้
การเปลี่ยนข้อมูลสำหรับโพรโทคอลที่ไม่พิสูจน์ตัวจริง - คือ สถานีขาออกที่อยู่ใต้การควบคุมของผู้โจมตีสามารถปลอมตัวเป็นระบบบริการปลายทาง ดังนั้น ผู้ใช้ควรเลือกใช้โพรโทคอลที่มีการพิสูจน์ตัวจริง (เช่น เอชทีทีพีเอสแทนที่จะใช้เอชทีทีพี)
การโจมตีด้วยการเล่นซ้ำ (replay attack) - สำหรับโพรโทคอลของทอร์ การเริ่มจับมือโดยการเล่นซ้ำข้อมูลที่ดักเก็บมาก่อนจะมีผลให้สร้างกุญแจอายุสั้นที่ต่างกัน ทำให้ข้อมูลที่ได้ดักเก็บที่เหลือไม่สามารถใช้อีก
การโจมตีทำลายชื่อเสียง - ผู้โจมตีสามารถใช้เครือข่ายทำการที่ไม่ชอบ เป็นการทำลายชื่อเสียง เพื่อบังคับให้ผู้ดำเนินงานหยุดปฏิบัติการ นโยบายของสถานีขาออกจะช่วยลดปัญหานี้ แต่โดยที่สุดแล้ว เครือข่ายต้องมีอาสาสมัครที่สามารถอดทนต่อความกดดันทางการเมือง/ทางกฎหมายได้
การกระจายโปรแกรมที่ถูกบ่อนทำลาย - ผู้โจมตีสามารถหลอกให้ผู้ใช้หรือสถานีใช้ซอฟต์แวร์ที่ถูกแก้ไขไม่ให้รักษาสภาพนิรนาม ทอร์ใช้วิธีเซ็นชื่อซอฟต์แวร์ที่แจกจ่าย โดยมีรายการจากโหนดสารบบที่แสดงรุ่นของซอฟต์แวร์ที่เชื่อว่าปลอดภัย นอกจากนั้นเพื่อกันปัญหาจากภายในโปรเจ็กต์ทอร์เอง ยังเปิดให้ดูรหัสต้นทางทั้งหมด สนับสนุนให้มีการตรวจรหัสต้นทางบ่อย ๆ และเตือนผู้ใช้ไม่ให้เชื่อใจซอฟต์แวร์ที่ไม่เปิดเผยรหัสต้นทาง
== จุดอ่อน ==
=== การวิเคราะห์เวลา ===
เหตุผลหนึ่งที่การเชื่อมต่ออินเทอร์เน็ตปกติจะไม่ได้สภาวะนิรนาม ก็เพราะผู้ให้บริการสามารถติดตามและลงบันทึกการเชื่อมต่อกันระหว่างคอมพิวเตอร์
ยกตัวอย่างเช่น เมื่อผู้ใช้เยี่ยมชมเว็บไซต์ ข้อมูลเองอาจจะปลอดภัยเพราะเชื่อมต่อด้วยเอชทีทีพีเอส ดังนั้น คนพวกอื่นจะไม่สามารถรู้รหัสผ่าน อีเมล และเนื้อความอื่น ๆ แต่ก็ยังมีบันทึกเกี่ยวกับการเชื่อมต่อเอง เช่น ต่อเมื่อไร มีข้อมูลส่งผ่านแค่ไหน
การจัดเส้นทางแบบหัวหอมจะสร้างทางที่คลุมเครือระหว่างคอมพิวเตอร์สองเครื่อง เพื่อไม่ให้ระบบผู้ใช้เชื่อมต่อกับเว็บไซต์โดยตรง
แม้จะยังมีบันทึกการเชื่อมต่อกันระหว่างคอมพิวเตอร์และก็ยังสามารถวิเคราะห์การสื่อสารเนื่องกับบันทึกการเชื่อมต่อเช่นนั้น แล้วพยายามเชื่อมเวลาและการส่งข้อมูลกับการเชื่อมต่อไปยังผู้รับหนึ่ง ๆ
ยกตัวอย่างเช่น อาจจะเห็นบุคคลส่งข้อมูล 51 กิโลไบต์ถ้วนไปยังคอมพิวเตอร์ที่ไม่รู้จัก 3 วินาทีก่อนคอมพิวเตอร์อีกเครื่องที่ไม่รู้จักก็ส่งข้อมูล 51 กิโลไบต์ถ้วนเช่นกันไปยังเว็บไซต์หนึ่งโดยเฉพาะ
ปัจจัยที่อาจช่วยให้วิเคราะห์การสื่อสารได้รวมทั้งโหนดขัดข้องแล้วออกจากเครือข่าย
และโหนดส่งต่อที่ถูกแฮ็กให้เก็บบันทึกการเชื่อมต่อทุก ๆ ครั้งที่มีการสร้างวงจรใหม่
การจัดเส้นทางแบบกระเทียม (Garlic routing) เป็นการจัดเส้นทางแบบหัวหอมอีกอย่างหนึ่งที่ใช้ในเครือข่ายไอทูพี และเข้ารหัสลับข้อความหลายข้อความเข้าด้วยกันเพื่อทำการวิเคราะห์การสื่อสารเช่นนี้ให้ยากขึ้น
และเพื่อเพิ่มความเร็วในการถ่ายโอนข้อมูล
=== โหนดขาออก (Exit node) ===
แม้ข้อความที่ส่งจะเข้ารหัสลับเป็นชั้น ๆ แต่หน้าที่ของโหนดขาออก (exit node) ที่เป็นโหนดท้ายสุดในโซ่ ก็คือการถอดรหัสลับชั้นสุดท้ายแล้วส่งข้อความไปให้ผู้รับ
ดังนั้น โหนดขาออกที่ถูกแก้ก็อาจจะเก็บข้อมูลที่ส่ง ซึ่งอาจมีรหัสผ่าน ข้อความส่วนตัว เลขบัญชีธนาคาร หรือข้อมูลส่วนตัวอื่น ๆ
ในปี 2007 นักวิจัยชาวสวีเดนได้ใช้การโจมตีคล้าย ๆ กันนี้แล้วสามารถเก็บรหัสผ่านของบัญชีอีเมลกว่า 100 บัญชีของสถานทูตประเทศต่าง ๆ
จุดอ่อนโหนดขาออกจะคล้ายกับที่พบในเครือข่ายไร้สายที่ไม่ได้ทำให้ปลอดภัย คือข้อมูลที่ส่งโดยผู้ใช้เครือข่ายอาจถูกดักฟังโดยผู้ใช้อีกคนหนึ่งหรือโดยผู้ดำเนินการเราเตอร์
โดยปัญหาทั้งสองนี้สามารถแก้ได้โดยใช้การเชื่อมต่อที่เข้ารหัสลับจากต้นถึงปลาย เช่น เอสเอสแอลหรือเอชทีทีพีเอส
ซึ่งทำให้แม้แต่ผู้ส่งต่อลำดับสุดท้ายก็ไม่สามารถรู้ข้อความดั้งเดิมได้
== ดูเพิ่ม ==
วิทยาการเข้ารหัสลับ
ตุ๊กตาแม่ลูกดก
พร็อกซีเซิร์ฟเวอร์
Tox - การทำให้เกิดผลการจัดเส้นทางแบบหัวหอม
Tribler - การทำให้เกิดผลการจัดเส้นทางแบบหัวหอม
== เชิงอรรถและอ้างอิง ==
== แหล่งข้อมูลอื่น ==
Onion-Router.net - site formerly hosted at the Center for High Assurance Computer Systems of the U.S. Naval Research Laboratory
Sylverson, P. F.; Goldschlag, D. M.; Reed, M. G. (1997). "Anonymous Connections and Onion Routing". IEEE Symposium on Security and Privacy.  - The original paper from the Naval Research Laboratory
 
เครือข่ายนิรนาม
การจัดเส้นทาง
เทคโนโลยีหลีกเลี่ยงการตรวจพิจารณาอินเทอร์เน็ต