กลับไปหน้าบทความ

อ่าน 14 นาที

ฟังก์ชันแฮชเข้ารหัสลับ

การแฮชเป็นการดำเนินการทางคณิตศาสตร์แบบทิศทางเดียวซึ่งคำนวณได้รวดเร็ว แต่ยากต่อการย้อนกลับ ดังนั้น การจัดเก็บ รหัสผ่านและลายเซ็นดิจิทัล จึง ได้รับประโยชน์จากแฮช

ฟังก์ชันแฮชเข้ารหัสลับ

ฟังก์ชันแฮชเข้ารหัสลับ (โดยเฉพาะSHA-1 ) กำลังทำงาน การเปลี่ยนแปลงเล็กน้อยในข้อมูลนำเข้า (ในคำว่า "over") ส่งผลให้ข้อมูลส่งออก (ค่าแฮช) เปลี่ยนแปลงอย่างมาก ปรากฏการณ์นี้เรียกว่าปรากฏการณ์ลูกโซ่ (avalanche effect )
อัลกอริทึมแฮชที่ปลอดภัย
แนวคิด
ฟังก์ชันแฮช , SHA , DSA
มาตรฐานหลัก
SHA-0 , SHA-1 , SHA-2 , SHA-3

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

ในเชิงเทคนิคมากขึ้น: [ 4 ]

  • ความน่าจะเป็นของผลลัพธ์เอาต์พุตบิตเฉพาะ ( ค่าแฮช ) สำหรับสตริงอินพุตแบบสุ่ม ("ข้อความ") คือ(เช่นเดียวกับแฮชที่ดีใดๆ) ดังนั้นค่าแฮชจึงสามารถใช้เป็นตัวแทนของข้อความได้
  • การค้นหาสตริงอินพุตที่ตรงกับค่าแฮชที่กำหนด ( ภาพต้นแบบ ) นั้นเป็นไปไม่ได้หากสมมติว่าสตริงอินพุตทั้งหมดมีโอกาสเท่ากัน ความต้านทานต่อการค้นหาดังกล่าวถูกวัดเป็นความแข็งแกร่งด้านความปลอดภัย : แฮชเข้ารหัสลับที่มีค่าแฮชจำนวนบิต คาดว่าจะมี ความต้านทาน ต่อภาพต้นแบบที่แข็งแกร่งจำนวนบิต เว้นแต่ว่าพื้นที่ของค่าอินพุตที่เป็นไปได้จะเล็กกว่าอย่างมีนัยสำคัญ(ตัวอย่างที่เป็นรูปธรรมสามารถพบได้ในหัวข้อ § การโจมตีรหัสผ่านที่แฮช )
  • ความแข็งแกร่งในการต้านทาน ภาพก่อนหน้าครั้งที่สองโดยมีความคาดหวังเช่นเดียวกัน หมายถึงปัญหาที่คล้ายกันในการค้นหาข้อความที่สองที่ตรงกับค่าแฮชที่กำหนด เมื่อทราบข้อความหนึ่งแล้ว
  • การค้นหาข้อความที่แตกต่างกันสองข้อความใดๆ ที่ให้ค่าแฮชเดียวกัน ( การชนกัน ) นั้นเป็นไปไม่ได้เช่นกัน: คาดว่าแฮชเข้ารหัสลับจะมีระดับความต้านทานต่อการชนกัน ที่ ระดับบิต (ต่ำกว่าเนื่องจากปรากฏการณ์วันเกิด )

ฟังก์ชันแฮชเข้ารหัสลับมี แอปพลิเคชัน ด้านความปลอดภัยของข้อมูล มากมาย โดยเฉพาะอย่างยิ่งในลายเซ็นดิจิทัลรหัสยืนยันข้อความ (MAC) และรูปแบบการตรวจสอบสิทธิ์ อื่นๆ นอกจากนี้ยังสามารถใช้เป็นฟังก์ชันแฮช ทั่วไป เพื่อจัดทำดัชนีข้อมูลในตารางแฮชสำหรับการสร้างลายนิ้วมือเพื่อตรวจจับข้อมูลที่ซ้ำกันหรือระบุไฟล์ได้อย่างเฉพาะเจาะจง และเป็นเช็คซัมเพื่อตรวจจับความเสียหายของข้อมูลโดยไม่ได้ตั้งใจ อันที่จริง ในบริบทด้านความปลอดภัยของข้อมูล ค่าแฮชเข้ารหัสลับบางครั้งเรียกว่าลายนิ้วมือ ( ดิจิทัล ) เช็คซัม ไดเจสต์(ข้อความ) [ 5 ] หรือเพียงแค่ค่าแฮช แม้ว่าคำ ศัพท์เหล่านี้ทั้งหมดจะหมายถึงฟังก์ชันทั่วไปที่มีคุณสมบัติและวัตถุประสงค์ที่แตกต่างกันมากก็ตาม[ 6 ]

ฟังก์ชันแฮชที่ไม่ใช่การเข้ารหัสลับใช้ในตารางแฮชและเพื่อตรวจจับข้อผิดพลาดโดยไม่ได้ตั้งใจ โครงสร้างของฟังก์ชันเหล่านี้มักจะไม่มีความต้านทานต่อการโจมตีโดยเจตนา ตัวอย่างเช่นการโจมตีแบบปฏิเสธการให้บริการบนตารางแฮชสามารถทำได้หากการชนกันนั้นหาได้ง่าย เช่นในกรณีของ ฟังก์ชัน ตรวจสอบความซ้ำซ้อนแบบวน รอบเชิงเส้น (CRC) [ 7 ]

คุณสมบัติ

ฟังก์ชันแฮชทางด้านการเข้ารหัสส่วนใหญ่ถูกออกแบบมาให้รับสตริงที่มีความยาวใดๆ ก็ได้เป็นอินพุต และสร้างค่าแฮชที่มีความยาวคงที่

ฟังก์ชันแฮชเข้ารหัสลับต้องสามารถทนทานต่อการโจมตีทางเข้ารหัสลับทุกประเภท ที่รู้จัก ในทางทฤษฎีการเข้ารหัสลับ ระดับความปลอดภัยของฟังก์ชันแฮชเข้ารหัสลับได้รับการกำหนดโดยใช้คุณสมบัติต่อไปนี้:

