Score:3

คุณสมบัติของฟังก์ชันแฮชคืออะไร?

ธง gr

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

นอกเหนือจากเอาต์พุตขนาดคงที่แล้ว ฟังก์ชันแฮชต้องมีคุณสมบัติอื่นใดอีกบ้าง และเพราะเหตุใด

poncho avatar
my flag
คุณกำลังถามเกี่ยวกับฟังก์ชันแฮชการเข้ารหัสหรือเพียงแค่ฟังก์ชันแฮช (เช่น สำหรับใช้ภายในตารางแฮช)
gr flag
ฉันกำลังขอฟังก์ชันแฮช
Maarten Bodewes avatar
in flag
เป็นเรื่องที่ดีและทั้งหมด แต่นี่คือ [crypto.se] หากคุณต้องการคำจำกัดความที่กว้างขึ้น คุณอาจต้องการไปที่เช่น [cs.se].
Score:6
ธง ng

จากมุมมองการเข้ารหัส ฟังก์ชันแฮชที่มีเอาต์พุตขนาดคงที่:

  • ต้องเป็นฟังก์ชันเชิงกำหนด: อินพุตเดียวกันต้องสร้างเอาต์พุตเดียวกันเสมอ
  • ต้องยอมรับข้อความอินพุตในชุดอินพุตแบบกว้าง ตามหลักการแล้วควรเป็น bitstring ตามอำเภอใจ แต่บ่อยครั้งเป็น bytestings หรือ character strings ตามอำเภอใจ อาจมีบางขนาด
  • คัดแยกพิเศษ (เช่น คีย์ หรือ ความลับ หรือ สุ่ม) ต้องเป็นสาธารณะ: ทุกขั้นตอนและค่าคงที่ที่จำเป็นสำหรับการคำนวณเอาต์พุตสำหรับอินพุตที่กำหนดใดๆ นั้นเป็นที่รู้จักสำหรับทุกคน
  • ต้องคำนวณผลลัพธ์เป็นพหุนามตามเวลาด้วยขนาดอินพุต ซึ่งควรเป็นเวลาเชิงเส้นโดยประมาณกับขนาดอินพุต
  • ควรมี ต้านทานการชน: เป็นไปไม่ได้ในทางคำนวณที่จะแสดงสองข้อความที่แตกต่างกันด้วยเอาต์พุตเดียวกัน (คุณสมบัตินี้หมายถึง ความต้านทานพรีอิมเมจที่สองซึ่งเป็นอินพุตแบบสุ่ม เป็นไปไม่ได้ในทางคำนวณที่จะหาอินพุตอื่นที่ให้เอาต์พุตเดียวกัน) สังเกตว่าถ้ามี $n$ ผลลัพธ์ที่เป็นไปได้ มีการโจมตีแบบทั่วไปที่ทำลายการต้านทานการชนด้วย $\sqrtn$ การประเมินการทำงานจึงหมายถึงการต้านทานการชน $n$ มีขนาดใหญ่ (พูดอย่างน้อย $2^{192}$ ทุกวันนี้); หากไม่เป็นเช่นนั้น คำจำกัดความของการต้านทานการชนจะต้องคลายเป็น: วิธีที่ดีที่สุดในการแสดงข้อความสองข้อความที่แตกต่างกันด้วยเอาต์พุตเดียวกันคือการโจมตีทั่วไป
  • ควรมี (ครั้งแรก) ความต้านทานพรีอิมเมจ: ให้เอาต์พุตสำหรับอินพุตที่ไม่รู้จักแบบสุ่ม เป็นไปไม่ได้ในทางคำนวณที่จะค้นหาอินพุตนั้น (หรืออินพุตอื่นที่มีเอาต์พุตเดียวกัน) ง่ายกว่าการลองอินพุต สังเกตว่าถ้ามี $n$ ผลลัพธ์ที่เป็นไปได้ มีการโจมตีทั่วไปที่ทำลายการต่อต้านพรีอิมเมจด้วยประมาณ $n$ การประเมินฟังก์ชัน ดังนั้นการต้านทานพรีอิมเมจจึงเป็นนัย $n$ มีขนาดใหญ่ (พูดอย่างน้อย $2^{96}$ ทุกวันนี้); หากไม่เป็นเช่นนั้น คำจำกัดความของความต้านทานต่อพรีอิมเมจจะต้องคลายลง

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

  • สำหรับอินพุตสุ่มที่ไม่รู้จักซึ่งมีลักษณะตามธรรมชาติใดๆ (นั่นคือ ไม่ขึ้นกับคำจำกัดความของฟังก์ชันแฮช ตัวอย่างเช่น อินพุตที่ประกอบด้วยทศนิยม 40 หลักซึ่งผลรวมหารด้วย 10 ลงตัว) เอาต์พุตควรแยกไม่ออกจากการคำนวณจากการสุ่มแบบสม่ำเสมอใน ชุดเอาต์พุต
  • ความต้านทานต่อการโจมตีแบบขยายความยาว: ให้เอาต์พุตสำหรับอินพุตที่ไม่รู้จัก $M$ไม่ควรคำนวณเอาต์พุตสำหรับอินพุตส่วนขยายของ $M$ (นั่นคือ $M\mathbin\|E$ เผื่อไม่ว่าง $E$) ง่ายกว่าโดยการค้นหา $M$ โดยลองอินพุต ขอให้สังเกตว่าแฮชทั่วไปเช่น SHA-256 ไม่มีคุณสมบัตินั้นในภายหลัง
