มันควรจะพอเพียงที่จะบอกว่า bcrypt หรือ SHA-512 (ในบริบทของอัลกอริทึมที่เหมาะสมเช่น PBKDF2) นั้นดีพอดีพอและคำตอบคือใช่อัลกอริทึมอย่างใดอย่างหนึ่งมีความปลอดภัยเพียงพอที่การละเมิดจะเกิดขึ้นผ่านข้อบกพร่องในการใช้งานไม่ใช่การเข้ารหัส
หากคุณยืนยันในการรู้ว่าอะไรคือ "ดีกว่า" SHA-512 มีการรีวิวแบบเจาะลึกโดย NIST และอื่น ๆ เป็นเรื่องดี แต่ข้อบกพร่องได้รับการยอมรับแล้วว่าแม้ว่าจะไม่สามารถใช้ประโยชน์ได้ในขณะนี้ได้นำไปสู่การแข่งขัน SHA-3 สำหรับอัลกอริทึมแฮชใหม่ นอกจากนี้โปรดทราบว่าการศึกษาอัลกอริธึมการแฮชนั้น "ใหม่กว่า" มากกว่ายันต์และ cryptographers ยังคงเรียนรู้เกี่ยวกับมัน
แม้ว่า bcrypt โดยรวมยังไม่ได้รับการตรวจสอบมากพอ ๆ กับ Blowfish แต่ฉันเชื่อว่าการใช้เลขศูนย์ที่มีโครงสร้างที่มีความเข้าใจดีทำให้มีความปลอดภัยโดยธรรมชาติที่การรับรองความถูกต้องแบบแฮชไม่เพียงพอ นอกจากนี้ยังง่ายต่อการใช้ GPU ทั่วไปเป็นเครื่องมือในการโจมตีแฮชที่ใช้ SHA-2 เนื่องจากความต้องการของหน่วยความจำการเพิ่มประสิทธิภาพ bcrypt ต้องใช้ฮาร์ดแวร์พิเศษเช่น FPGA กับแรมในบอร์ด
หมายเหตุ: bcrypt เป็นอัลกอริทึมที่ใช้ Blowfish ภายใน มันไม่ใช่อัลกอริธึมการเข้ารหัสเอง มันถูกใช้เพื่อปิดบังรหัสผ่านที่ไม่สามารถย้อนกลับได้เช่นเดียวกับฟังก์ชั่นแฮชที่ใช้ในการทำ "แฮชทางเดียว"
อัลกอริธึมแฮเข้ารหัสลับถูกออกแบบมาให้เป็นไปไม่ได้ที่จะย้อนกลับ กล่าวอีกนัยหนึ่งเมื่อกำหนดเอาท์พุทของฟังก์ชันแฮชควรใช้ "ถาวร" เพื่อค้นหาข้อความที่จะสร้างเอาต์พุตแฮชเดียวกัน ในความเป็นจริงมันเป็นไปไม่ได้ที่จะคำนวณหาข้อความสองข้อความที่สร้างค่าแฮชเดียวกัน ฟังก์ชั่นแฮชไม่ได้กำหนดค่าพารามิเตอร์ด้วยคีย์ อินพุตเดียวกันจะสร้างเอาต์พุตเดียวกันเสมอ
ถ้ามีคนให้รหัสผ่านที่แฮชกับค่าที่เก็บไว้ในตารางรหัสผ่านพวกเขาจะรับรองความถูกต้อง โดยเฉพาะอย่างยิ่งเนื่องจากการย้อนกลับของฟังก์ชั่นแฮชจะถือว่าผู้ใช้ไม่ใช่ผู้โจมตีที่ได้รับการแฮชและเปลี่ยนกลับเพื่อค้นหารหัสผ่านที่ใช้งานได้
พิจารณา bcrypt แล้ว มันใช้ Blowfish เพื่อเข้ารหัสสตริงมายากลโดยใช้คีย์ "ที่ได้รับ" จากรหัสผ่าน ต่อมาเมื่อผู้ใช้ป้อนรหัสผ่านกุญแจจะได้รับอีกครั้งและหาก ciphertext ที่สร้างโดยการเข้ารหัสด้วยคีย์นั้นตรงกับ ciphertext ที่เก็บไว้ผู้ใช้จะได้รับการรับรองความถูกต้อง ciphertext จะถูกเก็บไว้ในตาราง "รหัสผ่าน" แต่คีย์ที่ได้รับจะไม่ถูกเก็บไว้
เพื่อที่จะทำลายการเข้ารหัสที่นี่ผู้โจมตีจะต้องกู้คืนกุญแจจากไซเฟอร์เท็กซ์ สิ่งนี้เรียกว่าการโจมตี "รู้จักธรรมดา" เนื่องจากการโจมตีรู้ว่าสายเวทที่ถูกเข้ารหัส แต่ไม่ใช่กุญแจที่ใช้ ปลาปักเป้าได้รับการศึกษาอย่างกว้างขวางและยังไม่มีการโจมตีใด ๆ ที่จะอนุญาตให้ผู้โจมตีหากุญแจด้วยข้อความธรรมดาที่รู้จัก
ดังนั้นเช่นเดียวกับอัลกอริทึมที่ไม่สามารถย้อนกลับได้โดยใช้การแยกย่อยแบบเข้ารหัสลับ bcrypt สร้างเอาต์พุตที่ไม่สามารถย้อนกลับได้จากรหัสผ่านเกลือและปัจจัยด้านต้นทุน ความแข็งแกร่งของมันอยู่ในการต่อต้านของ Blowfish ต่อการโจมตีธรรมดาที่รู้จักกันซึ่งคล้ายกับ "การโจมตีก่อนภาพแรก" ในอัลกอริทึมการแยกย่อย เนื่องจากสามารถใช้แทนอัลกอริธึมการแฮชเพื่อปกป้องรหัสผ่าน bcrypt จึงถูกเรียกอย่างสับสนว่าอัลกอริทึม "แฮช"
สมมติว่าตารางรุ้งถูกขัดขวางโดยการใช้เกลืออย่างเหมาะสมฟังก์ชั่นใด ๆ ที่ไม่สามารถย้อนกลับได้อย่างแท้จริงจะลดผู้โจมตีไปสู่การลองผิดลองถูก และอัตราที่ผู้โจมตีสามารถทำการทดลองได้ถูกกำหนดโดยความเร็วของอัลกอริทึม "แฮช" ที่ไม่สามารถย้อนกลับได้ หากใช้ฟังก์ชันแฮชซ้ำหนึ่งครั้งผู้โจมตีสามารถสร้างการทดลองหลายล้านครั้งต่อวินาทีโดยใช้อุปกรณ์ที่มีราคา 1,000 ดอลลาร์ทดสอบรหัสผ่านทั้งหมดที่มีความยาวสูงสุด 8 อักขระในไม่กี่เดือน
อย่างไรก็ตามหากผลลัพธ์ย่อยเป็น "ย้อนกลับ" หลายพันครั้งจะใช้เวลาหลายร้อยปีในการทดสอบรหัสผ่านชุดเดียวกันบนฮาร์ดแวร์นั้น Bcrypt ได้รับผลกระทบ "การเพิ่มความแข็งแกร่งของคีย์" แบบเดียวกันโดยวนซ้ำในรูทีนการรับกุญแจและวิธีการแฮชที่เหมาะสมเช่น PBKDF2 ทำสิ่งเดียวกัน ในแง่นี้ทั้งสองวิธีมีความคล้ายคลึงกัน
ดังนั้นข้อเสนอแนะของฉันเกี่ยวกับ bcrypt นั้นเกิดจากสมมติฐาน 1) ว่า Blowfish มีระดับการตรวจสอบที่คล้ายกันกับฟังก์ชันแฮช SHA-2 และ 2) วิธีการเข้ารหัสลับของ cipanalytic นั้นดีกว่าของฟังก์ชันแฮช