0Pricing
Security+ Academy · บทเรียน

การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT

ติดตามขั้นตอนการจับมือ TLS 1.3 ทีละขั้น ทำความเข้าใจว่ารุ่นนี้บรรลุการรักษาความลับล่วงหน้าเป็นค่าเริ่มต้นได้อย่างไร และประเมินข้อแลกเปลี่ยนด้านความปลอดภัยของการกลับมาใช้เซสชัน 0-RTT

การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT เป็นบทเรียน Security+ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Security+ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Security+ Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุผลที่จำเป็นต้องมี TLS 1.3

TLS 1.3 ซึ่งเผยแพร่ในปี 2018 (RFC 8446) ได้รับการออกแบบมาเพื่อแก้ไขจุดอ่อนที่สะสมอยู่ใน TLS 1.2 ตลอดระยะเวลากว่าทศวรรษของการโจมตีในโลกจริง รุ่นก่อนหน้านี้เปิดให้ต่อรองชุดการเข้ารหัสที่อ่อนแอ รองรับการเข้ารหัสระดับส่งออก และต้องมีการรับส่งข้อมูลหลายรอบก่อนที่ข้อมูลจะเริ่มไหลได้ TLS 1.3 นำอัลกอริทึมที่เลิกใช้งานแล้วออกทั้งหมด และปรับกระบวนการจับมือให้เหลือการรับส่งข้อมูลหนึ่งรอบในกรณีปกติ ซึ่งช่วยเพิ่มทั้ง ความปลอดภัยและประสิทธิภาพ อย่างมาก

ภาพรวมการจับมือ: การรับส่งข้อมูลหนึ่งรอบ

ใน TLS 1.3 ไคลเอ็นต์และเซิร์ฟเวอร์จะจับมือเสร็จภายใน 1-RTT (การรับส่งข้อมูลหนึ่งรอบ) ไคลเอ็นต์ส่ง ClientHello ซึ่งประกอบด้วยชุดการเข้ารหัสที่รองรับและส่วนแบ่งกุญแจ (โดยใช้ Diffie-Hellman) เซิร์ฟเวอร์ตอบกลับด้วย ServerHello ส่วนแบ่งกุญแจของตนเอง ใบรับรอง และข้อมูลแอปพลิเคชันที่เข้ารหัสชุดแรก — ทั้งหมดนี้ส่งภายในการรับส่งข้อมูลครั้งเดียว จากนั้นไคลเอ็นต์จะตรวจสอบใบรับรองและส่งข้อความ Finished ก่อนแลกเปลี่ยนข้อมูลแอปพลิเคชัน

# Trace TLS 1.3 handshake with openssl
openssl s_client -connect example.com:443 -tls1_3 -msg 2>&1 | grep -E 'ClientHello|ServerHello|Finished'

การแลกเปลี่ยนกุญแจ: ใช้ Diffie-Hellman ชั่วคราวเท่านั้น

TLS 1.3 กำหนดให้ใช้ การแลกเปลี่ยนกุญแจชั่วคราว — โดยนำการแลกเปลี่ยนกุญแจ RSA ออกทั้งหมด การแลกเปลี่ยนกุญแจทั้งหมดต้องใช้ ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) หรือ DHE (Diffie-Hellman Ephemeral) คำว่า “ชั่วคราว” หมายถึงการสร้างคู่กุญแจใหม่สำหรับทุกเซสชัน นี่คือรากฐานของ การรักษาความลับล่วงหน้าอย่างสมบูรณ์: แม้ผู้โจมตีจะได้กุญแจส่วนตัวระยะยาวของเซิร์ฟเวอร์ไป ก็ไม่สามารถถอดรหัสเซสชันในอดีตได้ เพราะแต่ละเซสชันใช้กุญแจชั่วคราวที่ไม่ซ้ำกัน

อธิบายการรักษาความลับล่วงหน้าอย่างสมบูรณ์

การรักษาความลับล่วงหน้าอย่างสมบูรณ์ (PFS) ช่วยให้มั่นใจว่า แม้ผู้โจมตีจะบันทึกข้อมูลรับส่งที่เข้ารหัสไว้ทั้งหมดในวันนี้ และได้กุญแจส่วนตัวของเซิร์ฟเวอร์ไปในอนาคต ก็ยังไม่สามารถถอดรหัสเซสชันเก่าได้ ใน TLS 1.2 ที่ใช้การแลกเปลี่ยนกุญแจ RSA กุญแจส่วนตัวของเซิร์ฟเวอร์สามารถถอดรหัสความลับก่อนมาสเตอร์ในเซสชันที่ผ่านมาได้ — ถือเป็นความล้มเหลวร้ายแรง กุญแจ DH ชั่วคราวของ TLS 1.3 ทำให้ แต่ละเซสชันสร้างกุญแจของตนเอง และกุญแจชั่วคราวเหล่านั้นจะถูกทิ้งหลังใช้งาน

