เป็นไปได้ที่จะถอดรหัส MD5 hashes หรือไม่


260

มีคนบอกฉันว่าเขาได้เห็นระบบซอฟต์แวร์ที่:

  1. ดึงรหัสผ่านที่เข้ารหัส MD5 จากระบบอื่น
  2. ถอดรหัสรหัสผ่านที่เข้ารหัสและ
  3. เก็บรหัสผ่านในฐานข้อมูลของระบบโดยใช้อัลกอริทึมของระบบ

เป็นไปได้ไหม ฉันคิดว่ามันเป็นไปไม่ได้ / เป็นไปได้ที่จะถอดรหัส MD5 แฮช

ฉันรู้ว่ามีพจนานุกรม MD5 แต่มีอัลกอริทึมการถอดรหัสจริงหรือไม่


7
การคืนค่า MD5 จะให้รหัสผ่านหลายรหัสเช่นกัน
บริษัท Carles

231
MD5 เป็นอัลกอริธึมย่อย คิดว่ามันเป็นการแปลงวัวเป็นสเต็ก ตอนนี้ลองย้อนกลับที่
หอยทากเชิงกล

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

8
@ กลไกเชิงกลเนื่องจากความคล้ายคลึงใครสามารถสร้างโคลนที่สมบูรณ์แบบได้จาก DNA บนสเต็ก :))
Trimikha Valentius

8
@TrimikhaValentius MD5 เป็นอัลกอริทึมในการย่อยอาหาร คิดว่ามันกินสเต็ก> การย่อยอาหาร> ออก ตอนนี้ลองย้อนกลับที่
user4157124

คำตอบ:


424

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

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

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

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

เมื่อข้อมูลบางส่วนถูกเรียกใช้ผ่านฟังก์ชันแฮชจะไม่มีการย้อนกลับ


22
อย่างไรก็ตามมีการชนกันมากกว่าที่คิดไว้เดิมในพื้นที่แฮช MD5 จะไม่ถือว่าเหมาะสมที่สุดสำหรับแฮชที่ดีที่สุดสำหรับรหัสผ่าน
Cheeso

12
เนื่องจากรหัสผ่านส่วนใหญ่จะสั้นกว่าแฮช MD5 จึงมักจะมีรหัสผ่านเดียวสำหรับแฮชแต่ละรหัส (และการค้นหาอย่างใดอย่างหนึ่งถึงแม้ว่ามันจะไม่ใช่แบบดั้งเดิมก็เพียงพอที่จะเข้าถึงบัญชี) จุดของการเป็นฟังก์ชั่นทางเดียวไม่มีหลาย preimages ที่แตกต่างกันดังนั้นเราจึงไม่สามารถรู้ได้ว่าอันไหนเป็นแบบดั้งเดิมแต่มันเป็นเรื่องยากมากที่จะหาได้หนึ่งค่าเดิม
Paŭlo Ebermann

2
@Nick: อันที่จริง RFC1321 พูดอย่างชัดเจนว่า: "อัลกอริทึมใช้เป็นข้อความที่มีความยาวไม่ จำกัด "
Adam Batkin

6
@Olathe - ฉันไม่แน่ใจว่าฉันเห็นด้วย รับแฮชโดยทั่วไปแล้วเป็นไปไม่ได้ที่จะกำหนด (ด้วยความมั่นใจ 100%) อินพุตต้นฉบับ มี (โดยปกติ) จำนวนอนันต์ของอินพุตที่สร้างเอาต์พุต (แฮช) ที่เป็นไปได้ทั้งหมด ฉันพูดโดยทั่วไปเพราะถ้าคุณรู้ (ตัวอย่าง) ว่าคุณกำลังมองหาสตริงของอักขระ ASCII และมันมีค่าน้อยกว่าพูด 12 ไบต์มันน่าจะเป็นว่ามีอินพุตเพียงตัวเดียวที่สร้างเอาต์พุตที่กำหนด แต่จะมีการชนกัน (ไม่มีที่สิ้นสุด) เสมอและหากคุณไม่มีข้อ จำกัด จากภายนอก (เช่นในตัวอย่างของฉัน) คุณจะไม่มีทางรู้ว่าถูกต้อง
Adam Batkin

