ทำไมค่าแฮช MD5 จึงไม่สามารถย้อนกลับได้?


92

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

หากบนเซิร์ฟเวอร์ของฉันใน PHP ฉันสร้าง:

md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e"

เมื่อคุณเรียกใช้สตริงเดียวกันผ่านฟังก์ชัน MD5 คุณจะได้ผลลัพธ์เดียวกันกับการติดตั้ง PHP ของคุณ มีการใช้กระบวนการเพื่อสร้างมูลค่าจากค่าเริ่มต้นบางส่วน

นี่ไม่ได้หมายความว่ามีวิธีแยกโครงสร้างสิ่งที่เกิดขึ้นและย้อนกลับค่าแฮชหรือไม่?

มันเกี่ยวกับฟังก์ชันเหล่านี้ที่ทำให้สตริงผลลัพธ์ไม่สามารถย้อนกลับได้?


54
ตัวอย่างง่ายๆของค่าที่ไม่สามารถย้อนกลับได้เช่นโมดูโล ตัวอย่างเช่น 10% 3 = 1 แต่คุณไม่สามารถย้อนกลับ 1 ถึง 10 ได้เนื่องจากอาจเป็น 4 ได้
Gab Royer

57
หากคุณสามารถสร้างข้อมูลใหม่ได้คุณจะมีอัลกอริธึมการบีบอัดแบบไม่สูญเสียที่มีประสิทธิภาพมากที่สุดเท่าที่เคยมีมา :)
Dan Diplo

คำตอบ:


206

วัสดุอินพุตอาจมีความยาวไม่สิ้นสุดโดยที่เอาต์พุตจะมีความยาว 128 บิตเสมอ ซึ่งหมายความว่าสตริงอินพุตจำนวนไม่ จำกัด จะสร้างเอาต์พุตเดียวกัน

หากคุณเลือกตัวเลขสุ่มและหารด้วย 2 แต่เขียนเฉพาะส่วนที่เหลือคุณจะได้รับ 0 หรือ 1 - คู่หรือคี่ตามลำดับ เป็นไปได้ไหมที่จะใช้ 0 หรือ 1 และรับหมายเลขเดิม?


4
กล่าวคือทั้งจำนวน -> ส่วนที่เหลือหรือสตริง -> md5 ไม่ใช่ "ฟังก์ชันการฉีด"
Federico A. Ramponi

Federico แน่นอนคุณหมายถึงว่าทั้งสองเป็นฟังก์ชัน bijective ไม่ใช่เหรอ? มีทั้งแบบฉีด
Mihai Limbășan

10
moocha: Injective หมายถึง 1 ต่อ 1 MD5 ไม่ใช่ 1 ต่อ 1 อย่างแน่นอนเนื่องจากโดเมนมีขนาดใหญ่กว่าช่วง อีกประเด็นหนึ่งที่น่าสังเกตคือเมื่อได้รับการตรวจสอบ MD5 มันยากมากที่จะหาสตริงแม้แต่เส้นเดียวที่แฮช อาจจะคุ้มค่าที่จะเพิ่มคำตอบเพื่อความกระจ่าง
biozinc

4
เป็นไปไม่ได้ที่จะมีฟังก์ชันแฮชที่สร้างค่าเฉพาะ คุณกำลังจับคู่ค่าจำนวนไม่ จำกัด เป็นค่าจำนวน จำกัด ซึ่งรับประกันการชนกัน
Serafina Brocious

4
ฉันขอแนะนำว่าคำตอบของคุณไม่ได้อยู่ที่ประเด็นสำคัญ ดังที่กล่าวถึง biozinc สิ่งที่สำคัญสำหรับแฮชรหัสผ่านที่ปลอดภัยคือคุณไม่พบอินพุตใด ๆ ที่สร้างเอาต์พุตไม่ใช่ว่าคุณไม่พบอินพุตดั้งเดิม ในบันทึกย่อนั้น MD5 ไม่จำเป็นต้องปลอดภัยเท่าที่ควร ( en.wikipedia.org/wiki/MD5#Collision_vulnerabilities )
Mike Pelley

53

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


9
คิดว่าจะดาวน์โหลด linux distros ได้เร็วแค่ไหนถ้าคุณสามารถรับ md5 แทน :)
Colin Pickard

16
@ Colin Pickard: เราจะไม่ดาวน์โหลด linux distros อีกต่อไปเราจะเขียนมันลงไป :)
tzot

30

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

