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