0Pricing
Cryptology Academy · บทเรียน

WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519

สำรวจการออกแบบด้านการเข้ารหัสที่เรียบง่ายของ WireGuard ซึ่งใช้ ChaCha20-Poly1305, Curve25519 และ BLAKE2

WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519 เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

แนวคิดการออกแบบของ WireGuard

WireGuard ได้รับการออกแบบโดยมีความเรียบง่ายอย่างยิ่งเป็นเป้าหมายหลัก ฐานโค้ดมีประมาณ 4,000 บรรทัด เมื่อเทียบกับ 70,000 บรรทัดของ OpenVPN และมากกว่า 400,000 บรรทัดของ strongSwan IPsec จำนวนบรรทัดที่น้อยลงหมายถึงช่องโหว่ที่อาจเกิดขึ้นน้อยลง และมีขอบเขตที่ต้องตรวจสอบเล็กพอให้วิศวกรเพียงคนเดียวตรวจสอบได้อย่างละเอียด ความเรียบง่ายนี้เป็นทางเลือกด้านความปลอดภัยโดยเจตนา ไม่ใช่ข้อจำกัดของคุณลักษณะ

องค์ประกอบพื้นฐานทางการเข้ารหัสลับแบบตายตัว

WireGuard แตกต่างจาก OpenVPN และ IPsec ตรงที่ไม่มีการเจรจาเลือกอัลกอริทึมการเข้ารหัสลับ การเชื่อมต่อ WireGuard ทุกครั้งใช้องค์ประกอบพื้นฐานชุดเดียวกันแบบตายตัว ได้แก่ Curve25519 สำหรับ ECDH, ChaCha20-Poly1305 สำหรับการเข้ารหัสที่ยืนยันความถูกต้อง, BLAKE2s สำหรับการคำนวณค่าแฮช และ SipHash-2-4 สำหรับรักษาความปลอดภัยของตารางแฮช วิธีนี้ตัดการเจรจาเลือกชุดรหัสลับออกไป จึงกำจัดช่องทางการโจมตีลดระดับได้ทั้งประเภทหนึ่ง

การจับมือของกรอบงานโพรโทคอล Noise

WireGuard ใช้รูปแบบการจับมือ Noise_IKpsk2 จากกรอบงานโพรโทคอล Noise กรอบงานนี้มอบแนวทางที่มีหลักการสำหรับสร้างโพรโทคอลแลกเปลี่ยนกุญแจซึ่งมีคุณสมบัติด้านความปลอดภัยที่พิสูจน์ได้ รูปแบบ IKpsk2 ใช้คู่กุญแจแบบคงที่และแบบชั่วคราว พร้อมกุญแจที่แบ่งปันล่วงหน้าแบบเลือกใช้ได้เพื่อเพิ่มความต้านทานการโจมตีด้วยคอมพิวเตอร์ควอนตัม และทำการจับมือเสร็จสิ้นภายในการรับส่งข้อมูลไปกลับเพียงหนึ่งรอบ

Curve25519 สำหรับการแลกเปลี่ยนกุญแจ

Curve25519 เป็นเส้นโค้งวงรีที่ Daniel Bernstein ออกแบบขึ้นเพื่อให้มีประสิทธิภาพสูงและปลอดภัย WireGuard ใช้เส้นโค้งนี้สำหรับการตกลงกุญแจแบบ Diffie-Hellman บนเส้นโค้งวงรี (ECDH) เพียร์แต่ละรายมีคู่กุญแจ Curve25519 แบบคงที่เพื่อใช้เป็นข้อมูลระบุตัวตนระยะยาว และการจับมือยังใช้คู่กุญแจแบบชั่วคราวเพื่อให้เกิดความลับล่วงหน้า การทำงานของ Curve25519 ใช้เวลาคงที่ จึงช่วยต้านทานการโจมตีแบบจับเวลา

การเข้ารหัสข้อมูลด้วย ChaCha20-Poly1305

WireGuard เข้ารหัสแพ็กเก็ตข้อมูลทั้งหมดด้วย ChaCha20-Poly1305 ซึ่งเป็นอัลกอริทึมการเข้ารหัสที่ยืนยันความถูกต้อง ChaCha20 เป็นรหัสลับแบบสตรีมที่ทำงานได้เร็วมากบนอุปกรณ์ที่ไม่มีฮาร์ดแวร์เร่งความเร็ว AES เช่น สมาร์ตโฟนและอุปกรณ์ฝังตัว Poly1305 ทำหน้าที่สร้างแท็กยืนยันความถูกต้อง โครงสร้าง AEAD ที่รวมกันนี้ทำให้ตรวจพบการดัดแปลงข้อความเข้ารหัสได้ก่อนเริ่มถอดรหัส

BLAKE2s สำหรับการคำนวณค่าแฮช

BLAKE2s เป็นฟังก์ชันแฮชทางการเข้ารหัสลับที่ปรับให้เหมาะกับแพลตฟอร์ม 32 บิตและข้อความสั้น WireGuard ใช้ฟังก์ชันนี้ในขั้นตอนการอนุมานกุญแจของการจับมือและใช้คำนวณตัวระบุเซสชัน BLAKE2s เร็วกว่า SHA-256 บนแพลตฟอร์มส่วนใหญ่ ขณะเดียวกันก็ให้ความปลอดภัยเทียบเท่ากัน ฟังก์ชันนี้ได้รับการออกแบบให้เป็นผู้สืบทอดของ BLAKE ซึ่งเข้ารอบสุดท้ายของการคัดเลือก SHA-3

คู่กุญแจแบบคงที่และแบบชั่วคราว

เพียร์ของ WireGuard มีคู่กุญแจแบบคงที่ซึ่งทำหน้าที่เป็นข้อมูลระบุตัวตนระยะยาว กุญแจสาธารณะจะถูกแลกเปลี่ยนนอกช่องทางระหว่างการกำหนดค่า และใช้เป็นตัวระบุเพียร์ ในการจับมือแต่ละครั้ง เพียร์ทั้งสองรายจะสร้างคู่กุญแจแบบชั่วคราวขึ้นด้วย การทำ ECDH ระหว่างกุญแจแบบคงที่กับกุญแจแบบชั่วคราว เมื่อรวมกับการทำ ECDH ระหว่างคู่กุญแจแบบชั่วคราว จะให้ทั้งการยืนยันตัวตนและความลับล่วงหน้า

การกำหนดเส้นทางด้วยกุญแจเข้ารหัส

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

การจัดการการเชื่อมต่อตามตัวจับเวลา

WireGuard ไม่มีแนวคิดเรื่องการเชื่อมต่อแบบคงอยู่ หากไม่มีการรับส่งข้อมูล ก็จะไม่มีการส่งแพ็กเก็ต และ VPN จะหายไปจากเครือข่ายโดยแทบไม่มีสัญญาณ การจับมือจะเริ่มขึ้นตามต้องการเมื่อมีข้อมูลที่ต้องส่ง การตั้งค่า PersistentKeepalive ที่กำหนดได้จะส่งแพ็กเก็ตว่างเป็นระยะเพื่อรักษาการจับคู่ NAT สำหรับอุปกรณ์ที่อยู่หลังเราเตอร์ NAT

WireGuard ในเคอร์เนล Linux

WireGuard ถูกรวมเข้ากับเคอร์เนล Linux สายหลักในรุ่น 5.6 ซึ่งเผยแพร่ในเดือนมีนาคม 2020 การทำงานในพื้นที่เคอร์เนลทำให้ WireGuard เข้าถึงสแตกเครือข่ายของเคอร์เนลและฮาร์ดแวร์การเข้ารหัสลับได้โดยตรง ส่งผลให้มีอัตราการส่งข้อมูลสูงกว่าการใช้งาน VPN ในพื้นที่ผู้ใช้ บนแพลตฟอร์มอื่น เช่น Windows, macOS, iOS และ Android นั้น WireGuard ทำงานในพื้นที่ผู้ใช้ผ่านการนำไปใช้งานข้ามแพลตฟอร์ม

การเปรียบเทียบประสิทธิภาพของ WireGuard

ผลการวัดประสิทธิภาพแสดงอย่างสม่ำเสมอว่า WireGuard มีอัตราการส่งข้อมูลสูงกว่า OpenVPN 3-4 เท่า IPsec ที่ใช้การเร่งความเร็วฮาร์ดแวร์ AES-NI มีประสิทธิภาพใกล้เคียง WireGuard บนระบบที่มีฮาร์ดแวร์ AES ส่วนอุปกรณ์ ARM ที่ไม่มี AES-NI นั้น ChaCha20 ของ WireGuard ทำงานได้ดีกว่าทางเลือกที่ใช้ AES อย่างมาก การใช้ CPU ที่ต่ำกว่ายังหมายถึงอายุการใช้งานแบตเตอรี่ที่ยาวนานขึ้นบนอุปกรณ์เคลื่อนที่

องค์ประกอบพื้นฐานทางการเข้ารหัสลับของ WireGuard

WireGuard ใช้อัลกอริทึมใดในการเข้ารหัสแพ็กเก็ตข้อมูล

สรุป WireGuard

สรุป WireGuard: มีโค้ดประมาณ 4,000 บรรทัดเพื่อให้พื้นผิวการโจมตีมีขนาดเล็ก ใช้องค์ประกอบพื้นฐานแบบตายตัวโดยไม่มีการเจรจา ใช้การจับมือ Noise IKpsk2 ร่วมกับ Curve25519 ใช้ ChaCha20-Poly1305 สำหรับข้อมูล ใช้ BLAKE2s สำหรับการคำนวณค่าแฮช การกำหนดเส้นทางด้วยกุญแจเข้ารหัสจะผูกช่วง IP เข้ากับกุญแจสาธารณะ กุญแจแบบชั่วคราวให้ความลับล่วงหน้า การผสานรวมกับเคอร์เนลให้ประสิทธิภาพสูงสุด และใช้รูปแบบการเชื่อมต่อแบบไร้สถานะซึ่งจับมือเมื่อจำเป็น

คำถามที่พบบ่อย

บทเรียน “WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519”

สำรวจการออกแบบด้านการเข้ารหัสที่เรียบง่ายของ WireGuard ซึ่งใช้ ChaCha20-Poly1305, Curve25519 และ BLAKE2 คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม

ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. IPsec: โพรโทคอล IKEv2, ESP และ AH
  2. WireGuard: VPN ที่ใช้ ChaCha20 และ Curve25519
  3. OpenVPN: สถาปัตยกรรม VPN ที่ใช้ TLS
  4. เปรียบเทียบโพรโทคอล VPN: ความปลอดภัยและประสิทธิภาพ
← กลับไปที่ Cryptology Academy