1
BẢO MẬT THÔNG TIN
BÀI 3:
MÃ HÓA ĐỐI XỨNG
HIỆN ĐẠI
Nguyễn Hữu Thể
2
Nội dung
1. TinyA5/1
2. A5/1
3. TinyRC4
4. RC4
Mã hóa cổ điển
bản tin ngôn ngữ,
một đơn vị mã hóa là chữ cái,
phương thức thay thế hay phương thức hoán vị.
Thông tin ngày ngày nay
HTML, hình ảnh, video, âm thanh…
=> Biểu diễn trên máy vi tính dưới dạng một dãy các số nhị
phân.
Trong máy tính: chữ cái được biểu diễn bằng mã ASCII.
3
Ví dụ:
Bản tin: attack
Mã ASCII: 97 116 116 97 99 107
Biểu diễn nhị phân: 01100001 01110100 01110100 01100001
01100011 01101011
4
Mã hóa đối xứng hiện đại
Ví dụ mã hóa đối xứng hiện đại
7
Mã dòng (Stream Cipher)
Mã dòng có các đặc tính sau:
8
Mã dòng (Stream Cipher)
Giải mã => thực hiện ngược lại
Bản mã C được XOR với dãy số ngẫu nhiên S để cho ra
lại bản rõ ban đầu: Ví dụ này không phải là mã dòng vì s0, s1, s2 lặp lại khóa K.
Về phương diện khóa, ví dụ này giống mã Vigenere.
9
Mã dòng (Stream Cipher)
Với mã dòng, các số s
i
được sinh ra phải đảm bảo một độ
ngẫu nhiên nào đó (chu kỳ tuần hoàn dài)
Khóa có chiều dài ngắn: Vigenere => không bảo đảm an toàn
Khóa có chiều dài bằng chiều dài bản tin: One-Time Pad => không thực tế.
Mã dòng cân bằng giữa hai điểm này => khóa ngắn nhưng dãy
số sinh ra bảo đảm một độ ngẫu nhiên cần thiết như khóa của
One-time Pad, dùng rằng không hoàn toàn thực sự ngẫu nhiên.
1
, …, z
8
).
Khóa K ban đầu có chiều dài 23 bít và lần lượt được phân bố
vào các thanh ghi: K -> XYZ
12
TinyA5/1
Các thanh ghi X, Y, Z được biến đổi theo 3 quy tắc:
13
TinyA5/1
Hàm maj(x, y, z) nếu trong 3 bít x, y, z có từ hai bít 0 trở
lên thì hàm trả về giá trị 0, nếu không hàm trả về giá trị 1.
Tại bước sinh số thứ i, các phép tính sau được thực hiện:
m = maj(x
1
, y
3
, z
3
)
If x
1
= m then thực hiện quay X
If y
3
= m then thực hiện quay Y
If z
3
= m then thực hiện quay Z
18
TinyRC4
Là mô hình thu nhỏ của RC4
Đơn vị mã hóa của TinyRC4 là 3 bít.
TinyRC4 dùng 2 mảng S và T mỗi mảng gồm 8 số nguyên 3 bít
(từ 0 đến 7).
Khóa là một dãy gồm N số nguyên 3 bít với N có thể lấy giá trị
từ 1 đến 8. Bộ sinh số mỗi lần sinh ra 3 bít để sử dụng trong
phép XOR.
Quá trình sinh số của TinyRC4 gồm hai giai đoạn:
19
TinyRC4
a) Giai đoạn khởi tạo
Dãy S gồm các số nguyên 3 bít từ 0 đến 7 được sắp thứ tự tăng
dần. Sau đó dựa trên các phần tử của khóa K, các phần tử của S
được hoán vị lẫn nhau đến một mức độ ngẫu nhiên nào đó.
20
Ví dụ:
Mã hóa bản rõ:
P = 001000110
(từ ‟bag”)
Khóa K gồm 3 số
2, 1, 3 (N=3)
int j = 0;
for (int i = 0; i < 8; i++) {
j = (j + S[i] + T[i]) % 8;
swap(S, i, j); // Hoán vị S[i] và S[j]
printArrayInt(S, 8);
}
int i = 0;
j = 0;
int k[] = new int[N];
int loop = 0;
24
System.out.println("Giai đoạn sinh số: ");
while (loop < N) {
i = (i + 1) % 8;
j = (j + S[i]) % 8;
swap(S, i, j);
int t = (S[i] + S[j]) % 8;
k[loop] = S[t];
printArrayInt(S, 8);
loop++;
}
return k;
// Chú ý: Phương thức (hàm) này có thể tách ra thành nhiều
phương thức nhỏ.
}
25