WebCrypto
ข้อกังวลเกี่ยวกับการเข้ารหัสในจาวาสคริปต์ด้านลูกค้า (เบราว์เซอร์) มีรายละเอียดด้านล่าง แต่ทุกคนกังวลเหล่านี้ไม่ได้นำไปใช้กับAPI WebCryptoซึ่งขณะนี้ได้รับการสนับสนุนด้วยดี
สำหรับแอปออฟไลน์คุณยังคงต้องออกแบบและติดตั้งที่เก็บคีย์ที่ปลอดภัย
นอกเหนือจาก: หากคุณใช้ Node.js ให้ใช้ builtin crypto API
การเข้ารหัสแบบ Native-Javascript (pre-WebCrypto)
ฉันเข้าใจว่าความกังวลหลักคือใครบางคนที่มีสิทธิ์เข้าถึงทางกายภาพไปยังคอมพิวเตอร์ที่อ่านlocalStorage
ไซต์ของคุณและคุณต้องการเข้ารหัสเพื่อช่วยป้องกันการเข้าถึงดังกล่าว
หากใครบางคนมีการเข้าถึงทางกายภาพคุณจะเปิดการโจมตีอื่น ๆ และแย่กว่าการอ่าน สิ่งเหล่านี้รวมถึง (แต่ไม่ จำกัด เพียง): keyloggers, การแก้ไขสคริปต์ออฟไลน์, การฉีดสคริปต์ในเครื่อง, การวางยาพิษในแคชของเบราว์เซอร์และการเปลี่ยนเส้นทาง DNS การโจมตีเหล่านั้นจะใช้งานได้ก็ต่อเมื่อผู้ใช้ใช้เครื่องหลังจากที่ถูกโจมตี อย่างไรก็ตามการเข้าถึงทางกายภาพในสถานการณ์ดังกล่าวหมายความว่าคุณมีปัญหามากขึ้น
ดังนั้นโปรดจำไว้ว่าสถานการณ์ที่มีข้อ จำกัด ซึ่งการเข้ารหัสลับในตัวเครื่องนั้นมีค่าหากเครื่องถูกขโมย
มีห้องสมุดที่ไม่ใช้ฟังก์ชั่นที่ต้องการเช่นมีสแตนฟอ Javascript Crypto ห้องสมุด มีจุดอ่อนโดยธรรมชาติแม้ว่า (ตามที่อ้างถึงในลิงก์จากคำตอบของ @ ircmaxell):
- ไม่มีการสร้างเอนโทรปี / หมายเลขสุ่ม
- ไม่มีที่เก็บคีย์ที่ปลอดภัยเช่นไพรเวตคีย์ต้องได้รับการป้องกันด้วยรหัสผ่านหากเก็บไว้ในเครื่องหรือจัดเก็บไว้บนเซิร์ฟเวอร์
- ขาดความปลอดภัยลบ
- ขาดลักษณะเวลา
แต่ละจุดอ่อนเหล่านี้สอดคล้องกับหมวดหมู่ของการประนีประนอมการเข้ารหัสลับ ในคำอื่น ๆ ในขณะที่คุณอาจมี "crypto" ตามชื่อมันจะต่ำกว่าความรุนแรงหนึ่งที่ต้องการในการปฏิบัติ
ทั้งหมดที่กล่าวมานั้นการประเมินทางคณิตศาสตร์ประกันภัยนั้นไม่สำคัญเท่ากับ "Javascript crypto นั้นอ่อนแออย่าใช้มัน" นี่ไม่ใช่การรับรองข้อ จำกัด อย่างเข้มงวดและคุณต้องเข้าใจจุดอ่อนด้านบนความถี่และค่าใช้จ่ายของเวกเตอร์ที่คุณเผชิญอย่างสมบูรณ์และความสามารถในการลดหรือประกันในกรณีที่เกิดข้อผิดพลาด: Javascript crypto แม้ว่าจุดอ่อนของมันอาจลดความเสี่ยงของคุณ แต่เฉพาะกับโจรที่มีความสามารถทางเทคนิค จำกัด อย่างไรก็ตามคุณควรเข้าใจ Javascript crypto ไม่มีค่าใด ๆ กับผู้โจมตีที่มุ่งมั่นและมีความสามารถซึ่งกำลังกำหนดเป้าหมายข้อมูลนั้น บางคนคิดว่ามันทำให้เข้าใจผิดในการเรียกข้อมูล "เข้ารหัส" เมื่อทราบว่าจุดอ่อนจำนวนมากมีอยู่ในการใช้งาน ในคำอื่น ๆ คุณสามารถลดความเสี่ยงด้านเทคนิคได้เล็กน้อย แต่เพิ่มความเสี่ยงทางการเงินจากการเปิดเผย แน่นอนว่าแต่ละสถานการณ์มีความแตกต่างกันและการวิเคราะห์การลดความเสี่ยงทางเทคนิคต่อความเสี่ยงทางการเงินนั้นไม่สำคัญ นี่คือการเปรียบเทียบที่เป็นตัวอย่าง:ธนาคารบางแห่งต้องการรหัสผ่านที่อ่อนแอแม้จะมีความเสี่ยงอยู่ในตัวก็ตามเนื่องจากการได้รับความเสียหายจากรหัสผ่านที่อ่อนแอนั้นน้อยกว่าค่าใช้จ่ายของผู้ใช้ปลายทางในการสนับสนุนรหัสผ่านที่คาดเดายาก
🔥หากคุณอ่านย่อหน้าสุดท้ายและคิดว่า "ผู้ชายบางคนบนอินเทอร์เน็ตชื่อ Brian บอกว่าฉันสามารถใช้ Javascript crypto" ได้โปรดอย่าใช้ Javascript crypto
สำหรับกรณีการใช้งานที่อธิบายไว้ในคำถามดูเหมือนว่าจะสมเหตุสมผลสำหรับผู้ใช้ในการเข้ารหัสพาร์ติชั่นภายในเครื่องหรือโฮมไดเร็กตอรี่และใช้รหัสผ่านที่คาดเดายาก การรักษาความปลอดภัยประเภทนั้นโดยทั่วไปแล้วจะมีการทดสอบที่ดีเชื่อถือได้และมีอยู่ทั่วไป