ความต้านทานก่อนภาพ
เมื่อกำหนดค่าแฮชh แล้ว การค้นหาข้อความ m ใดๆ ที่ทำให้h = hash( m )ควรเป็นเรื่องยากแนวคิดนี้เกี่ยวข้องกับฟังก์ชันทางเดียวฟังก์ชันที่ขาดคุณสมบัตินี้จะเสี่ยงต่อการโจมตีแบบหาค่าก่อนหน้า (preimage attack )
ความต้านทานภาพก่อนหน้าลำดับที่สอง
เมื่อกำหนดอินพุตm 1แล้ว การหาอินพุตm 2 ที่แตกต่างกัน ซึ่งทำให้hash( m 1 ) = hash( m 2 ) นั้นควรจะทำได้ยาก คุณสมบัตินี้บางครั้งเรียกว่าความต้านทานต่อการชนที่อ่อนแอ ฟังก์ชันที่ขาดคุณสมบัตินี้จะเสี่ยงต่อ การโจมตีแบบภาพ ก่อนหน้าลำดับที่สอง
ความต้านทานการชน
การค้นหาข้อความสองข้อความที่แตกต่างกัน m 1และm 2ที่ทำให้hash( m 1 ) = hash( m 2 ) นั้น ยากคู่ดังกล่าวเรียกว่าการชนกันของแฮช แบบเข้ารหัสลับ คุณสมบัตินี้บางครั้งเรียกว่าความต้านทานการชนกันที่แข็งแกร่งซึ่งต้องใช้ค่าแฮชที่มีความยาวอย่างน้อยสองเท่าของค่าที่จำเป็นสำหรับความต้านทานต่อภาพก่อนหน้า มิฉะนั้น การชนกันอาจถูกค้นพบโดย การ โจมตีวันเกิด[ 8 ]

ความต้านทานการชนหมายถึงความต้านทานต่อภาพก่อนหน้าลำดับที่สอง แต่ไม่ได้หมายถึงความต้านทานต่อภาพก่อนหน้า[ 9 ]สมมติฐานที่อ่อนกว่ามักเป็นที่ต้องการในการเข้ารหัสทางทฤษฎี แต่ในทางปฏิบัติ ฟังก์ชันแฮชที่ต้านทานต่อภาพก่อนหน้าลำดับที่สองเท่านั้นถือว่าไม่ปลอดภัย ดังนั้นจึงไม่แนะนำให้ใช้ในแอปพลิเคชันจริง

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

ฟังก์ชันที่ตรงตามเกณฑ์เหล่านี้อาจยังมีคุณสมบัติที่ไม่พึงประสงค์อยู่ ปัจจุบัน ฟังก์ชันแฮชเข้ารหัสลับที่เป็นที่นิยมมีความเสี่ยงต่อการโจมตีแบบขยายความยาว : เมื่อกำหนดhash( m )และlen( m )แต่ไม่ใช่mโดยการเลือกm ที่เหมาะสม ผู้โจมตีสามารถคำนวณhash( m∥m) ได้ โดยที่หมายถึงการต่อกัน [ 10 ] คุณสมบัติ นี้สามารถใช้เพื่อทำลายรูป แบบการตรวจสอบความถูกต้องแบบง่ายๆ ที่ใช้ฟังก์ชันแฮชโครงสร้าง HMACช่วยแก้ปัญหาเหล่านี้ได้

ในทางปฏิบัติ ความต้านทานการชนกันไม่เพียงพอสำหรับการใช้งานจริงหลายอย่าง นอกจากความต้านทานการชนกันแล้ว ฝ่ายตรงข้ามจะต้องไม่สามารถค้นหาข้อความสองข้อความที่มีไดเจสต์ที่คล้ายคลึงกันอย่างมาก หรืออนุมานข้อมูลที่เป็นประโยชน์ใดๆ เกี่ยวกับข้อมูลได้ โดยพิจารณาจากไดเจสต์เพียงอย่างเดียว โดยเฉพาะอย่างยิ่ง ฟังก์ชันแฮชควรมีพฤติกรรมคล้ายกับฟังก์ชันสุ่ม (มักเรียกว่าออราเคิลสุ่มในการพิสูจน์ความปลอดภัย) ให้มากที่สุดเท่าที่จะเป็นไปได้ ในขณะที่ยังคงเป็นแบบกำหนดได้และคำนวณได้อย่างมีประสิทธิภาพ ซึ่งทำให้ฟังก์ชันต่างๆ เช่น ฟังก์ชัน SWIFFT ถูกตัดออกไป เนื่องจากสามารถพิสูจน์ได้อย่างเข้มงวดว่ามีความต้านทานการชนกันโดยสมมติว่าปัญหาบางอย่างบนแลตทิซในอุดมคตินั้นยากต่อการคำนวณ แต่เนื่องจากเป็นฟังก์ชันเชิงเส้น จึงไม่ตรงตามคุณสมบัติเพิ่มเติมเหล่านี้[ 11 ]

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

ระดับความยาก

ในทางปฏิบัติทางด้านการเข้ารหัสลับ คำว่า "ยาก" โดยทั่วไปหมายถึง "แทบจะแน่นอนว่าเกินความสามารถของศัตรูใดๆ ที่จะต้องป้องกันไม่ให้ศัตรูนั้นเจาะระบบได้ ตราบใดที่ความปลอดภัยของระบบยังถือว่ามีความสำคัญ" ดังนั้นความหมายของคำนี้จึงขึ้นอยู่กับการใช้งาน เนื่องจากความพยายามที่ผู้ไม่ประสงค์ดีอาจทุ่มเทให้กับงานนั้นมักจะเป็นสัดส่วนกับผลประโยชน์ที่คาดหวัง อย่างไรก็ตาม เนื่องจากความพยายามที่จำเป็นมักจะทวีคูณตามความยาวของข้อมูลสรุป แม้แต่ข้อได้เปรียบด้านพลังการประมวลผลที่มากกว่าถึงพันเท่าก็อาจถูกหักล้างได้ด้วยการเพิ่มบิตอีกเพียงไม่กี่บิตเข้าไปในข้อมูลสรุปนั้น

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

ในการวิเคราะห์เชิงทฤษฎี บางอย่าง คำว่า "ยาก" มีความหมายทางคณิตศาสตร์เฉพาะเจาะจง เช่น "ไม่สามารถแก้ได้ในเวลาพหุนามเชิงอะซิมโทติก " การตีความความยากลำบาก ในลักษณะนี้ มีความสำคัญในการศึกษาฟังก์ชันแฮชเข้ารหัสลับที่พิสูจน์ได้ว่าปลอดภัยแต่โดยทั่วไปแล้วมักไม่มีความเชื่อมโยงอย่างแน่นหนากับความปลอดภัยในทางปฏิบัติ ตัวอย่างเช่น อัลกอริทึม ที่ใช้เวลาแบบเอกซ์โพเนนเชียลบางครั้งอาจเร็วพอที่จะทำการโจมตีได้ ในทางกลับกัน อัลกอริทึมที่ใช้เวลาแบบพหุนาม (เช่น อัลกอริทึมที่ต้องใช้ขั้น ตอน n²⁰สำหรับ คีย์ nหลัก) อาจช้าเกินไปสำหรับการใช้งานจริงใดๆ

ภาพประกอบ

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

แอปพลิเคชัน

ตรวจสอบความถูกต้องของข้อความและไฟล์

การประยุกต์ใช้แฮชที่ปลอดภัยที่สำคัญอย่างหนึ่งคือการตรวจสอบความสมบูรณ์ของข้อความการเปรียบเทียบค่าแฮช (ค่าแฮชที่ได้จากการคำนวณข้อความ) ก่อนและหลังการส่ง สามารถตรวจสอบได้ว่ามีการเปลี่ยนแปลงใดๆ เกิดขึ้นกับข้อความหรือไฟล์หรือไม่

บางครั้งมีการเผยแพร่แฮชไดเจสต์MD5 , SHA-1หรือSHA-2 บนเว็บไซต์หรือฟอรัมเพื่อให้สามารถตรวจสอบความถูกต้องของไฟล์ที่ดาวน์โหลดได้ [ 12 ]รวมถึงไฟล์ที่ดึงมาโดยใช้การแชร์ไฟล์เช่นการทำมิเรอร์การปฏิบัตินี้สร้างห่วงโซ่ความเชื่อถือตราบใดที่แฮชถูกโพสต์บนเว็บไซต์ที่เชื่อถือได้ ซึ่งโดยปกติจะเป็นเว็บไซต์ต้นทางที่ได้รับการตรวจสอบโดยHTTPSการใช้แฮชเข้ารหัสลับและห่วงโซ่ความเชื่อถือจะตรวจจับการเปลี่ยนแปลงที่เป็นอันตรายต่อไฟล์ รหัสตรวจจับข้อผิดพลาด ที่ไม่ใช่การเข้ารหัสลับ เช่นการตรวจสอบความซ้ำซ้อนแบบวนรอบจะป้องกันเฉพาะการเปลี่ยนแปลงไฟล์ที่ไม่เป็นอันตราย เท่านั้น เนื่องจาก สามารถสร้างการปลอมแปลง โดยเจตนาเพื่อให้มี ค่า รหัสที่ชนกัน ได้ง่าย

การสร้างและการตรวจสอบลายเซ็น

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

การตรวจสอบรหัสผ่าน

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

อย่างไรก็ตาม การใช้ฟังก์ชันแฮชเข้ารหัสลับมาตรฐาน เช่น ตระกูล SHA ไม่ถือว่าปลอดภัยสำหรับการจัดเก็บรหัสผ่านอีกต่อไป[ 13 ] : 5.1.1.2 อัลกอริทึมเหล่านี้ได้รับการออกแบบให้คำนวณได้อย่างรวดเร็ว ดังนั้นหากค่าแฮชถูกบุกรุก ก็สามารถลองรหัสผ่านที่เดาได้ในอัตราสูงหน่วยประมวลผลกราฟิก ทั่วไป สามารถลองรหัสผ่านที่เป็นไปได้หลายพันล้านรายการในแต่ละวินาที ฟังก์ชันแฮชรหัสผ่านที่ทำการยืดคีย์เช่นPBKDF2 , scryptหรือArgon2มักใช้การเรียกใช้แฮชเข้ารหัสลับซ้ำๆ เพื่อเพิ่มเวลา (และในบางกรณีหน่วยความจำคอมพิวเตอร์) ที่จำเป็นในการโจมตีแบบ brute-forceบนค่าแฮชรหัสผ่านที่จัดเก็บไว้ สำหรับรายละเอียด โปรดดู§ การโจมตีรหัสผ่านที่แฮ

การสร้างแฮชรหัสผ่านยังต้องใช้ ค่า "เกลือ" (salt) แบบสุ่ม ขนาดใหญ่ที่ไม่เป็นความลับ ซึ่งสามารถจัดเก็บไว้ร่วมกับแฮชรหัสผ่านได้ ค่าเกลือนี้จะถูกแฮชร่วมกับรหัสผ่าน ทำให้การแมปแฮชรหัสผ่านแต่ละรหัสเปลี่ยนแปลงไป ส่งผลให้ผู้ไม่หวังดีไม่สามารถจัดเก็บตาราง ค่าแฮช ที่คำนวณไว้ล่วงหน้าเพื่อนำไปเปรียบเทียบกับค่าแฮชรหัสผ่าน หรือทดสอบค่าแฮชที่ถูกขโมยจำนวนมากพร้อมกันได้

หลักฐานการทำงาน

ระบบพิสูจน์การทำงาน (หรือโปรโตคอล หรือฟังก์ชัน) เป็นมาตรการทางเศรษฐกิจเพื่อป้องกันการโจมตีแบบปฏิเสธการให้บริการ (Denial-of-Service)และการละเมิดบริการอื่นๆ เช่น สแปมบนเครือข่าย โดยกำหนดให้ผู้ร้องขอใช้บริการต้องทำงานบางอย่าง ซึ่งโดยปกติหมายถึงเวลาในการประมวลผลโดยคอมพิวเตอร์ คุณลักษณะสำคัญของระบบเหล่านี้คือความไม่สมมาตร: งานต้องมีความยากปานกลาง (แต่ทำได้) ในฝั่งผู้ร้องขอ แต่ตรวจสอบได้ง่ายสำหรับผู้ให้บริการ ระบบยอดนิยมระบบหนึ่ง – ที่ใช้ในการขุด BitcoinและHashcash – ใช้การผกผันแฮชบางส่วนเพื่อพิสูจน์ว่างานเสร็จสมบูรณ์ เพื่อปลดล็อกรางวัลการขุดใน Bitcoin และเป็นโทเค็นแสดงความปรารถนาดีในการส่งอีเมลใน Hashcash ผู้ส่งจะต้องค้นหาข้อความที่มีค่าแฮชเริ่มต้นด้วยบิตศูนย์จำนวนหนึ่ง งานโดยเฉลี่ยที่ผู้ส่งต้องทำเพื่อค้นหาข้อความที่ถูกต้องนั้นจะเพิ่มขึ้นแบบทวีคูณตามจำนวนบิตศูนย์ที่ต้องการในค่าแฮช ในขณะที่ผู้รับสามารถตรวจสอบความถูกต้องของข้อความได้โดยการเรียกใช้ฟังก์ชันแฮชเพียงครั้งเดียว ตัวอย่างเช่น ใน Hashcash ผู้ส่งจะต้องสร้างส่วนหัวที่มีค่าแฮช SHA-1 160 บิต โดยที่ 20 บิตแรกเป็นศูนย์ โดยเฉลี่ยแล้ว ผู้ส่งจะต้องลอง2¹⁹ ครั้งจึงจะพบส่วนหัวที่ถูกต้อง

