Bài Giảng Mã Hóa Theo Luồng

23 1.3K 3
Bài Giảng Mã Hóa Theo Luồng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 Mã hóa theo luồng (Stream Ciphers) Khoa học 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 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 Hàm mã hóa giải mã pi zi ci zi pi Hàm mã giải mã phổ biến nhất: Cộng theo modulo Giả sử: pi, ci, zi ∈ {0,1} ; i = → n-1 ci = ezi (pi) = pi + zi mod → Mã hóa pi = ezi (ci) = ci + zi mod → Giải mã Nhận xét: Được Vernam sử dụng từ năm 1917 Cộng theo modulo ≡ phép XOR với đầu vào Mã hóa giải mã hoàn toàn Phép cộng modulo a 0 1 b c = a + b mod 0 + = mod + = mod + = mod 1 + = mod • Đây kết a XOR b • Phép mã hóa giải mã 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 Tạo luồng khóa • • Cần phải tạo luồng khóa zi cho bit chúng không phụ thuộc lẫn Tức zi phải tạo cách hoàn toàn ngẫu nhiên Luồng khóa tạo từ khóa ngắn Khóa ban đầu K Tạo luồng khóa pn, …, p1, p0 Nam zi Tạo luồng khóa Dũng cn, …, c1, c0 Khóa ban đầu K zi pn, …, p1, p0 Mai Các phương pháp tạo luồng khóa 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) 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 phản hồi mã (feedback of cipher) Sơ đồ mã hóa theo luồng pi Mã hóa pi ⊕ zi = ci ci zi f() Phản hồi mã k Sơ đồ mã hóa theo luồng có (hoặc không có) phản hồi mã Tạo luồng khóa đồng thời (synchronous stream cipher) • Dãy z0,z1, … tạo cách ngẫu nhiên 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 cho ta dãy số nhị phân ngẫu nhiên dựa phép toán XOR Quá trình tính toán có sử dụng kết tính bước trước – Ví dụ: m=3, Ta có hộp K0, K1, K2 theo hình vẽ sau: Máy tạo luồng khóa tuyến tính – LFSR-3 K2 K1 K0 0 K2 K1 K0 0 z2 z1 z0 1 1 1 1 1 0 Giá trị ban đầu z0, z1, z2, 3, + x + x3 [z0, z1, z2] = [1,0,0] Với z0, z1, z2 giá trị ban đầu ta có: z3 = z1+ z0 mod z4 = z2+ z1 mod …… Tổng quát: zi+3 = zi+1+ zi mod với i = 0, 1, 2, … 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 giá trị ban đầu C0, C1,…, Cm-1 hệ số phản hồi ∈ {0,1} Ci = → Mạch mở; Ci = → Mạch đóng zi+m = Σj Cj.zi+j mod 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- • Vẽ máy tính luồng khóa nhận với m=4 : (C0= C2 = 1, C1= C3 = 0); z0= z1= 0, z2= z3= (C0= C1 = C2 = 1, C3 = 0); z0= z1= z2= 0, z3= (C0 = C1 = C2 = C3 = 1); z0= z1= z2= z3= 11 Đánh giá LFSR • Định lý: Độ dài cực đại luồng khóa tạo LFSR-m 2m-1 • Nhận xét: Luôn có số (C0,…, Cm-1) cho ta độ dài maximum 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 • LFSR biểu diễn dạng đa thức: P(x) = C0 + C1x + + Cm-1xm-1 + xm VD: (C0 = C1 = 1, C2 = C3 = 0) Ù P(x) = + x + x4 (C0 = C1 = C2 = C3 = 1) Ù P(x) = + x + x2 + x3 + x4 12 Luyện tập LFSR - m • Vẽ máy LFSR tương ứng, tính luồng khóa thu tính chu kỳ nó: LFSR-3 = (3, + x + x3), [z0, z1, z2] = [1,0,0] LFSR-4 = (4, + x + x4), [z0, z1, z2, z3] = [1,1,0,1], LFSR-5 = (5, + x + x2 + x4 + x5), [z0, z1, z2, z3 , z4] = [1,0,0,1,0] 13 Tạo luồng khóa không tuyến tính (Clock controlled shift registers) • Máy chạy dừng luân phiên (Anternating stop-and-go generator)- Kết hợp máy LFSR Chỉ để điều khiển & clock LFSR R2 output LFSR R1 not & LFSR R3 14 Máy chạy dừng luân phiên Qui trình chạy máy sau: Máy R1 chạy Nếu Kết R1 thì: – R2 chạy; R3 không chạy mà lặp lại bit kết trước (Vòng đầu giá trị R3 0) Nếu Kết R1 thì: – R3 chạy; R2 không chạy mà lặp lại bit kết trước (Vòng đầu giá trị R2 0) Đầu R2 R3 XOR với kết bit luồng khóa 15 Máy chạy dừng luân phiên (2) • • • • Giả sử đầu máy R1, R2, R3 tương ứng là: a0,a1,…; b0,b1,… c0,c1,… Đặt b-1 = c-1 = luồng khóa nhận z0,z1,… Khi đó: zj = bt( j )-1 ⊕ cj - t( j ) Với t(j) = (Σ ai); i = j; ∀j ≥ a Khởi tạo b(1) b-1 b0 c(0) c-1 z z0 0 0 b1 c0 c1 z1 z2 z3 c2 c3 z4 z5 1 b2 b3 c4 z6 z7 z8 16 Ví dụ máy chạy dừng luân phiên • Ví dụ: R1=(3, + x + x3), [a0, a1, a2] = [1, 0, 0] R2=(4, + x + x4), [b0, b1, b2 , b3] = [1, 1, 0, 1], R3=(5, + x + x2 + x4 + x5), [c0, c1, c2 , c3] = [1, 0, 0, 1, 0] • • • • Đầu R1 (chu kỳ 7) là: a7 = 1, 0, 0, 1, 0, 1, (a0, a1…) Đầu R2 (chu kỳ 15) là: b15 = 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, Đầu R3 (chu kỳ 31) là: c31 = 1,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1, 0,1,1,1,1,1,0,1,0,0,0 Luồng khóa nhận là: z = 1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,… 17 Ví dụ máy chạy dừng luân phiên (2) R1: (a0, a1, … , a7) = 1, 0, 0, 1, 0, 1, R2: (b0, b1, … , b15) = 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, R3: (c0, c1, … , c31) = 1,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1, 0,1,1,1,1,1,0,1,0,0,0 z = 1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,… a Khởi tạo b(1) c(0) z 0 1 1 0 1 0 0 1 1 1 18 Đánh giá độ an toàn • Số box máy R gọi độ dài • R1, R2, R3 cần chọn cho độ dài luồng khóa (L) tạo lớn (phụ thuộc vào độ dài máy L1, L2, L3 giá trị bit khởi tạo) • Trường hợp L1, L2, L3 đôi nguyên tố L lớn và: L = L1.L2.L3 • Tuy nhiên thường người ta thường chọn Li xấp xỉ (L1 ≈ L2 ≈ L3 ≈ l) • Khi l ≈ 128 máy coi an toàn (Phương pháp “chia để trị” R1 cần thực 2128 bước để tìm khóa) 19 Thám mã LFSR • Giả sử kẻ lạ biết vài plaintext với ciphertext (Known plaintext attack) 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 luồng khóa: zi = pi + ci mod 2; i = 0, 1,…, 2m-1 (?) • Mục đích: Tính hệ số Ci với: zi+m = (Σ Cj zi+j ) mod 2; j = → m-1, Cj ∈ {0, 1} 20 Phá mã LFSR • Ta viết dạng triển khai: i=0 zm = C0z0 + C1z1 +…+ Cm-1zm-1 mod i=1 zm+1 = C0z1 + C1z2 +…+ Cm-1zm mod ……………………………………………………… i=m-1 z2m-1 = C0zm-1 + C1zm +…+ Cm-1z2m-2 mod • Ta có hệ PT tuyến tính với m ẩn C0,…,Cm-1 Ta giải dễ dàng tìm Ci theo zj • Vậy với LFSR bậc m cách xem xét đầu vào 2m cặp bit ta tìm Ci • Kết luận: LFSRs không an toàn Tuy nhiên tổ hợp chúng (VD: máy chạy dừng luân phiên lại an toàn hơn) • Có thể dùng TT khối để tạo chuỗi bit cho TT luồng 21 A5 • A5 TT luồng sử dụng để mã hóa mạng điện thoại di động (GSM), bảo vệ bí mật kinh doanh • Có vài phiên (A5, A5/1, A5/2) • Tất bị bẻ khóa (A5/2 : 8/1999, A5/1 : 4/2000) • A5/1 gồm có LFSR's với 19, 22 23 bit sử dụng đa thức phản hồi thưa • Phiên A5/2 yếu với việc sử dụng LFSR thứ để tắt mở - dễ bị công • Sử dụng SOBER (1998) để thay A5 cho GSM • Một số TT khác: RC4, BBS 22 Bài tập Cho máy chạy dừng luân phiên sau: R1=(3, + x + x3), [a0, a1, a2] = [1, 0, 0] R2=(4, + x3 + x4), [b0, b1, b2 , b3] = [1, 1, 0, 1], R3=(5, + x2+ x5), [c0, c1, c2 , c3 , c4] = [1, 0, 1, 0, 0] Viết thủ tục tạo máy xuất chuỗi dài 50 bits Sử dụng kết để mã hóa chuỗi thông điệp sau: “A bus” Viết chương trình cho máy tạo chuỗi bit sau: LFSR-m = (m, C0 + C1x + + Cm-1xm-1 + xm ), Với giá trị đầu vào: [z0, z1, …, zm-1] Xuất n bits Viết chương trình tạo máy chạy dừng luân phiên Viết chương trình sử dụng máy chạy dừng luân phiên để mã hóa chuỗi bit có độ dài không k 23 [...]... 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ủa 2m 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 21 A5 • A5 là TT luồng sử dụng để mã hóa trong mạng điện thoại di động (GSM), được bảo... P(x) = 1 + x + x2 + x3 + x4 12 Luyệ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] 13 Tạ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... 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 15 Má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 ứng là: a0,a1,…; b0,b1,… và c0,c1,… Đặt b-1 = c-1 = 0 và luồng khóa nhận được là z0,z1,… Khi đó: zj = bt( j )-1 ⊕ cj - t( j ) Với t(j) = (Σ ai); i = 0 j; ∀j ≥ 0 a Khởi tạo 1 b(1) b-1 b0... thể tìm ra khóa) 19 Thá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} 20 Phá mã của LFSR • Ta viết dưới...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 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... 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-1xm-1 + xm ), 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 23 ... 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)... 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 22 Bài tập 1 Cho máy chạy và dừng luân phiên sau: R1=(3, 1 +... 1 (a0, a1…) Đầu ra của R2 (chu kỳ 15) sẽ là: b15 = 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0 Đầu ra của R3 (chu kỳ 31) sẽ là: c31 = 1,0,0,1,0,1,0,1,1,0,0,0,0,1,1,1,0,0,1,1, 0,1,1,1,1,1,0,1,0,0,0 Luồng khóa nhận được sẽ là: z = 1,0,1,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,1,1,0,1,1,0,0,0,… 17 Ví dụ máy chạy và dừng luân phiên (2) R1: (a0, a1, … , a7) = 1, 0, 0, 1, 0, 1, 1 R2: (b0, b1, … , b15) = 1, 1, 0,

Ngày đăng: 28/10/2015, 17:50

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan