ไทย

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช

การโจมตีส่วนขยายความยาว: ทำไม SHA-256(ความลับ + ข้อความ) ไม่ใช่ MAC

· เหตุใดจึงสำคัญ

sha-256 การเข้ารหัส ความปลอดภัย

บล็อกสถานะ SHA-256 จะถูกขยายด้วยไบต์เพิ่มเติมเพื่อสร้างแฮชที่ถูกต้อง
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

การเตรียมข้อมูลลับไว้ล่วงหน้าในข้อความและการแฮชดูเหมือนว่าจะมีการตรวจสอบสิทธิ์ แต่โครงสร้างของ SHA-256 ช่วยให้ผู้โจมตีขยายข้อความโดยไม่ทราบความลับได้ โพสต์นี้จะอธิบายการโจมตีและการแก้ไข

ลายเซ็นคำขอแบบโฮมเมด — แฮช (ความลับ + เนื้อหา) และเหตุใดจึงรู้สึกปลอดภัย

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

การเตรียมความลับก่อนที่จะแฮชนั้นน่าดึงดูดใจเพราะมีเพียงเจ้าของความลับเท่านั้นที่สามารถคำนวณแฮชใหม่ได้ หากข้อความเปลี่ยนแปลง แฮชก็จะเปลี่ยนไปด้วย ดังนั้นจึงดูเหมือนเป็นการพิสูจน์ความถูกต้อง API อาจลงนามคำขอโดยเชื่อมความลับที่แชร์กับเนื้อหาคำขอ จากนั้นแฮชผลลัพธ์และรวมแฮชนั้นไว้ในคำขอ เซิร์ฟเวอร์รับเนื้อหา คำนวณแฮชใหม่ด้วยสำเนาของข้อมูลลับ และตรวจสอบว่าตรงกันหรือไม่ หากผู้โจมตีเปลี่ยนเนื้อหา แฮชจะไม่ตรงกัน—หรืออย่างที่นักพัฒนาคิด

Merkle–Damgård รั่วไหลสถานะของมัน — สรุปสุดท้ายคือสถานะภายใน ดังนั้นผู้โจมตีจึงสามารถแฮชต่อจากจุดที่คุณหยุดได้

SHA-256 เป็นของตระกูลที่เรียกว่าฟังก์ชันแฮช Merkle–Damgård ฟังก์ชันเหล่านี้จะประมวลผลอินพุตในบล็อกขนาดคงที่ โดยเชื่อมโยงฟังก์ชันการบีบอัดที่รับสถานะก่อนหน้าและบล็อกปัจจุบัน แล้วเอาต์พุตเป็นสถานะใหม่ ฟังก์ชั่นการบีบอัดเป็นเพียงการเข้ารหัสลับแบบดั้งเดิมภายใน กลยุทธ์การผูกมัดและแผนการขยายทำให้งานก่อสร้างทั้งหมด การสรุปขั้นสุดท้ายเป็นเพียงสถานะสุดท้ายที่พิมพ์เป็นเลขฐานสิบหก นี่ไม่ใช่เรื่องบังเอิญ: ผลลัพธ์คือสถานะภายใน ใครก็ตามที่เห็นการสรุปข้อมูลจะมีสถานะที่แน่นอนที่จำเป็นในการแฮชต่อจากจุดนั้น

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

วิธีการทำงานของส่วนขยาย — การเติมช่องว่างภายในและข้อมูลพิเศษเพื่อสร้างแฮชที่ถูกต้องสำหรับข้อความที่ยาวขึ้น

อัลกอริธึมที่แตกต่างกันจะได้รับผลกระทบแตกต่างกันไปตามการขยายความยาว SHA-1 มีช่องโหว่: ผู้โจมตีสามารถสังเกตการสรุป SHA-1 และขยายข้อความได้ SHA-256 มีช่องโหว่ในลักษณะเดียวกันทุกประการ SHA-512 ยังเสี่ยงต่อการโจมตีแบบส่วนขยายอีกด้วย SHA-384 ต่อต้านการขยายความยาวเนื่องจากถูกสร้างขึ้นเป็น SHA-512 ตัดทอนเป็น 384 bits เอาต์พุตของฟังก์ชันการบีบอัดมีความยาวมากกว่าไดเจสต์ที่เผยแพร่ ดังนั้นผู้โจมตีจึงไม่มีข้อมูลเพียงพอที่จะทำการแฮชต่อไป โครงสร้างฟองน้ำที่ใช้ใน SHA-3 ยังต้านทานได้เนื่องจากไม่รั่วซึมในสถานะภายใน

