Magic Wormhole: เทคโนโลยีถ่ายโอนไฟล์ระหว่างคอมพิวเตอร์อย่างปลอดภัย
(github.com/magic-wormhole)- Magic Wormhole เป็นไลบรารีและเครื่องมือบรรทัดคำสั่ง
wormholeสำหรับย้ายไฟล์ ไดเรกทอรี และข้อความสั้น ๆ ขนาดเท่าใดก็ได้อย่างปลอดภัยจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง - ปลายทางทั้งสองฝั่งของการถ่ายโอนจะถูกระบุด้วย wormhole code เดียวกัน โดยทั่วไปอุปกรณ์ผู้ส่งจะสร้างโค้ดและแสดงผล แล้วให้นำไปกรอกบนอุปกรณ์ผู้รับ
- โค้ดใช้รายการคำที่สั้นและออกเสียงได้ง่ายสำหรับมนุษย์ และฝั่งผู้รับมี การเติมข้อความอัตโนมัติด้วย Tab สำหรับคำในโค้ด จึงมักพิมพ์เพียงไม่กี่ตัวอักษรก็พอ
- wormhole code เป็นแบบ ใช้ครั้งเดียว ไม่จำเป็นต้องจดจำ และโปรแกรมใช้เซิร์ฟเวอร์สองตัวแยกกันคือ mailbox server และ transit relay
- Magic Wormhole เผยแพร่ภายใต้ สัญญาอนุญาต MIT รองรับ Python 3.10 ขึ้นไป และทดสอบถึงเวอร์ชัน 3.12
ความสามารถที่ Magic Wormhole มีให้
- Magic Wormhole เป็นโครงการที่มีเป้าหมายเพื่อ “ส่งจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่งอย่างปลอดภัย”
- แพ็กเกจนี้มีให้ในสองรูปแบบ
-
ไลบรารี
- เครื่องมือบรรทัดคำสั่ง
wormhole - สิ่งที่ถ่ายโอนได้มีดังนี้
- ไฟล์ขนาดใดก็ได้
- ไดเรกทอรี
- ข้อความสั้น ๆ
- เครื่องมือบรรทัดคำสั่ง
-
วิธีถ่ายโอนที่อิงกับ wormhole code
- เอ็นด์พอยต์ทั้งสองจะถูกระบุด้วย wormhole code เดียวกัน
- ลำดับการทำงานทั่วไปมีดังนี้
- อุปกรณ์ผู้ส่งสร้างโค้ดและแสดงบนหน้าจอ
- บนอุปกรณ์ผู้รับ ให้กรอกโค้ดดังกล่าว
- โค้ดสั้น ออกเสียงง่าย และใช้รายการคำที่แยกแยะกันได้ชัดเจนทางเสียง
- ฝั่งผู้รับรองรับ การเติมข้อความอัตโนมัติด้วย Tab สำหรับคำในโค้ด จึงมักพิมพ์เพียงไม่กี่ตัวอักษรก็เพียงพอ
- wormhole code เป็นแบบ ใช้ครั้งเดียว และไม่จำเป็นต้องจดจำ
โครงสร้างเซิร์ฟเวอร์
- โปรแกรมนี้ใช้เซิร์ฟเวอร์สองตัว และซอร์สโค้ดของแต่ละตัวอยู่ในที่เก็บแยกกัน
เอกสารและสื่อการบรรยาย
- เอกสารทั้งหมดดูได้ที่ เอกสาร Magic Wormhole หรือในไดเรกทอรีย่อย
docs/ของที่เก็บ - มีสื่อการบรรยายจาก PyCon 2016 ให้ใช้งาน
สัญญาอนุญาต ความเข้ากันได้ และการติดตั้ง
- Magic Wormhole เผยแพร่ภายใต้ สัญญาอนุญาต MIT โดยมีรายละเอียดอยู่ในไฟล์
LICENSE - ไลบรารีรองรับ Python 3.10 ขึ้นไป และผ่านการทดสอบถึง 3.12
- แพ็กเกจ Magic Wormhole ถูกรวมอยู่ในหลายระบบปฏิบัติการ
- หากต้องการติดตั้งโดยไม่ใช้แพ็กเกจของระบบปฏิบัติการ ให้ทำตาม Installation docs
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผมใช้มันมาหลายปีแล้วเวลาโอนไฟล์ ขนาดใหญ่ ระหว่างระบบในสภาพแวดล้อมเครือข่ายแปลก ๆ และแทบจะทำงานได้ไม่มีปัญหาเสมอ
สำหรับการทดสอบที่แปลกกว่านั้น ผมเคยตั้ง Magic Wormhole relay เอง แล้วปรับแต่งให้การคัดลอกไฟล์ขนาดใหญ่มากเร็วและเสถียรกว่าเดิมได้
ผมยังไม่ชอบ Google Drive อยู่ดี เพราะพอโยนไฟล์ระดับหลายสิบ GB เข้าไป มันล่มบ่อยเกินไป
https://www.jeffgeerling.com/blog/2023/my-own-magic-wormhole...
ครั้งสุดท้ายที่ผมพยายามส่งข้อมูลจำนวนมากด้วย Wormhole มันถูกจำกัดอยู่ที่ 20MB/s เพราะ bandwidth-delay product สุดท้ายเลยใช้ HTTP ธรรมดาร่วมกับ aria2c และหลายสตรีม จนใช้สาย 1Gbps ได้เต็ม
ผมไม่เห็นเหตุผลว่าทำไมเครื่องมือที่ใช้ PAKE จะมาแทนเครื่องมือ proprietary ที่ซับซ้อนเกินจำเป็นอย่าง Globus สำหรับการถ่ายโอนขนาดใหญ่ระยะไกลไม่ได้ แต่ความเป็นจริงยังติดอยู่กับอดีต
ข้อมูลจริงน่าจะวิ่งผ่าน relay เฉพาะเมื่อมีข้อจำกัดเครือข่ายบางอย่างเท่านั้น ถ้าไม่ใช่อย่างนั้นก็สงสัยว่าเขารับต้นทุนการรัน relay ฟรีได้อย่างไร
python -m http.serverสำหรับดาวน์โหลดในเครื่องแบบฉุกเฉินน่าเสียดายที่การ์ตูน xkcd นี้ยังใช้ได้จริงไม่ต่างจากปี 2011: https://xkcd.com/949/
นี่เป็นหนึ่งใน ยูทิลิตีแบบหน้าที่เดียว ที่ทำสิ่งเดียวได้ดีมาก ๆ แต่เพราะมันทำงานดีเกินไปและไม่เรียกร้องความสนใจ เลยแทบไม่เป็นที่สังเกตเลย
รู้สึกว่าเราควรขอบคุณผลงานยอดเยี่ยมแบบนี้ให้มากขึ้น
ผมใช้ croc ซึ่งเป็นโปรเจกต์คล้ายกันและมีฟีเจอร์ดี ๆ: https://github.com/schollz/croc
https://redrocket.club/posts/croc/
ผมเคยย้าย ไฟล์ 70GB ด้วย wormhole ครั้งหนึ่ง เมื่อก่อนคงเป็นเรื่องที่ทำไม่ได้เลย
ผมรู้ว่ามันใช้แบนด์วิดท์ของ relay server เลยบริจาคให้ Debian ทันที เพราะเข้าใจว่า Debian เป็นผู้รัน relay ของเวอร์ชันแพ็กเกจ apt
มันเป็น CNAME ที่ชี้ไปยังที่อยู่เดียวกับที่โค้ด upstream git ใช้ จุดประสงค์คือเผื่อมีภาระค่าใช้จ่าย จะได้เปลี่ยนได้ง่าย
จนถึงตอนนี้ยังไม่เป็นปัญหา ปริมาณที่ส่งอยู่ราว 10–15TB ต่อเดือน แต่ก็แชร์พูลแบนด์วิดท์กับเซิร์ฟเวอร์อื่น ๆ ที่เช่าอยู่แล้ว จึงเคยจ่ายค่าเกินโควตาแค่ครั้งเดียว
ถ้ามีใครบริจาคให้ผม พูดตรง ๆ ผมก็คงส่งต่อไปให้ Debian เหมือนเดิม
บางครั้งเมื่อมีใครสักคนปล่อยข้อมูลครึ่งเทราไบต์ผ่านเข้ามา ผมก็คิดว่าควรย้ายไปผู้ให้บริการที่ช้ากว่าแต่คิดราคาเหมาจ่าย หรือไม่ก็ implement โค้ดจำกัดความเร็วที่ดีกว่านี้ หรือในที่สุดก็ implement ส่วนขยายโปรโตคอลที่ให้ไคลเอนต์แจ้งล่วงหน้าว่าจะส่งข้อมูลเท่าไร แล้วให้เซิร์ฟเวอร์ปฏิเสธได้
แต่จนถึงตอนนี้มันยังไม่เคยมีความสำคัญสูงพอ
เห็นได้ชัดว่าแรงจูงใจหลักคือการทะลุ NAT ถึง NAT เพราะถ้าทั้งสองฝั่งไม่มีกำแพงกั้น ก็ใช้ scp, rsync, sftp ได้เลย
ผมก็สงสัยด้วยว่าสามารถตั้งค่า relay server ได้ไหม ดูเหมือนจะถูก hardcode ไว้พอสมควร
บังเอิญเจอสิ่งนี้ด้วย “implementation ภาษา Rust ของ Magic Wormhole ที่มีฟีเจอร์และการปรับปรุงใหม่”: https://github.com/magic-wormhole/magic-wormhole.rs
ผมเป็นผู้เขียน ถ้ามีคำถามก็ตอบได้
แบบนี้ถือว่าหวาดระแวงเกินไปไหม?
มีแผนรับมือควอนตัมคอมพิวติงอย่างไร และมีแผนย้ายไปใช้การเข้ารหัสแบบทนควอนตัมเพื่อป้องกันการโจมตีแบบเก็บข้อมูลไว้แล้วค่อยถอดรหัสภายหลังหรือไม่
อีกอย่างอยากรู้ว่าสามารถขยายโปรโตคอลให้ทำงานบนพร็อกซีทั่วไปกว่าเดิม เช่น TURN server ได้หรือไม่
ยังมีเครื่องมืออื่น ๆ อีกหลายตัว
p2pcopy https://github.com/psantosl/p2pcopy
pcp https://github.com/dennis-tra/pcp
wormhole-william https://github.com/psanford/wormhole-william
https://github.com/mat-sz/filedrop
https://github.com/saljam/webwormhole
https://github.com/schollz/croc
https://github.com/dutchcoders/transfer.sh
https://github.com/timvisee/send
https://github.com/schlagmichdoch/pairdrop
https://github.com/SnapDrop/snapdrop
อาจเป็นคำถามโง่ ๆ ก็ได้ แต่ถ้าระหว่าง iPhone กับ MacBook ควรทำแบบนี้ยังไงดี?
AirDrop ถูกปิดตามนโยบาย, พื้นที่เก็บข้อมูล iCloud ก็เต็มเพราะผมขี้เกียจจัดการ, และบนอุปกรณ์อื่นทั้งหมดผมใช้ Syncthing แต่หาไคลเอนต์ที่ใช้กับ iPhone ของบริษัทไม่ได้
ชอบเป็นพิเศษตรงที่ไม่ต้องติดตั้งแอป third-party บนอุปกรณ์ใด ๆ
บน Safari ของ Mac ดูเหมือนโดยทั่วไปจะทำงานได้ไม่ดีเท่า Chrome แต่ผมเคยส่งจาก Windows ไป iOS, Windows ไป macOS, และ macOS ไป iOS โดยไม่ต้องติดตั้งอะไร
python -m http.serverก็ได้บทความที่เกี่ยวข้อง: Magic Wormhole: Get things from one computer to another, safely - https://news.ycombinator.com/item?id=27262193 - พฤษภาคม 2021, 178 ความคิดเห็น
ตอนนี้ Tailscale ก็มี Taildrop แล้ว: https://tailscale.com/kb/1106/taildrop
ที่นี่เราใช้ Tailscale โดยรวมอยู่แล้ว แต่ก็ยังส่งไฟล์ด้วย wormhole บ่อย ๆ