Cách SpaceMoon bảo vệ tệp của bạn
Trang này giải thích bằng lời dễ hiểu SpaceMoon làm gì, và cả những gì nó không làm được. Chúng tôi muốn bạn biết rõ giới hạn hơn là tin vào một lời hứa quá lớn.
Tóm tắt
- Mọi việc mã hóa đều diễn ra trên điện thoại của bạn. SpaceMoon không có máy chủ và không có tài khoản.
- Tệp của bạn được mã hóa bằng một khóa ngẫu nhiên. Chỉ hình mở khóa, cụm từ khôi phục hoặc vân tay của bạn mới mở được khóa đó.
- Chúng tôi, những người phát triển, không bao giờ có hình mở khóa, cụm từ hay khóa của bạn. Chúng tôi không thể mở tệp của bạn, và không thể đặt lại hình mở khóa của bạn.
- Chúng tôi dùng phần mã hóa có sẵn trong Android và thư viện libsodium nổi tiếng. Chúng tôi không tự viết phần mã hóa.
- SpaceMoon chưa qua kiểm tra bảo mật độc lập nào.
Từ hình mở khóa đến khóa mã hóa
Bạn vẽ hình trên lưới 5×5, dùng ít nhất 6 chấm và không chấm nào dùng hai lần. SpaceMoon biến hình vẽ thành khóa bằng Argon2id, từ libsodium (phiên bản 1.0.20 trên Android).
- Thông số: 64 MiB bộ nhớ, 3 lượt, 1 luồng, khóa 256 bit.
- Argon2id cố ý chạy chậm và cần nhiều bộ nhớ cho mỗi lần đoán. Nhờ vậy, việc đoán bằng card đồ họa tốn kém hơn nhiều.
- Trên các điện thoại chúng tôi dùng để thử, mỗi lần mở khóa mất khoảng 0,6 đến 0,9 giây.
- Hình mở khóa được trộn với một salt thiết bị ngẫu nhiên dài 16 byte. Salt này được lưu trong ứng dụng, mã hóa bằng một khóa giữ trong Android Keystore, không thể sao chép ra khỏi điện thoại.
- Ứng dụng không lưu bản sao nào của hình mở khóa. Ứng dụng kiểm tra hình vẽ bằng cách thử mở khóa mã hóa.
- Sau 5 lần vẽ sai liên tiếp, bạn phải chờ 30 giây. Mỗi lần sai tiếp theo, thời gian chờ tăng gấp đôi, tối đa 16 phút.
Cách tệp được mã hóa
- Mỗi kho có một khóa chính ngẫu nhiên 256 bit. Khóa từ hình mở khóa và khóa khôi phục chỉ "bọc" (mã hóa) khóa chính này.
- Tệp, ảnh thu nhỏ và danh sách các mục của bạn (tên tệp gốc, ngày, kích thước) được mã hóa bằng AES-256-GCM, dùng phần mã hóa có sẵn của Android. GCM còn phát hiện được nếu tệp bị sửa hoặc bị tráo.
- Tệp trong ứng dụng có tên ngẫu nhiên. Tệp lớn được mã hóa theo từng phần 1 MiB, nên video phát được mà không bao giờ ghi bản chưa mã hóa ra bộ nhớ.
- Với ảnh JPEG, thông tin ẩn (EXIF, như máy ảnh và ngày chụp) được lưu riêng, cũng được mã hóa.
- Khi ứng dụng khóa, nó ghi đè số 0 lên các khóa đang giữ trong bộ nhớ.
Cụm từ khôi phục
- Khi bạn tạo kho, bộ sinh số ngẫu nhiên an toàn của điện thoại chọn ra 9 từ tiếng Anh. Các từ lấy từ hai danh sách 1.024 từ thông dụng, theo một trong 4 thứ tự cố định. Như vậy là 92 bit ngẫu nhiên. Các từ luôn là tiếng Anh, dù ứng dụng dùng ngôn ngữ nào.
- Cụm từ đi qua cùng thông số Argon2id và tự nó mở được khóa chính. Cụm từ không cần salt thiết bị, nên vẫn dùng được cả khi hình mở khóa không còn dùng được.
- Một bản sao của cụm từ được lưu trên điện thoại, mã hóa hai lớp: một lớp bằng khóa chính và một lớp bằng khóa Android Keystore. Bạn có thể xem cụm từ trong Cài đặt sau khi vẽ lại hình mở khóa.
- Khi bạn đổi hình mở khóa hoặc dùng cụm từ để vào lại, bạn sẽ nhận cụm từ mới. Cụm từ cũ không dùng được nữa.
Vân tay
Mở bằng vân tay là tùy chọn. Android kiểm tra vân tay, không phải SpaceMoon; ứng dụng không bao giờ nhận được vân tay của bạn. Khóa chính được mở bằng một khóa trong Android Keystore, khóa này chỉ dùng được ngay sau một lần xác thực sinh trắc học mạnh. Nếu có người thêm vân tay mới vào điện thoại, khóa này không dùng được nữa và bạn phải dùng lại hình mở khóa.
Tệp sao lưu
- Bản sao lưu là một tệp
.smb. Tệp chứa các mục của bạn đúng như chúng đã được mã hóa, cùng hai bản đã bọc của khóa chính: một bản cho hình mở khóa bạn vẽ khi tạo bản sao lưu, và một bản cho cụm từ khôi phục bạn có lúc đó. - Bản dành cho hình mở khóa dùng một salt ngẫu nhiên mới cho mỗi bản sao lưu, không dùng salt thiết bị. Nhờ vậy bạn mở được bản sao lưu trên điện thoại mới.
- Phần đầu tệp được bảo vệ để phát hiện thay đổi hoặc phần bị tráo.
- Bạn chọn nơi lưu bằng màn hình lưu của chính Android. Tệp không bao giờ đi qua chúng tôi.
- Để khôi phục, hãy mở tệp bằng hình mở khóa hoặc cụm từ của nó. Sau đó bạn vẽ hình mở khóa mới và nhận cụm từ khôi phục mới.
Các lớp bảo vệ khác trong ứng dụng
- Chụp màn hình, quay màn hình và bản xem trước trong danh sách ứng dụng gần đây đều bị chặn trên mọi màn hình.
- Mặc định, ứng dụng khóa ngay khi bạn rời đi. Bạn có thể chọn 30 giây hoặc 1 phút thay vào đó.
- Sao lưu đám mây và chuyển dữ liệu giữa hai điện thoại của Android không bao gồm dữ liệu của SpaceMoon. Hãy dùng tệp sao lưu thay thế.
- Ứng dụng không xin quyền vị trí, danh bạ hay quyền truy cập "tất cả tệp".
AI và việc đoán hình mở khóa
- AI không bỏ qua được phần tính toán mật mã. Mỗi lần đoán vẫn phải chạy Argon2id với 64 MiB bộ nhớ. AI không phá được Argon2id hay AES, nên mỗi lần đoán không hề rẻ hơn.
- Điều AI thay đổi là thứ tự đoán. AI có thể học những hình người ta hay chọn (chữ cái, hình vuông, góc bắt đầu quen thuộc) và thử chúng trước. AI cũng có thể giúp đọc hình mở khóa từ video quay lén qua vai bạn, hoặc từ vết tay trên màn hình.
- Vì vậy, cách phòng vệ nằm ở hình mở khóa, không ở phần tính toán. Thước đo độ mạnh cảnh báo các hình phổ biến. Chế độ Hình mở khóa + PIN thêm mã PIN 4–6 chữ số, nên chỉ thấy hình trong video là chưa đủ. Ẩn đường vẽ hình mở khóa không để lại đường nào để quay. Muối thiết bị trong Android Keystore ngăn việc đoán bên ngoài điện thoại.
Những giới hạn bạn nên biết
Không ứng dụng nào bảo vệ được trước mọi thứ. Đây là những giới hạn thật của SpaceMoon.
Hình đơn giản có thể bị đoán
Hình ngắn hoặc phổ biến (chữ L, chữ Z, một đường thẳng) có thể bị đoán khi có người nhìn bạn vẽ, qua vết tay trên màn hình, hoặc chỉ sau vài lần thử. Hình mở khóa người ta thật sự dùng dễ đoán hơn nhiều so với con số các hình có thể có. Hãy dùng nhiều chấm và nhiều khúc rẽ hơn. Ứng dụng sẽ cảnh báo bạn về những hình quá đơn giản.
Đoán có thể mất bao lâu
Trong ứng dụng, mỗi lần thử mất khoảng một giây, và thời gian chờ tăng dần sau 5 lần sai. Nhưng người có tệp sao lưu của bạn, hoặc đã lấy được salt thiết bị từ một điện thoại đã root, có thể đoán trên máy tính, không phải chờ. Argon2id làm chậm việc này, nhưng hình mở khóa có ít khả năng hơn rất nhiều so với một mật khẩu dài. Ước tính sơ bộ với một card đồ họa cao cấp (cỡ RTX 4090), khoảng 1.000 lần đoán mỗi giây:
| Đoán gì | Số khả năng | Thời gian, một card đồ họa |
|---|---|---|
| 10,000 hình phổ biến nhất | 104 | khoảng 10 giây |
| Mọi hình 6 chấm | 1.28 × 108 | khoảng 1.5 ngày |
| Mọi hình 7 chấm | 2.42 × 109 | khoảng 28 ngày |
| Mọi hình 8 chấm | 4.36 × 1010 | khoảng 1.4 năm |
| Cụm từ khôi phục (92 bit) | 4.95 × 1027 | khoảng 1.6 × 1017 năm |
Đây là ước tính, không phải số đo thực tế. Số hình là giới hạn trên; số hình người ta thật sự dùng ít hơn rất nhiều. Phần cứng nhiều hơn hoặc nhanh hơn sẽ làm việc đoán nhanh hơn theo đúng tỷ lệ.
Giữ kín tệp sao lưu
Tệp sao lưu không chứa salt thiết bị, nên bất kỳ ai có được tệp đều có thể thử đoán hình mở khóa ngoại tuyến, như ở trên. Chỉ cất tệp ở nơi chỉ mình bạn truy cập được, như tài khoản đám mây của riêng bạn, và hãy dùng hình mở khóa dài hơn.
Điện thoại đã root hoặc bị nhiễm mã độc
Nếu ai đó có thể chạy mã với quyền của ứng dụng (ví dụ trên điện thoại đã root, hoặc bằng mã độc có toàn quyền điều khiển), họ có thể mở salt thiết bị và đoán ngoại tuyến. Khi kho đang mở, các khóa nằm trong bộ nhớ và có thể bị đọc bằng quyền root hoặc trình gỡ lỗi. Một số bản sao do Android và Flutter tạo ra, cùng ảnh đang hiện trên màn hình, không thể xóa khỏi bộ nhớ ngay lập tức.
Một số thông tin vẫn nhìn thấy được
Số lượng tệp mã hóa trong bộ nhớ của ứng dụng, kích thước gần đúng của chúng, và thời điểm chúng được tạo hoặc thay đổi đều không được che giấu. Việc SpaceMoon được cài trên điện thoại cũng không được che giấu.
Đổi biểu tượng chỉ có tác dụng trên màn hình chính
- Chỉ biểu tượng và tên trên trình khởi chạy thay đổi. Danh sách Cài đặt > Ứng dụng của điện thoại, màn hình thông tin ứng dụng và màn hình bộ nhớ vẫn hiện SpaceMoon.
- Trình đọc màn hình có thể vẫn đọc "SpaceMoon". Ví dụ, trình khởi chạy Samsung One UI đưa tên thật của ứng dụng cho TalkBack, và ứng dụng không thể thay đổi điều này.
- Menu chia sẻ của Android luôn hiện tên thật của ứng dụng, nên SpaceMoon tự rút khỏi menu này khi bạn đổi biểu tượng. Bạn có thể bật lại.
- Hộp thoại xin quyền của Android hiện tên thật, nên ứng dụng xin quyền trước khi bạn đổi biểu tượng.
- Trong thời gian biểu tượng đang được đổi, ứng dụng không gửi thông báo.
- Mã riêng (4 đến 8 chữ số) chỉ mở màn hình khóa. Mã này không mở được tệp của bạn. Mã được lưu dưới dạng hash có salt, nhưng vì có quá ít khả năng nên rất dễ tìm ra nếu ai đó lấy được tệp chứa nó.
Vân tay là đường vào yếu hơn
Mở bằng vân tay bỏ qua Argon2id. Độ an toàn của nó phụ thuộc vào cảm biến vân tay và Android Keystore của điện thoại. Bạn có thể tắt tính năng này trong Cài đặt bất cứ lúc nào.
Ảnh người lạ
Ứng dụng không phát tiếng chụp, nhưng điện thoại bán ở một số nước, như Nhật Bản và Hàn Quốc, luôn phát tiếng chụp. Sẽ không có ảnh nào được chụp nếu một ứng dụng khác đang dùng camera hoặc điện thoại không có camera trước. Cho đến khi bạn mở kho đầu tiên bạn đã tạo, ảnh được niêm phong bằng một khóa Android Keystore.
Thông tin trong ảnh
- Với ảnh HEIC, PNG và WebP, thông tin ẩn (EXIF) vẫn nằm trong tệp. Toàn bộ tệp vẫn được mã hóa.
- Trên Android 10 trở lên, Android xóa vị trí GPS khỏi ảnh mà SpaceMoon đọc, vì ứng dụng không xin quyền vị trí. Khi bản gốc bị xóa khỏi thư viện, thông tin vị trí đó cũng mất.
- Ảnh thêm qua trình chọn ảnh của Android được đặt tên mới theo ngày, vì trình chọn không cung cấp tên gốc.
Tạm hoãn khóa khi có màn hình hệ thống
Khi một màn hình hệ thống đang mở (xin quyền, xác nhận xóa, trình chọn ảnh hoặc tệp, hộp thoại vân tay) và khi đang nhập hoặc xuất, ứng dụng sẽ chờ rồi mới khóa. Nếu bạn đã rời ứng dụng, ứng dụng sẽ khóa 2 giây sau khi việc đó kết thúc.
Các kho dùng chung một salt thiết bị
Mọi kho trên một điện thoại dùng cùng một salt thiết bị. Nếu ai đó có salt này, một lần đoán sẽ thử được mọi kho cùng lúc. Chi phí để tấn công một kho riêng lẻ vẫn như cũ.
Những điều không ứng dụng nào ngăn được
Người đứng nhìn bạn vẽ hình mở khóa, hoặc camera quay lại màn hình của bạn.
Mất cả hai thì không ai giúp được
Nếu bạn mất cả hình mở khóa lẫn cụm từ khôi phục, không ai lấy lại được tệp của bạn. Kể cả chúng tôi.