ตัวระบุไฟล์หรือข้อมูล

ค่าแฮชสามารถใช้เป็นวิธีการระบุไฟล์ได้อย่างน่าเชื่อถือเช่นกัน ระบบ จัดการซอร์สโค้ด หลาย ระบบ รวมถึงGit , MercurialและMonotoneใช้ค่าsha1sumของเนื้อหาประเภทต่างๆ (เนื้อหาไฟล์ โครงสร้างไดเร็กทอรี ข้อมูลลำดับชั้น ฯลฯ) เพื่อระบุไฟล์นั้นๆ ได้อย่างเฉพาะเจาะจง แฮชใช้ในการระบุไฟล์บน เครือข่าย การแชร์ไฟล์แบบ Peer-to-Peer ตัวอย่างเช่น ในลิงก์ ed2kแฮ ชแบบ MD4จะถูกรวมเข้ากับขนาดไฟล์ ทำให้มีข้อมูลเพียงพอสำหรับการค้นหาแหล่งที่มาของไฟล์ ดาวน์โหลดไฟล์ และตรวจสอบเนื้อหาลิงก์ Magnetก็เป็นอีกตัวอย่างหนึ่ง แฮชไฟล์ดังกล่าว มักจะเป็นแฮชอันดับต้นๆ ของรายการแฮชหรือโครงสร้างแฮชซึ่งให้ประโยชน์เพิ่มเติม

หนึ่งในแอปพลิเคชันหลักของฟังก์ชันแฮชคือการช่วยให้ค้นหาข้อมูลในตารางแฮช ได้อย่างรวดเร็ว ฟังก์ชันแฮชทางด้านการเข้ารหัสลับ ซึ่งเป็นฟังก์ชันแฮชประเภทหนึ่ง ก็เหมาะสมกับแอปพลิเคชันนี้เช่นกัน

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

พื้นที่จัดเก็บข้อมูลที่สามารถระบุเนื้อหาได้

ระบบจัดเก็บข้อมูลแบบระบุเนื้อหา (Content-addressable storageหรือ CAS) หรือที่เรียกอีกอย่างว่า ระบบจัดเก็บข้อมูลแบบระบุเนื้อหาคงที่ (Content-addressed storage หรือ fixed-content storage) คือวิธีการจัดเก็บข้อมูลเพื่อให้สามารถเรียกใช้ได้โดยอิงจากเนื้อหา ไม่ใช่ชื่อหรือตำแหน่งที่ตั้ง ระบบนี้ถูกนำมาใช้สำหรับการจัดเก็บและเรียกใช้เนื้อหาคงที่ด้วยความเร็วสูง เช่น เอกสารที่จัดเก็บไว้เพื่อปฏิบัติตามกฎระเบียบของรัฐบาล ระบบจัดเก็บข้อมูลแบบระบุเนื้อหามีความคล้ายคลึงกับหน่วยความจำแบบระบุเนื้อหา (Content-addressable memory )

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

ระบบระบุที่อยู่เนื้อหา (CAS) กลายเป็นตลาดสำคัญในช่วงทศวรรษ 2000 โดยเฉพาะอย่างยิ่งหลังจากมีการบังคับใช้กฎหมาย Sarbanes–Oxley Act ปี 2002 ในสหรัฐอเมริกา ซึ่งกำหนดให้ต้องจัดเก็บเอกสารจำนวนมหาศาลเป็นเวลานานและเรียกใช้ได้ไม่บ่อยนัก ประสิทธิภาพที่เพิ่มขึ้นอย่างต่อเนื่องของระบบไฟล์แบบดั้งเดิมและระบบซอฟต์แวร์ใหม่ๆ ได้ลดทอนคุณค่าของระบบ CAS รุ่นเก่า ซึ่งเริ่มหายากขึ้นเรื่อยๆ หลังจากปี 2018 อย่างไรก็ตาม หลักการของการระบุที่อยู่เนื้อหายังคงเป็นที่สนใจอย่างมากของนักวิทยาศาสตร์คอมพิวเตอร์ และเป็นแก่นหลักของเทคโนโลยีเกิดใหม่มากมาย เช่นการแชร์ไฟล์แบบ Peer-to-Peer สกุลเงินดิจิทัลและการประมวลผลแบบกระจาย

ฟังก์ชันแฮชที่ใช้การเข้ารหัสแบบบล็อก

มีหลายวิธีในการใช้การเข้ารหัสแบบบล็อกเพื่อสร้างฟังก์ชันแฮชทางคริปโตกราฟี โดยเฉพาะอย่างยิ่งฟังก์ชัน การบีบอัดแบบทางเดียว

วิธีการเหล่านี้คล้ายคลึงกับโหมดการทำงานของบล็อกไซเฟอร์ที่ใช้กันโดยทั่วไปสำหรับการเข้ารหัส ฟังก์ชันแฮชที่รู้จักกันดีหลายฟังก์ชัน รวมถึงMD4 , MD5 , SHA-1และSHA-2สร้างขึ้นจากส่วนประกอบที่คล้ายกับบล็อกไซเฟอร์ซึ่งออกแบบมาเพื่อจุดประสงค์นี้โดยเฉพาะ พร้อมด้วยฟีดแบ็กเพื่อให้แน่ใจว่าฟังก์ชันที่ได้นั้นไม่สามารถผกผันได้ ฟังก์ชัน ที่เข้ารอบสุดท้าย ของ SHA-3ประกอบด้วยฟังก์ชันที่มีส่วนประกอบที่คล้ายกับบล็อกไซเฟอร์ (เช่นSkein , BLAKE ) แม้ว่าฟังก์ชันที่ได้รับเลือกในที่สุดคือKeccakจะสร้างขึ้นบนคริปโทกราฟีสปองจ์แทนก็ตาม

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

การออกแบบฟังก์ชันแฮช

การก่อสร้างแมร์เคิล-ดัมการ์ด

โครงสร้างแฮช Merkle–Damgård

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

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

ท่อกว้างเทียบกับท่อแคบ

