Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

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

1
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 Mã hóa theo luồng
Block ciphers 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
2
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
3
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

4
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

Khóa ban đầu K

Tạo luồng khóa Tạo luồng khóa


zi Dũng
zi pn, …, p1, p0
pn, …, p1, p0 cn, …, c1, c0
Nam Mai
Khóa ban đầu K
5
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).
6
Sơ đồ mã hóa theo luồng

pi Mã hóa ci
pi ⊕ zi = ci

zi
f()
Phản hồi mã
k

Sơ đồ mã hóa theo luồng có (hoặc không có) sự phản hồi


của mã
7
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:

8
Máy tạo luồng khóa tuyến tính –
LFSR-3
K2 K1 K0
0 0 1
K2 K1 K0 1 0 0

z2 z1 z0 0 1 0
z0, z1, z2, ...
1 0 1
Giá trị 3, 1 + x + x3 1 1 0
ban đầu [z0, z1, z2] = [1,0,0] 1 1 1
0 1 1
Với z0, z1, z2 là các giá trị ban đầu ta có: 0 0 1
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, …
9
Máy tạo luồng khóa tuyến tính –
LFSR-m
C0 + C1x + ... + Cm-1xm-1 + xm

Cm-1 C1 C0
Km-1 K1 K0
zm-1 z1 z0
Output
input

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} 10


Luyện tập LFSR- 4

• Vẽ máy và tính luồng khóa nhận được


với m=4 : Tải bản FULL (23 trang): https://bit.ly/3G2fw7L
Dự phòng: fb.com/TaiHo123doc.net

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

11
Đá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
12

You might also like