2
@ Adam Batkin คุณพูดถูก แต่ฉันไม่ได้หมายถึงความแน่นอน 100% การถอดรหัสแบบถอดรหัสไม่สามารถทำได้อย่างแน่นอน 100% ผู้ส่งอาจหมายถึงการพูดพล่อยๆแบบสุ่มมากกว่าถ้อยคำภาษาอังกฤษโดยใช้คีย์เดียวกันที่ถอดรหัส plaintexts ภาษาอังกฤษอื่น ๆ แต่ความน่าจะเป็นของภาษาอังกฤษอยู่ใกล้ 100% ในทำนองเดียวกันเมื่อเลือกระหว่างรหัสผ่านบทกวีภาษาญี่ปุ่น UTF-8 ที่ยาวและสายซึ่งพูดพล่อยๆความน่าจะเป็นของบทกวีนั้นอยู่ใกล้ 100% สิ่งนี้สามารถทำได้โดยใช้ความน่าจะเป็นหลังจากความเป็นจริงมากกว่าข้อ จำกัด ล่วงหน้า เห็นได้ชัดว่าไม่สามารถทำได้โดยทั่วไป แต่ก็ยังมีประโยชน์มาก
โอเลเท

154

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

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

MD5 เป็นแฮชที่ไม่ดีสำหรับใช้รหัสผ่าน:

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

ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัยดังนั้นจะไม่แนะนำอย่างชัดเจนนอกเหนือจาก ค้นหาจากซัพพลายเออร์ที่มีชื่อเสียงและใช้มัน ทั้งการออกแบบและการนำระบบรักษาความปลอดภัยมาใช้นั้นเป็นเรื่องยุ่งยาก


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

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

1
ฉันเคยเห็นมาตรการป้องกันสแปมที่เว็บเซิร์ฟเวอร์ของผู้รับปฏิเสธจดหมายขาเข้าเพียงเพื่อรอให้เซิร์ฟเวอร์อีเมลของผู้ส่งลองอีกครั้ง (สแปมบอทมักจะลองเพียงครั้งเดียว) ซึ่งอาจเกินเวลาหมดเวลา 10 นาทีของคุณได้อย่างง่ายดาย
sisve

1
@ravisoni: นั่นคือการหาค่าซึ่งมีกัญชาเดียวกันสันนิษฐานผ่านกำลังดุร้ายหรือตารางการค้นหา ไม่มีการรับประกันว่าเป็นค่าธรรมดาดั้งเดิม
Jon Skeet

5
@ravisoni: คุณหมายความว่าอะไร "ถูกต้อง" ที่นี่? หากไม่ทราบรหัสผ่านคุณไม่สามารถทราบได้ว่ารหัสผ่านที่เปิดเผยนั้นเป็นรหัสเดิมหรือไม่ แต่ประเด็นก็คือแฮ็กเดียวเช่น MD5 โดยนิยามจะสูญเสียข้อมูล ความจริงที่ว่าเว็บไซต์เช่นนี้สามารถเกิดขึ้นกับรหัสผ่านที่ตรงกับหลักฐานที่ดีเพียงของ MD5 เป็นอัลกอริทึมที่ดีที่จะใช้เหตุผลด้านความปลอดภัย
Jon Skeet

52

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

แต่นั่นไม่ได้หมายความว่ามัน

  • ทำงานได้
    หรือ
  • การรักษาความปลอดภัย

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


วิธีการเข้าสู่ระบบด้วย MD5 การแฮชควรทำงานคือ:

ในระหว่างการลงทะเบียน:
ผู้ใช้สร้างรหัสผ่าน -> รหัสผ่านถูกแฮชด้วย MD5 -> แฮที่เก็บไว้ในฐานข้อมูล

ระหว่างการเข้าสู่ระบบ:
ผู้ใช้ป้อนชื่อผู้ใช้และรหัสผ่าน -> (ตรวจสอบชื่อผู้ใช้) รหัสผ่านถูกแฮชด้วย MD5 -> แฮชถูกเปรียบเทียบกับแฮชที่เก็บไว้ในฐานข้อมูล

เมื่อต้องการ 'ลืมรหัสผ่าน':