การทำความเข้าใจว่าอัลกอริธึมใดที่มีช่องโหว่จำเป็นต้องรู้บางอย่างเกี่ยวกับขนาดฟังก์ชันการบีบอัดเทียบกับขนาดการแยกย่อยที่เผยแพร่ SHA-256 เผยแพร่ 256 bits และสถานะของฟังก์ชันการบีบอัดก็เป็น 256 bits เช่นกัน ดังนั้นการแยกย่อยจึงเป็นสถานะทั้งหมด ผู้โจมตีมีทุกสิ่งที่จำเป็นเพื่อดำเนินการต่อ SHA-384 เผยแพร่ 384 bits แต่สถานะของฟังก์ชันการบีบอัดพื้นฐานคือ 512 bits เนื่องจาก SHA-384 ถูกสร้างขึ้นบน SHA-512 การสรุปข้อมูลเปิดเผยเพียง 384 จาก 512 bits เหล่านั้น ทำให้ผู้โจมตีไม่รู้จัก 128 bits นี่เป็นคุณสมบัติการออกแบบโดยเจตนาของ SHA-384 ที่ให้ความต้านทานนี้

โครงสร้าง SHA-1, SHA-256 และ SHA-512 ที่รองรับจะแสดงสถานะเต็ม SHA-384 การตัดทอนจะเปลี่ยนขอบเขตส่วนขยาย

การแก้ไขการตรวจสอบสิทธิ์ข้อความด้วยความลับที่แชร์คือ HMAC ซึ่งเป็นรหัสตรวจสอบสิทธิ์ข้อความแบบคีย์แฮช HMAC ไม่ได้เติมข้อมูลลับและแฮช แต่จะใช้ความลับในการดำเนินการแฮชที่ซ้อนกันสองครั้งโดยใช้รูปแบบการเติมเฉพาะที่เรียกว่าแผ่นด้านในและด้านนอก โครงสร้างคือ HMAC(ความลับ, ข้อความ) = SHA256(secret_XOR_outer_pad, SHA256(secret_XOR_inner_pad, ข้อความ)) วิธีการแบบซ้อนนี้จะปิดช่องว่างส่วนขยายความยาว เนื่องจากแม้ว่าผู้โจมตีจะทราบข้อมูลย่อยของแฮชภายในแล้ว พวกเขาไม่สามารถแฮชต่อไปได้หากไม่มีความลับ

เหตุผลที่ต้องแยกย่อยและการดำเนินการ HMAC แยกจากกันคือเพื่อหลีกเลี่ยงข้อผิดพลาดทั่วไปในการดำเนินการทั้งสองอย่างสลับกัน Developer ที่เรียนรู้เกี่ยวกับการแฮชผ่านเครื่องมือที่ทำทั้งสองอย่างอาจลืมไปว่าใช้อันไหนในการเขียนโค้ด การแยกการคำนวณการแยกย่อยจะทำให้ตัวเลือกมีความชัดเจน และเสริมการเรียนรู้ว่าการรับรองความถูกต้องจำเป็นต้องมี HMAC หรือลายเซ็น เครื่องคำนวณแฮช ToolAcre SHA มีป้ายกำกับการแยกย่อยอย่างชัดเจน และเอกสารประกอบอธิบายว่า HMAC เป็นการดำเนินการที่แตกต่างไปจากเดิมอย่างสิ้นเชิง

HMAC เป็นการแก้ไข — โครงสร้างแบบซ้อนที่ปิดช่องว่างและเหตุใดจึงเป็นคำตอบมาตรฐาน

ตัวอย่างแนวคิดของการขยายความยาวใช้ได้กับเวกเตอร์ทดสอบ abc ที่คุ้นเคย การคำนวณ SHA-256 บนข้อความ ASCII abc จะสร้างไดเจสต์ ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad สมมติว่าการแยกย่อยนี้เป็นผลมาจากการแฮชความลับ + abc ด้วยความลับ 5 ไบต์ โดยให้อินพุตทั้งหมด 8 bytes SHA-256 ประมวลผลอินพุตในบล็อก 64 ไบต์ ดังนั้นบล็อกแรกและบล็อกเดียวจึงถูกเสริมด้วยความยาวของข้อความและไบต์เสริมอื่นๆ ผู้โจมตีเห็นข้อมูลสรุปและต้องการสร้างข้อความที่ขึ้นต้นด้วย abc ตามด้วยข้อมูลเพิ่มเติม