user3742898 avatar
jp flag
ฉันจะแยกความแตกต่างระหว่าง "ฟังก์ชันแฮชมี" (เอาต์พุตขนาดคงที่ เป็นฟังก์ชัน ยอมรับอินพุตที่เกี่ยวข้องทั้งหมด) และ "ฟังก์ชันแฮช _valuth while_ มี" (เวลาเชิงเส้น ทนต่อการชนกัน ต้านทานพรีอิมเมจ) "กลับ 0;" เป็นฟังก์ชันแฮช มันเป็นฟังก์ชันแฮชที่แย่มาก แต่เป็นฟังก์ชันแฮช ฟังก์ชันแฮชที่ไม่ถูกต้องมักจะมีประโยชน์เมื่อมองหาจุดบกพร่องในอัลกอริทึมที่ใช้ฟังก์ชันแฮช หรือเพื่อช่วยชี้แจงว่าคุณสมบัติใด (ความเร็ว ความต้านทานการชนกัน...) ที่สำคัญที่สุดสำหรับแอปพลิเคชันที่กำหนด
Blindy avatar
in flag
เนื่องจาก OP ได้ชี้แจงว่าเขาไม่ได้พูดถึงฟังก์ชันแฮชที่มีความปลอดภัยในการเข้ารหัส ฉันเชื่อว่าควรคลายประเด็นสามจุดในคำจำกัดความของคุณ: 1. ฟังก์ชันนี้ไม่จำเป็นต้องเปิดเผยต่อสาธารณะเพื่อให้เป็นฟังก์ชันแฮชที่ดี (การตรวจทานโดยเพื่อนมีประโยชน์ แต่ไม่จำเป็น), 2. เนื่องจากอินพุตขนาดใหญ่และความจำเป็นในการแฮชที่รวดเร็ว การทำซ้ำที่ "เป็นไปไม่ได้ในการคำนวณ" เป็นเพียงข้อเสนอแนะเท่านั้น และ 3. การกลับฟังก์ชันที่เป็นไปไม่ได้โดยพื้นฐานแล้วไม่จำเป็น `f(x) = x` คือ วิธีที่รวดเร็วและมีประสิทธิภาพในการแฮชจำนวนเต็ม
fgrieu avatar
ng flag
@ สุ่มสี่สุ่มห้า: เนื่องจาก OP ได้ถามคำถาม [crypto-beginner] (https://crypto.stackexchange.com/q/92044/555) พร้อมกัน ฉันจึงตัดสินใจรับคำถามและ "ฉันขอแฮช ฟังก์ชัน" ความคิดเห็นเป็นการบ่งชี้ว่า OP ไม่ทราบว่าฟังก์ชันแฮชการเข้ารหัสลับคืออะไร แทนที่จะบ่งชี้ว่าคำถามไม่เกี่ยวกับการเข้ารหัสลับ
poncho avatar
my flag
ที่จริงแล้ว ฟังก์ชันแฮชที่ไม่ถูกต้องในการเข้ารหัสสามารถใช้ภายในตารางแฮชได้ดีกว่าฟังก์ชันที่ดี กล่าวคือ อาจทำให้การบีบอัดแฮชที่คาดไว้น้อยกว่าฟังก์ชันที่ดูสุ่ม ที่สามารถเกิดขึ้นได้ขึ้นอยู่กับการกระจายของอินพุต ฟังก์ชันแฮช (ไม่เข้ารหัสลับ) ที่เลือกมาอย่างดีสามารถกระจายเอาต์พุตได้ดีกว่าที่คาดไว้

โพสต์คำตอบ

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