มาจดบันทึกคำตอบก่อนหน้านี้กัน
ประการแรกอาจไม่ใช่ความคิดที่ดีที่สุดที่จะใช้ฝั่งไคลเอ็นต์แฮชอัลกอริทึม หากรหัสผ่านของคุณอยู่ในฝั่งเซิร์ฟเวอร์คุณจะไม่สามารถเปรียบเทียบแฮชได้ (อย่างน้อยก็ไม่ใช่ถ้าคุณไม่เก็บแฮชของไคลเอนต์ไว้ในฐานข้อมูลในเลเยอร์การแฮชจากรหัสผ่านซึ่งเหมือนกันหรือ แย่ลง) และคุณไม่ต้องการใช้อัลกอริทึมการแฮชที่ใช้โดยฐานข้อมูลในฝั่งไคลเอ็นต์มันจะโง่
ประการที่สองการซื้อขายคีย์การเข้ารหัสก็ไม่เหมาะเช่นกัน MITM ในทางทฤษฎี (เนื่องจากเขามีใบรับรองหลักที่ติดตั้งบนไคลเอนต์) เปลี่ยนคีย์การเข้ารหัสและเปลี่ยนด้วยคีย์ของเขาเอง:
การเชื่อมต่อดั้งเดิม (ไม่พิจารณา tls) จากเซิร์ฟเวอร์ตามทฤษฎีที่แลกเปลี่ยนคีย์:
คำขอคีย์สาธารณะของไคลเอ็นต์> เซิร์ฟเวอร์เก็บคีย์ส่วนตัวสร้างคีย์สาธารณะไปยังไคลเอนต์> เซิร์ฟเวอร์ส่งคีย์สาธารณะไปยังไคลเอนต์
ตอนนี้ใน atrack MITM เชิงทฤษฎี:
ไคลเอนต์ขอคีย์สาธารณะ> MITM สร้างคีย์ส่วนตัวปลอม > เซิร์ฟเวอร์เก็บคีย์ส่วนตัวสร้างคีย์สาธารณะไปยังไคลเอนต์> MITM ได้รับคีย์สาธารณะจากเซิร์ฟเวอร์ดั้งเดิมตอนนี้เรามีอิสระที่จะส่งคีย์สาธารณะปลอมของเราไปยังไคลเอนต์และ เมื่อใดก็ตามที่มีการร้องขอจากไคลเอนต์เราจะถอดรหัสข้อมูลไคลเอนต์ด้วยคีย์ปลอมเปลี่ยนเพย์โหลด (หรืออ่าน) และเข้ารหัสด้วยคีย์สาธารณะดั้งเดิม > MITM ส่งคีย์สาธารณะปลอมไปยังไคลเอนต์
นั่นคือจุดสำคัญของการมีใบรับรอง CA ที่เชื่อถือได้ใน TLS และนั่นคือวิธีที่คุณได้รับข้อความเตือนจากเบราว์เซอร์หากใบรับรองไม่ถูกต้อง
ในการตอบสนองต่อ OP: ในความเห็นที่ต่ำต้อยของฉันคุณไม่สามารถทำเช่นนั้นได้เพราะไม่ช้าก็เร็วมีคนต้องการโจมตีผู้ใช้จากบริการของคุณและจะพยายามทำลายโปรโตคอลของคุณ
อย่างไรก็ตามสิ่งที่คุณทำได้คือการติดตั้ง 2FA เพื่อป้องกันไม่ให้ผู้อื่นพยายามเข้าสู่ระบบด้วยรหัสผ่านเดียวกัน ระวังการโจมตีซ้ำ
ฉันไม่ถนัดเรื่องการเข้ารหัสโปรดแก้ไขฉันด้วยถ้าฉันผิด