มีอัลกอริธึมแฮ 'สะท้อนกลับ' หรือไม่?


11

มีคลาสของอัลกอริธึมการแฮชไม่ว่าจะเป็นทางทฤษฎีหรือปฏิบัติเช่นนั้นอัลกอริทึมในชั้นเรียนอาจถูกพิจารณาว่าเป็น 'แบบสะท้อน' ตามคำนิยามที่ให้ไว้ด้านล่าง:

  • hash1 = algo1 ("ป้อนข้อความ 1")
  • hash1 = algo1 ("ข้อความที่ป้อน 1" + hash1)

ตัวดำเนินการ + อาจเป็นการต่อข้อมูลหรือการดำเนินการที่ระบุอื่น ๆ เพื่อรวมเอาท์พุท (hash1) กลับไปที่อินพุต ("อินพุตข้อความ 1") เพื่อให้อัลกอริทึม (algo1) จะให้ผลลัพธ์ที่เหมือนกันทุกประการ เช่นการชนกับอินพุตและอินพุต + เอาต์พุต ผู้ประกอบการ + จะต้องรวมทั้งอินพุตทั้งหมดและอัลโกอาจไม่ทิ้งส่วนหนึ่งของอินพุต

อัลกอริทึมจะต้องผลิตเอนโทรปีสูงในผลลัพธ์ มันอาจ แต่ไม่จำเป็นต้องเป็นเรื่องยากที่จะเข้ารหัส cryptographically เพื่อย้อนกลับผลลัพธ์กลับไปยังหนึ่งหรือทั้งสองอินพุตที่เป็นไปได้

ฉันไม่ใช่นักคณิตศาสตร์ แต่คำตอบที่ดีอาจรวมถึงหลักฐานว่าทำไมคลาสอัลกอริธึมจึงไม่มีอยู่จริง อย่างไรก็ตามนี่ไม่ใช่คำถามที่เป็นนามธรรม ฉันสนใจที่จะใช้อัลกอริทึมแบบนี้ในระบบของฉันอย่างแท้จริงหากมีอยู่จริง

นี่เป็นคำถามซ้ำที่โพสต์ครั้งแรกที่/programming/4823680/reflexive-hash


ที่เกี่ยวข้อง: การผสมแฮชเชื่อมโยง
Tsuyoshi Ito

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

ใครบางคนต้องการแฮชไฟล์ที่มีแฮชของตัวเอง! ;)
Raphael

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

@ ราฟาเอล - ใช่นั่นเป็นวิธีที่สั้น ๆ ของการวางไว้

คำตอบ:


9

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

GGkk+|x|x

Hx

  1. |x|kH(x)=defG(x)
  2. |x|>kLR(|x|k)kxx=L+R|R|=kR=H(L)H(L)H(x)=defRH(x)=defG(x)

อย่างที่ฉันบอกไปนี่เป็นสิ่งก่อสร้างอันเล็กน้อย มันสามารถนำไปใช้กับฟังก์ชั่นแฮชใด ๆ ในทางปฏิบัติ (เช่น MD5, SHA-1, ... ) หรือในทางทฤษฎี


H|R|=k

@ ราฟาเอล: ขอบคุณสำหรับการชี้ให้เห็นการพิมพ์ผิด (แก้ไข) H มีค่าเอนโทรปีเท่ากับ G ยกเว้นในกรณีที่ R = G (L) ตามเงื่อนไขในเงื่อนไขนี้ H (x) ควรเท่ากับ R เราไม่สามารถทำอะไรได้ที่นี่เพื่อเพิ่มค่าเอนโทรปี เนื่องจากความต้องการ "การสะท้อนกลับ" ทำให้เราไม่สามารถแก้ไขเอาต์พุตได้
MS Dousti

@Sadeq: มันต้องการฟังก์ชัน hash ที่ต้องคำนวณซ้ำหรือไม่? ฉันใช้อัลกอริทึมที่ได้รับประโยชน์จากข้อเท็จจริงนี้ แต่อย่างใด?
Yasser Sobhdel

H(M+H(M)+H(M)++H(M))H(M)

Sadeq ขอบคุณ ฉันเชื่อว่านี่อาจตอบคำถามของฉันตามที่ถูกถาม คุณได้นอนคำตอบในคำเตือนที่เหมาะสม จากมุมมองในทางปฏิบัติฉันชอบความจริงที่ว่ามันเป็นภาพซ้อนทับสำหรับอัลกอริทึมที่รู้จักกันดีเช่น SHA-1 หากฉันเข้าใจถูกต้องแล้วอัลกอริทึมของคุณจะยังคงคำนวณแฮชซ้ำ ๆ จนกว่าจะพบการชนที่จำเป็นแล้วหยุด ในกรณีนี้บางทีเราสามารถพากย์โซลูชันไร้เดียงสานี้ได้ ความกังวลของฉันดูเหมือนว่าจะมีข้อสันนิษฐานโดยนัยว่าอัลกอริทึมแบบฝังตัว (SHA-1 พูด) ในที่สุดจะได้รับแฮชการชนที่จำเป็นต้องได้รับ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.