การประยุกต์ใช้โครงสร้าง Merkle–Damgård โดยตรง ซึ่งขนาดของเอาต์พุตแฮชเท่ากับขนาดสถานะภายใน (ระหว่างแต่ละขั้นตอนการบีบอัด) ส่งผลให้เกิด การออกแบบแฮช แบบท่อแคบการออกแบบนี้ทำให้เกิดข้อบกพร่องโดยธรรมชาติหลายประการ รวมถึงการขยายความยาวการชนกันหลายครั้ง[ 15 ]การโจมตีข้อความยาว[ 16 ]การโจมตีแบบสร้างและวาง และยังไม่สามารถขนานกันได้ ด้วยเหตุนี้ ฟังก์ชันแฮชสมัยใหม่จึงสร้างขึ้นบน โครงสร้าง ท่อกว้างที่มีขนาดสถานะภายในที่ใหญ่กว่า ซึ่งมีตั้งแต่การปรับแต่งโครงสร้าง Merkle–Damgård [ 15 ]ไปจนถึงโครงสร้างใหม่ เช่นโครงสร้างฟองน้ำและโครงสร้างHAIFA [ 17 ]ไม่มีผู้เข้าร่วมการแข่งขันฟังก์ชันแฮช NIST รายใด ใช้โครงสร้าง Merkle–Damgård แบบคลาสสิก[ 18 ]

ในขณะเดียวกัน การตัดทอนผลลัพธ์ของแฮชที่ยาวกว่า เช่นที่ใช้ใน SHA-512/256 ก็สามารถเอาชนะการโจมตีเหล่านี้ได้หลายอย่างเช่นกัน[ 19 ]

ใช้ในการสร้างฟังก์ชันการเข้ารหัสลับพื้นฐานอื่นๆ

ฟังก์ชันแฮชสามารถนำไปใช้สร้างฟังก์ชันการเข้ารหัส อื่นๆ ได้ แต่เพื่อให้ฟังก์ชันเหล่านั้นมีความปลอดภัยทางด้านการเข้ารหัส จำเป็นต้องสร้างมันอย่างถูกต้องด้วยความระมัดระวัง

รหัสยืนยันข้อความ (MAC) (หรือเรียกว่าฟังก์ชันแฮชแบบมีคีย์) มักสร้างขึ้นจากฟังก์ชันแฮชHMACก็เป็น MAC ประเภทหนึ่งเช่นกัน

เช่นเดียวกับที่สามารถใช้ การเข้ารหัสแบบบล็อก เพื่อสร้างฟังก์ชันแฮช ฟังก์ชันแฮชก็สามารถใช้เพื่อสร้างการเข้ารหัสแบบบล็อกได้เช่นกัน โครงสร้าง Luby-Rackoffที่ใช้ฟังก์ชันแฮชสามารถพิสูจน์ได้ว่าปลอดภัยหากฟังก์ชันแฮชพื้นฐานนั้นปลอดภัย นอกจากนี้ ฟังก์ชันแฮชจำนวนมาก (รวมถึงSHA-1และSHA-2 ) ถูกสร้างขึ้นโดยใช้การเข้ารหัสแบบบล็อกเฉพาะทางในโครงสร้างDavies–Meyer หรือโครงสร้างอื่นๆ การเข้ารหัสเหล่านั้นยังสามารถใช้ในโหมดการทำงานแบบปกติ ได้ โดยไม่มีการรับประกันความปลอดภัยเช่นเดียวกัน ตัวอย่างเช่นSHACAL , BEARและLION

ตัวสร้างเลขสุ่มเทียม (PRNG) สามารถสร้างได้โดยใช้ฟังก์ชันแฮช โดยทำได้โดยการรวมค่าเริ่มต้นสุ่ม (ที่เป็นความลับ) เข้ากับตัวนับ แล้วทำการแฮช

ฟังก์ชันแฮชบางฟังก์ชัน เช่นSkein , KeccakและRadioGatúnจะสร้างสตรีมที่มีความยาวไม่จำกัด และสามารถใช้เป็นรหัสลับแบบสตรีมได้ นอกจากนี้ รหัสลับแบบสตรีมยังสามารถสร้างขึ้นจากฟังก์ชันแฮชแบบไดเจสต์ที่มีความยาวคงที่ได้อีกด้วย โดยทั่วไปแล้ว จะทำโดยการสร้างตัวสร้างเลขสุ่มเทียมที่มีความปลอดภัยทางด้านการเข้ารหัส ก่อน แล้วจึงใช้สตรีมของไบต์สุ่มเหล่านั้นเป็นคีย์สตรีม SEAL เป็นรหัสลับแบบสตรีมที่ใช้SHA-1ในการสร้างตารางภายใน ซึ่งจะถูกนำไปใช้ในตัวสร้างคีย์สตรีมที่ไม่เกี่ยวข้องกับอัลกอริธึมแฮชโดยตรง SEAL ไม่รับประกันว่าจะแข็งแกร่ง (หรืออ่อนแอ) เท่ากับ SHA-1 ในทำนองเดียวกัน การขยายคีย์ของ รหัสลับแบบสตรีม HC-128 และ HC-256ก็ใช้ฟังก์ชันแฮช SHA-256 อย่างมากเช่นกัน

การต่อกัน

การต่อผลลัพธ์จากฟังก์ชันแฮชหลายฟังก์ชัน เข้าด้วยกันจะให้ความต้านทานการชนกันได้ดีเท่ากับอัลกอริทึมที่แข็งแกร่งที่สุดที่รวมอยู่ในผลลัพธ์ที่ต่อกัน ตัวอย่างเช่นTransport Layer Security (TLS) และ Secure Sockets Layer (SSL) เวอร์ชันเก่า ใช้ผล รวม MD5และSHA-1 ที่ต่อกัน [ 20 ] [ 21 ]ซึ่งทำให้มั่นใจได้ว่าวิธีการค้นหาการชนกันในฟังก์ชันแฮชฟังก์ชันใดฟังก์ชันหนึ่งจะไม่ทำลายข้อมูลที่ได้รับการปกป้องโดยฟังก์ชันแฮชทั้งสอง

สำหรับ ฟังก์ชันแฮช โครงสร้าง Merkle–Damgårdฟังก์ชันที่เชื่อมต่อกันนั้นมีความทนทานต่อการชนกันเท่ากับส่วนประกอบที่แข็งแกร่งที่สุด แต่ไม่มีความทนทานต่อการชนกันมากกว่าAntoine Jouxสังเกตว่าการชนกัน 2 ครั้งนำไปสู่ การชนกัน nครั้ง: หากเป็นไปได้ที่ผู้โจมตีจะพบข้อความสองข้อความที่มีแฮช MD5 เดียวกัน พวกเขาก็สามารถพบข้อความเพิ่มเติมที่มีแฮช MD5 เดียวกันได้มากเท่าที่ต้องการโดยไม่ยากขึ้น[ 22 ]ในบรรดา ข้อความ nข้อความที่มีแฮช MD5 เดียวกันนั้น มีแนวโน้มที่จะเกิดการชนกันใน SHA-1 งานเพิ่มเติมที่จำเป็นในการค้นหาการชนกันของ SHA-1 (นอกเหนือจากการค้นหาวันเกิดแบบเลขชี้กำลัง) ต้องการเวลาพหุนามเท่านั้น[ 23 ] [ 24 ]

