Kiến trúc bảo mật của Cryptile, từng lớp một
Cryptile mã hóa mọi tệp, ảnh thu nhỏ và chỉ mục bằng AES-256-GCM, với khóa tạo trên điện thoại của bạn từ hình vẽ bạn vẽ. Không có tài khoản, không có máy chủ, và nhà phát triển không bao giờ giữ khóa.
Bản tóm tắt dễ hiểu có trên trang bảo mật.
Tôi cần biết gì?
- Hình vẽ của bạn là nguồn của mọi khóa. Không có nó thì không có gì đọc được được lưu lại.
- Kích thước và số két bị làm mờ. Tệp được đệm thêm, và các ô đánh lạc hướng che giấu số két thật.
- Bạn có thể tự kiểm tra. Lõi mã hóa được công bố để kiểm toán (source-available, công khai mã nguồn để xem), kèm mô hình mối đe dọa và vector kiểm thử: github.com/jasonbrelsford/cryptile-core.
Hình vẽ trở thành khóa như thế nào?
- Hình vẽ được ghi thành kích thước lưới, tiếp theo là các ô bạn đã chạm, theo thứ tự.
- Nó được trộn với một bí mật thiết bị 32 byte lưu trong Keychain của iPhone, chỉ dành cho thiết bị này.
- PBKDF2-HMAC-SHA512 chạy 600.000 lần trên đó. Mỗi lần đoán tốn đúng chừng ấy công sức.
- HKDF-SHA256 tách kết quả thành một khóa tra cứu và một khóa bọc.
- Khóa tra cứu đặt tên cho tệp chỉ mục của két. Khóa bọc mở tệp đó.
Bên trong chỉ mục là khóa chính 256 bit ngẫu nhiên của két. HKDF tạo từ nó các khóa con riêng cho tệp, ảnh thu nhỏ và chỉ mục. Không khóa nào được dùng cho hai mục đích.
Tệp được mã hóa như thế nào?
Các mục nhỏ, như ảnh thu nhỏ và chỉ mục, được niêm phong một lần bằng AES-256-GCM với một nonce ngẫu nhiên.
Tệp lớn dùng cấu trúc STREAM theo từng khối 1 MB. Mỗi khối có nonce riêng, ghi lại vị trí của nó và có phải khối cuối hay không. Cắt bớt, đảo thứ tự hay tráo khối đều khiến việc giải mã thất bại.
GCM cũng xác thực mọi phần đầu tệp, nên tệp bị sửa sẽ bị từ chối thay vì được hiển thị.
Kích thước và số két được giấu như thế nào?
Mọi khối dữ liệu nhỏ và mọi khối cuối của tệp được đệm lên bội số của 64 KiB. Người sao chép chỉ thấy kích thước ước chừng, không thấy con số chính xác.
Không có danh sách két. Ứng dụng giữ ít nhất 8 ô có dạng chỉ mục, cả thật lẫn đánh lạc hướng, và tạo lại các ô đánh lạc hướng sau mỗi lần ghi. Hình vẽ không ứng với ô nào sẽ mở một két trống.
Việc khôi phục hoạt động thế nào?
Mỗi két có một cụm khôi phục 9 từ, tương đương 96 bit ngẫu nhiên. Nó mở một bản khôi phục riêng của két, được niêm phong bằng khóa tạo từ cụm từ đó.
Bản sao lưu iCloud sao chép nguyên trạng các tệp đã mã hóa. Theo mặc định, bí mật thiết bị không nằm trong đó, nên chỉ có bản sao lưu thì không dùng để đoán hình vẽ được.
Những gì được mã hóa, những gì không?
Được mã hóa: ảnh, video, tệp, ghi chú, ảnh thu nhỏ, tên, thư mục, mục yêu thích, chữ được nhận dạng và vị trí của ảnh. Tệp nhỏ theo dõi các ô đánh lạc hướng và số lượng của gói miễn phí được niêm phong bằng một khóa thiết bị.
Không được Cryptile mã hóa:
- Cài đặt. Thời gian tự động khóa, thứ tự sắp xếp và công tắc sao lưu không chứa bí mật nào.
- Các mục được chia sẻ đang chờ thêm vào. Chúng nằm dưới lớp bảo vệ tệp của iOS cho đến khi bạn mở một két.
- Tổng kích thước vùng chứa và thời điểm ghi. Một két 10 GB trông không giống 10 MB.
- Bất cứ thứ gì bạn xuất ra. Bản sao lưu vào Ảnh hay Tệp nằm ngoài két.
Điều này bảo vệ bạn khỏi gì?
- Người sao chép tệp của ứng dụng mà không có Keychain của bạn. Họ chỉ có bản mã và không thử hình vẽ được.
- Apple, hoặc một vụ rò rỉ ở Apple. iCloud chỉ giữ bản mã, không giữ khóa.
- Can thiệp dữ liệu. Dữ liệu bị sửa hoặc đảo thứ tự sẽ không giải mã được.
- Chính chúng tôi. Chúng tôi không chạy máy chủ và không giữ khóa, nên không thể đặt lại quyền truy cập.
Điều này không bảo vệ bạn khỏi gì?
- Hình vẽ ngắn. Hình vẽ yếu hơn mật khẩu dạng cụm từ. Nếu có tệp và Keychain của bạn, một hình 6 ô trên lưới 4×4 bị phá trong vài phút bằng GPU. Hãy dùng từ 8 ô trở lên.
- Phần mềm độc hại trên điện thoại đã mở khóa. Mã đọc bộ nhớ khi két đang mở nằm ngoài khả năng của mọi ứng dụng.
- Người nhìn bạn vẽ. Hãy vẽ ở nơi không ai thấy bàn tay bạn.
- Mất cả điện thoại lẫn cụm khôi phục. Két mất vĩnh viễn. Không có đặt lại.
Hình vẽ báo động trong Plus hủy bí mật thiết bị, nên không két nào trên điện thoại mở được cho đến khi được khôi phục.