DigestและBasicแตกต่างกันอย่างไร Authenticationอย่างไร
DigestและBasicแตกต่างกันอย่างไร Authenticationอย่างไร
คำตอบ:
การรับรองความถูกต้องแยกย่อยสื่อสารข้อมูลประจำตัวในรูปแบบที่เข้ารหัสโดยใช้ฟังก์ชั่นแฮช: ชื่อผู้ใช้รหัสผ่านเซิร์ฟเวอร์ที่ให้ค่า nonce วิธี HTTP และ URI ที่ร้องขอ
ในขณะที่การรับรองความถูกต้องเบื้องต้นใช้ไม่มีการเข้ารหัส base64 ที่ไม่มีการเข้ารหัส
ดังนั้นโดยทั่วไปควรใช้การรับรองความถูกต้องพื้นฐานเมื่อมีการระบุความปลอดภัยของเลเยอร์การขนส่งเช่น https
ดูRFC-2617สำหรับรายละเอียดเต็มไปด้วยเลือดทั้งหมด
การตรวจสอบสิทธิ์การเข้าถึง HTTP เบื้องต้น
การรับรองความถูกต้องขั้นพื้นฐานใช้การเข้ารหัสbase64 (ไม่ใช่การเข้ารหัส) เพื่อสร้างสตริงการเข้ารหัสซึ่งมีข้อมูลชื่อผู้ใช้และรหัสผ่าน HTTP Basic ไม่จำเป็นต้องติดตั้งผ่าน SSL แต่ถ้าไม่เป็นเช่นนั้นจะไม่ปลอดภัยเลย ดังนั้นฉันจะไม่ได้เพลิดเพลินกับความคิดที่จะใช้มันโดยไม่ต้อง
ข้อดี:
จุดด้อย:
โดยสรุป - หากคุณมีการควบคุมลูกค้าหรือสามารถมั่นใจได้ว่าพวกเขาใช้ SSL, HTTP Basic เป็นตัวเลือกที่ดี ความช้าของ SSL สามารถถูกยกเลิกได้ด้วยความเร็วเพียงการร้องขอเพียงครั้งเดียว
ไวยากรณ์ของการพิสูจน์ตัวตนพื้นฐาน
Value = username:password
Encoded Value = base64(Value)
Authorization Value = Basic <Encoded Value>
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>
การตรวจสอบสิทธิ์ HTTP Digest Access การตรวจสอบสิทธิ์การเข้าถึง
Digest ใช้วิธีการแฮช (เช่นข้อมูลย่อยหมายถึงตัดเป็นชิ้นเล็ก ๆ ) เพื่อสร้างผลลัพธ์การเข้ารหัส การตรวจสอบสิทธิ์การเข้าถึง HTTP Digest เป็นรูปแบบการตรวจสอบที่ซับซ้อนมากขึ้นซึ่งทำงานดังนี้:
ข้อดี:
จุดด้อย:
โดยสรุป HTTP Digest นั้นมีความเสี่ยงต่อการโจมตีอย่างน้อยสองครั้งในขณะที่เซิร์ฟเวอร์ที่ใช้การเข้ารหัสที่รัดกุมสำหรับรหัสผ่านที่มี HTTP Basic ผ่าน SSL นั้นมีโอกาสน้อยที่จะแบ่งปันช่องโหว่เหล่านี้
หากคุณไม่สามารถควบคุมลูกค้าของคุณได้ แต่พวกเขาสามารถพยายามทำการรับรองความถูกต้องเบื้องต้นโดยไม่ใช้ SSL ซึ่งมีความปลอดภัยน้อยกว่า Digest
RFC 2069 ไวยากรณ์การตรวจสอบสิทธิ์การเข้าถึง Digest
Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)
RFC 2617 ไวยากรณ์การตรวจสอบสิทธิ์การเข้าถึง Digest
Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added
ในบุรุษไปรษณีย์มีลักษณะดังนี้:
บันทึก:
ให้เราเห็นความแตกต่างระหว่างการตรวจสอบความถูกต้องHTTPสองอย่างโดยใช้Wireshark
(เครื่องมือในการวิเคราะห์แพ็กเก็ตที่ส่งหรือรับ)
1. Http การรับรองความถูกต้องเบื้องต้น
ทันทีที่ไคลเอนต์พิมพ์ชื่อผู้ใช้ที่ถูกต้อง: รหัสผ่านตามที่ร้องขอโดยเว็บเซิร์ฟเวอร์เว็บ - เซิร์ฟเวอร์จะตรวจสอบในฐานข้อมูลหากข้อมูลรับรองถูกต้องและให้การเข้าถึงทรัพยากร
นี่คือวิธีการส่งและรับแพ็กเก็ต:
ในแพคเก็ตแรกไคลเอนต์กรอกข้อมูลประจำตัวโดยใช้วิธีการPOSTที่ทรัพยากร - lab/webapp/basicauth
. ในการคืนเซิร์ฟเวอร์ตอบกลับด้วยรหัสตอบกลับ http 200 okคือชื่อผู้ใช้: รหัสผ่านถูกต้อง
ตอนนี้ในAuthorization
ส่วนหัวมันแสดงให้เห็นว่ามันเป็นการอนุญาตขั้นพื้นฐานตามด้วยสตริงสุ่มบางส่วนสตริงนี้เป็นข้อมูลประจำตัวที่เข้ารหัส (Base64)รุ่นadmin:aadd
(รวมถึงลำไส้ใหญ่)
2. Http Digest Authentication (rfc 2069)
จนถึงตอนนี้เราได้เห็นแล้วว่าการรับรองความถูกต้องขั้นพื้นฐานส่งชื่อผู้ใช้: รหัสผ่านในแบบธรรมดาผ่านเครือข่าย แต่ Digest Auth ส่งHASHของรหัสผ่านโดยใช้อัลกอริทึมแฮช
นี่คือแพ็กเก็ตที่แสดงการร้องขอที่ทำโดยไคลเอนต์และการตอบสนองจากเซิร์ฟเวอร์
ทันทีที่ไคลเอนต์พิมพ์ข้อมูลประจำตัวที่ร้องขอโดยเซิร์ฟเวอร์รหัสผ่านจะถูกแปลงเป็นresponse
อัลกอริทึมที่ใช้และจากนั้นจะถูกส่งไปยังเซิร์ฟเวอร์หากฐานข้อมูลเซิร์ฟเวอร์มีการตอบสนองเช่นเดียวกับที่ลูกค้าให้เซิร์ฟเวอร์เข้าถึงทรัพยากร มิฉะนั้นข้อผิดพลาด401
ในข้างต้นAuthorization
ที่response
สตริงจะคำนวณโดยใช้ค่าของUsername
, Realm
, Password
, http-method
, URI
และNonce
ตามที่แสดงในภาพ:
ดังนั้นเราจะเห็นได้ว่า Digest Authentication มีความปลอดภัยมากกว่าเนื่องจากเกี่ยวข้องกับ Hashing (การเข้ารหัส MD5) ดังนั้นเครื่องมือดมกลิ่นแพ็คเก็ตจึงไม่สามารถดมรหัสผ่านได้แม้ว่าใน Auth พื้นฐานจะมีรหัสผ่านที่แสดงบน Wireshark
การพิสูจน์ตัวตนพื้นฐานใช้การเข้ารหัสฐาน64เพื่อสร้างสตริงการเข้ารหัสซึ่งมีข้อมูลชื่อผู้ใช้และรหัสผ่าน
การตรวจสอบสิทธิ์การเข้าถึงแบบแยกย่อยใช้วิธีการแฮชเพื่อสร้างผลลัพธ์การเข้ารหัส