ปลอดภัยกว่าหรือไม่ที่จะใช้รหัสผ่านหลายครั้ง?


43

ฉันได้อ่านสองสามครั้งว่าเมื่อเก็บรหัสผ่านมันเป็นวิธีที่ดีในการ 'double hash' สตริง (เช่นด้วย md5 จากนั้น sha1 ทั้งคู่ด้วยเกลืออย่างเห็นได้ชัด)

ฉันเดาคำถามแรกคือ "ถูกจริงหรือไม่" ถ้าไม่ใช่โปรดเลิกสนใจคำถามนี้ :)

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

ขอผมใช้อีกวิธี: เรามีจำนวน x ของสตริงที่เมื่อแฮชจะลดลงเป็น y ที่เป็นไปได้ กล่าวคือมีการชนในเซตแรก ตอนนี้มาจากชุดที่สองถึงชุดที่สามมันเป็นไปไม่ได้หรือที่สิ่งเดียวกันจะเกิดขึ้น (เช่นการชนในชุดของสตริง 'y' ที่เป็นไปได้ทั้งหมดที่ส่งผลให้แฮชเดียวกันในชุดที่สาม)

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

อาจเป็นตัวอย่างที่จะอธิบายเสียงคร่ำครวญของฉันได้ไหม ใช้ 'hash_function_a' ที่จะให้ 'a' และ 'b' the hash '1' และจะให้ 'c' และ 'd' the hash '2' การใช้ฟังก์ชั่นนี้เพื่อเก็บรหัสผ่านแม้ว่ารหัสผ่านคือ 'a' ฉันสามารถใช้รหัสผ่าน 'b' ได้

ใช้ 'hash_function_b' ที่จะให้ '1' และ '2' แฮช '3' ถ้าฉันจะใช้มันเป็น 'แฮชสำรอง' หลังจาก 'hash_function_a' แม้ว่ารหัสผ่านจะเป็น 'a' ฉันสามารถใช้ 'b', 'c' หรือ 'd'

เหนือสิ่งอื่นใดฉันได้รับเกลือนั้นควรใช้ แต่พวกเขาไม่ได้เปลี่ยนความจริงที่ว่าทุกครั้งที่เราทำการแมปอินพุท 'x' ไปยังเอาต์พุต 'น้อยกว่า x' ฉันไม่คิด

ใครช่วยอธิบายหน่อยได้ไหมว่าฉันหายไปไหน?

ขอบคุณ!

แก้ไข: สำหรับสิ่งที่คุ้มค่าฉันไม่ทำเองฉันใช้ bcrypt และฉันก็ไม่ได้กังวลว่ามันจะมีประโยชน์สำหรับ 'ใช้รอบ' สำหรับ 'แฮ็กเกอร์' หรือไม่ ฉันแค่สงสัยจริงๆว่ากระบวนการลดความปลอดภัยจากจุดแฮชการชนหรือไม่


2
@ S.Lott: ฉันไม่เห็นจริง ๆ ว่าคำตอบนั้นเป็นจริงอย่างไรแม้ว่าสิ่งที่กล่าวมาคือ "อย่าทำเองใช้สิ่งนี้" หรือ "มันดีที่จะใช้เวลา!" .. ทั้งคำตอบที่ว่า "มันปลอดภัยกว่าจริงๆ" อีกครั้งถ้าฉันไม่มีอะไรหายไป
Narcissus

@MetalMikester: ใช่นั่นคือบทความของเมื่อวาน: thedailywtf.com/Articles/Bulletproof-Encryption.aspx
FrustratedWithFormsDesigner

นี่ไม่ใช่หัวข้อความปลอดภัยด้านไอที แต่ดูเหมือนว่าจะเหมาะกับ Cryptography ในความเป็นจริงมันดูคล้ายกับคำถามนี้มาก

ฉันรู้ว่า บริษัท MD5(password)ที่อยากจะใช้จืด เราบอกว่ามันไม่ปลอดภัยดังนั้นพวกเขาจึงแนะนำให้ใช้MD5(MD5(password))แทน ...
กำหนดค่า

คำตอบที่ยอมรับไม่ใช่คำตอบที่ถูกต้อง!
markus

คำตอบ:


27

สิ่งนี้เหมาะสมกว่าในด้านความปลอดภัยการแลกเปลี่ยน แต่ ...

มีปัญหากับ

hash1(hash2(hash3(...hashn(pass+salt)+salt)+salt)...)+salt)

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

ห่วงโซ่ที่แข็งแกร่งจะเป็น

hash1(hash2(hash3(...hashn(pass + salt) + pass + salt) + pass + salt)...) + pass + salt)

