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... 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
Trang 1Mã 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
Trang 2Mã hóa theo luồng
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)
Trang 31 Được Vernam sử dụng từ năm 1917
3 Mã hóa và giải mã hoàn toàn như nhau
Trang 4• Đâ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: z z …z = 00101101
Trang 5Tạ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
p n , …, p 1 , p 0 z i
Khóa ban đầu K
Trang 6Cá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).
Trang 7Sơ đồ mã hóa theo luồng
Trang 8Tạ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:
Trang 9Máy tạo luồng khóa tuyến tính –
Trang 10Máy tạo luồng khóa tuyến tính –
Trang 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
Trang 13Luyện tập LFSR - m
• Vẽ máy LFSR tương ứng, tính luồng khóa thu
được và tính chu kỳ của nó:
1 LFSR-3 = (3, 1 + x + x3), [z0, z1, z2] = [1,0,0]
2 LFSR-4 = (4, 1 + x + x4), [z0, z1, z2, z3] = [1,1,0,1],
3 LFSR-5 = (5, 1 + x + x2 + x4 + x5),
[z0, z1, z2, z3 , z4] = [1,0,0,1,0]
Trang 14Tạo luồng khóa không tuyến tính
(Clock controlled shift registers)
• Máy chạy và dừng luân phiên (Anternating
stop-and-go generator)- Kết hợp 3 máy LFSR
Trang 15Máy chạy và dừng luân phiên
Qui trình chạy của máy như sau:
1 Máy R1 chạy
2 Nếu Kết quả của R1 là 1 thì:
– R2 chạy; R3 không chạy mà lặp lại bit kết quả
trước đó (Vòng đầu giá trị đó của R3 là 0)
3 Nếu Kết quả của R1 là 0 thì:
– R3 chạy; R2 không chạy mà lặp lại bit kết quả
trước đó (Vòng đầu giá trị đó của R2 là 0)
4 Đầu ra của R2 và R3 được XOR với nhau
và kết quả chính là 1 bit của luồng khóa
Trang 16Máy chạy và dừng luân phiên (2)
• Giả sử đầu ra của các máy R1, R2, R3 tương
Trang 17Ví dụ máy chạy và dừng luân phiên
Trang 18Ví dụ máy chạy và dừng luân phiên (2)
Trang 19Đánh giá độ an toàn
• Số box của máy R được gọi là độ dài của nó
• R1, R2, R3 cần được chọn sao cho độ dài của luồng
khóa (L) được tạo ra là lớn nhất (phụ thuộc vào độ
dài máy L1, L2, L3 và giá trị các bit khởi tạo).
• Trường hợp L1, L2, L3 đôi một nguyên tố cùng nhau
thì L sẽ lớn nhất và: L = L1.L2.L3
• Tuy nhiên thường người ta thường chọn Li xấp xỉ
bằng nhau (L1 ≈ L2 ≈ L3 ≈ l)
• Khi l ≈ 128 máy trên có thể coi là an toàn (Phương
pháp “chia để trị” đối với R1 cần thực hiện là 2128
bước để có thể tìm ra khóa)
Trang 20Thám mã LFSR
• Giả sử kẻ lạ biết vài plaintext với ciphertext
(Known plaintext attack) và biết số m:
– Biết plaintext (độ dài 2m): p0, p1, …, p2m-1.
– Biết ciphertext (độ dài 2m): c0, c1, …, c2m-1.
– Tính được luồng khóa:
zi = pi + ci mod 2; i = 0, 1,…, 2m-1 (?)
• Mục đích: Tính các hệ số Ci với:
zi+m = ( Σ Cj zi+j ) mod 2;
j = 0 → m-1, Cj ∈ {0, 1}
Trang 21• Ta có hệ PT tuyến tính với m ẩn C0,…,Cm-1 Ta có thể giải
được dễ dàng và tìm được Ci theo zj
• Vậy với LFSR bậc m bằng cách xem xét đầu vào và ra của2m cặp bit ta có thể tìm được Ci
• Kết luận: LFSRs rất không an toàn Tuy nhiên tổ hợp của
chúng (VD: máy chạy và dừng luân phiên lại an toàn hơn)
• Có thể dùng TT khối để tạo ra các chuỗi bit cho TT luồng
Trang 22• A5 là TT luồng sử dụng để mã hóa trong mạng điện
thoại di động (GSM), được bảo vệ như là bí mật kinh
doanh
• Có vài phiên bản (A5, A5/1, A5/2)
• Tất cả đều bị bẻ khóa (A5/2 : 8/1999, A5/1 : 4/2000)
• A5/1 gồm có 3 LFSR's với 19, 22 và 23 bit trong đó
sử dụng các đa thức phản hồi thưa
• Phiên bản A5/2 còn yếu hơn với việc sử dụng LFSR
thứ 4 để tắt mở - rất dễ bị tấn công
• Sử dụng SOBER (1998) để thay thế A5 cho GSM
• Một số TT khác: RC4, BBS
Trang 23Viết thủ tục tạo máy trên và xuất ra chuỗi dài 50 bits
2 Sử dụng kết quả trên để mã hóa chuỗi thông điệp sau: “A bus”
3 Viết chương trình cho máy tạo chuỗi bit sau:
LFSR-m = (m, C0 + C1x + + Cm-1x m-1 + x m ),
Với giá trị đầu vào: [z0, z1, …, zm-1] Xuất ra n bits.
4 Viết chương trình tạo máy chạy và dừng luân phiên
5 Viết chương trình sử dụng máy chạy và dừng luân phiên để mã
hóa một chuỗi bit có độ dài không quá k.