ไม่ไม่มีวิธีใดที่จะใช้เบราว์เซอร์ JavaScript เพื่อปรับปรุงความปลอดภัยของรหัสผ่าน ผมขอแนะนำให้คุณอ่านบทความนี้ ในกรณีของคุณปัญหาใหญ่ที่สุดคือปัญหาไข่ไก่:
"ปัญหาไก่ - ไข่" ในการส่งการเข้ารหัส Javascript คืออะไร
หากคุณไม่ไว้วางใจให้เครือข่ายส่งรหัสผ่านหรือที่แย่กว่านั้นคืออย่าไว้ใจเซิร์ฟเวอร์ที่จะไม่เก็บความลับของผู้ใช้คุณไม่สามารถไว้วางใจให้พวกเขาส่งรหัสความปลอดภัยได้ ผู้โจมตีคนเดียวกับที่กำลังดมรหัสผ่านหรืออ่านไดอารี่ก่อนที่คุณจะแนะนำ crypto นั้นเป็นเพียงการขโมยรหัส crypto หลังจากที่คุณทำ
[... ]
เหตุใดฉันจึงไม่สามารถใช้ TLS / SSL เพื่อส่งรหัสการเข้ารหัส Javascript ได้
คุณสามารถ. มันยากกว่าที่คิด แต่คุณส่ง Javascript crypto ไปยังเบราว์เซอร์โดยใช้ SSL ได้อย่างปลอดภัย ปัญหาคือเมื่อสร้างช่องทางที่ปลอดภัยด้วย SSL แล้วคุณไม่จำเป็นต้องใช้การเข้ารหัส Javascript อีกต่อไป คุณมีการเข้ารหัส "ของจริง"
ซึ่งนำไปสู่สิ่งนี้:
ปัญหาในการเรียกใช้รหัสเข้ารหัสลับใน Javascript คือฟังก์ชันใด ๆ ที่การเข้ารหัสลับขึ้นอยู่กับอาจถูกแทนที่อย่างเงียบ ๆ โดยเนื้อหาใด ๆ ที่ใช้ในการสร้างหน้าโฮสติ้ง การรักษาความปลอดภัยของ Crypto สามารถยกเลิกได้ในช่วงต้นของกระบวนการ (โดยการสร้างตัวเลขสุ่มปลอมหรือโดยการแก้ไขค่าคงที่และพารามิเตอร์ที่อัลกอริทึมใช้) หรือในภายหลัง (โดยการส่งข้อมูลสำคัญกลับไปยังผู้โจมตี) หรือ --- ในสถานการณ์ที่เป็นไปได้มากที่สุด - โดยการข้าม crypto ทั้งหมด
ไม่มีวิธีที่เชื่อถือได้สำหรับโค้ด Javascript ใด ๆ ในการตรวจสอบสภาพแวดล้อมการดำเนินการ รหัสการเข้ารหัสลับ Javascript ไม่สามารถถามว่า "ฉันกำลังจัดการกับเครื่องสร้างตัวเลขสุ่มหรือไม่หรือด้วยโทรสารบางส่วนที่ผู้โจมตีจัดหาให้" และแน่นอนว่าไม่สามารถยืนยันได้ว่า "ไม่มีใครได้รับอนุญาตให้ทำอะไรกับความลับของการเข้ารหัสลับนี้ยกเว้นในรูปแบบที่ฉันผู้เขียนเห็นชอบ" นี่คือคุณสมบัติสองอย่างที่มักมีให้ในสภาพแวดล้อมอื่น ๆ ที่ใช้ crypto และเป็นไปไม่ได้ใน Javascript
โดยทั่วไปปัญหาคือ:
- ลูกค้าของคุณไม่เชื่อถือเซิร์ฟเวอร์ของคุณดังนั้นพวกเขาจึงต้องการเพิ่มรหัสความปลอดภัยเพิ่มเติม
- รหัสความปลอดภัยนั้นจัดส่งโดยเซิร์ฟเวอร์ของคุณ (รหัสที่พวกเขาไม่เชื่อถือ)
หรืออีกทางหนึ่งคือ
- ลูกค้าของคุณไม่เชื่อถือ SSL ดังนั้นพวกเขาจึงต้องการให้คุณใช้รหัสความปลอดภัยเพิ่มเติม
- รหัสความปลอดภัยนั้นถูกส่งผ่าน SSL
หมายเหตุ: นอกจากนี้ SHA-256 ไม่เหมาะสำหรับการนี้เนื่องจากมันจึงง่ายต่อการบังคับเดรัจฉานรหัสผ่านที่ไม่ซ้ำจืด ถ้าคุณตัดสินใจที่จะทำต่อไปนี้ดูสำหรับการดำเนินการของbcrypt , ScryptหรือPBKDF2