ที่นี่เราหลีกเลี่ยงปัญหาการชนกันในช่วงต้นและเราสร้างเกลือซึ่งขึ้นอยู่กับรหัสผ่านสำหรับการแฮชครั้งสุดท้าย

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


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

ที่จริงแล้วฉันคิดว่าฉันทำได้ตอนนี้: โดยการบังคับให้รหัสผ่านในแต่ละชั้นของ hashing จริง ๆ แล้วมันลดจำนวนการชนที่เป็นไปได้โดยการกำหนด 'รหัสผ่านการชนกัน' และรหัสผ่านจริงเพื่อจับคู่แฮช ใช่มั้ย ฉันคิดว่าฉันไม่มีส่วน 'ใส่รหัสผ่านในแต่ละเลเยอร์'! ขอบคุณอีกครั้ง.
Narcissus

@ นาซิสซัสไม่มีปัญหาและยังมีโบนัสในการอนุญาตให้แฮ็คด้านในอ่อนแอลง (ตราบใดที่แฮชด้านนอก / ครั้งสุดท้ายแข็งแกร่ง) เนื่องจากแฮ็คด้านในกำลังสร้างเกลือสำหรับการส่งผ่านครั้งต่อไป
ratchet freak

ฉันคิดว่าปัญหาใหญ่กว่านี้อีกเล็กน้อย ด้วยการโจมตีสายรุ้งคุณสามารถสร้างตารางโดยพิจารณาจากแฮชทั้งหมดและปัญหายังคงอยู่
woliveirajr

4
@Narcissus: ในคำตอบที่สั้นมาก: ใช่มันไม่ได้มากขึ้นที่เชื่อถือได้ ใช่มันอาจจะปลอดภัยน้อยกว่า
woliveirajr

54

การใช้อัลกอริทึมการแปลงแป้นพิมพ์ที่แตกต่างกันเป็นแนวคิดที่ไม่ดี - มันจะลดเอนโทรปีแทนที่จะเพิ่ม

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

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


2
นี่คือคำตอบที่ถูกต้อง!
markus

@markus: ตามการสนทนาที่ฉันอ่านนี้ถูกต้องเนื่องจากการเพิ่ม "และเกลือที่ดี" ซึ่งแก้ไขโดยคำตอบที่ยอมรับใช่ไหม? ทำไมอันนี้ถูกต้องและคำตอบที่ยอมรับไม่ได้
Narcissus

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

@Narcissus กุญแจนี่คือเอนโทรปี มีความแตกต่างระหว่างการแฮ็ชหลายครั้งโดยใช้วิธีเดียวกันกับการแฮชหลายครั้งโดยใช้วิธีการที่แตกต่างกัน
sakisk

3

อย่าพยายามเขียนโครงร่างการแฮ็กรหัสผ่านของคุณเองเว้นแต่ว่าคุณยินดีที่จะเรียนหลักสูตรการเข้ารหัสและ / หรือวิศวกรรมความปลอดภัย

คุณควรใช้การแฮชรหัสผ่านที่ได้รับการยอมรับอย่างดีซึ่งควรใช้ฟังก์ชั่นการหารหัส ( KDF ) เช่น PBKDF2, bcrypt, scrypt หรือ Argon2 ที่ใหม่กว่า

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


1
ลิงค์https://crackstation.net/hashing-security.htmถูกบล็อกโดยไฟร์วอลล์
gnat

1
@gnat ด้วยเหตุผลบางอย่างฉันพลาดความคิดเห็นของคุณเกี่ยวกับ URL ที่ถูกบล็อก ฉันได้แทนที่มันด้วยลิงก์ไปยังวิกิพีเดีย
Erwan Legrand

2

โดยทั่วไปคุณไม่จำเป็นต้องใช้อัลกอริทึมการแฮชมากกว่าหนึ่งรายการ

สิ่งที่คุณต้องทำคือ:

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

