ฟังก์ชัน Cryptography Hash
ฟังก์ชันแฮชมีประโยชน์อย่างยิ่งและปรากฏในแอปพลิเคชันการรักษาความปลอดภัยข้อมูลเกือบทั้งหมด
ฟังก์ชันแฮชเป็นฟังก์ชันทางคณิตศาสตร์ที่แปลงค่าอินพุตตัวเลขเป็นค่าตัวเลขอื่นที่บีบอัด อินพุตไปยังฟังก์ชันแฮชมีความยาวโดยพลการ แต่เอาต์พุตจะมีความยาวคงที่เสมอ
ค่าที่ส่งกลับโดยฟังก์ชันแฮชจะถูกเรียก message digest หรือเพียงแค่ hash values. ภาพต่อไปนี้แสดงฟังก์ชันแฮช -
คุณสมบัติของฟังก์ชันแฮช
คุณสมบัติทั่วไปของฟังก์ชันแฮชคือ -
Fixed Length Output (Hash Value)
ฟังก์ชันแฮชจะปกปิดข้อมูลที่มีความยาวโดยพลการเป็นความยาวคงที่ กระบวนการนี้มักเรียกว่าhashing the data.
โดยทั่วไปแฮชจะมีขนาดเล็กกว่าข้อมูลอินพุตมากดังนั้นจึงมีการเรียกฟังก์ชันแฮชในบางครั้ง compression functions.
เนื่องจากแฮชเป็นตัวแทนของข้อมูลขนาดใหญ่ที่เล็กกว่าจึงเรียกอีกอย่างว่าไฟล์ digest.
ฟังก์ชันแฮชที่มีเอาต์พุต n บิตเรียกว่าไฟล์ n-bit hash function. ฟังก์ชันแฮชยอดนิยมสร้างค่าระหว่าง 160 ถึง 512 บิต
Efficiency of Operation
โดยทั่วไปสำหรับฟังก์ชันแฮช h ใด ๆ ที่มีอินพุต x การคำนวณ h (x) เป็นการดำเนินการที่รวดเร็ว
ฟังก์ชันแฮชในการคำนวณนั้นเร็วกว่าการเข้ารหัสแบบสมมาตรมาก
คุณสมบัติของฟังก์ชันแฮช
เพื่อให้เป็นเครื่องมือเข้ารหัสที่มีประสิทธิภาพฟังก์ชันแฮชจึงต้องการคุณสมบัติดังต่อไปนี้ -
Pre-Image Resistance
คุณสมบัตินี้หมายความว่าควรคำนวณย้อนกลับฟังก์ชันแฮชได้ยาก
กล่าวอีกนัยหนึ่งคือถ้าฟังก์ชันแฮช h สร้างค่าแฮช z ก็น่าจะเป็นกระบวนการที่ยากในการหาค่าอินพุต x ที่แฮชเป็น z
คุณสมบัตินี้ป้องกันผู้โจมตีที่มีเพียงค่าแฮชและพยายามค้นหาอินพุต
Second Pre-Image Resistance
คุณสมบัตินี้หมายถึงอินพุตและแฮชที่ได้รับมันน่าจะยากที่จะหาอินพุตอื่นที่มีแฮชเดียวกัน
กล่าวอีกนัยหนึ่งถ้าฟังก์ชันแฮช h สำหรับอินพุต x สร้างค่าแฮช h (x) ก็น่าจะยากที่จะหาค่าอินพุตอื่น ๆ y เช่นนั้น h (y) = h (x)
คุณสมบัติของฟังก์ชันแฮชนี้ป้องกันผู้โจมตีที่มีค่าอินพุตและแฮชและต้องการแทนที่ค่าที่แตกต่างกันเป็นค่าที่ถูกต้องแทนค่าอินพุตดั้งเดิม
Collision Resistance
คุณสมบัตินี้หมายความว่ามันยากที่จะหาอินพุตที่แตกต่างกันสองอินพุตที่มีความยาวใด ๆ ที่ส่งผลให้แฮชเดียวกัน คุณสมบัตินี้เรียกอีกอย่างว่าฟังก์ชันแฮชแบบไม่มีการชนกัน
กล่าวอีกนัยหนึ่งสำหรับฟังก์ชันแฮช h มันยากที่จะหาอินพุต x และ y ที่แตกต่างกันสองรายการดังนั้น h (x) = h (y)
เนื่องจากฟังก์ชันแฮชกำลังบีบอัดฟังก์ชันที่มีความยาวแฮชคงที่จึงเป็นไปไม่ได้ที่ฟังก์ชันแฮชจะไม่มีการชนกัน คุณสมบัติที่ไม่มีการชนกันนี้ยืนยันเพียงว่าการชนเหล่านี้น่าจะหาได้ยาก
คุณสมบัตินี้ทำให้ผู้โจมตีค้นหาค่าอินพุตสองค่าที่มีแฮชเดียวกันได้ยากมาก
นอกจากนี้หากฟังก์ชันแฮชทนต่อการชนกัน then it is second pre-image resistant.
การออกแบบอัลกอริทึมการแฮช
หัวใจสำคัญของการแฮชคือฟังก์ชันทางคณิตศาสตร์ที่ทำงานบนบล็อกข้อมูลขนาดคงที่สองบล็อกเพื่อสร้างรหัสแฮช ฟังก์ชันแฮชนี้เป็นส่วนหนึ่งของอัลกอริทึมการแฮช
ขนาดของแต่ละบล็อกข้อมูลจะแตกต่างกันไปขึ้นอยู่กับอัลกอริทึม โดยทั่วไปขนาดบล็อกจะอยู่ระหว่าง 128 บิตถึง 512 บิต ภาพประกอบต่อไปนี้แสดงให้เห็นถึงฟังก์ชันแฮช -
อัลกอริทึมการแฮชเกี่ยวข้องกับรอบของฟังก์ชันแฮชด้านบนเช่นการเข้ารหัสบล็อก แต่ละรอบจะใช้อินพุตที่มีขนาดคงที่โดยทั่วไปจะเป็นการรวมกันของบล็อกข้อความล่าสุดและเอาต์พุตของรอบสุดท้าย
กระบวนการนี้จะทำซ้ำหลายรอบเท่าที่จำเป็นในการแฮชข้อความทั้งหมด แผนผังของอัลกอริทึมการแฮชแสดงอยู่ในภาพประกอบต่อไปนี้ -
เนื่องจากค่าแฮชของบล็อกข้อความแรกจะกลายเป็นอินพุตสำหรับการดำเนินการแฮชที่สองซึ่งเอาต์พุตจะเปลี่ยนแปลงผลลัพธ์ของการดำเนินการที่สามและอื่น ๆ ผลกระทบนี้เรียกว่าavalanche ผลของการแฮช
เอฟเฟกต์ Avalanche ส่งผลให้ค่าแฮชที่แตกต่างกันอย่างมีนัยสำคัญสำหรับสองข้อความที่แตกต่างกันโดยข้อมูลแม้แต่บิตเดียว
เข้าใจความแตกต่างระหว่างฟังก์ชันแฮชและอัลกอริทึมอย่างถูกต้อง ฟังก์ชันแฮชสร้างโค้ดแฮชโดยดำเนินการกับข้อมูลไบนารีความยาวคงที่สองบล็อก
อัลกอริธึมการแฮชเป็นกระบวนการสำหรับการใช้ฟังก์ชันแฮชโดยระบุว่าข้อความจะถูกแยกออกอย่างไรและผลลัพธ์จากบล็อกข้อความก่อนหน้าจะถูกผูกเข้าด้วยกันอย่างไร
ฟังก์ชันแฮชยอดนิยม
ให้เราดูสั้น ๆ ฟังก์ชั่นแฮชยอดนิยม
ไดเจสต์ข้อความ (MD)
MD5 เป็นฟังก์ชันแฮชที่ได้รับความนิยมและใช้กันอย่างแพร่หลายมากที่สุดเป็นเวลาหลายปี
ตระกูล MD ประกอบด้วยฟังก์ชันแฮช MD2, MD4, MD5 และ MD6 มันถูกนำมาใช้เป็นมาตรฐานอินเทอร์เน็ต RFC 1321 มันเป็นฟังก์ชันแฮช 128 บิต
ไดเจสต์ MD5 ถูกนำมาใช้กันอย่างแพร่หลายในโลกของซอฟต์แวร์เพื่อรับประกันความสมบูรณ์ของไฟล์ที่ถ่ายโอน ตัวอย่างเช่นเซิร์ฟเวอร์ไฟล์มักจะจัดเตรียมการตรวจสอบ MD5 ที่คำนวณไว้ล่วงหน้าสำหรับไฟล์เพื่อให้ผู้ใช้สามารถเปรียบเทียบการตรวจสอบของไฟล์ที่ดาวน์โหลดกับไฟล์นั้นได้
ในปี 2547 พบการชนกันใน MD5 การโจมตีเชิงวิเคราะห์รายงานว่าประสบความสำเร็จภายในหนึ่งชั่วโมงโดยใช้คลัสเตอร์คอมพิวเตอร์ การโจมตีแบบชนกันนี้ส่งผลให้ MD5 ถูกบุกรุกดังนั้นจึงไม่แนะนำให้ใช้อีกต่อไป
ฟังก์ชัน Secure Hash (SHA)
ตระกูล SHA ประกอบด้วยอัลกอริธึม SHA สี่แบบ SHA-0, SHA-1, SHA-2 และ SHA-3 แม้ว่าจะมาจากครอบครัวเดียวกัน แต่ก็มีโครงสร้างที่แตกต่างกัน
เวอร์ชันดั้งเดิมคือ SHA-0 ซึ่งเป็นฟังก์ชันแฮช 160 บิตซึ่งเผยแพร่โดย National Institute of Standards and Technology (NIST) ในปี 1993 มีจุดอ่อนเล็กน้อยและไม่เป็นที่นิยมมากนัก ต่อมาในปี 1995 SHA-1 ได้รับการออกแบบมาเพื่อแก้ไขจุดอ่อนของ SHA-0 ที่ถูกกล่าวหา
SHA-1 เป็นฟังก์ชันแฮช SHA ที่มีอยู่อย่างแพร่หลายมากที่สุด มีการใช้งานในแอพพลิเคชั่นและโปรโตคอลที่ใช้กันอย่างแพร่หลายรวมถึงการรักษาความปลอดภัย Secure Socket Layer (SSL)
ในปี 2548 มีการค้นพบวิธีการในการเปิดเผยการชนกันของ SHA-1 ภายในกรอบเวลาที่ใช้งานได้จริงทำให้การจ้างงาน SHA-1 เป็นหนี้สงสัยจะสูญในระยะยาว
ตระกูล SHA-2 มีตัวแปร SHA เพิ่มเติมอีกสี่แบบ ได้แก่ SHA-224, SHA-256, SHA-384 และ SHA-512 ขึ้นอยู่กับจำนวนบิตในค่าแฮช ยังไม่มีรายงานการโจมตีที่ประสบความสำเร็จในฟังก์ชันแฮช SHA-2
แม้ว่า SHA-2 จะเป็นฟังก์ชันแฮชที่แข็งแกร่ง แม้ว่าจะแตกต่างกันอย่างมีนัยสำคัญ แต่การออกแบบพื้นฐานยังคงเป็นไปตามการออกแบบของ SHA-1 ดังนั้น NIST จึงเรียกร้องให้มีการออกแบบฟังก์ชันแฮชที่มีการแข่งขันใหม่
ในเดือนตุลาคม 2555 NIST ได้เลือกอัลกอริทึม Keccak เป็นมาตรฐาน SHA-3 ใหม่ Keccak มีประโยชน์มากมายเช่นประสิทธิภาพที่มีประสิทธิภาพและความต้านทานที่ดีสำหรับการโจมตี
RIPEMD
RIPEMD เป็นคำย่อของ RACE Integrity Primitives Evaluation Message Digest ฟังก์ชันแฮชชุดนี้ออกแบบโดยชุมชนการวิจัยแบบเปิดและโดยทั่วไปรู้จักกันในชื่อฟังก์ชันแฮชของยุโรป
ชุดประกอบด้วย RIPEMD, RIPEMD-128 และ RIPEMD-160 นอกจากนี้ยังมีอัลกอริทึมรุ่น 256 และ 320 บิต
RIPEMD ดั้งเดิม (128 บิต) ขึ้นอยู่กับหลักการออกแบบที่ใช้ใน MD4 และพบว่ามีความปลอดภัยที่น่าสงสัย RIPEMD เวอร์ชัน 128 บิตมาแทนการแก้ไขด่วนเพื่อเอาชนะช่องโหว่บน RIPEMD ดั้งเดิม
RIPEMD-160 เป็นเวอร์ชันที่ได้รับการปรับปรุงและเป็นเวอร์ชันที่ใช้กันอย่างแพร่หลายในตระกูล เวอร์ชัน 256 และ 320 บิตช่วยลดโอกาสในการชนกันโดยไม่ได้ตั้งใจ แต่ไม่มีระดับความปลอดภัยที่สูงกว่าเมื่อเทียบกับ RIPEMD-128 และ RIPEMD-160 ตามลำดับ
วังวน
นี่คือฟังก์ชันแฮช 512 บิต
ได้มาจาก Advanced Encryption Standard (AES) เวอร์ชันแก้ไข หนึ่งในผู้ออกแบบคือ Vincent Rijmen ผู้ร่วมสร้าง AES
วังวนสามรุ่นได้รับการเผยแพร่; ได้แก่ WHIRLPOOL-0, WHIRLPOOL-T และ WHIRLPOOL
การใช้ฟังก์ชันแฮช
มีสองแอปพลิเคชันโดยตรงของฟังก์ชันแฮชโดยอาศัยคุณสมบัติการเข้ารหัส
ที่เก็บรหัสผ่าน
ฟังก์ชันแฮชช่วยป้องกันการจัดเก็บรหัสผ่าน
แทนที่จะเก็บรหัสผ่านอย่างชัดเจนกระบวนการล็อกออนส่วนใหญ่จะเก็บค่าแฮชของรหัสผ่านไว้ในไฟล์
ไฟล์รหัสผ่านประกอบด้วยตารางคู่ซึ่งอยู่ในรูปแบบ (รหัสผู้ใช้, h (P))
ขั้นตอนการเข้าสู่ระบบแสดงอยู่ในภาพประกอบต่อไปนี้ -
ผู้บุกรุกจะเห็นเฉพาะแฮชของรหัสผ่านแม้ว่าเขาจะเข้าถึงรหัสผ่านก็ตาม เขาไม่สามารถล็อกออนโดยใช้แฮชและไม่สามารถรับรหัสผ่านจากค่าแฮชได้เนื่องจากฟังก์ชันแฮชมีคุณสมบัติในการต้านทานภาพก่อน
การตรวจสอบความสมบูรณ์ของข้อมูล
การตรวจสอบความสมบูรณ์ของข้อมูลเป็นแอปพลิเคชั่นแฮชที่ใช้กันทั่วไป ใช้เพื่อสร้างเช็คซัมบนไฟล์ข้อมูล แอปพลิเคชั่นนี้ให้การรับรองแก่ผู้ใช้เกี่ยวกับความถูกต้องของข้อมูล
กระบวนการแสดงอยู่ในภาพประกอบต่อไปนี้ -
การตรวจสอบความสมบูรณ์ช่วยให้ผู้ใช้ตรวจพบการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับไฟล์ต้นฉบับ อย่างไรก็ตามไม่ได้ให้การรับรองใด ๆ เกี่ยวกับความเป็นต้นฉบับ ผู้โจมตีแทนที่จะแก้ไขข้อมูลไฟล์สามารถเปลี่ยนทั้งไฟล์และคำนวณแฮชใหม่ทั้งหมดเข้าด้วยกันแล้วส่งไปยังผู้รับ แอปพลิเคชันตรวจสอบความสมบูรณ์นี้มีประโยชน์ก็ต่อเมื่อผู้ใช้แน่ใจเกี่ยวกับความเป็นต้นฉบับของไฟล์