นี่เป็นคำถามที่จุดประกายด้วยความอยากรู้อยากเห็นล้วนๆ และต้องการทำความเข้าใจเกี่ยวกับการเข้ารหัสและการพิสูจน์ตัวตนให้มากขึ้นอีกเล็กน้อย ขอบคุณล่วงหน้าสำหรับทุกคนที่สละเวลาตอบ
แทนที่จะใส่เกลือและแฮชรหัสผ่าน ส่งไปยังเซิร์ฟเวอร์เพื่อตรวจสอบสิทธิ์ตัวเอง อะไรแบบนี้จะได้ผลไหม ลูกค้าสร้างคู่คีย์ส่วนตัว/สาธารณะจากรหัสผ่านและเกลือสุ่ม รหัสสาธารณะและเกลือถูกเก็บไว้โดยเซิร์ฟเวอร์ สำหรับการเข้าสู่ระบบแต่ละครั้ง เซิร์ฟเวอร์จะส่งเกลือและค่าที่สร้างขึ้นแบบสุ่มเพื่อให้ไคลเอนต์ลงนาม ไคลเอนต์สร้างคีย์ส่วนตัวใหม่จากรหัสผ่านและเกลือ จากนั้นเซ็นชื่อค่าที่สร้างขึ้นแบบสุ่มและส่งค่านั้นไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ตรวจสอบลายเซ็นด้วยรหัสสาธารณะที่เกี่ยวข้อง
หากต้องการชะลอการโจมตีแบบเดรัจฉาน คีย์ต้องได้รับมาจากรหัสผ่านและเกลือโดยใช้ KDF ที่ช้า ก่อนที่จะสร้างคีย์ส่วนตัว/สาธารณะ
อีกทางเลือกหนึ่ง เซิร์ฟเวอร์สามารถกำหนดให้ไคลเอนต์รับคีย์จากค่าที่สร้างขึ้นแบบสุ่ม โดยใช้ KDF ที่ช้าก่อนที่จะลงนาม â แม้ว่าสำหรับฉันแล้ว ดูเหมือนว่าจะไม่ค่อยดีไปกว่าการชะลอการได้มาของคีย์ เพื่อประหยัดทรัพยากรของเซิร์ฟเวอร์เมื่อตรวจสอบลายเซ็น เราสามารถใช้กลไกสไตล์ Proof of Work แทน KDF ที่ช้า ซึ่งไคลเอนต์ต้องหา nonce ที่ hash(randomly_generated_value + nonce) > some_set_difficulty จากนั้น nonce จะถูกเซ็นและส่งไปยัง เซิร์ฟเวอร์ที่จะตรวจสอบ เซิร์ฟเวอร์อาจเปลี่ยนความยากได้ เช่น เพิ่มความยากสำหรับการพยายามเข้าสู่ระบบที่ไม่สำเร็จแต่ละครั้ง
ข้อดีและข้อเสียของโครงการดังกล่าวคืออะไร ฉันสงสัยว่าการเปิดเผยเกลือทุกครั้งที่พยายามเข้าสู่ระบบจะเป็นปัญหา