อัลกอริทึมแฮชเข้ารหัสลับ

มีอัลกอริธึมแฮชเข้ารหัสลับมากมาย ในส่วนนี้จะแสดงรายการอัลกอริธึมบางส่วนที่ถูกอ้างอิงค่อนข้างบ่อย สามารถดูรายการที่ครอบคลุมมากกว่านี้ได้ในหน้าเปรียบเทียบฟังก์ชันแฮชเข้ารหัสลับต่างๆ

เอ็มดี5

MD5 ถูกออกแบบโดยRonald Rivestในปี 1991 เพื่อแทนที่ฟังก์ชันแฮชรุ่นก่อนหน้าอย่าง MD4 และได้รับการกำหนดเป็นมาตรฐาน RFC 1321 ในปี 1992 การคำนวณการชนกันของค่าแฮชกับ MD5 สามารถทำได้ภายในไม่กี่วินาที ซึ่งทำให้อัลกอริทึมนี้ไม่เหมาะสมสำหรับกรณีการใช้งานส่วนใหญ่ที่ต้องการแฮชแบบเข้ารหัสลับ MD5 สร้างค่าแฮชที่มีขนาด 128 บิต (16 ไบต์)

เอสเอ-1

SHA-1 ได้รับการพัฒนาขึ้นเป็นส่วนหนึ่งของโครงการ Capstoneของรัฐบาลสหรัฐฯข้อกำหนดดั้งเดิม – ซึ่งปัจจุบันเรียกกันทั่วไปว่า SHA-0 – ของอัลกอริทึมนี้ได้รับการเผยแพร่ในปี 1993 ภายใต้ชื่อ Secure Hash Standard, FIPS PUB 180 โดย NIST (National Institute of Standards and Technology) ซึ่งเป็นหน่วยงานมาตรฐานของรัฐบาลสหรัฐฯ แต่ถูกถอนออกโดย NSA ในเวลาไม่นานหลังจากนั้น และถูกแทนที่ด้วยเวอร์ชันที่แก้ไขใหม่ ซึ่งเผยแพร่ในปี 1995 ใน FIPS PUB 180-1 และเรียกกันทั่วไปว่า SHA-1 การโจมตีแบบshattered attack สามารถสร้างการชนกันของค่าแฮชกับอัลกอริทึม SHA-1 แบบเต็มได้ และควรพิจารณาว่าฟังก์ชันแฮชนั้นเสียหายแล้ว SHA-1 สร้างค่าแฮชไดเจสต์ขนาด 160 บิต (20 ไบต์)

เอกสารบางฉบับอาจเรียก SHA-1 ว่า "SHA" เฉยๆ ทั้งๆ ที่อาจขัดแย้งกับอัลกอริธึมแฮชที่ปลอดภัยอื่นๆ เช่น SHA-0, SHA-2 และ SHA-3

ริปเอ็มดี-160

RIPEMD (RACE Integrity Primitives Evaluation Message Digest) เป็นตระกูลของฟังก์ชันแฮชเข้ารหัสลับที่พัฒนาขึ้นในเมืองลูเวน ประเทศเบลเยียม โดย Hans Dobbertin, Antoon Bosselaers และ Bart Preneel จากกลุ่มวิจัย COSIC ที่มหาวิทยาลัย Katholieke Universiteit Leuven และเผยแพร่ครั้งแรกในปี 1996 RIPEMD มีพื้นฐานมาจากหลักการออกแบบที่ใช้ใน MD4 และมีประสิทธิภาพคล้ายกับ SHA-1 ที่ได้รับความนิยมมากกว่า อย่างไรก็ตาม RIPEMD-160 ยังไม่เคยถูกถอดรหัสได้ ตามชื่อที่บ่งบอก RIPEMD-160 สร้างค่าแฮชที่มีขนาด 160 บิต (20 ไบต์)

วงเวียนน้ำ

Whirlpool เป็นฟังก์ชันแฮชเข้ารหัสลับที่ออกแบบโดย Vincent Rijmen และ Paulo SLM Barreto ซึ่งได้อธิบายถึงฟังก์ชันนี้เป็นครั้งแรกในปี 2000 Whirlpool มีพื้นฐานมาจากมาตรฐานการเข้ารหัสขั้นสูง (AES) ที่ได้รับการดัดแปลงอย่างมาก Whirlpool สร้างค่าแฮชที่มีขนาด 512 บิต (64 ไบต์)

เอสเอ-2

SHA-2 (Secure Hash Algorithm 2) คือชุดฟังก์ชันแฮชเข้ารหัสลับที่ออกแบบโดยสำนักงานความมั่นคงแห่งชาติสหรัฐอเมริกา (NSA) และเผยแพร่ครั้งแรกในปี 2544 ฟังก์ชันเหล่านี้สร้างขึ้นโดยใช้โครงสร้าง Merkle–Damgård จากฟังก์ชันการบีบอัดแบบทางเดียว ซึ่งสร้างขึ้นโดยใช้โครงสร้าง Davies–Meyer จากการเข้ารหัสแบบบล็อกเฉพาะทาง (ซึ่งเป็นความลับ)

SHA-2 ประกอบด้วยอัลกอริทึมแฮชสองแบบหลัก ๆ คือ SHA-256 และ SHA-512 SHA-224 เป็นรูปแบบหนึ่งของ SHA-256 ที่มีค่าเริ่มต้นแตกต่างกันและผลลัพธ์ที่ถูกตัดทอน SHA-384 และ SHA-512/224 และ SHA-512/256 ที่รู้จักกันน้อยกว่า ล้วนเป็นรูปแบบต่าง ๆ ของ SHA-512 SHA-512 มีความปลอดภัยมากกว่า SHA-256 และโดยทั่วไปแล้วจะเร็วกว่า SHA-256 บนเครื่อง 64 บิตเช่น AMD64

ขนาดของผลลัพธ์ในหน่วยบิตนั้นกำหนดโดยส่วนขยายของชื่อ "SHA" ดังนั้น SHA-224 จึงมีขนาดผลลัพธ์ 224 บิต (28 ไบต์); SHA-256, 32 ไบต์; SHA-384, 48 ไบต์; และ SHA-512, 64 ไบต์

เอสเอ-3

SHA-3 (Secure Hash Algorithm 3) ถูกเผยแพร่โดย NIST เมื่อวันที่ 5 สิงหาคม 2558 SHA-3 เป็นส่วนย่อยของตระกูลอัลกอริทึมการเข้ารหัสลับที่กว้างกว่าอย่าง Keccak อัลกอริทึม Keccak เป็นผลงานของ Guido Bertoni, Joan Daemen, Michael Peeters และ Gilles Van Assche Keccak มีพื้นฐานมาจากการสร้างแบบฟองน้ำ ซึ่งสามารถนำไปใช้สร้างอัลกอริทึมการเข้ารหัสลับอื่นๆ ได้ เช่น การเข้ารหัสแบบสตรีม SHA-3 ให้ขนาดเอาต์พุตเท่ากับ SHA-2 คือ 224, 256, 384 และ 512 บิต

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

