Bỏ qua để đến nội dung

Mã hoá

Ghi chú được mã hoá trong trình duyệt trước khi gửi đi. Cloudflare lưu ciphertext và khoá đã bọc, và không đọc được cả hai.

Một khoá dữ liệu, được bảo vệ hai lần

Phần tiêu đề “Một khoá dữ liệu, được bảo vệ hai lần”
  • Một khoá dữ liệu (DEK) ngẫu nhiên 256-bit mã hoá mọi ghi chú.
  • Passphrase của bạn được Argon2id kéo giãn thành một khoá dùng để bọc khoá dữ liệu.
  • Mã khôi phục được chuyển thành khoá thứ hai, bọc cùng khoá dữ liệu đó.

Bí mật nào trong hai cũng mở được khoá dữ liệu. Vì vậy mã khôi phục cứu được ghi chú, và đổi passphrase không cần mã hoá lại gì cả.

Được mã hoá (nằm trong ciphertext) Dạng rõ (để sắp xếp ghi chú)
Tiêu đề pinned
Nội dung archived
Nhãn trashed_at
Màu position và thời gian
  • Passphrase, khoá dữ liệu và nội dung ghi chú không bao giờ rời trình duyệt ở dạng rõ.
  • Trong một phiên, khoá dữ liệu là CryptoKey không trích xuất được, chỉ nằm trong bộ nhớ. Khoá app là xoá nó.
  • Bản offline trên máy chứa đúng ciphertext và khoá đã bọc như trên máy chủ. Đăng xuất sẽ xoá nó.
  • Ciphertext của mỗi ghi chú gắn với id của nó, nên máy chủ không thể tráo nội dung giữa các ghi chú.
  • Client từ chối tham số Argon2 thấp hơn ngưỡng an toàn, nên máy chủ độc hại không thể hạ cấp việc tạo khoá.
  • Worker tự kiểm tra JWT của Cloudflare Access (chữ ký, issuer, audience) thay vì tin vào header.
  • App đi kèm Content Security Policy chặt. Trình hiển thị Markdown escape HTML thô và loại bỏ URL thực thi được.
Bước Thuật toán
Passphrase → khoá mã hoá khoá Argon2id (64 MiB, t=3, p=1)
Mã khôi phục → khoá khôi phục HKDF-SHA256
Bọc khoá dữ liệu AES-256-GCM
Mỗi ghi chú AES-256-GCM với IV ngẫu nhiên 96-bit và AAD note:<id>