เพิ่มการใช้งาน VPN WireGuard ใหม่ในฐานรหัส FreeBSD

ซอร์สทรี FreeBSD ได้รับการอัปเดตด้วยการใช้งาน VPN WireGuard ใหม่ โดยอิงตามโค้ดโมดูลเคอร์เนลที่ร่วมกันผลิตโดยทีมพัฒนา FreeBSD และ WireGuard หลักโดยได้รับการสนับสนุนจาก Jason A. Donenfeld ผู้เขียน VPN WireGuard และ John H. Baldwin) ผู้พัฒนา GDB และ FreeBSD ที่มีชื่อเสียง ซึ่งดำเนินการรองรับ SMP และ NUMA ในเคอร์เนล FreeBSD ในช่วงต้นทศวรรษ 2000 หลังจากที่ไดรเวอร์ได้รับการยอมรับใน FreeBSD (sys/dev/wg) แล้ว การพัฒนาและการบำรุงรักษาจะดำเนินการในพื้นที่เก็บข้อมูล FreeBSD ต่อจากนี้ไป

ก่อนที่รหัสจะได้รับการยอมรับ การตรวจสอบการเปลี่ยนแปลงอย่างเต็มรูปแบบได้ดำเนินการโดยได้รับการสนับสนุนจาก FreeBSD Foundation ในระหว่างนั้นก็มีการวิเคราะห์การโต้ตอบของไดรเวอร์กับระบบย่อยเคอร์เนลที่เหลือด้วย และความเป็นไปได้ของการใช้การเข้ารหัสแบบดั้งเดิมที่เคอร์เนลให้มา ได้รับการประเมิน

ในการใช้อัลกอริธึมการเข้ารหัสที่ไดรเวอร์ต้องการ API ของระบบย่อย crypto-subsystem เคอร์เนล FreeBSD ได้รับการขยาย ซึ่งมีการเพิ่มสายรัดที่อนุญาตให้ใช้อัลกอริธึมที่ไม่รองรับใน FreeBSD ผ่าน crypto-API มาตรฐาน โดยใช้การดำเนินการของ อัลกอริธึมที่จำเป็นจากไลบรารี libsodium อัลกอริธึมที่สร้างไว้ในไดรเวอร์เหลือเพียงรหัสสำหรับการคำนวณแฮชของ Blake2 เท่านั้น เนื่องจากการใช้งานอัลกอริธึมที่มีให้ใน FreeBSD นั้นเชื่อมโยงกับขนาดแฮชคงที่

นอกจากนี้ ในระหว่างกระบวนการตรวจสอบ ได้มีการเพิ่มประสิทธิภาพโค้ดซึ่งทำให้สามารถเพิ่มประสิทธิภาพในการกระจายโหลดบน CPU แบบมัลติคอร์ได้ (มั่นใจได้ถึงความสมดุลที่สม่ำเสมอของการกำหนดการเข้ารหัสแพ็กเก็ตและงานถอดรหัสให้กับแกน CPU) เป็นผลให้ค่าใช้จ่ายในการประมวลผลแพ็กเก็ตใกล้เคียงกับการใช้งานไดรเวอร์ Linux รหัสนี้ยังให้ความสามารถในการใช้ไดรเวอร์ ossl เพื่อเร่งการดำเนินการเข้ารหัสอีกด้วย

ต่างจากความพยายามครั้งก่อนในการรวม WireGuard เข้ากับ FreeBSD การใช้งานใหม่ใช้ยูทิลิตี้ wg มาตรฐาน แทนที่จะเป็นเวอร์ชันแก้ไขของ ifconfig ซึ่งทำให้สามารถรวมการกำหนดค่าบน Linux และ FreeBSD ได้ ยูทิลิตี้ wg รวมถึงไดรเวอร์นั้นรวมอยู่ในซอร์สโค้ด FreeBSD ซึ่งเกิดขึ้นได้โดยการเปลี่ยนใบอนุญาตสำหรับรหัส wg (ขณะนี้รหัสพร้อมใช้งานภายใต้ใบอนุญาต MIT และ GPL) ความพยายามครั้งสุดท้ายที่จะรวม WireGuard ใน FreeBSD เกิดขึ้นในปี 2020 แต่จบลงด้วยเรื่องอื้อฉาวซึ่งเป็นผลมาจากโค้ดที่เพิ่มไว้แล้วถูกลบออกเนื่องจากคุณภาพต่ำ งานที่ไม่ระมัดระวังกับบัฟเฟอร์ การใช้ stub แทนการตรวจสอบ การใช้งานที่ไม่สมบูรณ์ ของโปรโตคอลและการละเมิดใบอนุญาต GPL

โปรดจำไว้ว่า VPN WireGuard ถูกนำมาใช้บนพื้นฐานของวิธีการเข้ารหัสที่ทันสมัย ​​ให้ประสิทธิภาพสูงมาก ใช้งานง่าย ไร้ความยุ่งยาก และพิสูจน์ตัวเองแล้วในการปรับใช้จำนวนมากที่ประมวลผลการรับส่งข้อมูลจำนวนมาก โครงการได้รับการพัฒนาตั้งแต่ปี 2015 ผ่านการตรวจสอบและยืนยันอย่างเป็นทางการของวิธีการเข้ารหัสที่ใช้ WireGuard ใช้แนวคิดของการกำหนดเส้นทางคีย์เข้ารหัส ซึ่งเกี่ยวข้องกับการผูกไพรเวตคีย์เข้ากับแต่ละอินเตอร์เฟสเครือข่าย และใช้พับลิกคีย์เพื่อผูก

การแลกเปลี่ยนคีย์สาธารณะเพื่อสร้างการเชื่อมต่อนั้นคล้ายกับ SSH ในการเจรจาคีย์และเชื่อมต่อโดยไม่ต้องเรียกใช้ user-space daemon แยกต่างหาก กลไก Noise_IK ของ Noise Protocol Framework จะถูกใช้ คล้ายกับการรักษา Authorized_keys ใน SSH การส่งข้อมูลดำเนินการผ่านการห่อหุ้มในแพ็กเก็ต UDP รองรับการเปลี่ยนที่อยู่ IP ของเซิร์ฟเวอร์ VPN (โรมมิ่ง) โดยไม่ตัดการเชื่อมต่อด้วยการกำหนดค่าไคลเอ็นต์ใหม่โดยอัตโนมัติ

การเข้ารหัสใช้การเข้ารหัสสตรีม ChaCha20 และอัลกอริทึมการตรวจสอบข้อความ (MAC) Poly1305 ที่พัฒนาโดย Daniel J. Bernstein, Tanja Lange และ Peter Schwabe ChaCha20 และ Poly1305 อยู่ในตำแหน่งอะนาลอกที่เร็วกว่าและปลอดภัยกว่าของ AES-256-CTR และ HMAC การใช้งานซอฟต์แวร์ซึ่งช่วยให้บรรลุเวลาการดำเนินการที่แน่นอนโดยไม่ต้องมีการสนับสนุนฮาร์ดแวร์พิเศษ ในการสร้างรหัสลับที่ใช้ร่วมกัน จะใช้โปรโตคอล Diffie-Hellman เส้นโค้งวงรีในการใช้งาน Curve25519 ซึ่งเสนอโดย Daniel Bernstein สำหรับการแฮช จะใช้อัลกอริทึม BLAKE2s (RFC7693)

ที่มา: opennet.ru

เพิ่มความคิดเห็น