2 ตัวเลือก:

  • ผู้ใช้ส่งรหัสผ่านแบบสุ่มเพื่อเข้าสู่ระบบจากนั้นจะมีการเปลี่ยนแปลงในการเข้าสู่ระบบครั้งแรก

หรือ

  • ผู้ใช้จะถูกส่งลิงก์เพื่อเปลี่ยนรหัสผ่าน (พร้อมการตรวจสอบเพิ่มเติมหากคุณมีคำถามเพื่อความปลอดภัย / ฯลฯ ) จากนั้นรหัสผ่านใหม่จะถูกแฮชและแทนที่ด้วยรหัสผ่านเก่าในฐานข้อมูล

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

32

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

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


1
ฉันจะเพิ่มว่าการหาค่าอื่นที่แฮชไปยังเอาต์พุตเดียวกันเรียกว่า "การชนกัน" นี่เป็นวิธีการทั่วไปในการทำลายระบบที่แฮช MD5
นิโคล

5
@Renesis หาข้อมูลที่ hashes เป็นค่าที่รู้จักกันก่อนหน้านี้ที่เรียกว่า "preimage" จริงและก็มากมากหนักกว่าเพียงแค่การปะทะกัน ยังไม่มีการสาธิตการโจมตีล่วงหน้ากับ MD5 แต่มีการใช้การโจมตีแบบชนกัน
bdonlan

จุดของฟังก์ชั่นแฮช (เมื่อใช้สำหรับการจัดเก็บรหัสผ่าน) ไม่ใช่ว่ามีรหัสผ่านที่เป็นไปได้จำนวนมากที่ให้แฮชแบบเดียวกัน (มี แต่ส่วนใหญ่จะยาวกว่าแฮชตัวเอง) แต่มันหายาก หนึ่งในนั้น (ซึ่งเพียงพอสำหรับการเข้าถึงระบบ) และใช่เพราะตารางรุ้งคุณไม่ต้องใช้แฮชที่ไม่มีการชำระ และเนื่องจากพื้นที่รหัสผ่านขนาดเล็กคุณจะใช้แฮชช้า (เช่น bcrypt หรือ scrypt) แทนรหัสที่รวดเร็ว (เช่น MD5 / SHA - * / .... )
Paŭlo Ebermann

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

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

13

เป็นไปไม่ได้อย่างน้อยไม่ในระยะเวลาที่เหมาะสม

วิธีนี้จัดการบ่อยครั้งคือรหัสผ่าน "รีเซ็ต" นั่นคือคุณให้รหัสผ่านใหม่ (สุ่ม) และส่งให้พวกเขาในอีเมล


5
หากกัญชาก็ไม่เค็มคุณต้องการจะประหลาดใจวิธีการที่มักจะใช้เวลาทั้งหมดคือการค้นหาของ Google สำหรับค่าแฮช ...
ไมเคิล Borgwardt

1
ไม่จริงในทางปฏิบัติสำหรับระบบการดึงรหัสผ่านแม้ว่าแม้จืดหนึ่ง :)
แมทธิว Groves

12

คุณไม่สามารถเปลี่ยนรหัสผ่าน md5 ได้ (ในภาษาใด ๆ )

แต่คุณทำได้:

มอบให้กับผู้ใช้ใหม่

ตรวจสอบในตารางรุ้งเพื่อดึงตารางเก่า


1
ระวังความคิดตารางรุ้ง หากคุณกำลังเกลือ - และคุณควร - แล้วมันจะไม่ทำงาน แต่อย่างใด
สตีเว่น Sudit

1
@StevenSudit หากพวกเขายังคงใช้ MD5 เพื่อแฮรหัสผ่านแทนการใช้รหัสผ่านที่คาดเดายากคุณไม่สามารถคาดเดาได้ว่าพวกเขากำลังใช้เกลืออยู่ บางทีพวกเขาอาจทำไม่ได้
Maarten Bodewes

10

ไม่เขาต้องสับสนกับพจนานุกรม MD5

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


8

ถอดรหัส (รับข้อความธรรมดาโดยตรงจากค่าแฮชในวิธีอัลกอริทึม) หมายเลข

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


7

MD5 เป็นอัลกอริทึมการแฮชคุณไม่สามารถย้อนกลับค่าแฮช

