Digest Authentication แตกต่างจาก Basic Authentication อย่างไรนอกเหนือจากการส่งหนังสือรับรองเป็นข้อความธรรมดา
Digest Authentication แตกต่างจาก Basic Authentication อย่างไรนอกเหนือจากการส่งหนังสือรับรองเป็นข้อความธรรมดา
คำตอบ:
ข้อแตกต่างที่สำคัญคือไม่จำเป็นต้องส่งชื่อผู้ใช้และรหัสผ่านข้ามสายในรูปแบบข้อความธรรมดา นอกจากนี้ยังไม่สามารถโจมตีซ้ำได้อีกด้วยเนื่องจากใช้หมายเลขครั้งเดียวจากเซิร์ฟเวอร์
เซิร์ฟเวอร์ให้หมายเลขใช้งานครั้งเดียว (nonce) ไคลเอ็นต์ซึ่งรวมเข้ากับชื่อผู้ใช้ขอบเขตรหัสผ่านและคำขอ URI ไคลเอนต์รันฟิลด์เหล่านั้นทั้งหมดผ่านวิธีการแฮช MD5 เพื่อสร้างคีย์แฮช
จะส่งคีย์แฮชนี้ไปยังเซิร์ฟเวอร์พร้อมกับชื่อผู้ใช้และขอบเขตเพื่อพยายามตรวจสอบสิทธิ์
ฝั่งเซิร์ฟเวอร์ใช้วิธีการเดียวกันในการสร้างแฮชคีย์เท่านั้นแทนที่จะใช้รหัสผ่านที่พิมพ์ลงในเบราว์เซอร์เซิร์ฟเวอร์จะค้นหารหัสผ่านที่คาดไว้สำหรับผู้ใช้จากฐานข้อมูลผู้ใช้ ค้นหารหัสผ่านที่จัดเก็บไว้สำหรับชื่อผู้ใช้นี้ทำงานผ่านอัลกอริทึมเดียวกันและเปรียบเทียบกับสิ่งที่ไคลเอ็นต์ส่งมา หากตรงกันก็จะได้รับสิทธิ์การเข้าถึงมิฉะนั้นจะสามารถส่ง 401 Unauthorized กลับมาได้ (ไม่มีการเข้าสู่ระบบหรือการเข้าสู่ระบบที่ล้มเหลว) หรือ 403 Forbidden (การเข้าถึงถูกปฏิเสธ)
การตรวจสอบ Digest เป็นมาตรฐานใน RFC2617 มีภาพรวมที่ดีใน Wikipedia :
คุณสามารถคิดได้ดังนี้:
แฮชของข้อมูลประจำตัวจะถูกส่งผ่านสาย
HA1 = MD5(username:realm:password)
วิธีเดียวที่จะได้รับแฮช HA1 ของหนังสือรับรองคือการรู้รหัสผ่าน เซิร์ฟเวอร์รู้จัก HA1 แต่ไม่ใช่รหัสผ่านที่สร้างขึ้น หากผู้โจมตีรู้จัก HA1 ก็สามารถเข้าสู่ระบบได้ ดังนั้นจึงไม่ส่งลงสาย แฮชเพิ่มเติมตาม nonce ฯลฯ จะทำก่อนที่จะทำสิ่งนี้และสิ่งนี้ต้องสอดคล้องกับการคำนวณที่คล้ายกันที่ทำบนเซิร์ฟเวอร์ ดังนั้นตราบใดที่เซิร์ฟเวอร์ยังคงรักษา HA1 ไว้เป็นส่วนตัวระบบก็จะปลอดภัย