Chúng tôi đang thiết kế một ứng dụng web nơi người dùng có thể chia sẻ tài liệu với nhau. Mục tiêu cuối cùng là đạt được sự tin tưởng bằng 0 mà người dùng cần, tức là mã hóa phía máy khách đảm bảo rằng máy chủ (hoặc bất kỳ người trung gian nào) không thể nhìn thấy bất kỳ dữ liệu văn bản gốc nào. (Tôi biết những thiếu sót tiềm ẩn của giải pháp mã hóa dựa trên trình duyệt. Chúng tôi có ý tưởng để giải quyết một số vấn đề, tôi có thể hỏi về chúng ở đây sau, nhưng tôi không muốn làm ô nhiễm câu hỏi này.)
Sơ đồ cơ bản cho sự tin tưởng bằng không sẽ như thế này:
- Nếu người dùng đăng ký (thông qua OAuth2), trình duyệt của họ sẽ tạo một cụm mật khẩu ngẫu nhiên gồm 32 ký tự cơ sở-62.
- Cụm mật khẩu đó được sử dụng để lấy khóa công khai/riêng tư bằng PBKDF2.
- Khóa chung được gửi đến máy chủ, người dùng được nhắc với cụm mật khẩu ngẫu nhiên được tạo bên dưới 1. để họ có thể ghi lại.
- Chúng tôi tạo một khóa ngẫu nhiên cho từng tài liệu, mã hóa khóa đó bằng khóa chung của tất cả những người tham gia và lưu trữ khóa đó cùng với tài liệu.
Khóa riêng tư và cụm mật khẩu ngẫu nhiên ban đầu (1.) không bao giờ rời khỏi máy khách, do đó, không có cách nào dữ liệu có thể được giải mã phía máy chủ.
NHƯNG: Điều này không thuận tiện cho người dùng cuối. Nếu họ làm mất chìa khóa (và chắc chắn là họ sẽ làm mất), thì họ sẽ không có quyền truy cập vào bất kỳ tài liệu nào của mình. Nếu họ đăng nhập trên một thiết bị khác, họ phải nhập cụm mật khẩu. Chúng tôi đang làm việc với một nhóm người dùng rất đa dạng và hầu hết trong số họ hoàn toàn không "hiểu biết về công nghệ" và họ không cần phải như vậy.
Có các giải pháp BYOK giống như các giải pháp được sử dụng bởi Google Workspace CSE. Nhưng AFAICS, người dùng sẽ phải xác thực với một dịch vụ khác để sử dụng dịch vụ của chúng tôi. Điều đó cũng không thuận tiện và có lẽ không thể giải thích được cho người dùng của chúng tôi.
Cho rằng chúng tôi kiểm soát xác thực - nó được cung cấp bởi Auth0 - có cách nào chúng tôi có thể lưu trữ khóa riêng của người dùng ở bất kỳ đâu (kể cả bên thứ ba) mà không cần người dùng phải xác thực hai lần không?
Ngoài ra, chúng tôi đang xem xét một chế độ mà chúng tôi gọi là chế độ "mềm", trong đó chúng tôi thay mặt người dùng lưu trữ khóa riêng bằng cách sử dụng một cơ sở hạ tầng hoàn toàn riêng biệt bằng cách sử dụng một HSM. Tất nhiên, điều này sẽ vi phạm nguyên tắc không tin cậy, nhưng ít nhất nó sẽ bảo vệ chống lại các vi phạm dữ liệu khi các tài liệu được mã hóa bị rò rỉ. Người dùng luôn có thể chọn tham gia chế độ "cứng". (Có vấn đề nếu tài liệu được chia sẻ giữa người dùng sử dụng chế độ "cứng" và người dùng sử dụng chế độ "mềm", về cơ bản là vi phạm lời hứa với người dùng sử dụng chế độ "cứng". Chúng tôi sẽ giải quyết vấn đề đó bằng cách làm rõ và tùy chọn cho phép người dùng thực thi rằng tất cả người tham gia phải sử dụng chế độ "cứng".)
Điều này có nghĩa không? Có bất kỳ hướng dẫn để đọc thêm? Xin thứ lỗi cho tôi, nếu tôi không thể ngắn gọn hoặc đủ rõ ràng.