ใช้การเชื่อมต่อที่หลากหลาย: แทนที่จะใช้เพียง SHA (รหัสผ่าน + เกลือ) ให้ทำ SHA (SHA (SHA (SHA (SHA (... SHA (... SHA (รหัสผ่าน + เกลือ)))))) หรือเพื่อเป็นตัวแทนในทางอื่น:

hash = sha(password + salt)
for i=1 , i=5000, i++ {
    hash = sha(hash + salt);
}

และในที่สุดเลือกฟังก์ชั่นคร่ำเครียดที่ดี SHA, MD5 ฯลฯ จะไม่ดีเพราะพวกเขามีมากเกินไปได้อย่างรวดเร็ว เนื่องจากคุณต้องการใช้แฮชเพื่อการป้องกันคุณควรใช้แฮชที่ช้ากว่า ตัวอย่างเช่นลองดูที่Bcrypt , PBKDF2หรือScrypt

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

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

แต่ไม่มีใครรับประกันได้ว่าฐานข้อมูลด้วยรหัสผ่านจะถูกขโมย ขโมยฐานข้อมูลได้รับรหัสผ่านทั้งหมด ตกลงระบบของคุณและ บริษัท ของคุณจะประสบผลตามมาทั้งหมด ดังนั้นเราสามารถพยายามหลีกเลี่ยงการรั่วไหลของรหัสผ่านนี้

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

ดังนั้นกลับไปที่don't let them take my plain passwordsปัญหา คำตอบนั้นง่าย: อย่าเก็บไว้เป็นข้อความธรรมดา ตกลงเข้าใจแล้ว

จะหลีกเลี่ยงได้อย่างไร

เข้ารหัสรหัสผ่าน (?) แต่อย่างที่คุณรู้ถ้าคุณเข้ารหัสคุณสามารถถอดรหัสกลับหากคุณมีรหัสที่ถูกต้อง และคุณจะพบกับปัญหาของ "สถานที่ซ่อน" กุญแจ ไม่ดีเพราะพวกเขามีฐานข้อมูลคุณพวกเขาสามารถรับกุญแจของคุณได้ ตกลงอย่าใช้มัน

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

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

แต่ถึงกระนั้นก็สามารถที่จะวนเวียนอยู่รอบ ๆ โต๊ะสายรุ้งถูกสร้างขึ้นอย่างแม่นยำเพื่อเร่งการป้องกันชนิดนี้

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

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

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

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


2
อ๊ะ! ขออภัยความคิดเห็นของฉัน (เกี่ยวกับการทำให้แฮชช้าลงโดยใช้พารามิเตอร์การหมดเวลา) ไม่ได้ตั้งใจทำอย่างจริงจัง ... ฉันคิดว่าฉันอ่าน Dilbert มากเกินไปเมื่อเร็ว ๆ นี้
FrustratedWithFormsDesigner

2
sha (sha (sha (...))) ไม่ปลอดภัยกว่า sha หากเอนโทรปีของฟังก์ชั่น sha ไม่ได้สูงสุดมันจะปลอดภัยน้อยกว่า
deadalnix

1
@deadalnix: มันเป็นเรื่องสำคัญที่จะต้องพูดถึงว่ามันไม่ได้ทำให้ง่ายต่อการกู้คืนรหัสผ่านดั้งเดิม แต่มันจะทำให้ง่ายต่อการสร้างรหัสผ่าน colliding ซึ่งเป็นสิ่งที่จำเป็นทั้งหมด
Bryan Boettcher

1
@deadalnix ผมอ่านที่ความคิดเห็นในเสียงของเดลกริบเบิ้ล
jiggy

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

-1

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


4
อย่างนี้ไม่เปลี่ยนแปลงมากนัก «การแฮชหลายครั้ง» fucntion สามารถมองเห็นเป็นหนึ่งเดียวและถือว่าเป็นเช่นนี้
deadalnix

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

-1

มันไม่ปลอดภัยกว่านี้อีกแล้ว อย่างไรก็ตามคุณมีโปรโตคอลการระบุโดยใช้แฮชหลายครั้งด้วยฟังก์ชันเดียวกัน

นี่จะเป็นอย่างนั้น ค่าที่เก็บไว้คือ hash ^ n (pass) ในคอมพิวเตอร์ A. A ขอให้ B ตรวจสอบความถูกต้องและให้ B เป็นจำนวนเต็ม n B ทำการแฮชการคำนวณ ^ (n-1) (ผ่าน) แล้วส่งกลับไปที่ A

ตรวจสอบว่าแฮช (แฮช ^ (n-1) (ผ่าน)) == แฮช ^ n (ผ่าน) หากเป็นจริงการตรวจสอบสิทธิ์จะเสร็จสิ้น แต่จากนั้นแฮชของร้านค้า ^ (n-1) (ผ่าน) และการตรวจสอบสิทธิ์ครั้งถัดไปจะให้ B n-1 แทน n

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

การใช้แฮชหลายครั้งก็คือเครื่องมือ HMAC เพื่อรับรองความถูกต้องและความสมบูรณ์ของคำขอ สำหรับข้อมูลเพิ่มเติมเกี่ยว HMAC ดูhttp://en.wikipedia.org/wiki/HMAC

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

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