- AES dùng để làm gì?
- AES là mã hóa đối xứng
- Các bước chính trong một vòng AES (AES Round)
- Demo: AES Concept Visualization (UIkit + JavaScript)
- Demo: AES Concept (không phải AES thật!)
- Giải thích 4 bước AES trong demo
- 1. SubBytes – Thay thế bằng S-Box
- 2. ShiftRows – Xoay hàng
- 3. MixColumns – Trộn cột
- 4. AddRoundKey – XOR với key
- Code mô phỏng AES Concept
- Demo được chạy như thế nào?
- Kết luận
Bài này KHÔNG đi vào quá sâu toán học, mà tập trung làm rõ ý tưởng cốt lõi của AES và cung cấp một demo mô phỏng 4 bước chính của AES: SubBytes, ShiftRows, MixColumns, AddRoundKey – để bạn tự tay xem dữ liệu được biến đổi ra sao.
AES dùng để làm gì?
- Mã hóa dữ liệu khi truyền (HTTPS, VPN, SSH…)
- Mã hóa dữ liệu lưu trữ (BitLocker, FileVault, Android/iOS encryption)
- Bảo vệ token, session, cookie
- WiFi WPA2/WPA3
AES mạnh, nhanh, ổn định và được hỗ trợ phần cứng (AES-NI) trên hầu hết CPU.
AES là mã hóa đối xứng
Chỉ có 1 key duy nhất dùng để mã hóa và giải mã.
plaintext + key → ciphertext
ciphertext + key → plaintext
Mục tiêu bài này không phải cài đặt AES thật (quá dài), mà mô phỏng cách AES “biến đổi dữ liệu” qua từng bước.
Các bước chính trong một vòng AES (AES Round)
Với AES-128, tổng cộng có 10 vòng. Mỗi vòng dùng 4 thao tác chính:
- SubBytes – thay mỗi byte bằng giá trị từ S-Box.
- ShiftRows – xoay hàng trong ma trận 4×4.
- MixColumns – kết hợp các cột bằng phép nhân Galois Field.
- AddRoundKey – XOR với key của vòng.
Demo dưới đây mô phỏng chính xác 4 bước này với dữ liệu bạn nhập vào (16 byte / 16 ký tự).
Demo: AES Concept Visualization (UIkit + JavaScript)
Nhập 16 ký tự để mô phỏng 1 block AES:
Demo: AES Concept (không phải AES thật!)
Kết quả từng bước
Giải thích 4 bước AES trong demo
1. SubBytes – Thay thế bằng S-Box
Mỗi byte được thay bằng giá trị tương ứng trong bảng S-Box (giống lookup table). Đây là bước tạo tính phi tuyến mạnh.
2. ShiftRows – Xoay hàng
Bảng 4×4 được xoay:
- Hàng 1 không đổi
- Hàng 2 xoay trái 1 ô
- Hàng 3 xoay trái 2 ô
- Hàng 4 xoay trái 3 ô
3. MixColumns – Trộn cột
Mỗi cột được kết hợp bằng phép toán Galois Field để “lan truyền” thay đổi ra toàn bộ dữ liệu.
4. AddRoundKey – XOR với key
Dữ liệu sau khi biến đổi được XOR trực tiếp với key của vòng hiện tại.
→ Đây là bước quan trọng nhất để mã hóa thật sự.
Code mô phỏng AES Concept
(Rút gọn – chỉ mô phỏng concept, không phải AES thực)
const SBOX = [
// 256 giá trị S-Box chuẩn (rút gọn bản đầy đủ trong demo thật bên dưới)
0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
// ...
];
function subBytes(state) {
return state.map(row => row.map(byte => SBOX[byte]));
}
function shiftRows(state) {
return state.map((row, r) => row.slice(r).concat(row.slice(0, r)));
}
function gmultiply(a, b) {
let p = 0;
for (let i = 0; i < 8; i++) {
if (b & 1) p ^= a;
let hi = a & 0x80;
a = (a << 1) & 0xFF; if (hi) a ^= 0x1b; b >>= 1;
}
return p;
}
function mixColumns(state) {
const M = [
[2,3,1,1],
[1,2,3,1],
[1,1,2,3],
[3,1,1,2]
];
let out = [...Array(4)].map(()=>Array(4).fill(0));
for (let c = 0; c < 4; c++){
for (let r = 0; r < 4; r++){ out[r][c] = gmultiply(M[r][0], state[0][c]) ^ gmultiply(M[r][1], state[1][c]) ^ gmultiply(M[r][2], state[2][c]) ^ gmultiply(M[r][3], state[3][c]); } } return out; } function addRoundKey(state, key) { return state.map((row,r)=>row.map((byte,c)=>byte ^ key[r][c]));
}
Demo được chạy như thế nào?
Khi nhấn “Chạy mô phỏng”:
- Chuyển text & key thành ma trận 4×4 byte
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
Kết quả từng bước được hiển thị dạng bảng dễ nhìn.
Kết luận
AES là một trong những thuật toán quan trọng nhất trong bảo mật hiện đại. Bài này giúp bạn hiểu 4 bước chính mà AES sử dụng để biến đổi dữ liệu – một vòng trong quá trình mã hóa.
Bạn đã nắm:
- AES là mã hóa đối xứng
- Dữ liệu được xử lý theo dạng block 4×4 byte
- 4 bước quan trọng tạo thành một AES Round
- Có demo trực quan để “nhìn thấy” AES hoạt động
Sau series này, bạn có thể tiếp tục tìm hiểu sâu hơn như:
- AES-ECB, AES-CBC, AES-GCM
- Key expansion
- Xác thực: HMAC, GCM Tag
Bình luận