เบลค2

BLAKE2 ซึ่งเป็นเวอร์ชันปรับปรุงของ BLAKE ได้รับการประกาศเมื่อวันที่ 21 ธันวาคม 2012 สร้างขึ้นโดย Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearnและ Christian Winnerlein โดยมีเป้าหมายเพื่อทดแทนอัลกอริธึม MD5 และ SHA-1 ที่ใช้งานกันอย่างแพร่หลายแต่มีข้อบกพร่อง เมื่อทำงานบนสถาปัตยกรรม 64 บิต x64 และ ARM BLAKE2b จะเร็วกว่า SHA-3, SHA-2, SHA-1 และ MD5 แม้ว่า BLAKE และ BLAKE2 จะยังไม่ได้รับการกำหนดมาตรฐานเหมือน SHA-3 แต่ BLAKE2 ก็ถูกนำไปใช้ในโปรโตคอลหลายอย่าง รวมถึง การแฮชรหัสผ่าน Argon2เนื่องจากมีประสิทธิภาพสูงบนซีพียูรุ่นใหม่ เนื่องจาก BLAKE เคยเป็นตัวเลือกสำหรับ SHA-3 ทั้ง BLAKE และ BLAKE2 จึงมีขนาดเอาต์พุตเท่ากับ SHA-3 รวมถึงขนาดเอาต์พุตที่สามารถกำหนดค่าได้

เบลค3

BLAKE3 ซึ่งเป็นเวอร์ชันปรับปรุงของ BLAKE2 ได้รับการประกาศเมื่อวันที่ 9 มกราคม 2020 โดยได้รับการสร้างสรรค์โดย Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves และ Zooko Wilcox-O'Hearn BLAKE3 เป็นอัลกอริทึมเดียว แตกต่างจาก BLAKE และ BLAKE2 ซึ่งเป็นตระกูลอัลกอริทึมที่มีหลายรูปแบบ ฟังก์ชันการบีบอัดของ BLAKE3 นั้นอิงตาม BLAKE2 อย่างใกล้ชิด โดยความแตกต่างที่สำคัญที่สุดคือจำนวนรอบลดลงจาก 10 เหลือ 7 รอบ ภายใน BLAKE3 ใช้โครงสร้างข้อมูลแบบ Merkle treeและรองรับการประมวลผลแบบขนานในระดับที่สูงกว่า BLAKE2

อัลกอริทึมแฮชระดับชาติเพิ่มเติม

มีอัลกอริธึมการแฮชหลายแบบที่โดยทั่วไปแล้วจะใช้เฉพาะในบางพื้นที่หรือเขตอำนาจศาลเท่านั้น อัลกอริธึมที่เป็นที่รู้จักกันดีบางส่วน ได้แก่:

การโจมตีอัลกอริธึมแฮชเข้ารหัสลับ

มีรายการฟังก์ชันแฮชการเข้ารหัสจำนวนมาก แต่พบว่าหลายฟังก์ชันมีช่องโหว่และไม่ควรนำมาใช้ ตัวอย่างเช่น NIST ได้คัดเลือกฟังก์ชันแฮช 51 ฟังก์ชัน[ 25 ]เป็นผู้สมัครในรอบที่ 1 ของการแข่งขันฟังก์ชันแฮช SHA-3 ซึ่งพบว่า 10 ฟังก์ชันมีช่องโหว่ และ 16 ฟังก์ชันมีจุดอ่อนที่สำคัญ จึงไม่ผ่านเข้ารอบต่อไป สามารถดูข้อมูลเพิ่มเติมได้ในบทความหลักเกี่ยวกับการแข่งขันฟังก์ชันแฮชของ NIST

แม้ว่าฟังก์ชันแฮชจะไม่เคยถูกเจาะมาก่อน แต่การโจมตีที่ประสบความสำเร็จต่อตัวแปรที่อ่อนแอกว่าอาจบั่นทอนความเชื่อมั่นของผู้เชี่ยวชาญได้ ตัวอย่างเช่น ในเดือนสิงหาคม พ.ศ. 2547 พบการชนกันในฟังก์ชันแฮชยอดนิยมหลายฟังก์ชันในขณะนั้น รวมถึง MD5 ด้วย[ 26 ]จุดอ่อนเหล่านี้ทำให้เกิดข้อสงสัยเกี่ยวกับความปลอดภัยของอัลกอริทึมที่แข็งแกร่งกว่าซึ่งได้มาจากฟังก์ชันแฮชที่อ่อนแอ โดยเฉพาะอย่างยิ่ง SHA-1 (เวอร์ชันที่แข็งแกร่งกว่าของ SHA-0), RIPEMD-128 และ RIPEMD-160 (ทั้งสองเป็นเวอร์ชันที่แข็งแกร่งกว่าของ RIPEMD) [ 27 ]

เมื่อวันที่ 12 สิงหาคม พ.ศ. 2547 Joux, Carribault, Lemuel และ Jalby ประกาศการชนกันของอัลกอริทึม SHA-0 เต็มรูปแบบ[ 22 ] Joux และคณะได้บรรลุเป้าหมายนี้โดยใช้การขยายการโจมตีของ Chabaud และ Joux พวกเขาพบว่าการชนกันมีความซับซ้อน 2 51และใช้เวลาประมาณ 80,000 ชั่วโมง CPU บนซูเปอร์คอมพิวเตอร์ ที่มีโปรเซสเซอร์ Itanium 2 จำนวน 256 ตัว ซึ่งเทียบเท่ากับการใช้งานซูเปอร์คอมพิวเตอร์แบบเต็มเวลา 13 วัน

ในเดือนกุมภาพันธ์ พ.ศ. 2548 มีรายงานการโจมตี SHA-1 ที่จะพบการชนกันในการดำเนินการแฮชประมาณ 2⁶⁹ ครั้งแทนที่จะเป็น 2⁸⁰ ครั้งตามที่คาดไว้สำหรับฟังก์ชันแฮช 160 บิต ในเดือนสิงหาคม พ.ศ. 2548 มีรายงานการโจมตี SHA-1 อีกครั้งที่จะพบการชนกันใน การดำเนินการ 2⁶³ครั้ง จุดอ่อนทางทฤษฎีอื่นๆ ของ SHA-1 เป็นที่ทราบกันดีอยู่แล้ว[ 28 ] [ 29 ]และในเดือนกุมภาพันธ์ พ.ศ. 2560 Google ได้ประกาศการชนกันใน SHA-1 [ 30 ]นักวิจัยด้านความปลอดภัยแนะนำว่าแอปพลิเคชันใหม่สามารถหลีกเลี่ยงปัญหาเหล่านี้ได้โดยใช้สมาชิกในตระกูล SHA รุ่นหลังๆ เช่นSHA-2หรือใช้เทคนิคต่างๆ เช่นการแฮชแบบสุ่ม[ 31 ]ที่ไม่ต้องการความต้านทานต่อการชนกัน

