เกลือที่ไม่สุ่มสำหรับแฮชรหัสผ่าน
อัปเดต: เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้จากคำถามนี้ว่าในการสนทนาทั้งหมดด้านล่างฉัน (และฉันแน่ใจว่าคนอื่น ๆ ก็ทำเช่นกัน) ค่อนข้างสับสน: สิ่งที่ฉันเรียกตารางสายรุ้งนั้นแท้จริงแล้วเรียกว่าตารางแฮช ตารางสายรุ้งเป็นสิ่งมีชีวิตที่ซับซ้อนกว่าและเป็นรูปแบบหนึ่งของ Hellman Hash Chains แม้ว่าฉันจะเชื่อว่าคำตอบนั้นยังคงเหมือนเดิม (เนื่องจากไม่ได้มีการเข้ารหัสลับ) การสนทนาบางส่วนอาจจะเบี้ยวเล็กน้อย คำถาม: " อะไรคือตารางรุ้งและวิธีการที่พวกเขาใช้? " โดยปกติฉันมักจะแนะนำให้ใช้ค่าสุ่มที่มีการเข้ารหัสที่แข็งแกร่งเป็นเกลือเสมอเพื่อใช้กับฟังก์ชันแฮช (เช่นรหัสผ่าน) เช่นเพื่อป้องกันการโจมตีของ Rainbow Table แต่จริง ๆ แล้วมันจำเป็นสำหรับการสุ่มเกลือหรือไม่? ค่าที่ไม่ซ้ำกัน (ไม่ซ้ำกันต่อผู้ใช้เช่น userId) จะเพียงพอหรือไม่ในเรื่องนี้ ในความเป็นจริงมันจะป้องกันไม่ให้ใช้ Rainbow Table เดียวเพื่อถอดรหัสรหัสผ่านทั้งหมด (หรือส่วนใหญ่) ในระบบ ... แต่การขาดเอนโทรปีทำให้ความแข็งแกร่งในการเข้ารหัสของฟังก์ชันแฮชลดลงหรือไม่? หมายเหตุฉันไม่ได้ถามว่าทำไมต้องใช้เกลือวิธีการป้องกัน (ไม่จำเป็นต้องเป็น) การใช้แฮชคงที่เดียว (ไม่ต้อง) หรือฟังก์ชันแฮชประเภทใดที่จะใช้ เพียงแค่ว่าเกลือต้องการเอนโทรปีหรือไม่ ขอบคุณทุกคนสำหรับคำตอบจนถึงตอนนี้ แต่ฉันอยากจะเน้นในส่วนที่ฉันไม่ค่อยคุ้นเคย (นิดหน่อย) ผลกระทบส่วนใหญ่สำหรับการเข้ารหัส …