Mã hóa bằng mẫu hình: cách vẽ một hình bảo vệ tệp của bạn
Bạn vẽ một mẫu hình bằng ngón tay. PBKDF2 biến cử chỉ đó thành khóa két, khóa này mở một khóa ngẫu nhiên riêng bảo vệ các tệp của bạn bằng AES-256-GCM. Không có ô mật khẩu, không có mã PIN ngắn. Chỉ có mẫu hình của bạn và một hệ thống phân cấp khóa được chia lớp có chủ ý.
Vaultaire chuyển hình vẽ trên lưới 5×5 thành chuỗi dữ liệu và xử lý nó bằng PBKDF2-HMAC-SHA512 với 600.000 vòng lặp và muối chung của thiết bị lưu trong Keychain của iOS. Kết quả 256 bit là khóa két: nó mã hóa chỉ mục két và mở khóa chính ngẫu nhiên riêng mà AES-256-GCM dùng cho nội dung và siêu dữ liệu tệp.
Mã hóa bằng mẫu hình là gì?
Hầu hết các ứng dụng két đều dựa vào mã PIN hoặc mật khẩu. Bạn nhập bốn chữ số và ảnh của bạn hiện ra. Nghe có vẻ đủ an toàn, phải không?
Vấn đề là: mã PIN bốn chữ số có đúng 10.000 tổ hợp. Máy tính có thể thử hết trong chưa đầy một giây. Sáu chữ số? Một triệu tổ hợp. Vẫn quá nhanh với phần cứng hiện đại. Ngay cả mật khẩu tám ký tự, nếu chỉ dùng chữ thường, cũng chỉ cho khoảng 200 tỷ khả năng. Nghe có vẻ nhiều cho đến khi bạn biết một máy tính xách tay thông thường có thể kiểm tra hàng tỷ giá trị băm mật khẩu mỗi giây.
Mã hóa bằng mẫu hình đi theo một hướng khác hẳn. Thay vì gõ ký tự vào ô, bạn vẽ một hình trên lưới các điểm. Đường đi cụ thể bạn vẽ (chạm vào điểm nào, theo thứ tự nào, với hình dạng nào) trở thành đầu vào cho một hàm tạo khóa từ mật khẩu. Kết quả không chỉ được giao diện kiểm tra: nó phải mở được một chỉ mục đã mã hóa có xác thực và khóa chính ngẫu nhiên bên trong chỉ mục đó.
Sự khác biệt này quan trọng. Khi bạn nhập mã PIN trong một số ứng dụng, ứng dụng chỉ kiểm tra xem bạn nhập đúng số hay chưa. Nếu đúng, ứng dụng mở ra, dù các tệp có thể chủ yếu chỉ được bảo vệ bằng kiểm soát truy cập. Vaultaire thì đưa mẫu hình bạn vẽ vào PBKDF2 để tạo khóa két 256 bit. Khóa đó phải xác thực và giải mã được chỉ mục két trước khi mở được khóa chính ngẫu nhiên dùng cho các tệp. Mẫu hình không khớp được hiển thị như một két trống, nhưng lớp xác thực AES-GCM bên dưới vẫn phân biệt khóa đúng với khóa sai.
Cổng truy cập bằng mã PIN có thể giống một cánh cửa khóa đặt trước các tệp đọc được. Cách của Vaultaire gần với mã số của một chiếc két hơn: mẫu hình tạo ra khóa để mở một chỉ mục đã mã hóa, và chỉ mục đó giải phóng khóa riêng bảo vệ nội dung. Giao diện không thể đơn giản bỏ qua chuỗi mật mã đó.
Cách hoạt động, từng bước
Đây là những gì xảy ra từ lúc ngón tay bạn chạm vào màn hình cho đến lúc không ai khác đọc được tệp của bạn.
Bước 1: Bạn vẽ mẫu hình
Vaultaire hiện một lưới điểm 5 × 5. Bạn vẽ một đường liền nối ít nhất 6 điểm và đổi hướng ít nhất một lần. Ứng dụng ghi lại chính xác bạn đã đi qua những điểm nào và theo thứ tự nào. Trình tự đó là mẫu hình của bạn.
Khác với lưới 3×3 thường gặp trên màn hình khóa Android, Vaultaire dùng lưới 5×5. Đây không phải lựa chọn vì thẩm mỹ. Hai mươi lăm vị trí cho phép nhiều đường đi, giao cắt, bước nhảy và lần đổi hướng hơn hẳn chín vị trí. Không gian lý thuyết lớn hơn có ích, nhưng độ an toàn thực tế vẫn phụ thuộc vào việc đường bạn chọn khó đoán đến đâu. Một chữ cái quen thuộc hay một hình đơn giản vẫn có thể bị đoán ra, dù lưới có thể biểu diễn hàng tỷ khả năng khác.
Bước 2: Mẫu hình tạo ra khóa két
Mẫu hình bạn vẽ được chuyển thành chuỗi dữ liệu cùng kích thước lưới và đưa vào PBKDF2 (hàm tạo khóa từ mật khẩu 2) với HMAC-SHA512, 600.000 vòng lặp và một muối ngẫu nhiên chung của thiết bị. Muối là một giá trị không bí mật, lưu trong Keychain của iOS dưới dạng mục WhenUnlockedThisDeviceOnly. Nó gắn việc tạo khóa trên máy với thiết bị; nó không riêng cho từng két và không thêm entropy vào mẫu hình do con người chọn.
Việc tạo khóa được cố ý làm cho tốn kém. PBKDF2 chạy 600.000 vòng HMAC-SHA512 cho mỗi mẫu hình được thử, làm tăng chi phí của một cuộc tấn công đoán. Điều này không biến một mẫu hình entropy thấp thành 256 bit bảo mật, và thời gian tấn công phụ thuộc vào phần cứng của kẻ tấn công. Mục đích của nó hẹp hơn và đo được: khiến mỗi lần đoán tốn kém hơn nhiều so với một hàm băm đơn giản.
Bước 3: Tệp của bạn được mã hóa
Khi két được tạo lần đầu, Vaultaire tạo một khóa chính 256 bit ngẫu nhiên. Khóa két tạo từ mẫu hình mã hóa chỉ mục và bọc khóa chính đó; nó không trực tiếp mã hóa từng tệp. Khóa chính được dùng với AES-256-GCM cho tiêu đề tệp, nội dung, ảnh thu nhỏ và siêu dữ liệu liên quan. Nonce mới bảo đảm bản rõ lặp lại không tạo ra bản mã lặp lại với cùng một khóa.
GCM bổ sung một lớp quan trọng: xác thực. Nó không chỉ xáo trộn dữ liệu của bạn mà còn tạo ra một thẻ phát hiện mọi thay đổi trái phép. Nếu chỉ một bit của tệp mã hóa bị sửa, việc giải mã sẽ thất bại. Không ai có thể sửa tệp của bạn mà bạn không biết.
Bước 4: Trạng thái khóa đang dùng bị xóa
Khi Vaultaire khóa, ứng dụng xóa trạng thái két đang mở và khóa chính, và yêu cầu mở khóa lại trước khi hiện các tệp. Khi két đang mở, các byte khóa đối xứng đó buộc phải có mặt trong tiến trình ứng dụng để CryptoKit thực hiện các thao tác AES-GCM. Vaultaire cũng giữ thông tin khôi phục, gồm mẫu hình và phong bì khôi phục được mã hóa bằng cụm từ, trong một cơ sở dữ liệu mã hóa bằng AES-GCM lưu trong Keychain của iOS. Điều đó khác hẳn với việc khẳng định rằng mẫu hình và mọi bản sao của khóa không được lưu ở bất kỳ đâu.
Toán học phía sau (nói đơn giản)
Bạn không cần bằng khoa học máy tính để hiểu vì sao cách này hiệu quả. Độ an toàn quy về ba con số: có bao nhiêu mẫu hình khả dĩ, mỗi lần đoán mất bao lâu, và kẻ tấn công có thể đoán bao nhiêu lần.
Entropy: thước đo độ khó đoán
Entropy là cách nói trang trọng cho “điều này khó đoán đến mức nào”. Một lần tung đồng xu có 1 bit entropy (hai kết quả). Mã PIN bốn chữ số có khoảng 13 bit entropy (10.000 kết quả). Một mẫu hình được chọn tốt trên lưới 5×5, nối từ 8 điểm trở lên, có thể vượt 30 bit entropy, tức hơn một tỷ mẫu hình khả dĩ.
Entropy của mẫu hình đặt giới hạn cho một cuộc tấn công đoán. PBKDF2 không thể tạo ra entropy mà cử chỉ không có, nhưng có thể khiến việc thử mỗi khả năng tốn kém hơn nhiều.
Tạo khóa: khiến việc đoán trở nên tốn kém
PBKDF2 nhận mẫu hình đã chuyển thành chuỗi và chạy 600.000 vòng HMAC-SHA512. Ước tính tấn công phải dùng chi phí đo được trên phần cứng thực hiện việc đoán: với đúng 1 mili giây cho mỗi lần thử trọn vẹn, 1.000.000.000 lần thử mất 1.000.000 giây, tức khoảng 11,6 ngày, trên 1 luồng xử lý. Nếu mỗi lần thử đo được chậm hơn, thời gian đó tăng lên; phần cứng song song làm nó giảm xuống. Độ dài đầu ra 256 bit không làm thay đổi kích thước không gian tìm kiếm mẫu hình.
Muối chung của thiết bị được lưu trong Keychain và không được thiết kế để giữ bí mật. Keychain và Bảo vệ dữ liệu của iOS có thể khiến việc trích xuất khó hơn khi thiết bị bị thu giữ, nhưng phân tích mật mã phải giả định rằng người kiểm tra lấy được các tệp mã hóa cũng có thể lấy được muối. Muối ngăn việc tính trước dùng chung cho nhiều thiết bị; nó không thay thế được một mẫu hình mạnh.
AES-256: Một tiêu chuẩn công khai, được nghiên cứu kỹ
AES-256 là một thuật toán mã hóa tiêu chuẩn, mạnh, được NIST công bố trong FIPS 197. “256” chỉ độ dài khóa tính bằng bit. Khóa 256 bit có 2256 giá trị khả dĩ, quá nhiều để thử vét cạn. Vì vậy kẻ tấn công nhắm vào mẫu hình, và đó là lý do Vaultaire kéo giãn mẫu hình bằng 600.000 vòng PBKDF2.
Độ an toàn của AES-256 không phụ thuộc vào việc giữ bí mật thuật toán. Nhưng cả hệ thống không chỉ được bảo vệ bởi không gian khóa AES: giới hạn đoán thực tế đến từ entropy của mẫu hình, hệ số công việc của PBKDF2 và khả năng bảo vệ muối cùng bộ lưu trữ mã hóa của thiết bị. AES-256-GCM cung cấp mã hóa có xác thực mạnh khi đã mở được đúng khóa chính ngẫu nhiên.
Một cuộc tấn công phải vượt qua những gì
Hãy xem những cách chính mà ai đó có thể thử truy cập các tệp đã mã hóa của bạn, Vaultaire làm gì để tăng chi phí, và giới hạn vẫn còn ở đâu.
Tấn công vét cạn: thử mọi mẫu hình
PBKDF2 buộc mỗi mẫu hình được thử phải tốn 600.000 vòng HMAC-SHA512. Đó là một lớp phòng thủ có ý nghĩa, nhưng không phải lời hứa về một số năm cố định: kết quả phụ thuộc vào mẫu hình được chọn, tốc độ tạo khóa đo được, mức song song và việc người kiểm tra có lấy được muối của thiết bị hay không. Đường vẽ dài hơn, khó đoán hơn là quan trọng, vì PBKDF2 làm tăng chi phí đoán chứ không tạo ra entropy mới.
Tấn công vết dấu tay: đọc màn hình của bạn
Trên lưới 3×3, vết dấu tay trên màn hình có thể thu hẹp đáng kể số mẫu hình khả dĩ. Trên lưới 5×5, vết dấu tay cho biết những điểm nào đã được chạm, nhưng không cho biết thứ tự, hướng hoặc cách chúng nối với nhau. Số tổ hợp bùng nổ khiến cách này không khả thi.
Nhìn trộm: xem bạn vẽ
Mẫu hình được vẽ nhanh trên màn hình điện thoại nhỏ rất khó ghi nhớ bằng cách quan sát, nhất là trên lưới 5×5. Nghiên cứu cho thấy người quan sát khó chép lại một mẫu hình phức tạp hơn nhiều so với việc nghe lén một mã PIN hay mật khẩu được đọc to.
Thu giữ thiết bị: lấy điện thoại của bạn
Nếu ai đó lấy điện thoại của bạn, nội dung tệp và chỉ mục của Vaultaire vẫn là bản mã AES-GCM cho đến khi có đủ các khóa cần thiết. Ứng dụng không lưu bản ghi xác minh mật khẩu thông thường, nhưng điều đó không loại bỏ khả năng xác minh ngoại tuyến. Tên tệp của mỗi chỉ mục két đã mã hóa chứa giá trị băm rút gọn của khóa két, và việc giải mã có xác thực AES-GCM cũng thành công hoặc thất bại tùy khóa được thử. Vì vậy, việc bảo vệ thiết bị và độ mạnh của mẫu hình vẫn là một phần của mô hình đe dọa.
Không cần một giá trị băm mật khẩu riêng để kiểm tra phỏng đoán với bản mã có xác thực. Thẻ AES-GCM của Vaultaire cho kết quả đúng hay sai với độ tin cậy cao, còn tên tệp chỉ mục cho một bước lọc sơ bộ rẻ hơn. Lớp bảo vệ nằm ở chi phí và độ khó đoán của thông tin xác thực, cộng với việc iOS bảo vệ dữ liệu trên máy, chứ không phải ở chỗ không có cách nào xác minh phỏng đoán.
Chọn mẫu hình mạnh
Mã hóa chỉ mạnh bằng mẫu hình bạn chọn. Đây là cách tăng bảo mật tối đa với ít công sức.
Điều gì tạo nên một mẫu hình mạnh
- Dùng nhiều điểm hơn. Nối ít nhất 8 trong 25 điểm có sẵn. Mỗi điểm thêm vào nhân số mẫu hình khả dĩ lên nhiều lần.
- Cắt ngang đường vẽ của chính bạn. Mẫu hình vòng lại, bỏ qua điểm hoặc đổi hướng bất ngờ khó tái tạo hơn nhiều, dù từ trí nhớ hay qua quan sát.
- Tránh các hình quá rõ ràng. Chữ cái (L, Z, S), hình học đơn giản (hình vuông, tam giác) và đường thẳng là những thứ đầu tiên kẻ tấn công sẽ thử.
- Dùng toàn bộ lưới. Mẫu hình chỉ nằm ở một góc hoặc dọc một cạnh làm phí entropy có sẵn. Dàn trải ra.
Những điều cần tránh
- Mẫu hình có độ dài tối thiểu. Vaultaire yêu cầu ít nhất 6 điểm và một lần đổi hướng, nhưng đạt mức tối thiểu không làm đường vẽ trở nên khó đoán. Hãy dùng nhiều phần lưới hơn và đổi hướng vài lần khi bạn vẫn nhớ chắc chắn được kết quả.
- Hình học đơn giản. Hình chữ L, đường zíc zắc hay một đường chéo thẳng là phiên bản mẫu hình của “password123”.
- Luôn bắt đầu từ cùng một góc. Nghiên cứu về mẫu khóa Android cho thấy hầu hết mọi người bắt đầu từ điểm trên cùng bên trái. Kẻ tấn công biết điều này.
Điểm cân bằng
Một mẫu hình nối 8–12 điểm và đổi hướng vài lần sẽ khó đoán hơn, trong khi bạn vẫn dễ nhớ nhờ trí nhớ cơ bắp. Bạn không cần học thuộc nó như mật khẩu: tay bạn nhớ chuyển động, giống như cách tay nhớ chữ ký của bạn.
Vì sao bạn có thể yên tâm
Mã hóa bằng mẫu hình trong Vaultaire không chỉ là một bàn phím PIN đẹp hơn. Cử chỉ được xử lý bằng một hàm tạo khóa thực thụ và phải mở được dữ liệu đã mã hóa có xác thực. Độ mạnh của nó vẫn phụ thuộc vào cử chỉ bạn chọn, nên Vaultaire kết hợp lưới lớn hơn với hệ số công việc PBKDF2 cao, thay vì coi độ dài đầu ra 256 bit là 256 bit entropy bí mật của con người.
Mẫu hình và khóa két trên máy của bạn không được gửi tới Vaultaire. Khi sao lưu bật (mặc định), một khóa sao lưu riêng tạo từ mẫu hình mã hóa các bản ghi CloudKit, và một bản kê khôi phục đã mã hóa cho phép cụm từ khôi phục lấy lại khóa két và khóa sao lưu. Vaultaire không giữ khóa nào phía nhà cung cấp để giải mã các bản ghi đó, nhưng thiết bị và thông tin khôi phục vẫn là những phần quan trọng về bảo mật trong thiết kế.
Bạn vẽ một hình. Hình đó bảo vệ tệp của bạn. Toán học lo phần còn lại.
Câu hỏi thường gặp
Điều gì xảy ra nếu tôi quên mẫu hình của mình?
Khi bạn tạo két, Vaultaire tạo một cụm từ khôi phục tùy chỉnh gồm 9 từ. PBKDF2 tạo khóa khôi phục từ cụm từ đó, và khóa này mở một phong bì đã mã hóa chứa khóa két. Nếu bạn mất cả mẫu hình lẫn cụm từ khôi phục, Vaultaire không có khóa nào phía máy chủ để khôi phục két.
Mẫu hình có thực sự an toàn hơn mật khẩu không?
Một mẫu hình được chọn tốt trên lưới 5×5 có thể đạt bằng hoặc vượt entropy của một mật khẩu thông thường. Ưu điểm nằm ở sự dễ dùng: mọi người chọn mật khẩu yếu vì mật khẩu mạnh khó nhớ. Mẫu hình dựa vào trí nhớ cơ bắp, nên bạn dùng một mẫu hình phức tạp một cách tự nhiên mà không cần cố ghi nhớ.
Ai đó có thể chụp màn hình hoặc quay lại mẫu hình của tôi không?
Vaultaire áp dụng lớp chắn chụp màn hình theo khả năng tốt nhất cho lưới mẫu hình và phản ứng khi iOS báo đang có thao tác ghi màn hình. iOS không cung cấp cờ màn hình bảo mật công khai cho nội dung ứng dụng bất kỳ, nên các biện pháp này giảm việc vô tình bị chụp nhưng không thể bảo đảm chặn được mọi cách chụp.
Vaultaire sử dụng thuật toán mã hóa nào?
Vaultaire dùng PBKDF2-HMAC-SHA512 với 600.000 vòng lặp để tạo khóa két từ mẫu hình và muối chung của thiết bị lưu trong Keychain. Khóa két đó mã hóa chỉ mục két và bọc một khóa chính 256 bit ngẫu nhiên. AES-256-GCM với khóa chính bảo vệ nội dung tệp, tiêu đề, siêu dữ liệu và ảnh thu nhỏ bằng mã hóa có xác thực.
Mẫu hình có được lưu trên thiết bị của tôi không?
Vaultaire lưu thông tin khôi phục, gồm cả mẫu hình, trong một cơ sở dữ liệu khôi phục mã hóa bằng AES-GCM, được giữ trong Keychain của iOS. Mẫu hình không được gửi tới Vaultaire và không được lưu trong tệp dạng bản rõ. Khi két đang mở, các byte khóa có mặt trong tiến trình ứng dụng; khi khóa, Vaultaire xóa trạng thái khóa đang dùng.
Vaultaire có thể truy cập các tệp được mã hóa của tôi không?
Vaultaire không vận hành dịch vụ nào nhận mẫu hình, cụm từ khôi phục, khóa giải mã hay nội dung két đọc được của bạn. Bản sao lưu iCloud đã mã hóa nằm trong cơ sở dữ liệu CloudKit riêng tư của bạn. Ranh giới nhà cung cấp này không bảo vệ két đang mở trước một bản dựng ứng dụng, hệ điều hành hay thiết bị bị xâm nhập.
Hãy thử mã hóa bằng mẫu hình
Vẽ mẫu hình đầu tiên và cảm nhận việc tệp của bạn được bảo vệ thật sự.
Tải Vaultaire miễn phí