Mã hóa tệp bằng mật khẩu ngay trên trình duyệt: cơ chế, định dạng và rủi ro
Công cụ mã hóa tệp bằng thuật toán AES-256 ở chế độ GCM, với khóa được dẫn xuất từ mật khẩu của bạn qua PBKDF2 dùng hàm băm SHA-256 và 250.000 vòng lặp. Toàn bộ quá trình chạy bằng thư viện mật mã có sẵn của trình duyệt, tệp không rời khỏi máy. Mất mật khẩu là mất dữ liệu vĩnh viễn, không có cách nào lấy lại.
Tính năng nổi bật
- Mã hóa bằng AES-256 ở chế độ GCM, chế độ vừa giữ bí mật vừa phát hiện được nội dung bị sửa
- Dẫn xuất khóa từ mật khẩu bằng PBKDF2 với hàm băm SHA-256 và 250.000 vòng lặp
- Sinh muối ngẫu nhiên 16 byte và vectơ khởi tạo ngẫu nhiên 12 byte cho mỗi lần mã hóa
- Ghi kèm phần đầu tệp chứa tên tệp gốc và kiểu nội dung để khôi phục đúng khi giải mã
- Nhận mọi loại tệp vì công cụ làm việc trên dữ liệu nhị phân thô, không quan tâm định dạng
- Xuất ra tệp mới thêm đuôi chấm enc, tải thẳng về máy bằng cơ chế tải xuống của trình duyệt
- Giải mã ngược lại và trả về đúng tên tệp cùng kiểu nội dung ban đầu
- Chạy hoàn toàn bằng thư viện mật mã của trình duyệt, không có bước tải tệp lên máy chủ
Khi nào cần mã hóa một tệp trước khi gửi đi
Một tệp gửi qua thư điện tử hay ứng dụng nhắn tin sẽ nằm lại trên máy chủ của nhà cung cấp, trong hộp thư của người nhận, trong bản sao lưu, và trong thư mục tải xuống của bất kỳ ai từng mở nó. Bạn không kiểm soát được chuỗi đó. Mã hóa trước khi gửi lật ngược tình thế: bản sao nằm ở đâu cũng chỉ là dữ liệu vô nghĩa nếu không có mật khẩu, nên rủi ro thu về đúng một điểm là việc bạn trao mật khẩu cho ai và bằng đường nào. Cách này hợp lý với hồ sơ nhân sự, bảng lương, bản quét giấy tờ tùy thân, hợp đồng chưa ký, hay bản sao lưu chứa dữ liệu khách hàng khi phải chuyển qua kênh không tự mã hóa. Điểm mấu chốt là mật khẩu phải đi bằng một kênh khác với tệp: gửi tệp qua thư điện tử thì đọc mật khẩu qua điện thoại, chứ gửi cả hai trong cùng một hộp thư thì việc mã hóa gần như không còn tác dụng.
Lợi ích khi sử dụng
- Tệp và mật khẩu không rời khỏi máy vì mọi phép tính chạy trong trình duyệt
- Dùng đúng thuật toán và tham số đang được khuyến nghị chứ không phải cách xáo trộn tự chế
- Chế độ GCM tự phát hiện tệp bị sửa đổi, giải mã sẽ báo lỗi thay vì trả ra dữ liệu hỏng
- Không phải cài phần mềm, tiện khi bạn đang dùng máy không có quyền cài đặt
- Mỗi lần mã hóa dùng muối và vectơ khởi tạo mới nên hai tệp giống nhau cho ra kết quả khác nhau
Cách mã hóa và giải mã một tệp
- 1Ở thẻ mã hóa, chọn tệp cần bảo vệ từ máy của bạn; công cụ nhận mọi định dạng vì nó làm việc trên dữ liệu nhị phân.
- 2Nhập một mật khẩu dài và không trùng với mật khẩu bạn dùng ở nơi khác, rồi lưu ngay vào trình quản lý mật khẩu trước khi bấm tiếp.
- 3Bấm mã hóa, trình duyệt sẽ tính khóa rồi tự tải về một tệp mới có thêm đuôi chấm enc; quá trình có thể mất vài giây vì phần dẫn xuất khóa cố tình chạy chậm.
- 4Kiểm tra lại bằng cách chuyển sang thẻ giải mã, chọn chính tệp vừa tạo và nhập mật khẩu để chắc chắn bạn mở lại được, rồi mới xóa bản gốc.
- 5Khi cần dùng, chọn tệp có đuôi chấm enc ở thẻ giải mã và nhập mật khẩu; tệp trả về sẽ mang đúng tên và kiểu nội dung ban đầu.
Mất mật khẩu là mất dữ liệu, không có ngoại lệ
Đây là điều cần đọc kỹ trước khi bấm nút. Khóa mã hóa được sinh ra từ chính mật khẩu của bạn và không được lưu ở bất kỳ đâu: không nằm trong tệp, không nằm trong trình duyệt, không nằm trên máy chủ nào. Không có cơ chế đặt lại mật khẩu, không có câu hỏi bảo mật, không có khóa dự phòng của quản trị viên, và chúng tôi cũng không có cách nào giúp bạn mở lại tệp. Quên mật khẩu nghĩa là tệp đó vĩnh viễn không đọc được, kể cả với người tạo ra công cụ. Dò tìm mật khẩu bằng cách thử cạn kiệt cũng không khả thi vì mỗi lần thử phải chạy 250.000 vòng lặp dẫn xuất khóa. Vì vậy hãy làm ba việc trước khi mã hóa bất cứ thứ gì quan trọng. Thứ nhất, lưu mật khẩu vào trình quản lý mật khẩu ngay lúc đặt, đừng dựa vào trí nhớ. Thứ hai, thử giải mã lại tệp vừa tạo để chắc chắn bạn gõ đúng mật khẩu chứ không phải gõ nhầm hai lần giống nhau. Thứ ba, chỉ xóa bản gốc sau khi bước thử ở trên thành công. Nếu tệp thuộc loại một đi không trở lại, hãy giữ thêm một bản gốc ở nơi an toàn khác.
Thuật toán và tham số công cụ đang dùng
Khóa 256 bit được tạo từ mật khẩu qua hàm dẫn xuất PBKDF2 với hàm băm SHA-256 và 250.000 vòng lặp. Con số vòng lặp không phải để làm chậm bạn mà để làm chậm kẻ dò mật khẩu: mỗi lần đoán đều phải trả cùng chi phí tính toán đó, nên tốc độ dò giảm đi hàng trăm nghìn lần so với việc băm một lần. Kèm theo là một chuỗi muối ngẫu nhiên 16 byte sinh mới cho mỗi tệp, khiến bảng tra cứu tính sẵn trở nên vô dụng và hai người dùng cùng một mật khẩu vẫn cho ra hai khóa khác nhau. Phần mã hóa dùng AES-256 ở chế độ GCM với vectơ khởi tạo ngẫu nhiên 12 byte, đúng độ dài được khuyến nghị cho chế độ này. Điểm đáng giá của GCM là nó vừa mã hóa vừa tạo thẻ xác thực: nếu ai đó sửa dù chỉ một bit trong tệp mã hóa, bước giải mã sẽ thất bại và báo lỗi thay vì lặng lẽ trả về dữ liệu sai. Vì muối và vectơ khởi tạo đều được sinh mới mỗi lần, mã hóa cùng một tệp hai lần sẽ cho ra hai kết quả khác nhau hoàn toàn, và đó là hành vi đúng.
Định dạng tệp kết quả và những gì nó không che giấu
Tệp xuất ra có cấu trúc riêng của công cụ này, gồm bốn phần nối tiếp: một chuỗi nhận dạng bảy ký tự ở đầu, bốn byte ghi độ dài phần đầu, phần đầu dạng JSON, rồi mới tới dữ liệu đã mã hóa. Phần đầu chứa số phiên bản, tên thuật toán, tên hàm dẫn xuất, số vòng lặp, chuỗi muối, vectơ khởi tạo, cùng tên tệp gốc và kiểu nội dung. Hai thông tin cuối cần lưu ý: chúng được ghi ở dạng đọc được, không mã hóa, vì công cụ cần chúng để khôi phục đúng tên tệp khi giải mã. Nghĩa là ai lấy được tệp chấm enc vẫn đọc được tên tệp gốc, chẳng hạn bảng lương tháng 12, dù không mở được nội dung. Kích thước tệp cũng không bị che. Nếu chính cái tên đã là thông tin nhạy cảm, hãy đổi tên tệp thành một chuỗi vô nghĩa trước khi mã hóa. Một hệ quả khác của định dạng riêng này là tệp chấm enc chỉ mở được bằng chính công cụ này, không dùng được với các phần mềm nén hay bộ công cụ mật mã phổ biến, nên người nhận cũng phải quay lại trang này để giải mã.
Đặt mật khẩu và trao mật khẩu cho người nhận
Toàn bộ độ an toàn dồn vào mật khẩu, nên một thuật toán tốt cũng vô nghĩa nếu mật khẩu là tên công ty cộng năm sinh. Cách đặt mật khẩu tốt và vẫn nhớ được là ghép bốn tới sáu từ ngẫu nhiên không liên quan nhau thành một cụm dài; độ dài đem lại nhiều sức kháng cự hơn là việc chèn ký tự đặc biệt vào một từ ngắn. Tuyệt đối không dùng lại mật khẩu bạn đang dùng cho hộp thư hay tài khoản ngân hàng, vì mật khẩu đó có thể đã lộ ở một vụ rò rỉ dữ liệu nào đó. Về khâu trao mật khẩu, nguyên tắc duy nhất cần nhớ là mật khẩu phải đi khác kênh với tệp. Gửi tệp qua thư điện tử thì đọc mật khẩu qua điện thoại hoặc gặp trực tiếp. Đừng gửi mật khẩu trong thư kế tiếp cùng hộp thư, đừng đặt trong tên tệp, đừng ghi trong nội dung thư kèm theo. Với nhóm nhiều người, nên đặt mật khẩu khác nhau cho từng người nhận thay vì một mật khẩu chung, để khi cần thu hồi quyền truy cập của một người thì không ảnh hưởng tới cả nhóm.
Giới hạn kỹ thuật và những gì công cụ này không làm
Tệp được đọc toàn bộ vào bộ nhớ trước khi mã hóa, nên tệp rất lớn có thể làm thẻ trình duyệt chậm hẳn hoặc dừng hoạt động, nhất là trên điện thoại và máy cấu hình thấp. Với tệp cỡ vài trăm megabyte trở lên, phần mềm chạy trực tiếp trên máy sẽ ổn định hơn vì chúng xử lý theo từng khối. Công cụ cũng không nén trước khi mã hóa, nên tệp kết quả không nhỏ hơn tệp gốc mà còn lớn hơn một chút do phần đầu và thẻ xác thực. Nếu cần gộp nhiều tệp, hãy nén chúng thành một tệp nén rồi mã hóa tệp nén đó. Một điểm cần phân biệt rõ: đây là mã hóa để giữ bí mật nội dung, không phải chữ ký số. Nó chứng minh được nội dung chưa bị sửa nhưng không chứng minh được ai là người tạo ra tệp, vì bất cứ ai biết mật khẩu đều tạo được một tệp hợp lệ. Cuối cùng, an toàn của cả quá trình phụ thuộc vào chiếc máy bạn đang ngồi: nếu máy đã nhiễm mã độc ghi lại thao tác bàn phím thì mật khẩu bị lấy ngay lúc bạn gõ, và không thuật toán nào cứu được tình huống đó.
Câu hỏi thường gặp (FAQ)
Quên mật khẩu thì có cách nào mở lại tệp không?
Không có cách nào, và đây là câu trả lời dứt khoát. Khóa được sinh từ chính mật khẩu và không được lưu ở bất kỳ đâu, không có cơ chế đặt lại, không có khóa dự phòng, chúng tôi cũng không giúp được. Quên mật khẩu đồng nghĩa mất dữ liệu vĩnh viễn. Hãy lưu mật khẩu vào trình quản lý mật khẩu ngay lúc đặt và thử giải mã lại trước khi xóa bản gốc.
Tệp của tôi có bị tải lên máy chủ không?
Không. Việc đọc tệp, dẫn xuất khóa và mã hóa đều dùng thư viện mật mã có sẵn của trình duyệt, chạy ngay trên máy bạn. Không có yêu cầu mạng nào mang theo nội dung tệp hay mật khẩu. Bạn có thể tự xác minh bằng cách mở thẻ mạng trong công cụ dành cho nhà phát triển của trình duyệt rồi bấm mã hóa và quan sát.
Tệp có đuôi chấm enc mở bằng phần mềm nào khác được không?
Không. Công cụ dùng định dạng chứa riêng gồm chuỗi nhận dạng ở đầu, phần đầu dạng JSON rồi mới tới dữ liệu mã hóa, nên các phần mềm nén hay bộ công cụ mật mã phổ biến không đọc được. Người nhận buộc phải quay lại đúng trang này để giải mã. Hãy tính tới điều đó khi gửi tệp cho người ở tổ chức khác.
Vì sao mã hóa cùng một tệp hai lần lại ra hai kết quả khác nhau?
Vì mỗi lần chạy, công cụ sinh mới một chuỗi muối 16 byte và một vectơ khởi tạo 12 byte hoàn toàn ngẫu nhiên. Đây là hành vi đúng và cần thiết: nó ngăn kẻ tấn công nhận ra hai tệp có cùng nội dung, và ngăn việc dùng lại vectơ khởi tạo vốn là lỗi nghiêm trọng với chế độ GCM. Cả hai tệp kết quả đều giải mã được bằng cùng mật khẩu.
Tên tệp gốc có bị lộ không?
Có. Tên tệp và kiểu nội dung được ghi ở dạng đọc được trong phần đầu để công cụ khôi phục đúng khi giải mã. Người lấy được tệp không mở được nội dung nhưng vẫn đọc được tên và thấy được kích thước. Nếu bản thân cái tên đã nhạy cảm, hãy đổi tên tệp thành một chuỗi vô nghĩa trước khi mã hóa.
Vì sao bấm mã hóa lại phải chờ vài giây?
Phần lớn thời gian dành cho việc dẫn xuất khóa với 250.000 vòng lặp. Độ chậm này là cố ý: nó buộc bất kỳ ai muốn dò mật khẩu cũng phải trả đúng chi phí đó cho từng lần đoán, làm tốc độ tấn công giảm đi hàng trăm nghìn lần. Với tệp lớn, phần chờ thêm đến từ việc đọc toàn bộ dữ liệu vào bộ nhớ.
Mã hóa được tệp lớn cỡ nào?
Không có giới hạn cứng trong mã, nhưng có giới hạn thực tế: toàn bộ tệp được nạp vào bộ nhớ trước khi xử lý. Vài chục megabyte thường không vấn đề, nhưng tệp vài trăm megabyte trở lên có thể làm thẻ trình duyệt treo hoặc bị đóng, nhất là trên điện thoại. Với tệp rất lớn nên dùng phần mềm cài trên máy vì chúng xử lý theo từng khối.
Giải mã báo lỗi thì nguyên nhân có thể là gì?
Hai khả năng chính. Một là mật khẩu sai, kể cả sai một ký tự hoa thường. Hai là tệp đã bị thay đổi hoặc hỏng trong quá trình truyền, vì chế độ GCM kiểm tra tính toàn vẹn và từ chối giải mã khi thẻ xác thực không khớp. Hãy thử tải lại tệp từ nguồn gốc trước khi kết luận là quên mật khẩu.
Nên đặt mật khẩu như thế nào cho đủ mạnh?
Ghép bốn tới sáu từ ngẫu nhiên không liên quan nhau thành một cụm dài sẽ tốt hơn nhiều so với một từ ngắn có chèn ký tự đặc biệt, vì độ dài mới là yếu tố quyết định. Tuyệt đối không dùng lại mật khẩu của hộp thư hay tài khoản ngân hàng, vì những mật khẩu đó có thể đã xuất hiện trong các vụ rò rỉ dữ liệu.
Gửi mật khẩu cho người nhận bằng cách nào?
Bằng một kênh khác với kênh gửi tệp. Gửi tệp qua thư điện tử thì đọc mật khẩu qua điện thoại hoặc gặp trực tiếp. Gửi cả hai trong cùng một hộp thư thì ai đọc được hộp thư đó cũng có cả hai thứ, và việc mã hóa gần như mất tác dụng. Với nhóm nhiều người, nên đặt mật khẩu riêng cho từng người nhận.
Mã hóa như thế này có thay được chữ ký số không?
Không, hai thứ giải quyết hai vấn đề khác nhau. Mã hóa giữ cho nội dung không bị đọc trộm và phát hiện được khi bị sửa, nhưng không chứng minh được ai tạo ra tệp, vì bất kỳ ai biết mật khẩu đều tạo được một tệp hợp lệ. Muốn chứng minh danh tính người ký và có giá trị pháp lý, bạn cần chứng thư số do tổ chức cung cấp dịch vụ chứng thực cấp.
Tệp sau khi mã hóa có nhỏ hơn không?
Không, còn lớn hơn một chút. Công cụ không nén dữ liệu trước khi mã hóa, và phần đầu chứa siêu dữ liệu cùng thẻ xác thực còn cộng thêm ít byte. Nếu bạn muốn vừa gọn vừa gộp nhiều tệp làm một, hãy nén chúng thành một tệp nén trước rồi mới mã hóa tệp nén đó.
Từ khóa liên quan
- mã hóa file online
- đặt mật khẩu cho file
- aes 256 gcm là gì
- pbkdf2 dẫn xuất khóa
- mã hóa file bằng trình duyệt
- giải mã file enc
- bảo vệ file bằng mật khẩu
- gửi file nhạy cảm an toàn
- mã hóa file không cần cài phần mềm
- quên mật khẩu file mã hóa
- web crypto api mã hóa
- mã hóa tài liệu hợp đồng
- encrypt file online free
- muối và vectơ khởi tạo là gì
- toàn vẹn dữ liệu aes gcm
- mã hóa file zip có mật khẩu
- gửi mật khẩu khác kênh
- mã hóa bảng lương nhân sự
- công cụ mã hóa file miễn phí
- mã hóa đầu cuối là gì