พิจารณาฟังก์ชันนี้ (ในสัญกรณ์ PHP เป็นคำถาม):

function simple_hash($input) {
     return bin2hex(substr(str_pad($input, 16), 0, 16));
}

สิ่งนี้ต่อท้ายช่องว่างบางส่วนหากสตริงสั้นเกินไปจากนั้นใช้ 16 ไบต์แรกของสตริงจากนั้นเข้ารหัสเป็นเลขฐานสิบหก มีขนาดเอาต์พุตเท่ากับแฮช MD5 (อักขระเลขฐานสิบหก 32 ตัวหรือ 16 ไบต์หากเราไม่ใส่ส่วน bin2hex)

print simple_hash("stackoverflow.com");

สิ่งนี้จะส่งออก:

737461636b6f766572666c6f772e636f6d

ฟังก์ชั่นนี้ยังมีคุณสมบัติที่ไม่ใช่การฉีดเช่นเดียวกับที่ไฮไลต์โดยคำตอบของ Cody สำหรับ MD5: เราสามารถส่งสตริงขนาดใดก็ได้ (ตราบเท่าที่มันพอดีกับคอมพิวเตอร์ของเรา) และจะส่งออกเพียง 32 หลักฐานสิบหก แน่นอนว่าไม่สามารถฉีดได้

แต่ในกรณีนี้การค้นหาสตริงที่แมปกับแฮชเดียวกันเป็นเรื่องเล็กน้อย (เพียงแค่ใช้hex2binกับแฮชของคุณเท่านี้ก็มีได้) หากสตริงเดิมของคุณมีความยาว 16 (ดังตัวอย่างของเรา) คุณจะได้สตริงเดิมนี้ MD5 แบบนี้ไม่ควรเป็นไปได้เลยแม้ว่าคุณจะรู้ว่าความยาวของอินพุตนั้นค่อนข้างสั้นก็ตาม (นอกเหนือจากการลองอินพุตที่เป็นไปได้ทั้งหมดจนกว่าเราจะพบสิ่งที่ตรงกันเช่นการโจมตีด้วยกำลังดุร้าย)

สมมติฐานที่สำคัญสำหรับฟังก์ชันแฮชการเข้ารหัสคือ:

  • มันยากที่จะหาสตริงใด ๆ ที่สร้างแฮชที่กำหนด (ความต้านทานก่อนภาพ)
  • เป็นการยากที่จะหาสตริงอื่นใดที่สร้างแฮชเหมือนกันกับสตริงที่กำหนด (ความต้านทานของภาพที่สอง)
  • ยากที่จะหาคู่สายที่มีแฮชเดียวกัน (ความต้านทานการชนกัน)

เห็นได้ชัดว่าsimple_hashฟังก์ชั่นของฉันไม่เป็นไปตามเงื่อนไขเหล่านี้ (อันที่จริงถ้าเรา จำกัด พื้นที่อินพุตไว้ที่ "16-byte strings" ฟังก์ชันของฉันจะกลายเป็นแบบฉีดดังนั้นจึงสามารถพิสูจน์ได้ถึงความทนทานต่อภาพที่สองและความต้านทานการชนกัน)

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

เพื่อตอบคำถามจริง:

มันเกี่ยวกับฟังก์ชันเหล่านี้ที่ทำให้สตริงผลลัพธ์ไม่สามารถย้อนกลับได้?

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

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

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


4
ใช่ฉันรู้ว่านี่เป็นคำตอบที่ค่อนข้างล่าช้า แต่คำตอบที่ได้รับการยอมรับไม่ควรปล่อยให้ยืนอยู่อย่างนี้
Paŭlo Ebermann

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

(ต่อ ... ) 2. คำอธิบายเหล่านี้ใช้ "คณิตศาสตร์" เพื่อแสดงปัญหาพื้นฐานอันเนื่องมาจากการดำเนินการดังกล่าวทำให้ข้อมูลหลวมและไม่สามารถย้อนกลับได้
Autodidact

1
@SandeepDatta ฉันได้เพิ่มย่อหน้าเกี่ยวกับเรื่องนี้
Paŭlo Ebermann

2
แม้ว่าคำตอบอื่น ๆ ในชุดข้อความนี้จะถูกต้องในทางเทคนิคมากกว่า แต่คำตอบนี้มีประโยชน์มากที่สุด ฟังก์ชัน non-injection f (x) = 1 ไม่สามารถย้อนกลับได้ แต่ไม่น่าสนใจ ประโยชน์ของการแฮชอยู่ที่ความต้านทานก่อนภาพซึ่งยากที่จะค้นหาอินพุตใด ๆ ที่ให้ผลลัพธ์เฉพาะ
Justin J Stark

