BÀI GIẢNG HÀNG HÓA VẬN TẢI 3TC-24.1.2021.FULL.docx
Bài giảng mã hóa theo luồng
1. 1
Mã hóa theo luồng
– Khái niệm mã hóa theo luồng
– Tạo luồng khóa tuyến tính
– Tạo luồng khóa không tuyến tính
2. 2
Mã hóa theo luồng
(Stream Ciphers)
Khoa học về mật mã
Khóa bí mật
Private-Key
Mã hóa theo khối
Block ciphers
Mã hóa theo luồng
Stream ciphers
Mã hóa theo khối :
C = c1, c2,…, cn = ek(p1), ek(p2), …, ek(pn)
Khóa không thay đổi cho tất cả các khối (k)
Mã hóa theo luồng :
C = c0, c1, …, cn-1 = ez0(p0), ez1 (p1), …, ezn-1 (pn-1)
Bằng luồng khóa (keystream) = z0, z1, …, zn-1
3. 3
Hàm mã hóa và giải mã
zi zi
pi ci pi
Hàm mã và giải mã phổ biến nhất: Cộng theo modulo 2
Giả sử: pi, ci, zi ∈ {0,1} ; i = 0 → n-1
ci = ezi (pi) = pi + zi mod 2 → Mã hóa
pi = ezi (ci) = ci + zi mod 2 → Giải mã
Nhận xét:
1. Được Vernam sử dụng từ năm 1917
2. Cộng theo modulo 2 ≡ phép XOR với 2 đầu vào.
3. Mã hóa và giải mã hoàn toàn như nhau
4. 4
Phép cộng modulo 2
a b c = a + b mod 2
0 0 0 + 0 = 0 mod 2
0 1 0 + 1 = 1 mod 2
1 0 1 + 0 = 1 mod 2
1 1 1 + 1 = 0 mod 2
• Đây cũng chính là kết quả của a XOR b
• Phép mã hóa và giải mã như nhau vì:
Mã: pi + zi → ci Giải mã: ci + zi = pi + zi + zi = pi
Ví dụ: Mã hóa chữ A: AASCII = 6510 = 0100 00012
Với luồng khóa: z0z1…z7 = 001011012
5. 5
Tạo luồng khóa
• Cần phải tạo luồng khóa zi sao cho các bit của chúng
không phụ thuộc lẫn nhau. Tức là các zi phải được tạo
ra một cách hoàn toàn ngẫu nhiên
• Luồng khóa sẽ được tạo ra từ 1 khóa ngắn
pn, …, p1, p0
zi
Tạo luồng khóa Tạo luồng khóa
Khóa ban đầu K
zi pn, …, p1, p0
cn, …, c1, c0
Dũng
Nam Mai
Khóa ban đầu K
6. 6
Các phương pháp tạo luồng khóa
1. Tạo luồng khóa đồng thời
(synchronous stream cipher)
zi = f(k) → Hàm tạo số ngẫu nhiên
(pseudo-random generator - PRG).
2. Tạo luồng khóa không đồng thời
(asynchronous stream cipher)
zi = f(k, ci-1, ci-2, …,ci-n) → Tạo số ngẫu
nhiên với sự phản hồi mã (feedback of
cipher).
7. 7
Sơ đồ mã hóa theo luồng
Mã hóa
pi ⊕ zi = ci
f ( )
Sơ đồ mã hóa theo luồng có (hoặc không có) sự phản hồi
của mã
pi
ci
zi
Phản hồi mã
k
8. 8
Tạo luồng khóa đồng thời
(synchronous stream cipher)
• Dãy z0,z1, … được tạo ra một cách ngẫu
nhiên và chỉ phụ thuộc vào khóa k
• Đại diện: Máy tạo luồng khóa tuyến tính
(linear feedback shift registers - LFSR)
– Với m giá trị nhị phân ban đầu máy sẽ cho ta dãy
các số nhị phân ngẫu nhiên dựa trên phép toán
XOR. Quá trình tính toán có sử dụng các kết quả
đã tính trong các bước trước
– Ví dụ: m=3, Ta có 3 hộp K0, K1, K2 theo hình vẽ
sau:
9. 9
Máy tạo luồng khóa tuyến tính –
LFSR-3
K2 K1 K0
0 0 1
1 0 0
0 1 0
1 0 1
1 1 0
1 1 1
0 1 1
0 0 1
z2 z0
z1
Giá trị
ban đầu
K2 K0
K1
z0, z1, z2, ...
3, 1 + x + x3
[z0, z1, z2] = [1,0,0]
Với z0, z1, z2 là các giá trị ban đầu ta có:
z3 = z1+ z0 mod 2
z4 = z2+ z1 mod 2
……
Tổng quát:
zi+3 = zi+1+ zi mod 2 với i = 0, 1, 2, …
10. 10
Máy tạo luồng khóa tuyến tính –
LFSR-m
zm-1 z0
z1
input
Km-1 K0
K1
C0
Cm-1 C1
C0 + C1x + ... + Cm-1xm-1 + xm
Output
Với z0, z1,…, zm-1 là các giá trị ban đầu
C0, C1,…, Cm-1 là các hệ số phản hồi ∈ {0,1}
Ci = 0 → Mạch mở; Ci = 1 → Mạch đóng
zi+m = Σj Cj.zi+j mod 2 với j = 0, 1, …m-1
Ví dụ: { C0=C1=1, C2=0; z0 =1, z1 = z2 =0; m=3}
11. 11
Luyện tập LFSR- 4
• Vẽ máy và tính luồng khóa nhận được
với m=4 :
1. (C0= C2 = 1, C1= C3 = 0); z0= z1= 0, z2= z3= 1
2. (C0= C1 = C2 = 1, C3 = 0); z0= z1= z2= 0, z3= 1
3. (C0 = C1 = C2 = C3 = 1); z0= z1= z2= z3= 0
Tải bản FULL (23 trang): https://bit.ly/3G2fw7L
Dự phòng: fb.com/TaiHo123doc.net
12. 12
Đánh giá LFSR
• Định lý: Độ dài cực đại của luồng khóa được tạo
bởi LFSR-m bằng 2m-1
• Nhận xét: Luôn có 1 số bộ nào đó (C0,…, Cm-1) cho ta độ
dài maximum của LFSR-m.
Ví dụ: Với m=4: (C0 = C1 = 1, C2 = C3 = 0) cho độ dài
2m-1 = 15. Nhưng (C0 = C1 = C2 = C3 = 1) có độ dài 5
• LFSR có thể được biểu diễn dưới dạng đa thức:
P(x) = C0 + C1x + ... + Cm-1xm-1 + xm
VD: (C0 = C1 = 1, C2 = C3 = 0) Ù P(x) = 1 + x + x4
(C0 = C1 = C2 = C3 = 1) Ù P(x) = 1 + x + x2 + x3 + x4
3136950