I. Tổng quan về mật mã đối xứng (Symmetric Ciphers)
1. Khái niệm cần biết
Mật mã đối xứng là một phương pháp mã hóa dữ liệu truyền thống, trong đó cả quá trình mã hóa (encryption) và giải mã (decryption) đều sử dụng chung một khóa bí mật (secret key). Sự tương đồng trong vai trò của hai bên gửi và nhận thông tin khiến loại mật mã này được gọi là “đối xứng”. Cụ thể, bên gửi sẽ đưa văn bản rõ (plaintext hoặc raw data) và khóa vào hàm mã hóa, kết quả thu được là bản mã (ciphertext) được gửi đi. Khi bên nhận nhận được bản mã, họ chỉ cần dùng cùng một khóa để giải mã và khôi phục thông điệp ban đầu.
2. Ưu và nhược điểm của mật mã đối xứng
Mật mã đối xứng được sử dụng rộng rãi vì nhiều lý do, trong đó có:
- Tốc độ thực thi cao: Quá trình mã hóa diễn ra nhanh chóng và yêu cầu khối lượng tính toán ít hơn so với một số phương pháp mã hóa khác, như mật mã bất đối xứng.
- Sử dụng khóa ngắn: Khóa bí mật có chiều dài ngắn nhưng vẫn có khả năng mã hóa một lượng thông tin lớn.
- Hiệu suất mã hóa tốt: Đảm bảo bảo mật và tốc độ xử lý thông tin.
Tuy nhiên, cũng cần lưu ý ba nhược điểm của loại mật mã này:
- Rủi ro trong quản lý khóa bí mật: Bên gửi và bên nhận cần phải chia sẻ cùng một khóa bí mật trước khi trao đổi thông tin, điều này gây ra nguy cơ rò rỉ khóa.
- Bảo mật khóa bí mật: Không có đảm bảo mạnh mẽ về tính an toàn của khóa bí mật giữa hai bên.
- Vấn đề quản lý khóa cho nhiều đối tượng: Mỗi cặp đối tượng gửi - nhận cần có một khóa riêng, dẫn đến sự phức tạp trong quản lý.
Mật mã đối xứng phù hợp nhất cho các ứng dụng có yêu cầu trao đổi thông tin liên tục giữa hai bên.
3. Các loại mật mã đối xứng
Mật mã đối xứng được chia thành hai loại chính dựa trên phương thức mã hóa:
3.1. Mật mã dòng (Stream ciphers)
Mật mã dòng mã hóa dữ liệu theo từng bit hoặc byte, rất thích hợp cho việc truyền tải dữ liệu theo thời gian thực. Một số thuật toán mật mã dòng phổ biến bao gồm RC4 và SEAL.
3.2. Mật mã khối (Block ciphers)
Mật mã khối chia thông điệp thành những khối dữ liệu cố định, mỗi khối sẽ được mã hóa riêng biệt. Dù cách tiếp cận này giúp nâng cao tính bảo mật, nhưng nó cũng làm giảm tốc độ xử lý. Một vài thuật toán khối nổi bật là DES và AES.
3.3. Bảng so sánh giữa mật mã dòng và mật mã khối
Mật mã dòng | Mật mã khối |
---|---|
Sử dụng dòng liên tục bit | Chia dữ liệu thành các khối và xử lý từng khối riêng biệt |
Tốc độ cao hơn, không cần chờ | Tốc độ chậm hơn do xử lý từng khối |
Dễ bị ảnh hưởng bởi lỗi đồng bộ | Ít bị ảnh hưởng bởi lỗi đồng bộ |
II. Giới thiệu thuật toán AES
1. Tổng quan về AES
AES (Advanced Encryption Standard) là một trong những thuật toán mật mã đối xứng phổ biến nhất hiện có. AES được xây dựng dựa trên thuật toán Rijindael, được phát triển bởi hai nhà mật mã học J. Daemen và V. Rijmen. Ngày 2 tháng 10 năm 2000, NIST (Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ) đã chọn thuật toán Rijindael làm cơ sở cho AES vì nhiều lý do, như khả năng chống chịu với các cuộc tấn công đã biết, hiệu suất tốt trên phần cứng và phần mềm, cùng với tính linh hoạt trong thiết lập khóa.
Quy trình mã hóa và giải mã tổng quát của AES có thể mô tả bằng công thức sau:
- Nhập dữ liệu thô
P
và khóaK
, hàm mã hóaE()
cho ra bản mãC
:
C = E(P, K)
- Để giải mã, bên nhận dùng hàm giải mã
D()
để khôi phục văn bản rõ:
P = D(C, K)
2. Cấu tạo cơ bản của AES
AES là một thuật toán mã khối, với mỗi khối có kích thước 128 bit, tương đương với 16 byte. AES có ba biến thể khác nhau: AES-128, AES-192 và AES-256, phân biệt nhau qua độ dài khóa bí mật và số vòng mã hóa mà mỗi khối trải qua. Bảng dưới đây mô tả thông tin cụ thể:
AES | Kích thước mỗi khối | Độ dài khóa | Số vòng mã hóa |
---|---|---|---|
AES-128 | 128 bit | 128 bit | 10 |
AES-192 | 128 bit | 192 bit | 12 |
AES-256 | 128 bit | 256 bit | 14 |
Khi mã hóa với AES-128, hàm E()
sẽ được thực thi 10 lần, tương tự khi giải mã với hàm D()
.
Ví dụ về mã hóa với AES-128
Ví dụ với dữ liệu rõ là “Viblo” và khóa bí mật “0123456789abcdef” sử dụng chế độ mã hóa CBC, sau khi mã hóa, bản mã thu được ở định dạng Base64 là qM4mRZBkIrQzbwE6JYz3HA==
.
Tài liệu tham khảo
- Wikipedia - Advanced Encryption Standard
- GeeksforGeeks - AES
- NIST - FIPS 197
- GeeksforGeeks - Difference Between Block Cipher and Stream Cipher
source: viblo