การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์
ติดตามการจับมือของ SSH-2 ตั้งแต่การแลกเปลี่ยนรุ่น การเจรจาอัลกอริทึม การแลกเปลี่ยนกุญแจ ไปจนถึงการยืนยันตัวตนของบริการ
การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์ เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเชื่อมต่อ TCP ที่พอร์ต 22
SSH เริ่มต้นด้วยการเชื่อมต่อ TCP ไปยังพอร์ต 22 เมื่อสร้างการเชื่อมต่อแล้ว ไคลเอนต์และเซิร์ฟเวอร์จะแลกเปลี่ยนสตริงเวอร์ชัน เช่น SSH-2.0-OpenSSH_9.3 ซึ่งระบุเวอร์ชันของโพรโทคอลและการนำไปใช้งาน การแลกเปลี่ยนเวอร์ชันนี้ช่วยให้ทั้งสองฝ่ายยืนยันความเข้ากันได้ก่อนดำเนินการต่อ
ขั้นตอนการเจรจาอัลกอริทึม
หลังจากแลกเปลี่ยนเวอร์ชันแล้ว ทั้งสองฝ่ายจะส่งแพ็กเก็ต SSH_MSG_KEXINIT ซึ่งแสดงรายการอัลกอริทึมที่รองรับ รายการเหล่านี้ครอบคลุมวิธีแลกเปลี่ยนกุญแจ ประเภทกุญแจโฮสต์ การเข้ารหัสแบบสมมาตร อัลกอริทึม MAC และการบีบอัด จุดร่วมของทั้งสองรายการจะเป็นตัวกำหนดอัลกอริทึมที่เลือกใช้สำหรับเซสชัน
การแลกเปลี่ยนกุญแจ Diffie-Hellman และ ECDH
กุญแจเซสชันถูกสร้างขึ้นโดยใช้อัลกอริทึมแลกเปลี่ยนกุญแจ เช่น Diffie-Hellman หรือ ECDH ไคลเอนต์และเซิร์ฟเวอร์ต่างสร้างคู่กุญแจชั่วคราว แลกเปลี่ยนค่ากุญแจสาธารณะ และคำนวณข้อมูลลับร่วมเดียวกันอย่างอิสระ ข้อมูลลับร่วมนี้ใช้เป็นจุดตั้งต้นในการสร้างกุญแจเซสชัน โดยไม่เคยถูกส่งผ่านเครือข่ายโดยตรง
การยืนยันตัวตนด้วยกุญแจโฮสต์ของเซิร์ฟเวอร์
เซิร์ฟเวอร์พิสูจน์ตัวตนของตนเองด้วยการลงลายเซ็นบนค่าแฮชจากการแลกเปลี่ยนกุญแจ โดยใช้กุญแจส่วนตัวของโฮสต์ กุญแจโฮสต์อาจเป็น RSA, ECDSA หรือรูปแบบ Ed25519 สมัยใหม่ ไคลเอนต์ใช้กุญแจสาธารณะที่สอดคล้องกันเพื่อตรวจสอบลายเซ็นนี้ และยืนยันว่ากำลังสื่อสารกับเซิร์ฟเวอร์จริง ไม่ใช่ผู้ปลอมแปลง
ความเชื่อถือเมื่อใช้งานครั้งแรก (TOFU)
เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ใหม่เป็นครั้งแรก ไคลเอนต์จะยังไม่รู้จักกุญแจสาธารณะของโฮสต์ SSH จะแสดงลายนิ้วมือของกุญแจและขอให้ผู้ใช้ยอมรับ โมเดลความเชื่อถือเมื่อใช้งานครั้งแรกนี้จะจัดเก็บกุญแจไว้ใน known_hosts และตรวจจับการเปลี่ยนแปลงในการเชื่อมต่อครั้งต่อไป พร้อมเตือนถึงความเป็นไปได้ของการโจมตีแบบคนกลาง
การตรวจสอบลายนิ้วมือกุญแจโฮสต์
วิธีที่ปลอดภัยที่สุดในการตรวจสอบกุญแจโฮสต์ของเซิร์ฟเวอร์ใหม่คือใช้ช่องทางนอกระบบ ผู้ดูแลระบบอาจอ่านลายนิ้วมือของเซิร์ฟเวอร์ด้วยตนเองหรือผ่านช่องทางที่ปลอดภัยและตรวจสอบแล้ว จากนั้นจึงเปรียบเทียบกับข้อมูลที่ไคลเอนต์ SSH แสดง วิธีนี้ช่วยป้องกันการยอมรับกุญแจปลอมโดยไม่ตั้งใจในการเชื่อมต่อครั้งแรก
โครงสร้างไฟล์ known_hosts
ไฟล์ known_hosts จัดเก็บบรรทัดในรูปแบบ: ชื่อโฮสต์ อัลกอริทึม base64-key แต่ละรายการแสดงถึงตัวตนของเซิร์ฟเวอร์ที่เชื่อถือได้ เมื่อคุณเชื่อมต่อกับโฮสต์ที่มีอยู่ใน known_hosts อยู่แล้ว SSH จะตรวจสอบว่ากุญแจที่นำเสนอตรงกับกุญแจที่จัดเก็บไว้ หากไม่ตรงกัน ระบบจะปฏิเสธการเชื่อมต่อ
การสร้างกุญแจเซสชัน
หลังจากแลกเปลี่ยนกุญแจแล้ว ทั้งสองฝ่ายจะสร้างกุญแจเซสชันอย่างอิสระ โดยใช้ข้อมูลลับร่วม ค่าแฮชจากการแลกเปลี่ยน และตัวระบุเซสชัน ระบบจะสร้างกุญแจแยกกันสำหรับการสื่อสารแต่ละทิศทาง และแยกสำหรับการเข้ารหัสกับการทำงานของ MAC ดังนั้นกุญแจที่ใช้กับข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์จึงแตกต่างจากกุญแจที่ใช้ในทิศทางตรงกันข้าม
ขั้นตอนการสื่อสารที่เข้ารหัส
เมื่อสร้างกุญแจเซสชันแล้ว การสื่อสาร SSH ที่เกิดขึ้นต่อจากนั้นทั้งหมดจะถูกเข้ารหัสและยืนยันความถูกต้อง โพรโทคอลเข้ารหัสที่เจรจาได้ เช่น AES-256-GCM หรือ ChaCha20-Poly1305 จะปกป้องความลับของข้อมูล ขณะที่ MAC ช่วยรับรองความถูกต้องครบถ้วน แม้แต่ชื่อผู้ใช้และข้อมูลรับรองการยืนยันตัวตนก็ถูกส่งอยู่ภายในช่องสัญญาณที่เข้ารหัสนี้
เปรียบเทียบประเภทกุญแจโฮสต์ SSH
กุญแจโฮสต์ RSA ขนาด 2048 หรือ 4096 บิตรองรับระบบต่าง ๆ อย่างแพร่หลาย แต่ทำงานช้ากว่า กุญแจ ECDSA ที่อาศัยเส้นโค้งของ NIST ทำงานได้เร็วกว่า แต่บางฝ่ายไม่ไว้วางใจพารามิเตอร์เส้นโค้งของ NIST กุญแจ Ed25519 ที่อาศัย Curve25519 เป็นคำแนะนำสมัยใหม่ เพราะมีขนาดเล็ก ทำงานเร็ว มีความปลอดภัยสูง และไม่พึ่งพาพารามิเตอร์เส้นโค้งของ NIST เซิร์ฟเวอร์ SSH สมัยใหม่ส่วนใหญ่เปิดให้ใช้ Ed25519 เป็นค่าเริ่มต้น
สรุปการสร้างเซสชัน
กระบวนการจับมือของ SSH ประกอบด้วยการเชื่อมต่อ TCP การแลกเปลี่ยนเวอร์ชัน การเจรจาอัลกอริทึม การแลกเปลี่ยนกุญแจเพื่อสร้างกุญแจเซสชัน การตรวจสอบกุญแจโฮสต์ของเซิร์ฟเวอร์ และการยืนยันตัวตนของผู้ใช้ ขั้นตอนทั้งหมดหลังการแลกเปลี่ยนเวอร์ชันจะเกิดขึ้นภายในช่องสัญญาณที่เข้ารหัสและได้รับการปกป้องความถูกต้องครบถ้วน ซึ่งสร้างขึ้นในขั้นตอนการแลกเปลี่ยนกุญแจ
การตรวจสอบกุญแจโฮสต์
หลังจากการเชื่อมต่อครั้งแรก ไคลเอนต์จะตรวจสอบกุญแจโฮสต์ของเซิร์ฟเวอร์ SSH ในการเชื่อมต่อครั้งต่อไปได้อย่างไร
ทบทวนกระบวนการจับมือของ SSH
ในบทเรียนนี้: TCP เชื่อมต่อที่พอร์ต 22 มีการแลกเปลี่ยนสตริงเวอร์ชัน การเจรจาอัลกอริทึมเลือกโพรโทคอลเข้ารหัสและวิธีแลกเปลี่ยนกุญแจ ECDH หรือ DH สร้างข้อมูลลับร่วม มีการสร้างกุญแจเซสชันแยกกันสำหรับแต่ละทิศทาง เซิร์ฟเวอร์ยืนยันตัวตนด้วยลายเซ็นจากกุญแจโฮสต์ และไคลเอนต์ตรวจสอบกับ known_hosts โดยใช้ TOFU ในการเชื่อมต่อครั้งแรก
คำถามที่พบบ่อย
บทเรียน “การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์”
ติดตามการจับมือของ SSH-2 ตั้งแต่การแลกเปลี่ยนรุ่น การเจรจาอัลกอริทึม การแลกเปลี่ยนกุญแจ ไปจนถึงการยืนยันตัวตนของบริการ คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์
- การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์
- เทคนิคการสร้างอุโมงค์ SSH และการส่งต่อพอร์ต
- การเสริมความแข็งแกร่ง SSH และแนวทางปฏิบัติที่ดีด้านการตรวจสอบ