18

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


12

MD5 ไม่สร้างค่าแฮชเฉพาะ เป้าหมายของ MD5 คือการสร้างมูลค่าที่เปลี่ยนแปลงอย่างรวดเร็วโดยอิงจากการเปลี่ยนแปลงเล็กน้อยของแหล่งที่มา

เช่น,

"hello" -> "1ab53"
"Hello" -> "993LB"
"ZR#!RELSIEKF" -> "1ab53"

(เห็นได้ชัดว่านั่นไม่ใช่การเข้ารหัส MD5 จริง)

แฮชส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) ก็ไม่ซ้ำกัน แต่มันมีเอกลักษณ์เฉพาะตัวเพียงพอดังนั้นการชนกันจึงไม่น่าจะเป็นไปได้สูง แต่ก็ยังทำได้


8

วิธีที่ดีในการคิดอัลกอริทึมแฮชคือการคิดปรับขนาดรูปภาพใน Photoshop ... สมมติว่าคุณมีรูปภาพที่มีขนาด 5,000x5000 พิกเซลจากนั้นคุณปรับขนาดเป็นเพียง 32x32 สิ่งที่คุณมียังคงเป็นตัวแทนของภาพต้นฉบับ แต่มีขนาดเล็กกว่ามากและได้ "ทิ้ง" บางส่วนของข้อมูลภาพอย่างมีประสิทธิภาพเพื่อให้พอดีกับขนาดที่เล็กลง ดังนั้นหากคุณจะปรับขนาดภาพ 32x32 นั้นกลับไปที่ 5,000x5000 สิ่งที่คุณจะได้รับก็คือภาพเบลอ อย่างไรก็ตามเนื่องจากภาพขนาด 32x32 มีขนาดไม่ใหญ่นักในทางทฤษฎีจึงเป็นไปได้ว่าภาพอื่นสามารถลดขนาดลงเพื่อให้ได้พิกเซลที่เท่ากัน!

นั่นเป็นเพียงการเปรียบเทียบ แต่ช่วยให้เข้าใจว่าแฮชกำลังทำอะไรอยู่


3
ในขณะที่การปรับขนาดภาพเป็นกระบวนการที่สูญเสีย แต่ก็ยังค่อนข้างง่ายในการสร้างภาพในขนาด 5000 × 5000 ดั้งเดิมซึ่งจะ (เมื่อใช้ฟังก์ชันการย่อขนาดอีกครั้ง) จะลดขนาดภาพ 32 × 32 เท่ากัน การค้นหาพรีอิมเมจดังกล่าวน่าจะยากสำหรับฟังก์ชันแฮชที่ดี
Paŭlo Ebermann

4

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


1
มีค่าวันเกิดที่เป็นไปได้ 365 ค่าซึ่งอยู่ระหว่าง 2 ^ 8 ถึง 2 ^ 9 แฮช 128 บิตมีค่าที่เป็นไปได้ 2 ^ 128 - 2 ^ 120 เท่า ใช่การชนกันมีแนวโน้มที่จะเกิดขึ้นมากกว่าที่คุณคิด แต่ก็ยังไม่น่าเป็นไปได้ในทางดาราศาสตร์
Tim Keating

คุณจะต้องมีค่าที่แตกต่างกันประมาณ 2 ^ 64 เพื่อให้มีโอกาสที่แฮชชนกัน ยังคงมีอยู่บ้าง
Paŭlo Ebermann

4

เนื่องจากจำนวนไฟล์อินพุตที่เป็นไปได้มีมากกว่าจำนวนเอาต์พุต 128 บิตจึงเป็นไปไม่ได้ที่จะกำหนดแฮช MD5 ให้กับแต่ละไฟล์ที่เป็นไปได้

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

บางครั้งมีการใช้เกณฑ์เหล่านี้:

  1. ความต้านทานของ Preimage: สำหรับฟังก์ชันแฮชที่กำหนดและแฮชที่กำหนดควรจะหาอินพุตที่มีแฮชที่กำหนดสำหรับฟังก์ชันนั้นได้ยาก
  2. ความต้านทานของภาพที่สอง: สำหรับฟังก์ชันแฮชและอินพุตที่กำหนดมันน่าจะยากที่จะค้นหาอินพุตที่สองที่แตกต่างกันด้วยแฮชเดียวกัน
  3. ความต้านทานต่อการชนกัน: สำหรับฟังก์ชันที่กำหนดมันน่าจะเป็นเรื่องยากที่จะหาอินพุตที่แตกต่างกันสองอินพุตที่มีแฮชเดียวกัน

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