การทำให้ชุดการเข้ารหัสเรียบง่ายขึ้น

TLS 1.2 รองรับชุดการเข้ารหัสมากกว่า 300 ชุด ซึ่งหลายชุดอ่อนแอหรือถูกทำลายความปลอดภัยแล้ว TLS 1.3 ลดจำนวนลงเหลือเพียง ห้าชุดการเข้ารหัส และทุกชุดใช้ AEAD (การเข้ารหัสที่มีการยืนยันตัวตนพร้อมข้อมูลประกอบ): TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_CCM_SHA256 และ TLS_AES_128_CCM_8_SHA256 การทำเช่นนี้กำจัดหมวดหมู่การโจมตีทั้งหมด เช่น BEAST, POODLE และ FREAK ซึ่งอาศัยจุดอ่อนในการต่อรองชุดการเข้ารหัส

# Check supported TLS 1.3 cipher suites on a server
nmap --script ssl-enum-ciphers -p 443 example.com

การกลับมาใช้เซสชันแบบ 0-RTT: ความเร็วเทียบกับความปลอดภัย

การกลับมาใช้เซสชันแบบ 0-RTT (เวลาในการรับส่งข้อมูลเป็นศูนย์รอบ) เป็นคุณสมบัติเสริมของ TLS 1.3 ที่อนุญาตให้ไคลเอ็นต์ส่งข้อมูลแอปพลิเคชันในข้อความแรกสุด ก่อนการจับมือจะเสร็จสิ้น โดยใช้ กุญแจที่แบ่งปันล่วงหน้า (PSK) จากเซสชันก่อนหน้า แม้ 0-RTT จะลดความหน่วงได้อย่างมาก — ซึ่งสำคัญสำหรับ API ที่มีปริมาณการใช้งานสูง — แต่ก็มีข้อแลกเปลี่ยนที่สำคัญ: ข้อมูลระยะแรก ไม่ได้รับการป้องกันจากการโจมตีแบบเล่นซ้ำ

ความเสี่ยงจากการโจมตีแบบเล่นซ้ำใน 0-RTT

ในการ โจมตีแบบเล่นซ้ำข้อมูล 0-RTT ผู้โจมตีที่ดักข้อมูลข้อความระยะแรกไว้สามารถส่งข้อความนั้นไปยังเซิร์ฟเวอร์อีกครั้ง ซึ่งอาจทำให้การดำเนินการเดิมเกิดขึ้นสองครั้ง (เช่น การชำระเงินหรือการเปลี่ยนแปลงสถานะ) ข้อกำหนดของ TLS 1.3 เตือนอย่างชัดเจนว่า ข้อมูลระยะแรกของ 0-RTT ต้องประกอบด้วยเฉพาะการดำเนินการแบบไอดีมโพเทนต์ — คือการดำเนินการที่ให้ผลลัพธ์เหมือนเดิมไม่ว่าจะทำกี่ครั้ง เช่น คำขอ GET การดำเนินการที่ไม่ใช่ไอดีมโพเทนต์ (POST, DELETE) ไม่ควรใช้ 0-RTT โดยเด็ดขาด

กุญแจที่แบ่งปันล่วงหน้าและการกลับมาใช้เซสชัน

หลังจากการจับมือ TLS 1.3 แบบเต็มรูปแบบสำเร็จ เซิร์ฟเวอร์จะออกข้อความ NewSessionTicket ซึ่งมี PSK (กุญแจที่แบ่งปันล่วงหน้า) ที่ไคลเอ็นต์จัดเก็บไว้ เมื่อเชื่อมต่อใหม่ ไคลเอ็นต์จะใส่ PSK นี้ใน ClientHello โดยใช้ ส่วนขยาย pre_shared_key เซิร์ฟเวอร์จะจดจำกุญแจดังกล่าว แล้วอนุมัติข้อมูล 0-RTT หรือเปลี่ยนไปใช้การกลับมาใช้เซสชันแบบ 1-RTT แทน ตั๋ว PSK มีอายุจำกัด และควรหมุนเวียนเปลี่ยนบ่อย ๆ เพื่อจำกัดช่วงเวลาที่อาจถูกเปิดเผย

การจับมือที่เข้ารหัส: การซ่อนข้อมูลเมทาดาทา

การปรับปรุงครั้งสำคัญของ TLS 1.3 คือ การจับมือส่วนใหญ่ได้รับการเข้ารหัส รวมถึงใบรับรองของเซิร์ฟเวอร์ด้วย ใน TLS 1.2 ใบรับรองของเซิร์ฟเวอร์ถูกส่งเป็นข้อความที่ไม่มีการเข้ารหัส ทำให้ผู้สังเกตการณ์บนเครือข่ายระบุได้ว่าไคลเอ็นต์กำลังเชื่อมต่อกับโดเมนใด TLS 1.3 เข้ารหัสใบรับรองและข้อความการจับมือส่วนใหญ่ที่ตามมา ทำให้ข้อมูลเมทาดาทาที่ผู้สังเกตการณ์แบบพาสซีฟมองเห็นลดลง Encrypted Client Hello (ECH) เป็นส่วนขยายที่กำลังพัฒนา ซึ่งซ่อนแม้แต่ฟิลด์ SNI (Server Name Indication)

คุณสมบัติที่ถูกนำออก: สิ่งที่ TLS 1.3 ยกเลิก

TLS 1.3 นำคุณสมบัติรุ่นเก่าจำนวนมากที่กลายเป็นภาระด้านความปลอดภัยออก ได้แก่ การแลกเปลี่ยนกุญแจ RSA (ไม่มีการรักษาความลับล่วงหน้า) ชุดการเข้ารหัสโหมด CBC (เสี่ยงต่อการโจมตีด้วยช่องทางตรวจสอบการเติมข้อมูล) RC4 (รหัสลับแบบสตรีมที่ถูกทำลายความปลอดภัยโดยสิ้นเชิง) การเข้ารหัสระดับส่งออก (สาเหตุของ FREAK และ Logjam) MD5 และ SHA-1 ในลายเซ็นดิจิทัล การบีบอัด (สาเหตุของ CRIME) และ การจับมือใหม่ (สาเหตุของการโจมตีหลายรูปแบบ) การนำสิ่งเหล่านี้ออกทำให้พื้นผิวการโจมตีของ TLS 1.3 เล็กลงอย่างมาก

การกำหนดค่าเซิร์ฟเวอร์สำหรับ TLS 1.3

การติดตั้งใช้งาน TLS 1.3 อย่างถูกต้องจำเป็นต้องกำหนดค่าเว็บเซิร์ฟเวอร์ให้เลือกใช้ TLS 1.3 ก่อน พร้อมปิดใช้งาน TLS 1.0 และ 1.1 เว็บเซิร์ฟเวอร์สมัยใหม่ส่วนใหญ่ (Nginx, Apache, IIS) รองรับ TLS 1.3 โดยตรง นอกจากนี้ควรตรวจสอบให้แน่ใจว่าเปิดใช้ OCSP Stapling เพื่อแสดงสถานะการเพิกถอนใบรับรองโดยไม่ต้องให้ไคลเอ็นต์ติดต่อ CA และให้ ส่วนหัว HSTS ป้องกันการโจมตีแบบลดระดับการรักษาความปลอดภัย ใช้เครื่องมืออย่าง SSL Labs เพื่อตรวจสอบว่าการกำหนดค่าของคุณได้ระดับ A+

# Nginx TLS 1.3 configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security 'max-age=63072000' always;

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด CompTIA Security+ (SY0-701) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า TLS 1.3 จับมือเสร็จภายใน 1-RTT โดยใช้การแลกเปลี่ยนกุญแจ DH ชั่วคราวเท่านั้นเพื่อให้เกิดการรักษาความลับล่วงหน้าอย่างสมบูรณ์ การกลับมาใช้เซสชันแบบ 0-RTT ช่วยให้เชื่อมต่อใหม่ได้เร็วขึ้นโดยใช้ PSK แต่มีความเสี่ยงต่อการโจมตีแบบเล่นซ้ำและควรมีเฉพาะการดำเนินการแบบไอดีมโพเทนต์เท่านั้น และ TLS 1.3 นำคุณสมบัติรุ่นเก่าที่อ่อนแอออกทั้งหมด — การแลกเปลี่ยนกุญแจ RSA การเข้ารหัสแบบ CBC, RC4 การเข้ารหัสระดับส่งออก และการบีบอัด — ทำให้พื้นผิวการโจมตีลดลงอย่างมาก หัวข้อถัดไป เราจะศึกษาอัลกอริทึมการเข้ารหัสที่มีการยืนยันตัวตน เช่น AES-GCM

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

บทเรียน “การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Security+ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Security+ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT”

ติดตามขั้นตอนการจับมือ TLS 1.3 ทีละขั้น ทำความเข้าใจว่ารุ่นนี้บรรลุการรักษาความลับล่วงหน้าเป็นค่าเริ่มต้นได้อย่างไร และประเมินข้อแลกเปลี่ยนด้านความปลอดภัยของการกลับมาใช้เซสชัน 0-RTT คุณปฏิบัติ Security+ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การจับมือ TLS 1.3 และการกลับมาใช้เซสชัน 0-RTT
  2. การเข้ารหัสที่ยืนยันตัวตน: AES-GCM และ ChaCha20-Poly1305
  3. ฟังก์ชันสร้างกุญแจ: PBKDF2, bcrypt และ Argon2
  4. การเข้ารหัสหลังยุคควอนตัม: CRYSTALS-Kyber และ Dilithium
← กลับไปที่ Security+ Academy