คุณควรเพิ่ม "เปลี่ยนรหัสผ่านคุณสมบัติ" ซึ่งผู้ใช้ให้รหัสผ่านอื่นคำนวณแฮชและเก็บไว้เป็นรหัสผ่านใหม่


7

ไม่มีวิธีง่ายๆที่จะทำ นี่เป็นจุดเริ่มต้นของการแฮ็ชรหัสผ่านในครั้งแรก :)

สิ่งหนึ่งที่คุณควรจะทำคือตั้งรหัสผ่านชั่วคราวสำหรับพวกเขาด้วยตนเองและส่งให้

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


6

ดูคำตอบอื่น ๆ ทั้งหมดที่นี่เกี่ยวกับวิธีการและเหตุผลที่ไม่สามารถย้อนกลับได้และทำไมคุณไม่ต้องการทำเช่นนั้น

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

นอกจากนี้สิ่งนี้จะไม่ทำงานสำหรับแฮ็คเค็ม การแนะนำเกลือโดยผู้เชี่ยวชาญด้านความปลอดภัยหลายคน


ไม่ถูกต้อง หากพบคู่ที่ตรงกันแน่นอนว่ามันจะเป็นรหัสผ่านดั้งเดิม หากไม่ใช่กรณีนี้ก็เป็นไปได้ที่จะสร้างการชนที่ได้รับ H (X) ใด ๆ ที่ X เป็นข้อความโดยไม่มีโครงสร้างที่กำหนดไว้ล่วงหน้าที่กำหนดโดยฝ่ายตรงข้าม มันเป็นไปไม่ได้ที่จะคำนวณหาการชนกันของฟังก์ชันแฮชที่เข้ารหัสลับได้แม้ว่าจะเป็นฟังก์ชั่นแฮชที่หักเช่น MD5
Maarten Bodewes

@MaartenBodewes: "หากพบคู่ที่ตรงกันแน่นอนว่าจะเป็นรหัสผ่านเดิม" ฉันไม่สามารถดูได้ว่าเป็นกรณีนี้อย่างไรหากเราถือว่ารหัสผ่านไม่ จำกัด จำนวน ฉันว่ามันน่าจะเป็นรหัสผ่านดั้งเดิม แต่ไม่จำเป็นต้องเป็น ความจริงที่ว่ามีรหัสผ่านที่เป็นไปได้มากกว่า MD5 แฮชหมายความว่าจะต้องมีรหัสผ่านสองตัวที่มีแฮชเดียวกัน เพียงเพราะเป็นไปไม่ได้ที่จะคำนวณหาการชนดังกล่าวไม่ได้หมายความว่ามันไม่มีอยู่จริง หรือว่าฉันเข้าใจคุณผิด
Jon Skeet

@ JonSkeet หากไม่สามารถคำนวณหาการชนกันของข้อมูลบนจุดประสงค์ได้การหาทีละตัวโดยบังเอิญนั้นไม่น่าจะเท่ากันหรือแย่กว่านั้น เนื่องจากพื้นที่เอาท์พุทที่ จำกัด ของ MD5 และปัญหาวันเกิดโอกาสที่คุณจะพบการชนกันคือประมาณ 1 ใน 2 ^ 64 (นั่นคือประมาณครึ่งหนึ่งของพื้นที่เอาต์พุต) - และนั่นหลังจากจับคู่ประมาณ 2 ^ 64 แฮช และนี่ไม่ได้พิจารณาด้วยว่าข้อความอาจต้องมีขนาดเล็กและมีรูปแบบเฉพาะเพื่อใช้เป็นรหัสผ่าน รหัสผ่านส่วนใหญ่มีค่าเอนโทรปีต่ำกว่า 2 ^ 64 บิต
Maarten Bodewes

1
@MaartenBodewes: แต่มันมีความแตกต่างกันอย่างมากระหว่าง ข้อความของคุณเกี่ยวกับความมั่นใจว่าเป็นรหัสผ่านที่ถูกต้องมีความแข็งแกร่งมากเกินไป IMO นั่นแสดงให้เห็นความแน่นอนทางคณิตศาสตร์ที่ไม่มีอยู่
Jon Skeet