หมายเลข 3 หมายถึงหมายเลข 2

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


2

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

เห็นได้ชัดว่านี่เป็นไปได้สำหรับค่าอินพุตที่เป็นไปได้ทั้งหมดเท่านั้น แต่ถ้าคุณทราบขอบเขตของค่าอินพุตก็อาจเป็นไปได้ที่จะคำนวณ


อ่าใช่ ฉันชอบอ่านโพสต์ของ Jeff ใน Hash Tables ( codinghorror.com/blog/archives/000949.html ) และหัวข้อนี้ช่วยในการทำความเข้าใจแนวคิด
barfoon

2

นักวิทยาศาสตร์ชาวจีนได้ค้นพบวิธีที่เรียกว่า "การชนกันของคำนำหน้าที่เลือก" เพื่อสร้างความขัดแย้งระหว่างสองสายที่แตกต่างกัน

นี่คือตัวอย่าง: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
ซอร์สโค้ด: http://www.win.tue.nl/hashclash/fastcoll_v1.0.0 5_source.zip


2

วิธีที่ดีที่สุดในการทำความเข้าใจว่าคำตอบที่ได้รับการโหวตมากที่สุดหมายถึงอะไรคือการพยายามเปลี่ยนกลับอัลกอริทึม MD5 ฉันจำได้ว่าฉันพยายามย้อนกลับอัลกอริทึมMD5crypt เมื่อหลายปีก่อนไม่ใช่เพื่อกู้คืนข้อความต้นฉบับเพราะเป็นไปไม่ได้อย่างชัดเจน แต่เพียงเพื่อสร้างข้อความที่จะสร้างแฮชแบบเดียวกับแฮชดั้งเดิม อย่างน้อยที่สุดในทางทฤษฎีจะให้วิธีการเข้าสู่ระบบอุปกรณ์ Linux ที่เก็บ user: password ไว้ในไฟล์ / etc / passwd โดยใช้ข้อความที่สร้างขึ้น (รหัสผ่าน) แทนที่จะใช้แบบเดิม เนื่องจากข้อความทั้งสองจะมีผลการแฮชที่เหมือนกันระบบจะจดจำรหัสผ่านของฉัน (ที่สร้างจากแฮชดั้งเดิม) ว่าถูกต้อง นั่นไม่ได้ผลเลย หลังจากผ่านไปหลายสัปดาห์ถ้าจำไม่ผิดการใช้เกลือในข้อความเริ่มต้นฆ่าฉัน ฉันต้องสร้างไม่เพียง แต่ข้อความเริ่มต้นที่ถูกต้องเท่านั้น แต่ยังต้องสร้างข้อความเริ่มต้นที่ถูกต้องซึ่งฉันไม่สามารถทำได้ แต่ความรู้ที่ได้จากการทดลองนี้ก็ดี


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

1

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

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


0

ตามความหมายฟังก์ชัน Hash (cryptographic Hash): ไม่ควรกลับด้านไม่ควรมีการชนกัน (เป็นไปได้น้อยที่สุด)

regd คำถามของคุณ: เป็นการแฮชทางเดียว อินพุต (โดยไม่คำนึงถึงความยาว) จะสร้างเอาต์พุตที่มีขนาดคงที่ (จะถูกเพิ่มโดยอิงตาม algo (ขอบเขต 512 บิตสำหรับ MD5)) ข้อมูลถูกบีบอัด (สูญหาย) และไม่สามารถสร้างจากการแปลงย้อนกลับได้

ข้อมูลเพิ่มเติมเกี่ยวกับ MD5: มีความเสี่ยงต่อการชนกัน อ่านบทความนี้เมื่อเร็ว ๆ นี้ http://www.win.tue.nl/hashclash/Nostradamus/

เปิดซอร์สโค้ดสำหรับการใช้งานแฮช crypto (MD5 และ SHA) ได้ที่โค้ด Mozilla (ไลบรารี freebl)


0

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