ไม่สามารถต่อท้าย abc ได้โดยตรง เนื่องจากไม่ทราบช่องว่างภายในที่แน่นอนที่เพิ่มเข้าไปในแฮช อย่างไรก็ตาม พวกเขาสามารถคำนวณได้ว่าข้อความที่มีเบาะแบบเต็มจะต้องเป็นอย่างไร: abc บวกกับช่องว่างที่จำเป็นสำหรับอินพุต 8 ไบต์ ไปยังบล็อก 64 ไบต์ จากนั้นพวกเขาจะผนวกข้อมูลเพิ่มเติม คำนวณช่องว่างภายในสำหรับความยาวทั้งหมดใหม่ และแฮชการรวมกันโดยถือว่าการแยกย่อยที่สังเกตได้เป็นสถานะเริ่มต้น ผลลัพธ์ที่ได้คือไดเจสต์ SHA-256 ที่ถูกต้องที่เซิร์ฟเวอร์จะยอมรับ เนื่องจากเซิร์ฟเวอร์จะเติมข้อมูลลับไว้ข้างหน้าและคำนวณแฮชเดียวกัน

ตัวอย่างการทำงาน — การแนะนำแนวคิดในการขยายข้อความที่เซ็นชื่อ โดยไม่มีเป้าหมายที่ใช้งานจริง

เพื่อป้องกันการโจมตีนี้ในระบบจริง นักพัฒนาไม่ควรพยายามสร้างการตรวจสอบสิทธิ์จากแฮชธรรมดา HMAC คือคำตอบมาตรฐาน และ ToolAcre SHA เครื่องคำนวณแฮชเป็นเครื่องมือสำหรับการคำนวณการแยกย่อยแบบธรรมดาสำหรับการตรวจสอบความสมบูรณ์ การแฮชเนื้อหา และวัตถุประสงค์ที่ไม่ได้รับการรับรองความถูกต้องที่คล้ายกัน ตัวอย่างของการใช้อย่างปลอดภัยของการแยกย่อย SHA-256 แบบธรรมดา ได้แก่ การตรวจสอบไฟล์ ซึ่งผู้โจมตีไม่สามารถควบคุมทั้งไฟล์และการแยกย่อยได้ พื้นที่เก็บข้อมูลที่ระบุแอดเดรสเนื้อหาได้ โดยที่แฮชเป็นคีย์การค้นหา และลายเซ็นดิจิทัลรวมกับลายเซ็น โดยที่ลายเซ็นจะให้การรับรองความถูกต้อง

ขอบเขตทั้งหมดของปัญหานี้รวมถึงอัลกอริทึมอื่นๆ ที่เบราว์เซอร์มีให้ SHA-1 มีความเสี่ยงต่อการขยายความยาวและถูกทำลายโดยการเข้ารหัสก่อนที่จะมีความเกี่ยวข้อง เครื่องคิดเลข ToolAcre ติดป้ายกำกับ SHA-1 เป็นแบบเดิมเท่านั้น และอธิบายการโจมตีแบบชนกันที่ทำให้ไม่เหมาะสมสำหรับแอปพลิเคชันใหม่ สำหรับแอปพลิเคชันใหม่ SHA-256 เป็นตัวเลือกที่เหมาะสมสำหรับการแยกย่อยแบบธรรมดา และหากจำเป็นต้องมีการตรวจสอบสิทธิ์ HMAC พร้อมด้วย SHA-256 คือคำตอบ SHA-384 และ SHA-512 ต่างก็มีช่องโหว่ แต่ SHA-384 ได้รับการปกป้องโดยการตัดทอน

สิ่งนี้ไม่ครอบคลุมถึง — เครื่องคิดเลข ToolAcre คำนวณการแยกย่อยแบบธรรมดา ไม่ใช่ HMAC; โพสต์อธิบายว่าเหตุใดความแตกต่างจึงมีความสำคัญ