คุณสามารถคาดเดาคีย์ AES 2 ^ 128 บิตได้ในครั้งเดียว มันเป็น "เพียง" ไม่น่าเป็นไปได้อย่างมาก การเข้ารหัสขึ้นอยู่กับอัตราต่อรองประเภทนี้ สำหรับการใช้งานจริงทั้งหมดหากคุณพบข้อความอินพุต / รหัสผ่านมันจะเป็นสิ่งที่คุณกำลังมองหา มันเป็นไปได้ในทางทฤษฎีที่จะพบว่าข้อความอินพุตอื่นนั้นดี แต่สำหรับคำถามนี้ใน StackOverflowไม่จำเป็นต้องพิจารณา และตารางสายรุ้งจะถูกเติมด้วยรหัสผ่านที่เป็นไปได้เท่านั้น พวกเขาจะไม่มีข้อมูลเพียงพอที่จะมีโอกาสแม้แต่การชนกันของข้อมูล (พวกเขาอาจเขียนทับการทำแผนที่หรือกลายเป็นชื่อเสียง)
Maarten Bodewes

4

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

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

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


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

3

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

คุณไม่สามารถยกเลิกการแฮช MD5 ได้


3
จากการออกแบบทำให้แฮชที่มีความยาวเท่ากันทั้งหมดได้รับผลกระทบจากการชน มันหลีกเลี่ยงไม่ได้เมื่อควบคุมข้อมูลความยาวผันแปร MD5 นั้นล้าสมัยเนื่องจากอัตราการชนไม่ใช่สำหรับการชนกัน
โจนาธาน Lonowski

MD5 ถูกพิจารณาว่าใช้งานไม่ได้เนื่องจากความเป็นไปได้ที่ได้รับการพิสูจน์แล้วของการสร้างอินพุตที่ชนกัน
Ned Batchelder

3

คุณสามารถค้นหาเครื่องมือออนไลน์ที่ใช้พจนานุกรมเพื่อดึงข้อความต้นฉบับ

ในบางกรณีวิธีการพจนานุกรมอาจไร้ประโยชน์:

  • ถ้าข้อความถูกแฮชโดยใช้ข้อความ SALT
  • หากข้อความถูกแฮชมากกว่าหนึ่งครั้ง

ตัวอย่างเช่นต่อไปนี้เป็นเครื่องมือออนไลน์decrypter MD5


ตารางเรนโบว์ - ไม่ใช่การโจมตีด้วยพจนานุกรม - ไร้ประโยชน์หากใช้เกลือ การแฮ็กมากกว่าหนึ่งครั้งโดยไม่มีเกลือก็ยังอนุญาตให้ใช้ตารางรุ้งได้แม้ว่าการหาออนไลน์ที่มีอยู่แล้วนั้นมีโอกาสน้อยกว่า
Maarten Bodewes

2

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

นั่นเป็นวิธีเดียวโดยไม่ต้องเข้าสู่การเข้ารหัส


2

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

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

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

(หมายเหตุ: เจ็ดปีต่อมาหวังว่าจะมีประโยชน์กับใครบางคน)


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

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

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

1

ไม่มันไม่สามารถทำได้ ไม่ว่าคุณจะใช้พจนานุกรมหรือคุณสามารถลองใช้การแฮชค่าต่าง ๆ จนกว่าคุณจะได้แฮชที่คุณกำลังค้นหา แต่จะไม่สามารถ "ถอดรหัส"


ฉันเห็นเว็บไซต์นี้ซึ่งฝืน md5 ลงในข้อความเดิม: md5.gromweb.com เป็นไปได้ยังไง?
samach

2
@ samach321 - ง่าย: พวกเขามี DB ของสตริงแฮช สิ่งที่คุณป้อนลงในกล่อง "แปลงสตริงเป็น MD5 แฮช" จะถูกเพิ่มเข้าไปในฐานข้อมูล ลองรับ MD5 แฮชจากแหล่งอื่นแล้วป้อน หากไม่ใช่สิ่งที่อยู่ในฐานข้อมูลคุณจะไม่ได้รับผล
Vilx-

1

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


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

1

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

ลองออนไลน์:

ถอดรหัส MD5

md5online

md5decrypter


ใช่ แต่นี่เป็นคำถามที่กล่าวถึงแล้วในวลี "ฉันรู้ว่ามีพจนานุกรม" เพียงแค่ชี้ให้เห็นพจนานุกรมจึงไม่นับเป็นคำตอบ
Maarten Bodewes

1

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

  1. Bruteforcing : ขั้นตอนวิธีการรักษาความปลอดภัยคอมพิวเตอร์ทั้งหมดประสบbruteforcing ตามแนวคิดนี้ GPU ในปัจจุบันใช้แนวคิดของการเขียนโปรแกรมแบบขนานโดยใช้ซึ่งสามารถเรียกคืนข้อความธรรมดาได้ด้วยการประมวลผลกราฟิกขนาดใหญ่ hashcatเครื่องมือนี้ทำงานนี้ ครั้งล่าสุดที่ฉันตรวจสอบเวอร์ชันcudaของฉันฉันสามารถ bruteforce ตัวอักษรยาว 7 ตัวอักษรภายในหกนาที
  2. ค้นหาทางอินเทอร์เน็ต : เพียงแค่คัดลอกและวางแฮชบน Google แล้วดูว่าคุณสามารถค้นหาข้อความธรรมดาที่เกี่ยวข้องได้ไหม นี่ไม่ใช่วิธีแก้ปัญหาเมื่อคุณกำลังยัดเยียดบางสิ่งบางอย่าง แต่ก็คุ้มค่าที่จะลอง บางเว็บไซต์มีแฮชสำหรับคำเกือบทั้งหมดในพจนานุกรม

2
การโจมตีด้วยพจนานุกรมเป็นอีกวิธีหนึ่งหรือเปรียบเทียบกับฐานข้อมูลอื่นที่คุณรู้รหัสผ่านเข้า
Maarten Bodewes

1

ไม่มันเป็นไปไม่ได้ที่จะย้อนกลับฟังก์ชั่นแฮชเช่น MD5: เนื่องจากค่าแฮชเอาท์พุทเป็นไปไม่ได้ที่จะหาข้อความอินพุตเว้นแต่ว่ามีข้อมูลเกี่ยวกับข้อความอินพุตมากพอ

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


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

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

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


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

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

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

ปกติ hashes รหัสผ่านที่ใช้เป็นbcrypt , ScryptและPBKDF2 นอกจากนี้ยังมีArgon2ในรูปแบบต่าง ๆ ซึ่งเป็นผู้ชนะการแข่งขันแฮ็ครหัสผ่านที่สมเหตุสมผลล่าสุด ที่นี่ใน CrackStationเป็นการโพสต์บล็อกที่ดีเกี่ยวกับการรักษาความปลอดภัยรหัสผ่านที่ถูกต้อง


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


0

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

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


-1

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


-1

ไม่คุณไม่สามารถถอดรหัส / ย้อนกลับ md5 เนื่องจากเป็นฟังก์ชันแฮชทางเดียวจนกว่าคุณจะไม่พบช่องโหว่มากมายใน MD5 อีกวิธีคือมีบางเว็บไซต์มีชุดของฐานข้อมูลรหัสผ่านจำนวนมากดังนั้นคุณสามารถลองออนไลน์เพื่อถอดรหัสสตริงแฮช MD5 หรือ SHA1 ของคุณ ฉันพยายามเว็บไซต์เช่นhttp://www.mycodemyway.com/encrypt-and-decrypt/md5และมันทำงานได้ดีสำหรับฉัน แต่ทั้งหมดนี้ขึ้นอยู่กับแฮชของคุณหากแฮชนั้นถูกเก็บไว้ในฐานข้อมูลนั้นคุณจะได้รับสตริงจริง .


1
ไม่ MD5 ไม่ใช่การเข้ารหัสไม่ใช่แม้แต่การเข้ารหัสทางเดียว (ซึ่งไม่สมเหตุสมผลในตอนแรก)
Maarten Bodewes

@MaartenBodewes นั่นเป็นความผิดพลาดของฉันที่ไม่ใช่ฟังก์ชันการเข้ารหัสมันเป็นฟังก์ชันแฮชขอบคุณ
Rafi Ahmad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.