ตัวอย่างเช่นลองใช้รหัสแฮชต่อไปนี้ที่http://gdataonline.com/seekhash.phpเพื่อค้นหาข้อความที่ฉันใช้ในการคำนวณแฮช

aea23489ce3aa9b6406ebb28e0cda430

อ่าใช่แฮชของคำ 7 ตัวอักษรธรรมดา ตอนนี้ใช้มันเพื่อหาเนื้อเพลง 11 คำที่มีช่องว่างและเครื่องหมายวรรคตอน: 9f2c08d4e6158bd4854b15be50c8daa8 แล้วพบกันในอีกหลายพันปี
Tim Keating

6fba2bbab8a8366309bf67c7df12c622? คำแนะนำ: อาจเป็นเวอร์ชัน OEM ของ Mac OS X เวอร์ชันเฉพาะ!
scherand

@ Tim Keating, @scherand: เพียงแค่ชี้ให้เห็นจุดอ่อนของอัลกอริทึมแฮชเนื่องจากแฮชของสตริงนั้นเหมือนกันเสมอเราจึงไม่จำเป็นต้องแตกอัลกอริทึมเพื่อหาสตริงจริง
Babar

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

0

f (x) = 1 ไม่สามารถย้อนกลับได้ ฟังก์ชันแฮชไม่สามารถย้อนกลับได้

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

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

อย่างไรก็ตามสิ่งนี้ไม่สนใจว่าข้อความธรรมดาที่สมเหตุสมผลที่เกิดจากเมล็ดpasswordนั้นมีมากมีโอกาสมากกว่าที่เมล็ดพันธุ์อื่นผลิตได้Wsg5Nm^bkI4EgxUOhpAjTmTjO0F!VkWvysS6EEMsIJiTZcvsh@WI$IH$TYqiWvK!%&Ue&nk55ak%BX%9!NnG%32ftud%YkBO$U6oถึงขนาดที่ใครก็ตามที่อ้างว่าอย่างที่สองมีความเป็นไปได้จะถูกหัวเราะเยาะ

ในทำนองเดียวกันถ้าคุณกำลังพยายามที่จะตัดสินใจระหว่างสองรหัสผ่านที่มีศักยภาพpasswordและWsg5Nm^bkI4EgxUOก็ไม่ได้เป็นเรื่องยากที่จะทำตามที่นักคณิตศาสตร์บางคนจะมีคุณเชื่อ


คุณได้รับรหัสส่วนใหญ่มาจากไหนเพียงแค่ XOR ข้อมูลด้วยความรู้หลัก ๆ นี่เป็นเรื่องจริงสำหรับการเข้ารหัสแบบสตรีม แต่ก็มีบล็อกการเข้ารหัสเช่นกันและไม่ได้ผลเช่นนี้
Paŭlo Ebermann

-5

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

  • ใส่รหัสผ่านที่เขา / เธอเลือกเองและวางผลลัพธ์ไว้ในตารางรหัสผ่านหากเขา / เธอมีสิทธิ์เขียน / แก้ไขตาราง
  • สร้างค่าแฮชของรหัสผ่านทั่วไปและทดสอบการมีอยู่ของค่าแฮชที่คล้ายกันในตารางรหัสผ่าน

ในกรณีนี้รหัสผ่านที่อ่อนแอจะไม่สามารถป้องกันได้ด้วยข้อเท็จจริงที่ว่ามีการแฮช


คุณค่าที่แท้จริงของ "ค่าที่แฮช" ไม่ใช่เพื่อให้ตัวยึดตำแหน่งที่มนุษย์อ่านไม่ได้ หากแฮช 'password1' เป็น 'newval' จะยังไม่ซ่อนค่าในลักษณะเดียวกันแม้ว่าแฮชจะอ่านได้และมีความหมาย นอกจากนี้รหัสผ่านยังเป็นตัวอย่างที่ไม่ดีเนื่องจากไม่ควรแฮช สมมติว่าผู้โจมตีมีสิทธิ์เข้าถึงฐานข้อมูลดังกล่าวเป็นไปได้แน่นอน อย่างไรก็ตามดูเหมือนว่าคุณกำลังละทิ้งการใช้งานที่เหมาะสมสำหรับฟังก์ชันการแฮชดังกล่าวตัวอย่างหนึ่งที่ระบุไว้ในคำตอบด้านบน - ความสมบูรณ์ของข้อความ มันเป็นเหตุผลที่ฉันอยู่ในหัวข้อนี้ในวันนี้จริงๆแล้ว
เชน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.