Giải thích mã hóa AES-256: ý nghĩa với dữ liệu của bạn
Giải thích AES-256: cách mật mã hoạt động, tại sao khóa 256-bit quan trọng, GCM mode bổ sung gì, và những gì cần kiểm tra khi ứng dụng tuyên bố mã hóa AES-256.
AES-256 là gì?
AES-256 là thuật toán mã hóa khối đối xứng: Tiêu chuẩn mã hóa nâng cao (AES) chạy với khóa 256 bit. Cùng một khóa vừa mã hóa vừa giải mã. Thuật toán xử lý dữ liệu theo các khối 128 bit qua 14 vòng, và NIST đã chuẩn hóa nó thành FIPS 197 vào năm 2001.
Cái tên này gồm ba thông tin ghép lại. AES là tên thuật toán, được NIST chọn năm 2001 từ bản đề xuất Rijndael. 256 là độ dài khóa tính bằng bit, quyết định số khóa mà kẻ tấn công brute-force phải thử. Một chế độ như GCM hoặc CBC, thường viết sau tên như AES-256-GCM, quyết định cách các khối liên kết với nhau và việc bản mã có được kiểm tra chống giả mạo hay không. Riêng AES-256 chỉ cho bạn biết thuật toán và kích thước khóa. Nó không cho biết chế độ, và cũng không cho biết ai giữ khóa.
AES-256 là Tiêu chuẩn Mã hóa Nâng cao với khóa 256-bit, được NIST chuẩn hóa là FIPS 197 vào năm 2001. Đây là thuật toán mã hóa đối xứng được chính phủ Hoa Kỳ sử dụng cho thông tin mật, bởi các ngân hàng cho giao dịch tài chính, và bởi các ứng dụng tập trung bảo mật để bảo vệ dữ liệu ở trạng thái nghỉ và trong quá trình truyền. AES-256 có 2^256 khóa có thể -- một con số lớn hơn số nguyên tử ước tính trong vũ trụ quan sát được. Không có cuộc tấn công nào được biết đến giảm không gian khóa này thành một tìm kiếm khả thi về mặt tính toán.
Hướng dẫn này giải thích AES-256 thực sự làm gì, tại sao kích thước khóa quan trọng, các chế độ khác nhau có nghĩa là gì (ECB, CBC, GCM), và những gì cần tìm khi một ứng dụng tuyên bố sử dụng mã hóa AES-256.
AES thực sự làm gì
AES là mật mã khối đối xứng. "Đối xứng" có nghĩa là cùng một khóa mã hóa và giải mã. "Mật mã khối" có nghĩa là nó xử lý dữ liệu trong các khối có kích thước cố định 128 bit (16 byte).
Thuật toán lấy dữ liệu của bạn (bản rõ), kết hợp với khóa, và tạo ra đầu ra bị xáo trộn (bản mã) thông qua một loạt các phép biến đổi toán học. Các phép biến đổi này -- thay thế, dịch chuyển, trộn và thêm khóa -- lặp lại trong một số vòng cố định. AES-256 sử dụng 14 vòng.
Mỗi vòng áp dụng bốn thao tác:
- SubBytes: Mỗi byte được thay thế bằng một bảng thay thế cố định (S-box), tạo ra tính phi tuyến.
- ShiftRows: Các byte trong mỗi hàng được dịch chuyển theo các độ lệch khác nhau, phân tán dữ liệu qua các vị trí.
- MixColumns: Các cột được trộn thông qua phép nhân ma trận trong trường hữu hạn, khuếch tán thay đổi qua các byte.
- AddRoundKey: Khóa vòng (dẫn xuất từ khóa chính) được XOR với dữ liệu.
Sau 14 vòng, bản rõ bị xáo trộn hoàn toàn. Đảo ngược các thao tác này với khóa đúng khôi phục lại dữ liệu gốc. Không có khóa, bản mã không thể phân biệt với nhiễu ngẫu nhiên.
Tại sao 256 bit quan trọng
"256" trong AES-256 đề cập đến độ dài khóa: 256 bit. Điều này xác định số khóa có thể mà kẻ tấn công phải thử để bẻ khóa mã hóa bằng brute force.
| Kích thước khóa | Khóa có thể | Thời gian brute-force (1 nghìn tỷ lần đoán/giây) |
|---|---|---|
| 56-bit (DES) | 7.2 x 10^16 | ~20 giờ |
| 128-bit (AES-128) | 3.4 x 10^38 | 10^13 năm (10 nghìn tỷ năm) |
| 256-bit (AES-256) | 1.16 x 10^77 | 10^51 năm |
Để tham khảo: vũ trụ khoảng 1,38 x 10^10 năm tuổi. Brute-force AES-256 sẽ mất khoảng 10^41 lần tuổi vũ trụ, ngay cả ở tốc độ một nghìn tỷ đoán mỗi giây.
AES-128 đã không khả thi về mặt tính toán để brute-force. AES-256 cung cấp thêm biên độ trước những tiến bộ trong điện toán trong tương lai, bao gồm cả điện toán lượng tử. Thuật toán Grover (một cuộc tấn công điện toán lượng tử) giảm một nửa độ dài khóa hiệu quả -- giảm AES-256 xuống tương đương bảo mật AES-128, điều này vẫn không khả thi. AES-128 sẽ giảm xuống mức bảo mật hiệu dụng 64 bit, có thể dễ bị tấn công. Đây là lý do tại sao các ứng dụng quan trọng về bảo mật thích AES-256.
Các chế độ AES: Tại sao chúng quan trọng
AES tự nó chỉ mã hóa một khối 128-bit mỗi lần. Đối với dữ liệu thực (ảnh, tài liệu, video), bạn cần "chế độ hoạt động" xử lý dữ liệu lớn hơn 16 byte. Chế độ xác định cách các khối được liên kết với nhau và có ý nghĩa bảo mật đáng kể.
ECB (Electronic Codebook) -- Không sử dụng
Mỗi khối được mã hóa độc lập với cùng một khóa. Các khối bản rõ giống nhau tạo ra các khối bản mã giống nhau. Điều này rò rỉ các mẫu trong dữ liệu. Minh họa kinh điển: mã hóa ảnh bitmap với ECB bảo tồn cấu trúc của ảnh trong bản mã, làm cho nội dung có thể nhận ra được. ECB được đưa vào tiêu chuẩn nhưng không bao giờ nên được sử dụng cho dữ liệu có cấu trúc hoặc mẫu lặp lại (bao gồm hầu hết dữ liệu thực tế).
CBC (Cipher Block Chaining) -- chế độ cũ
Mỗi khối được XOR với khối bản mã trước đó trước khi mã hóa. Điều này loại bỏ rò rỉ mẫu của ECB. CBC là chế độ tiêu chuẩn trong nhiều thập kỷ nhưng đã được thay thế bởi GCM cho hầu hết các ứng dụng. CBC yêu cầu vectơ khởi tạo ngẫu nhiên (IV) và không cung cấp xác thực tích hợp (bạn không thể phát hiện nếu bản mã đã bị can thiệp).
GCM (Galois/Counter Mode) -- Tiêu chuẩn hiện tại
GCM kết hợp mã hóa chế độ bộ đếm với xác thực trường Galois. Nó cung cấp mã hóa xác thực: nó mã hóa dữ liệu VÀ tạo ra thẻ xác thực phát hiện bất kỳ sửa đổi nào đối với bản mã. Nếu một bit bị thay đổi, giải mã thất bại thay vì tạo ra bản rõ bị hỏng.
NIST chuẩn hóa GCM trong SP 800-38D (2007). Đây là chế độ được khuyến nghị cho các triển khai mới.
AES-256-GCM là AES với khóa 256-bit trong Galois/Counter Mode. Đây là những gì các ứng dụng quan trọng về bảo mật nên sử dụng và những gì Vaultaire sử dụng để mã hóa nội dung ảnh và tệp.
| Chế độ | Rò rỉ mẫu dữ liệu | Xác thực | Khuyến nghị hiện tại |
|---|---|---|---|
| ECB | Có (nghiêm trọng) | Không | Không sử dụng |
| CBC | Không | Không (cần MAC riêng) | Di sản; chấp nhận được với HMAC |
| GCM | Không | Có (tích hợp sẵn) | Khuyến nghị cho các triển khai mới |
AES-256 có nghĩa là gì đối với lưu trữ ảnh
Khi ứng dụng két ảnh tuyên bố "mã hóa AES-256," ba điều sau đây nên đúng:
Nội dung tệp được mã hóa bằng AES-256. Dữ liệu ảnh thô (pixel, siêu dữ liệu, thumbnail) được biến đổi thành bản mã sử dụng khóa 256-bit.
Mỗi tệp sử dụng vectơ khởi tạo (IV) duy nhất. Nếu hai ảnh giống nhau được mã hóa bằng cùng một khóa, bản mã nên khác nhau. Điều này yêu cầu IV duy nhất cho mỗi tệp. Không có nó, phân tích thống kê có thể tiết lộ các mẫu.
Chế độ cung cấp xác thực (GCM hoặc tương đương). Không có xác thực, kẻ tấn công có thể sửa đổi bản mã mà không bị phát hiện. Kết quả giải mã sẽ là dữ liệu bị hỏng chứ không phải lỗi.
Những gì "AES-256" trên trang tiếp thị không cho bạn biết
AES-256 là cần thiết nhưng chưa đủ. Một số yếu tố quan trọng xác định liệu mã hóa có thực sự bảo vệ dữ liệu của bạn hay không:
Vấn đề tạo khóa. Khóa 256 bit được tạo ra như thế nào? Nếu khóa được tạo từ mã PIN 4 chữ số bằng một KDF yếu, độ an toàn thực tế chỉ là 4 chữ số (10.000 tổ hợp), không phải 256 bit. Một phần triển khai tốt sẽ dùng PBKDF2 với số vòng lặp cao hoặc Argon2 với tham số thời gian và bộ nhớ phù hợp. Vaultaire dùng PBKDF2 với HMAC-SHA512 và 600.000 vòng lặp để tạo khóa két trên máy từ mẫu hình 5x5 bạn chọn và muối của thiết bị. PBKDF2 làm cho mỗi lần đoán đắt hơn; nó không nâng entropy của mẫu hình lên 256 bit.
Vấn đề lưu trữ khóa. Khóa nằm ở đâu? Nếu khóa được lưu dạng bản rõ trong vùng cách ly (sandbox) của ứng dụng, phần mềm độc hại có quyền truy cập tệp có thể đọc được nó. Secure Enclave của Apple hỗ trợ một số thao tác với khóa không thể xuất ra, nhưng không hỗ trợ khóa AES tùy ý do ứng dụng cung cấp. Thay vào đó, các thiết kế khóa đối xứng có thể dựa vào Keychain và Bảo vệ dữ liệu, nên tài liệu cần nêu đúng tên API và lớp bảo vệ, thay vì chỉ nói “được phần cứng hỗ trợ”.
Những gì được mã hóa quan trọng. Một số ứng dụng mã hóa nội dung tệp nhưng để lại tên tệp, thumbnail và siêu dữ liệu không được mã hóa. Một điều tra viên pháp lý có thể không thấy ảnh của bạn, nhưng họ có thể thấy "vacation-beach-2025.jpg" trong danh sách tệp. Mã hóa toàn diện bao gồm siêu dữ liệu riêng biệt.
Vấn đề vòng đời khóa. Dữ liệu khóa đã giải mã tồn tại trong bao lâu? Vaultaire bỏ trạng thái két đang hoạt động và khóa chính khi khóa két hoặc đóng ứng dụng và yêu cầu mở khóa lại. Các byte khóa đối xứng buộc phải nằm trong bộ nhớ ứng dụng khi két đang mở, và Swift cùng iOS không cho phép ứng dụng chứng minh rằng mọi bản sao tạm thời đều đã bị ghi đè.
AES-256 trong thực tế: Ai sử dụng nó
| Tổ chức | Trường hợp sử dụng | Chế độ |
|---|---|---|
| Chính phủ Hoa Kỳ (NSA) | Thông tin mật | GCM (hoặc CTR với xác thực riêng) |
| Apple (iCloud ADP) | Mã hóa đầu cuối iCloud | GCM |
| Signal | Mã hóa tin nhắn | CBC (với HMAC cho xác thực) |
| Ngân hàng | Mã hóa giao dịch tài chính | GCM |
| 1Password | Két mật khẩu | GCM |
| Vaultaire | Két ảnh và tệp | GCM |
| VeraCrypt | Mã hóa ổ đĩa | XTS (tối ưu cho các khối đĩa) |
Những hiểu lầm phổ biến
"Mã hóa cấp quân sự" không có nghĩa cụ thể nào. Các trang tiếp thị sử dụng cụm từ này vì nghe có vẻ ấn tượng. AES-256 được quân đội sử dụng. AES-128 cũng vậy. Cụm từ này không cho bạn biết chế độ, dẫn xuất khóa, lưu trữ khóa, hoặc dữ liệu nào thực sự được mã hóa.
"Mã hóa 256-bit" có thể không có nghĩa là AES-256. Các mật mã khác cũng sử dụng khóa 256-bit (ChaCha20, Twofish, Serpent). Kiểm tra thuật toán nào được chỉ định. AES-256-GCM là tiêu chuẩn hiện tại.
AES-256 không bảo vệ chống lại mật khẩu yếu. Nếu mật khẩu của bạn là "1234" và dẫn xuất khóa yếu, mã hóa hiệu quả là bảo mật 4 chữ số bất kể sức mạnh của mật mã. Chuỗi đứt ở mắt xích yếu nhất.
AES-256 không bảo vệ dữ liệu đang sử dụng. Khi bạn xem ảnh, nó phải được giải mã trong bộ nhớ. Lúc đó, nó tồn tại dưới dạng bản rõ trong RAM. Các triển khai phù hợp thu nhỏ cửa sổ này và xóa dữ liệu đã giải mã kịp thời.
Câu hỏi thường gặp
AES-256 là viết tắt của gì?
Advanced Encryption Standard (Tiêu chuẩn mã hóa nâng cao), chạy với khóa 256 bit. AES là thuật toán mã hóa mà NIST chuẩn hóa thành FIPS 197 vào năm 2001, sau khi chọn thiết kế Rijndael. Số 256 là độ dài khóa tính bằng bit. Hậu tố như AES-256-GCM cho biết thêm chế độ hoạt động, một lựa chọn riêng, tách biệt với thuật toán và kích thước khóa.
AES-256 có thể bị bẻ khóa không?
Không có cuộc tấn công nào được biết đến bẻ khóa AES-256 bằng cách giảm không gian khóa đầy đủ. Cuộc tấn công tốt nhất được biết đến (tấn công biclique của Bogdanov, Khovratovich, và Rechberger, 2011) giảm AES-256 từ 2^256 phép toán xuống 2^254.4 -- một cải tiến lý thuyết không có ý nghĩa về mặt tính toán trong thực tế. AES-256 vẫn chưa bị bẻ khóa.
AES-256 có kháng lượng tử không?
Về cơ bản là có. Thuật toán lượng tử Grover giảm một nửa độ dài khóa hiệu dụng: trước tấn công lượng tử, AES-256 tương đương bảo mật 128 bit. AES-128 sẽ giảm xuống mức bảo mật hiệu dụng 64 bit, có thể dễ bị tấn công. Một phép tìm kiếm Grover vẫn cần khoảng 2^128 phép tính, điều này không khả thi trên thực tế.
Sự khác biệt giữa AES-128 và AES-256 là gì?
AES-128 sử dụng khóa 128-bit (10 vòng). AES-256 sử dụng khóa 256-bit (14 vòng). Cả hai được coi là an toàn trước các cuộc tấn công hiện tại. AES-256 cung cấp biên độ lớn hơn trước những tiến bộ trong tương lai, đặc biệt là điện toán lượng tử. AES-256 chậm hơn khoảng 40% so với AES-128 do các vòng bổ sung, nhưng tăng tốc phần cứng làm cho điều này không đáng kể trên các thiết bị hiện đại.
Mã hóa AES-256 có làm chậm điện thoại của tôi không?
Không nhận thấy được khi dùng bình thường. Bộ xử lý hiện đại của Apple tăng tốc AES bằng phần cứng qua các thư viện mật mã của hệ thống. Điều đó không có nghĩa là các thao tác AES của ứng dụng chạy bên trong Secure Enclave. Thời gian vẫn phụ thuộc vào kích thước tệp, thiết bị, bộ nhớ và cách triển khai, nên các tuyên bố về hiệu năng cần dựa trên số đo thay vì một con số mili giây áp dụng cho mọi trường hợp.
Làm thế nào để biết ứng dụng có thực sự sử dụng AES-256 không?
Hãy đọc tài liệu bảo mật của ứng dụng, không chỉ trang tiếp thị. Hãy tìm thuật toán và chế độ cụ thể, hệ thống phân cấp khóa, tham số tạo khóa, cách dùng Keychain hoặc Secure Enclave chính xác, cách xử lý nonce, đường khôi phục và việc siêu dữ liệu có được mã hóa hay không. Mã nguồn mở và kiểm toán độc lập giúp xác minh những tuyên bố đó dễ hơn.
Kết luận
AES-256 là thuật toán mã hóa đối xứng được dùng rộng rãi, được NIST chuẩn hóa và chưa có cuộc tấn công thực tế nào được biết đến; máy tính lượng tử chạy thuật toán Grover vẫn phải thực hiện khoảng 2^128 phép tính. Khi đánh giá các ứng dụng tuyên bố mã hóa AES-256, hãy nhìn xa hơn thuật toán: kiểm tra chế độ (GCM), cách tạo khóa (PBKDF2/Argon2 với số vòng lặp cao), nơi lưu khóa (có phần cứng hỗ trợ không) và dữ liệu nào thật sự được mã hóa (nội dung và siêu dữ liệu).
Vaultaire dùng AES-256-GCM cho nội dung tệp, tiêu đề, siêu dữ liệu, chỉ mục và ảnh thu nhỏ. PBKDF2 với HMAC-SHA512 tạo khóa két trên máy từ mẫu hình và muối chung của thiết bị trong Keychain; khóa đó mở khóa chính ngẫu nhiên dùng để mã hóa tệp. Các thao tác đối xứng chạy trong tiến trình ứng dụng qua CryptoKit, còn Keychain và Bảo vệ dữ liệu của iOS bảo vệ trạng thái khôi phục khi thiết bị bị khóa. Toàn bộ hệ thống phân cấp được mô tả trong mô hình bảo mật.