เรากำลังออกแบบเว็บแอปที่ผู้ใช้สามารถแชร์เอกสารให้กันและกันได้ เป้าหมายสูงสุดคือการทำให้ผู้ใช้ได้รับความไว้วางใจเป็นศูนย์ เช่น การเข้ารหัสฝั่งไคลเอ็นต์ทำให้แน่ใจว่าเซิร์ฟเวอร์ (หรือพ่อค้าคนกลาง) ไม่สามารถเห็นข้อมูลข้อความล้วน (ฉันทราบถึงข้อบกพร่องที่อาจเกิดขึ้นของโซลูชันการเข้ารหัสบนเบราว์เซอร์ เรามีความคิดที่จะจัดการกับปัญหาบางอย่าง ฉันอาจถามเกี่ยวกับปัญหาเหล่านี้ในภายหลัง แต่ฉันไม่ต้องการทำให้คำถามนี้เสียหาย)
รูปแบบพื้นฐานสำหรับ Zero Trust จะมีลักษณะดังนี้:
- หากผู้ใช้ลงชื่อสมัครใช้ (ผ่าน OAuth2) เบราว์เซอร์จะสร้างข้อความรหัสผ่านแบบสุ่ม 32 ฐาน-62 อักขระ
- วลีรหัสผ่านนั้นใช้เพื่อรับรหัสสาธารณะ / ส่วนตัวโดยใช้ PBKDF2
- รหัสสาธารณะจะถูกส่งไปยังเซิร์ฟเวอร์ ผู้ใช้จะได้รับข้อความรหัสผ่านแบบสุ่มที่สร้างขึ้นภายใต้ข้อ 1 เพื่อให้พวกเขาสามารถจดบันทึกได้
- เราสร้างรหัสแบบสุ่มสำหรับแต่ละเอกสาร เข้ารหัสด้วยรหัสสาธารณะของผู้เข้าร่วมทั้งหมด และจัดเก็บพร้อมกับเอกสาร
คีย์ส่วนตัวและวลีรหัสผ่านแบบสุ่มเริ่มต้น (1.) ไม่เคยออกจากไคลเอนต์ ดังนั้นจึงไม่มีทางที่ข้อมูลจะถูกถอดรหัสฝั่งเซิร์ฟเวอร์
แต่: ไม่สะดวกสำหรับผู้ใช้ปลายทาง หากพวกเขาทำกุญแจหาย (และแน่นอนที่สุดพวกเขาจะทำ) พวกเขาจะไม่สามารถเข้าถึงเอกสารใดๆ ของพวกเขาได้ หากพวกเขาเข้าสู่ระบบบนอุปกรณ์อื่น พวกเขาจะต้องป้อนข้อความรหัสผ่าน เรากำลังติดต่อกับกลุ่มผู้ใช้ที่หลากหลายมากและส่วนใหญ่ไม่ "เชี่ยวชาญด้านเทคโนโลยี" เลย และพวกเขาไม่ควรเป็นเช่นนั้น
มีวิธีแก้ปัญหา BYOK เช่นเดียวกับที่ใช้โดย Google Workspace CSE. แต่ AFAICS ผู้ใช้จะต้องตรวจสอบสิทธิ์กับบริการอื่นเพื่อใช้บริการของเรา ซึ่งไม่สะดวกเช่นกันและอาจอธิบายไม่ได้สำหรับผู้ใช้ของเรา
เนื่องจากเราควบคุมการรับรองความถูกต้อง - จัดทำโดย Auth0 - มีวิธีใดบ้างที่เราสามารถจัดเก็บรหัสส่วนตัวของผู้ใช้ได้ทุกที่ (แม้แต่บุคคลที่สาม) โดยที่ผู้ใช้ไม่ต้องตรวจสอบสิทธิ์ซ้ำสองครั้ง
นอกจากนี้ เรากำลังพิจารณาโหมดที่เราเรียกว่าโหมด "ซอฟต์" ซึ่งเราเก็บคีย์ส่วนตัวในนามของผู้ใช้โดยใช้โครงสร้างพื้นฐานที่แยกจากกันโดยสิ้นเชิงโดยใช้ ฮ. แน่นอนว่าสิ่งนี้จะละเมิดหลักการ Zero Trust แต่อย่างน้อยก็จะป้องกันการละเมิดข้อมูลเมื่อเอกสารที่เข้ารหัสรั่วไหล ผู้ใช้สามารถเลือกใช้โหมด "ยาก" ได้ตลอดเวลา (มีปัญหาหากมีการแชร์เอกสารระหว่างผู้ใช้ที่ใช้โหมด "ฮาร์ด" และผู้ใช้ที่ใช้โหมด "ซอฟต์" โดยพื้นฐานแล้วจะผิดสัญญาที่ให้ไว้กับผู้ใช้ที่ใช้โหมด "ฮาร์ด" เราจะแก้ไขปัญหานั้นโดยทำให้ชัดเจนและ อนุญาตให้ผู้ใช้บังคับให้ผู้เข้าร่วมทั้งหมดต้องใช้โหมด "ยาก")
สิ่งนี้สมเหตุสมผลหรือไม่? มีคำแนะนำสำหรับการอ่านเพิ่มเติมหรือไม่? โปรดขออภัยหากฉันไม่สามารถกระชับหรือชัดเจนเพียงพอ