ฉันได้พบกับการสนทนาที่ฉันได้เรียนรู้ว่าสิ่งที่ฉันทำไม่ได้ในความเป็นจริงการใส่เกลือรหัสผ่าน แต่ทำให้พวกเขาวุ่นวายและฉันก็เริ่มทำทั้งสองอย่างด้วยฟังก์ชั่นเช่น:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
ไม่สนใจอัลกอริทึมแฮชที่เลือก (ฉันต้องการให้นี่เป็นการอภิปรายของเกลือ & พริกไทยและไม่ใช่อัลกอริทึมเฉพาะ แต่ฉันใช้ secure one), นี่เป็นตัวเลือกที่ปลอดภัยหรือฉันควรทำสิ่งที่แตกต่างกันหรือไม่? สำหรับผู้ที่ไม่คุ้นเคยกับข้อกำหนด:
เกลือเป็นค่าที่สร้างแบบสุ่มมักจะเก็บไว้กับสตริงในฐานข้อมูลได้รับการออกแบบที่จะทำให้มันเป็นไปไม่ได้ที่จะใช้ตารางแฮชจะ crack รหัสผ่าน เนื่องจากรหัสผ่านแต่ละอันมีเกลือเป็นของตัวเองพวกเขาทุกคนจะต้องถูกบังคับให้ดุร้ายเป็นรายบุคคลเพื่อที่จะถอดรหัสพวกเขา อย่างไรก็ตามเนื่องจากเกลือถูกเก็บไว้ในฐานข้อมูลด้วยรหัสผ่านแฮชการประนีประนอมฐานข้อมูลหมายถึงการสูญเสียทั้งสองอย่าง
พริกไทยเป็นค่าคงที่ทั่วทั้งไซต์จัดเก็บแยกต่างหากจากฐานข้อมูล (โดยปกติจะกำหนดค่าตายตัวในรหัสที่มาของโปรแกรม) ซึ่งมีวัตถุประสงค์เพื่อเป็นความลับ มันถูกใช้เพื่อให้การประนีประนอมของฐานข้อมูลจะไม่ทำให้ตารางรหัสผ่านของแอปพลิเคชันทั้งหมดสามารถใช้งานได้อย่างดุร้าย
มีอะไรที่ฉันขาดหายไปและการล้างรหัสผ่านของฉันเป็นทางเลือกที่ดีที่สุดในการป้องกันความปลอดภัยของผู้ใช้ มีข้อบกพร่องด้านความปลอดภัยที่เป็นไปได้ที่จะทำเช่นนี้?
หมายเหตุ: สมมติว่ามีวัตถุประสงค์เพื่อการสนทนาที่เก็บแอปพลิเคชัน & ฐานข้อมูลไว้ในเครื่องที่แยกต่างหากอย่าแชร์รหัสผ่าน ฯลฯ ดังนั้นการละเมิดเซิร์ฟเวอร์ฐานข้อมูลจึงไม่ได้หมายถึงการละเมิดแอพพลิเคชันเซิร์ฟเวอร์โดยอัตโนมัติ