เมื่อสร้างแบบจำลองทางจิตของฟังก์ชันแฮช การสร้าง Merkle–Damgård และการขยายความยาวกลายเป็นแนวคิดหลัก ฟังก์ชันแฮชต้องจัดการความยาวอินพุตที่กำหนดและสร้างเอาต์พุตคงที่ วิธีการทำคือการผูกมัดฟังก์ชันการบีบอัดบล็อกต่อบล็อก และวิธีที่สถานะสุดท้ายถูกแปลงเป็นเอาต์พุตมีความสำคัญอย่างมาก หากสถานะสุดท้ายถูกส่งออกทั้งหมด เอาต์พุตนั้นจะมีข้อมูลทั้งหมดที่จำเป็นในการแฮชต่อไป หากสถานะสุดท้ายถูกตัดทอน บางส่วนจะถูกซ่อนไว้

สำหรับนักพัฒนาที่อ่านเกี่ยวกับการโจมตีส่วนขยายความยาวเป็นครั้งแรก คำถามคือ จะรู้ได้อย่างไรว่าสิ่งนี้ส่งผลต่อกรณีการใช้งานของพวกเขาหรือไม่ หากอินพุตของแฮชเป็นค่าคงที่สาธารณะและแฮชถูกใช้เป็นคีย์การค้นหาหรือลายนิ้วมือ ส่วนขยายความยาวจะไม่เกี่ยวข้อง หากใช้แฮชเพื่อตรวจสอบสิทธิ์ข้อความเมื่อทั้งสองฝ่ายแบ่งปันความลับ ส่วนขยายความยาวถือเป็นช่องโหว่ที่สำคัญ และ HMAC คือวิธีแก้ปัญหา เครื่องคำนวณแฮช ToolAcre SHA จะแสดงการแยกย่อยและจำนวนไบต์ ทำให้ชัดเจนว่าสิ่งเหล่านี้เป็นเอาต์พุตจากการคำนวณ ไม่ใช่กลไกการตรวจสอบสิทธิ์

ประเด็นสำคัญ: ใช้ MAC สำหรับการตรวจสอบสิทธิ์ — เครื่องคำนวณแฮช ToolAcre SHA ใช้สำหรับการแยกย่อยความสมบูรณ์ การรับรองความถูกต้องจำเป็นต้องมี HMAC หรือลายเซ็น

เมื่อใช้สิ่งนี้กับระบบที่ใช้งานจริง หลักการก็ตรงไปตรงมา: ห้ามใช้แฮชเปล่าในการตรวจสอบสิทธิ์เมื่อมีข้อมูลลับเข้ามาเกี่ยวข้อง HMAC คือโครงสร้างมาตรฐานที่ปิดเวกเตอร์การโจมตีส่วนขยายความยาวทั้งหมด SHA-256 และ SHA-384 ต่างก็ปลอดภัยตามวัตถุประสงค์ที่กำหนดไว้เมื่อใช้อย่างถูกต้อง การทำความเข้าใจประเด็นสำคัญสามประการ ได้แก่ Merkle–Damgård เปิดเผยสถานะของตนในส่วนสรุป, SHA-384 ตัดทอนเพื่อซ่อนส่วนหนึ่งของสถานะ และ HMAC ใช้โครงสร้างแบบซ้อนเพื่อป้องกันการขยาย จะทำให้นักพัฒนามีเครื่องมือในการตัดสินใจเลือกที่ถูกต้อง

เครื่องคำนวณแฮช ToolAcre SHA รวบรวมคำสอนนี้: โดยให้การสรุปแบบธรรมดาสำหรับการเรียนรู้และสำหรับการใช้งานที่ไม่ได้รับการรับรองความถูกต้องตามกฎหมาย โดยจะติดป้ายกำกับ SHA-1 ว่าเป็นแบบดั้งเดิม และจะไม่นำ HMAC ไปใช้ เนื่องจากการดำเนินการนั้นอยู่ในบริบทที่แตกต่างกัน เมื่อนักพัฒนาเข้าถึงเครื่องคำนวณแฮชธรรมดาเพื่อตรวจสอบความถูกต้องของคำขอ ตำแหน่งของเครื่องมือและเอกสารประกอบจะนำทางพวกเขาไปสู่ ​​HMAC และลายเซ็นในฐานะเครื่องมือที่เหมาะสม ชุดเครื่องมือ ToolAcre มุ่งเน้นไปที่สิ่งที่ Web Crypto ของเบราว์เซอร์มอบให้โดยตรง และอธิบายขอบเขตที่แต่ละพื้นฐานมีความเหมาะสม