Cách iampk bảo vệ dữ liệu của bạn
iampk được thiết kế theo mô hình zero-knowledge: mật khẩu, API key và ghi chú của thông tin đăng nhập được mã hoá ngay trên trình duyệt trước khi lưu. Máy chủ chỉ giữ bản mã hoá và không có khoá để giải mã.
Hai lớp bảo vệ độc lập
- Tài khoản đăng nhập (email và mật khẩu, qua Supabase Auth) xác định bạn là ai và dùng để đồng bộ giữa các thiết bị.
- Passphrase mã hoá là chuỗi riêng, tối thiểu 12 ký tự. Passphrase chỉ được dùng trên thiết bị của bạn và không bao giờ được gửi lên máy chủ.
Hai lớp hoàn toàn tách biệt: biết mật khẩu đăng nhập không giúp giải mã được dữ liệu.
Mã hoá bằng Argon2id và AES-256-GCM
- Dữ liệu được mã hoá bằng một khoá dữ liệu 256-bit ngẫu nhiên. Khoá này được bọc hai lần: bằng khoá dẫn xuất từ passphrase qua Argon2id (19 MiB bộ nhớ, 2 vòng lặp, salt ngẫu nhiên 16 byte) và bằng recovery key. Argon2id đòi hỏi nhiều bộ nhớ nên việc dò passphrase hàng loạt bằng GPU rất tốn kém.
- Mỗi trường nhạy cảm được mã hoá riêng bằng AES-256-GCM qua Web Crypto API của trình duyệt, với IV ngẫu nhiên 12 byte cho mỗi lần mã hoá. GCM phát hiện mọi chỉnh sửa trên bản mã.
- Đổi passphrase chỉ bọc lại khoá dữ liệu bằng passphrase mới: dữ liệu không phải mã hoá lại và recovery key vẫn còn hiệu lực.
Khoá chỉ nằm trong bộ nhớ
- Khoá giải mã chỉ tồn tại trong bộ nhớ của tab đang mở, không được ghi vào localStorage hay cookie.
- Vault tự khoá sau 15 phút không hoạt động (chỉnh được từ 5 phút đến 4 giờ trong Cài đặt) và mặc định khoá lại mỗi khi tải lại trang.
- Nếu bạn tắt tuỳ chọn khoá khi tải lại trang, khoá được lưu tạm trên thiết bị ở dạng không thể trích xuất và hết hạn theo cùng thời gian tự khoá.
Máy chủ thấy gì, không thấy gì
Được mã hoá, máy chủ không đọc được: tên đăng nhập, mật khẩu, API key và ghi chú của từng thông tin đăng nhập.
Lưu ở dạng đọc được: email tài khoản, thông tin tài nguyên (tên, loại, nhà cung cấp, chi phí, ngày hết hạn, ghi chú của tài nguyên) và nhãn của thông tin đăng nhập. Máy chủ cần đọc các trường này để sắp xếp, lọc và gửi nhắc hạn, vì vậy đừng ghi bí mật vào đó.
Thông báo hết hạn
Khi bạn bật thông báo, máy chủ gửi tên, loại, nhà cung cấp, chi phí và ngày hết hạn của tài nguyên qua kênh bạn chọn (email, Telegram hoặc webhook). Thông báo không bao giờ chứa thông tin đăng nhập. Webhook được ký bằng HMAC-SHA256 để bạn xác minh nguồn gửi.
Chế độ chỉ lưu trên thiết bị
Bạn có thể dùng iampk mà không cần tài khoản. Khi đó toàn bộ vault nằm trong trình duyệt (IndexedDB) và không có dữ liệu nào được gửi lên máy chủ. Đổi lại, dữ liệu không đồng bộ giữa các thiết bị và máy chủ không thể gửi nhắc hạn.
Nếu quên passphrase
Dùng recovery key (64 ký tự, cấp khi tạo vault) ở trang mở khoá để đặt passphrase mới. Sau khi khôi phục, bạn nhận recovery key mới và key cũ hết hiệu lực. Máy chủ không giữ khoá và không có cửa hậu, nên mất cả passphrase lẫn recovery key đồng nghĩa với mất dữ liệu đã mã hoá.
- Lưu passphrase trong trình quản lý mật khẩu, và cất recovery key ở nơi khác (bản in hoặc file offline).
- Mất recovery key nhưng vẫn nhớ passphrase? Tạo key mới trong Cài đặt.
- Xuất dữ liệu ra file JSON định kỳ trong Cài đặt. File này vẫn được mã hoá, mở bằng passphrase hoặc recovery key tại thời điểm xuất. Nó giúp bạn khôi phục khi mất thiết bị hoặc trình duyệt bị xoá dữ liệu.
Hạ tầng
- Ứng dụng chạy trên Cloudflare, mọi kết nối đều qua HTTPS. Tên miền .dev nằm trong danh sách HSTS preload nên trình duyệt luôn dùng HTTPS.
- Dữ liệu đồng bộ được lưu trong Postgres trên Supabase với Row Level Security: mỗi tài khoản chỉ đọc và ghi được dữ liệu của chính mình. Việc cách ly giữa các tài khoản được kiểm tra bằng test tự động.
- Mã hoá và giải mã chỉ chạy trên trình duyệt. Không có endpoint nào nhận passphrase hay khoá giải mã.
Báo cáo lỗ hổng
Nếu phát hiện lỗ hổng bảo mật, vui lòng gửi email tới contact@iampk.dev kèm mô tả và các bước tái hiện. Chúng tôi sẽ phản hồi trong vòng 48 giờ. Mong bạn chưa công bố chi tiết cho đến khi lỗi được khắc phục. Bạn luôn được phép kiểm tra mã chạy trên trình duyệt để tự kiểm chứng cách mã hoá; xem thêm Điều khoản sử dụng.