0

[Open Source] #144 - CryptPad: Bộ ứng dụng văn phòng cộng tác trực tiếp với kiến trúc Zero-Knowledge, mã hóa đầu cuối (E2EE) và thuật toán ChainPad bền bỉ

Trong kỷ nguyên của các công cụ làm việc nhóm như Google Docs hay Office 365, quyền riêng tư về dữ liệu là một dấu hỏi lớn. CryptPad xuất hiện như một "pháo đài" bảo mật, cung cấp đầy đủ các công cụ từ soạn thảo văn bản, bảng tính đến Kanban, nhưng với một cam kết tuyệt đối: Ngay cả những người quản trị máy chủ cũng không thể đọc được nội dung bạn viết. Toàn bộ dữ liệu được mã hóa ngay tại trình duyệt và chỉ có những người giữ chìa khóa bí mật mới có quyền truy cập.

Dưới góc độ kỹ thuật, CryptPad là một minh chứng xuất sắc về việc ứng dụng Mật mã học (Cryptography) vào ứng dụng Web thời gian thực và kỹ thuật Sandbox cô lập bảo mật.

Github: https://github.com/cryptpad/cryptpad


🛠️ 1. Nền tảng công nghệ: Mật mã học tại Trình duyệt

CryptPad tận dụng sức mạnh của JavaScript hiện đại để biến trình duyệt thành một cỗ máy mã hóa mạnh mẽ:

  • Encryption Engine (TweetNaCl): Sử dụng các thuật toán Salsa20Poly1305 để mã hóa mọi gói tin dữ liệu trước khi rời khỏi máy người dùng. Đây là thư viện mật mã học gọn nhẹ, an toàn và cực nhanh.
  • Netflux Transport: Một lớp trừu tượng hóa giao thức truyền tin thời gian thực do dự án phát triển, hoạt động phía trên WebSockets, giúp truyền tải các gói tin đã mã hóa giữa các thiết bị mà không làm tăng độ trễ.
  • Zero-Knowledge Auth: Sử dụng thuật toán scrypt để biến mật khẩu người dùng thành các cặp khóa Public/Private. Server chỉ lưu trữ Public Key để định danh, Private Key luôn nằm trong bộ nhớ trình duyệt của người dùng.
  • Worker-based Processing: Sử dụng Web WorkersService Workers để thực hiện các tác vụ mã hóa/giải mã nặng nề ở một luồng (thread) riêng biệt, đảm bảo giao diện cộng tác luôn mượt mà.

🏗️ 2. Trụ cột kiến trúc: ChainPad và Chiến lược Sandboxing

Kiến trúc của CryptPad được thiết kế quanh nguyên tắc: "Server không được biết nội dung":

  • ChainPad Consensus Algorithm: Thay vì sử dụng Operational Transformation (OT) phức tạp cần server xử lý, CryptPad sử dụng thuật toán ChainPad dựa trên cơ chế Log-based. Mỗi thay đổi (patch) là một mắt xích trong chuỗi dữ liệu. Trình duyệt người dùng sẽ tự giải quyết xung đột khi nhận được các mắt xích mã hóa từ server.
  • Dual-Domain Sandboxing: Đây là một kỹ thuật bảo mật đỉnh cao. CryptPad chạy trên hai domain khác nhau. Domain chính quản lý khóa và tài khoản, trong khi Domain Sandbox chạy ứng dụng chỉnh sửa. Kỹ thuật này giúp triệt tiêu hoàn toàn rủi ro bị lấy cắp khóa mã hóa thông qua các cuộc tấn công XSS vào giao diện người dùng.
  • Blind Storage (datastore): Hệ thống lưu trữ không sử dụng SQL truyền thống mà sử dụng các file .ndjson. Server lưu trữ dữ liệu dưới dạng "Mù" (Blind), nghĩa là nó chỉ thấy các chuỗi ký tự ngẫu nhiên và không có khả năng giải mã chúng.

🔄 3. Workflow: Luồng đồng bộ hóa thay đổi (Sequence Diagram)

Sơ đồ mô tả quy trình "gõ phím - mã hóa - đồng bộ" giữa hai người dùng đang cộng tác:

image.png


⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. URL Hash Key Management: Toàn bộ "chìa khóa" mở tệp nằm ở phần Hash (#) của URL. Theo tiêu chuẩn Web, phần Hash không bao giờ được gửi lên Server trong các yêu cầu HTTP. Đây là cách CryptPad đảm bảo chìa khóa luôn nằm trong tay người dùng.
  2. Tiered Encapsulation: Dữ liệu được mã hóa theo tầng: Thông tin Meta (tên file), Nội dung (văn bản) và Blob (hình ảnh đính kèm) đều có các lớp khóa riêng biệt, cho phép người dùng chia sẻ quyền xem (Read-only) mà không làm lộ các thông tin quản trị.
  3. Local-first Syncing: Tích hợp IndexedDB để lưu trữ bản copy dữ liệu tại máy khách, cho phép làm việc offline và đồng bộ hóa ngay lập tức khi có kết nối mạng mà không làm mất dữ liệu.
  4. Customizable White-labeling: Toàn bộ hệ thống giao diện được tách biệt trong customize.dist/, cho phép các doanh nghiệp tự triển khai và thay đổi nhận diện thương hiệu một cách dễ dàng thông qua các tệp CSS/HTML template.

⚖️ 5. So sánh chiến lược

Tiêu chí CryptPad Google Docs Nextcloud Office
Mã hóa E2EE (Đầu cuối) SSL/TLS (Chỉ đường truyền) Server-side Encryption
Kiến trúc Server Zero-Knowledge (Mù) Biết mọi thứ Biết nội dung khi xử lý
Đồng bộ ChainPad (Log-based) Operational Transform WOPI/Collabora
Cộng tác Real-time (Nhanh) Real-time (Nhanh nhất) Real-time (Trung bình)
Tính riêng tư Tuyệt đối Thấp Cao

✅ Kết luận: Tại sao CryptPad là chuẩn mực của bảo mật cộng tác?

CryptPad không chỉ là một bộ công cụ làm việc; nó là một bài học về việc thiết kế hệ thống an toàn ngay từ lõi (Secure by Design). Bằng cách đẩy toàn bộ quyền lực giải mã về phía người dùng và biến máy chủ thành một "bưu tá mù", dự án đã giải quyết triệt để bài toán tin cậy trong môi trường điện toán đám mây.

Đối với các kỹ sư Backend và Bảo mật, nghiên cứu CryptPad mang lại giá trị về:

  • Cách triển khai Cryptography trong ứng dụng thực tế.
  • Tư duy thiết kế hệ thống đồng thuận (Consensus) phân tán qua Web.
  • Kỹ thuật Sandboxing để bảo vệ dữ liệu nhạy cảm trên trình duyệt.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí