แต่หลังจากอ่าน ฉันก็ยังไม่เข้าใจว่า XXH3 (หนึ่งในตระกูล xxHash) ทนต่อการโจมตีแบบพรีอิมเมจได้อย่างไร
ไม่เลย เป็นเรื่องง่ายที่จะสร้างภาพที่แฮชเป็นค่าตามอำเภอใจ
ใช่ เอาต์พุต XXH3 คือ 64/128 บิต ซึ่งหมายความว่าความน่าจะเป็นในการค้นหาภาพคือ $2^{64}/2^{128}$ ที่สอดคล้องกัน
ความน่าจะเป็นจะเกิดขึ้นหากกลยุทธ์ที่คุณใช้คือ "เลือกภาพ แฮช และดูว่าผลลัพธ์คืออะไร" มีกลยุทธ์ที่มีประสิทธิภาพมากขึ้น
อาจมีการโจมตีแบบไม่ดุร้ายบ้าง?
แน่นอน
xxhash ประกอบด้วยขั้นตอนที่:
ดังนั้น ในการสร้างภาพที่แฮชเป็นค่าเฉพาะ สิ่งที่คุณต้องทำคือเลือกเทมเพลตที่ประกอบด้วยค่าต่างๆ ยกเว้นคำเดียว จากนั้น คุณประเมินค่า xxhash ไปข้างหน้าจนกว่าคุณจะได้คำหนึ่งคำนั้น โดยได้ค่าสถานะภายใน A จากนั้นคุณใช้ค่าแฮชเป้าหมาย และคุณคำนวณ xxhash ย้อนหลังจนกว่าคุณจะได้คำหนึ่งคำนั้น มาพร้อมกับ ค่าสถานะภายใน B จากนั้นสิ่งที่คุณต้องทำคือเลือกคำที่ไม่รู้จักหนึ่งคำให้เป็นสิ่งที่แปลงค่าสถานะ A เป็นค่าสถานะ B ซึ่งเป็นเรื่องง่าย ใส่คำนั้นลงในเทมเพลตและทำเสร็จแล้ว
และเพื่อตอบคำถามสุดท้ายของคุณ:
สำหรับแฮชการเข้ารหัสเป็นการยากที่จะค้นหา แต่มีอยู่จริง เมื่อเราทำการโจมตี preimage สำเร็จแล้ว เราจะแน่ใจได้อย่างไรว่าค่าที่เราพบนั้นเป็นค่าดั้งเดิม
เห็นได้ชัดว่า การชนกันเป็นสิ่งที่หลีกเลี่ยงไม่ได้สำหรับฟังก์ชันใดๆ ที่แปลงสตริงที่ยาวเป็นสตริงที่มีความยาวคงที่ให้สั้นลง ทีนี้ หากเราพบรูปภาพที่แฮชเป็นค่าเดียวกัน เราจะแน่ใจได้อย่างไรว่าเป็นรูปภาพเดียวกันกับที่ถูกแฮชในตอนแรก คำตอบ: โดยทั่วไป เราทำไม่ได้ เว้นแต่เราจะรู้มากเกี่ยวกับภาพต้นฉบับ (เช่น ในการโจมตี xxhash ข้างต้น เรารู้ทุกคำของอินพุต ยกเว้นคำเดียว) ในทางกลับกัน สำหรับการโจมตีส่วนใหญ่กับแฮชการเข้ารหัส เราไม่สนใจ - ผู้โจมตีมักจะชนะหากเขาสามารถค้นพบ ใดๆ พรีอิมเมจ