การโจมตีที่ประสบความสำเร็จในทางปฏิบัติทำให้ MD5 (ซึ่งใช้ภายในใบรับรองสำหรับTransport Layer Security ) ถูกทำลายในปี 2551 [ 32 ]

แฮชเข้ารหัสลับจำนวนมากใช้โครงสร้าง Merkle–Damgård เป็นพื้นฐาน แฮชเข้ารหัสลับทั้งหมดที่ใช้ผลลัพธ์ทั้งหมดของโครงสร้าง Merkle–Damgård โดยตรงนั้นมีความเสี่ยงต่อการโจมตีแบบขยายความยาวดังนั้น MD5, SHA-1, RIPEMD-160, Whirlpool และอัลกอริธึมแฮช SHA-256/SHA-512 จึงมีความเสี่ยงต่อการโจมตีประเภทนี้ ส่วน SHA-3, BLAKE2, BLAKE3 และ SHA-2 เวอร์ชันที่ตัดทอนนั้นไม่มีความเสี่ยงต่อการโจมตีประเภทนี้

การโจมตีรหัสผ่านที่ถูกเข้ารหัสแบบแฮช

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

รหัสผ่านยังคงสามารถถูกดึงกลับโดยผู้โจมตีจากแฮชได้ เนื่องจากคนส่วนใหญ่เลือกใช้รหัสผ่านในลักษณะที่คาดเดาได้ รายชื่อรหัสผ่านทั่วไปมีการเผยแพร่กันอย่างกว้างขวาง และรหัสผ่านจำนวนมากนั้นสั้นพอที่จะสามารถทดสอบชุดค่าผสมที่เป็นไปได้ทั้งหมดได้ หากการคำนวณแฮชไม่ใช้เวลานานเกินไป[ 34 ]

การใช้เกลือเข้ารหัสป้องกันการโจมตีบางอย่าง เช่น การสร้างไฟล์ค่าแฮชที่คำนวณล่วงหน้า เช่นตารางเรนโบว์ แต่การค้นหาในระดับ 100 พันล้านครั้งต่อวินาทีเป็นไปได้ด้วย โปรเซสเซอร์กราฟิกระดับสูงทำให้การโจมตีโดยตรงเป็นไปได้แม้จะมีเกลือ[ 35 ] [ 36 ]สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ ของสหรัฐอเมริกาแนะนำให้จัดเก็บรหัสผ่านโดยใช้แฮชพิเศษที่เรียกว่าฟังก์ชันการสร้างคีย์ (KDFs) ซึ่งสร้างขึ้นเพื่อชะลอการค้นหาแบบ brute force [ 13 ] : 5.1.1.2 แฮชที่ช้า ได้แก่pbkdf2 , bcrypt , scrypt , argon2 , Balloonและโหมดการเข้ารหัส Unix บางโหมดล่าสุด สำหรับ KDFs ที่ทำการแฮชหลายครั้งเพื่อชะลอการทำงาน NIST แนะนำจำนวนการวนซ้ำ 10,000 ครั้งขึ้นไป[ 13 ] : 5.1.1.2

ดูเพิ่มเติม

  • Paar, Christof; Pelzl, Jan (2009). "11: ฟังก์ชันแฮช" . ความเข้าใจเกี่ยวกับการเข้ารหัสลับ ตำราเรียนสำหรับนักศึกษาและผู้ปฏิบัติงาน . Springer .{{cite book}}: CS1 maint: บริการเก็บถาวรที่เลิกใช้แล้ว ( ลิงก์ )(เว็บไซต์ที่เกี่ยวข้องมีหลักสูตรการเข้ารหัสลับออนไลน์ซึ่งครอบคลุมเรื่องฟังก์ชันแฮช)
  • "เว็บไซต์ฟังก์ชันแฮช ECRYPT "
  • บุลดาส, เอ. (2011). "ชุดบรรยายขนาดเล็กเกี่ยวกับฟังก์ชันแฮชเข้ารหัสลับ "{{cite web}}: CS1 maint: บริการเก็บถาวรที่เลิกใช้แล้ว ( ลิงก์ )
  • แอปพลิเคชันโอเพนซอร์สที่เขียนด้วยภาษา Python พร้อม GUI สำหรับตรวจสอบไฟล์ดาวน์โหลด
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Cryptographic_hash_function&oldid=1360643819 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ฟังก์ชันแฮชเข้ารหัสลับ

การแฮชเป็นการดำเนินการทางคณิตศาสตร์แบบทิศทางเดียวซึ่งคำนวณได้รวดเร็ว แต่ยากต่อการย้อนกลับ ดังนั้น การจัดเก็บ รหัสผ่านและลายเซ็นดิจิทัล จึง ได้รับประโยชน์จากแฮช

คุณสมบัติ

ฟังก์ชันแฮชทางด้านการเข้ารหัสส่วนใหญ่ถูกออกแบบมาให้รับ สตริง ที่มีความยาวใดๆ ก็ได้เป็นอินพุต และสร้างค่าแฮชที่มีความยาวคงที่

ระดับความยาก

ในทางปฏิบัติทางด้านการเข้ารหัสลับ คำว่า "ยาก" โดยทั่วไปหมายถึง "แทบจะแน่นอนว่าเกินความสามารถของศัตรูใดๆ ที่จะต้องป้องกันไม่ให้ศัตรูนั้นเจาะระบบได้ ตราบใดที่ความปลอดภัยของระบบยังถือว่ามีความสำคัญ" ดังนั้นความหมายของคำนี้จึงขึ้นอยู่กับการใช้งาน...

ภาพประกอบ

ตัวอย่างการใช้งานที่เป็นไปได้ของแฮชเข้ารหัสลับมีดังนี้: อลิซ ตั้งโจทย์คณิตศาสตร์ยากๆ ให้ บ็อบ และอ้างว่าเธอแก้ได้แล้ว บ็อบอยากลองแก้ด้วยตัวเอง แต่ก็อยากแน่ใจว่าอลิซไม่ได้โกหก ดังนั้น อลิซจึงเขียนคำตอบลงไป คำนวณแฮช และบอกค่าแฮชให้บ็อบทราบ...