Đặt m là một số nguyên dương. Đặt P=C=(Z26)m và đặt K là tập tất cả các hoán vị của tập {1, …, m}. Với K∈K, định nghĩa:
) ,..., ( ) ,..., ( 1 m K(1) K(m) K x x x x e = mod 26 và ) ,..., ( ) ,..., ( 1 m K 1(1) K1(m) K y y y y d = − − mod 26 Trong đó −1
K là hoán vị ngược của K.
3.8. Mã dòng (stream cipher)
Trong các hệ mật nghiên cứu ở trên, các phần tử liên tiếp của bản rõ đều được mã hoá bằng cùng một khoá K. Tức xâu bản mã y nhận được có dạng:
y = y1y2. . . = Ek(x1) Ek(x2 ) . . .
Các hệ mật thuộc dạng này thường được gọi là các mã khối. Một quan điểm sử dụng khác là mật mã dòng. Ý tưởng cơ bản ở đây là tạo ra một dòng khoá z = z1z2. . . và dùng nó để mã hoá một xâu bản rõ x = x1x2 . . . theo quy tắc: y = y1y2. . . =
) (x )e (x
ez1 1 z2 2 …
Mã dòng hoạt động như sau. Giả sử k ∈ K là khoá và x = x1x2 . . .là xâu bản rõ. Hàm fi được dùng để tạo zi (zi là phần tử thứ i của dòng khoá) trong đó fi là một hàm của khoá k và i-1 là ký tự đầu tiên của bản rõ:
Phần tử zi của dòng khoá được dùng để mã xi tạo ra yi = eiz(xi). Bởi vậy, để mã hoá xâu bản rõ x1x2 . . . ta phải tính liên tiếp: z1, y1, z2, y2 ... Việc giải mã xâu bản mã y1y2. . . có thể được thực hiện bằng cách tính liên tiếp: z1, x1, z2, x2 ... Sau đây là định nghĩa hệ mã dòng dưới dạng toán học
Một hệ mã dòng là một bộ (P, C, K, L, F, E, D) thoả mãn các điều kiện sau đây 1. P : là một tập hữu hạn các bản rõ.
2. C : là một tập hữu hạn các bản mã. 3. K : là một tập hữu hạn các khoá chính. 4. L : là một tập hữu hạn các khoá dòng.
5. F = {f1, f2,...} là bộ tạo dòng khoá. Với i ≥ 1 fi : K x Pi-1 → L.
6. Với mỗi z ∈ L có quy tắc mã ez ∈ E và một quy tắc giải mã tương ứng: dz ∈
D. ez : P→ C và dz : C→ P là các hàm thoả mãn dz ez(x)=x với mọi bản rõ x ∈ P. Mã dòng được gọi là đồng bộ nếu dòng khoá không phụ thuộc vào xâu bản rõ, tức là nếu dòng khoá đựoc tạo ra chỉ là hàm của khoá k. Khi đó ta coi k là một "mần" để mở rộng thành dòng khoá z1z2 . . .Một hệ mã dòng được gọi là tuần hoàn với chu kỳ d nếu zi+d= zi với số nguyên i≥ 1. Mã Vigenère với độ dài từ khoá m có thể coi là mã dòng tuần hoàn với chu kỳ m. Trong trường hợp này, khoá là k = (k1, . . . km). Bản thân k sẽ tạo m phần tử đầu tiên của dòng khoá: zi = ki. Sau đó dòng khoá sẽ tự lặp lại. Nhận thấy rằng, trong mã dòng tương ứng với mật mã Vigenère, các hàm mã và giải mã được dùng giống như các hàm mã và giải mã được dùng trong MDV: ez(x) = x+z và dz(y) = y-z
Các mã dòng thường được mô tả trong các bộ chữ nhi phân tức là P=C=L=Z2. Trong trường hợp này, các phép toán mã và giải mã là phép cộng theo modulo 2.
ez(x) = x +z mod 2 và dz(x) = y +z mod 2.
Nếu ta coi "0" biểu thị giá trị "sai" và "1" biểu thị giá trị "đúng" trong đại số Boolean thì phép cộng theo moulo 2 sẽ ứng với phép hoặc có loại trừ. Bởi vậy phép mã (và giải mã ) dễ dàng thực hiện bằng mạch cứng.
Ta xem xét một phương pháp tạo một dòng khoá (đồng bộ) khác. Giả sử bắt đầu với (k1, . . , km ) và zi = ki (cũng giống như trước đây), tuy nhiên bây giờ ta tạo dòng khoá theo một quan hệ đệ quy tuyến tính cấp m.
Zi+m = 2 mod 1 0 ∑− = + n j j i j z c
3.9. Một số phương pháp thám mã
3.9.1. Khái niệm
Thám mã là công việc phân tích bản tin mã hóa để nhận được bản tin rõ trong điều kiện không biết trước khóa mã.
Trong thực tế, công việc thám mã gặp nhiều khó khăn hơn khi không biết rõ hệ mật mã nào được sử dụng. Tuy nhiên, để đơn giản hóa, chúng ta giả sử người thám mã đã biết rõ hệ mật mã được sử dụng khi tiến hành phân tích mã (nguyên lý Kerckhoff). Mục đích là thiết kế được một hệ mật mã an toàn bảo mật.
Trước hết chúng ta cần phân loại mức độ tấn công vào các hệ mật mã. Mức độ này tùy thuộc vào hiểu biết của người thám mã đối với hệ mật mã được sử dụng. Theo đó, chúng ta có thể chia thành các loại tấn công sau:
Tấn công chỉ biết bản mã (ciphertext-only): người thám mã chỉ có bản tin mã hóa. Tấn công biết bản tin rõ (known plaintext): người thám mã có bản tin rõ và bản mã. Tấn công chọn bản tin rõ (chosen plaintext): người thám mã tạm thời có quyền truy xuất tới Bộ mã hóa, do đó anh ta có khả năng chọn bản tin rõ và xây dựng bản mã tương ứng.
Tấn công chọn bản mã (chosen ciphertext): người thám mã tạm thời có quyền truy xuất tới Bộ giải mã, do đó anh ta có khả năng chọn bản mã và xây dựng lại bản tin rõ tương ứng.
Trong mọi trường hợp, mục đích là tìm ra khóa mã được sử dụng. Kiểu tấn công chọn bản mã được thực hiện với hệ mật mã khóa công khai mà chúng ta sẽ xem xét trong chương kế tiếp. Trong phần này chúng ta chỉ thảo luận về kiểu tấn công được xem là “yếu nhất” - Tấn công chỉ biết bản mã.
Nhiều kỹ thuật thám mã sử dụng đặc điểm thống kê của tiếng Anh, trong đó dựa vào tần suất xuất hiện của 26 chữ cái trong văn bản thông thường để tiến hành phân tích mã. Becker và Piper đã chia 26 chữ cái thành năm nhóm và chỉ ra xác suất của mỗi nhóm như sau:
E, có xác suất khoảng 0.120
T, A, O, I, N, S, H, R, mỗi chữ cái có xác xuất nằm trong khoảng từ 0.06 đến 0.09 D, L, mỗi chữ cái có xác xuất xấp xỉ 0.04
C, U, M, W, F, G, Y, P, B, mỗi chữ cái có xác xuất nằm trong khoảng từ 0.015 đến 0.023
V, K, J, X, Q, Z, mỗi chữ cái có xác xuất nhỏ hơn 0.01
Ngoài ra, tần suất xuất hiện của dãy hai hay ba chữ cái liên tiếp được sắp theo thứ tự giảm dần như sau: TH, HE, IN, ER … THE, ING, AND, HER …[1, trang 26, 27]
3.9.2. Thám mã tích cực
Thám mã tích cực là việc thám mã sau đó tìm cách làm sai lạc các dữ liệu truyền, nhận hoặc các dữ liệu lưu trữ phục vụ mục đích của người thám mã.
3.9.3. Thám mã thụ động
Thám mã thụ động là việc thám mã để có được thông tin về bản tin rõ phục vụ mục đích của người thám mã.
3.9.4. Phương pháp thống kê
Phương pháp thống kê chủ yếu dựa vào việc ta đi thống kê tần suất xuất hiện của các ký hiệu có trong bản mã, sau đó thực hiện đối sánh với bảng tần xuất xuất hiện của một ngôn ngữ sau đó đưa ra các tính toán, phán đoán kết hợp với việc thử
Hình:3.2 - Bảng tần xuất các ký hiệu trong tiếng anh
3.9.5. Thám mã Affine
Ví dụ 1: A ciphertext has been generated with an affine Caesar cipher. The most frequent letter of the ciphertext is 'B', and the second most frequent letter of the ciphertext is 'U'. Break this code.
Affine Ceasar cipher: Defined as follows: For each plaintext letter p, substitute the ciphertext letter C:
C = E([a, b], p) = (ap + b) mod 26
Theo đề bài là ký tự gốc p sẽ được thay bằng ký tự mã c=(ap + b) mod 26 Ký tự có tần suất xuất hiện lớn thứ nhất là ‘B’
Ký tự có tần suất xuất hiện lớn thứ hai ‘U’ Mà trong ngôn ngữ tiếng anh:
Ký tự có tần suất xuất hiện lớn thứ nhất là ‘E’ Ký tự có tần suất xuất hiện lớn thứ hai ‘T’
Phỏng đoán ký tự trong ciphertext ‘B’ sẽ là ‘E’ trong painttext Phỏng đoán ký tự trong ciphertext ‘U’ sẽ là ‘T’ trong painttext Giải hệ phương trình sau ta sẽ có được a và b
(a* 'E'+b) mod 26 ='B' mod 26 (a* 'T'+b) mod 26='U' mod 26 Giải hệ trên ta được: a=3; b=15;
Ví dụ 2: Giả sử Trudy đã lấy được bản mã sau đây:
FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEV LRHHRH. Hãy thám mã bản mã này:
B1. Thống kê tần suất xuất hiện của các chữ cái như trong bản mã: Chữ cái Tần suất Chữ cái Tần suất
A 2 N 1 B 1 O 1 D 6 P 3 E 5 R 8 F 4 S 3 H 5 U 2 K 5 V 4 L 2 X 2 M 2 Y 1
Chỉ có 57 chữ cái trong bản mã nhưng phương pháp này tỏ ra hiệu quả để thám mã Affine.
B2. Thám mã để tìm ra khóa K=[a,b]
Nhận thấy tần suất xuất hiện các chữ cái theo thứ tự là: R(8), D(6), E, H, K(5) và F, S, V(4). Vì vậy dự đoán đầu tiên của ta có thể là: R là mã của e, D là mã của t. Theo đó, eK(4)=17 và eK(19)=3. Mà eK(x)=ax+b với a, b là các biến. Để tìm K=(a, b) ta giải hệ phương trình:
(4a +b) mod 26 =17 mod 26
(19a+b) mod 26 =3 mod 26 <=> 15a mod 26= 12
Suy ra, a = 6, b=19. Đây không phải là khóa vì gcd(a, 26) = 2 > 1. Ta lại tiếp tục phỏng đoán: R là mã của e, E là mã của t.
Cuối cùng, với K ta tìm được K = (3, 5). Gcd(3,26)=1 đúng. Mà: x=a-1(a*y -b) mod 26. Với a=3=>a-1=9. Vì a.a-1 mod 26 =1.
Sử dụng khóa mã này ta có được bản tin rõ như sau:
algorithms require general definitions of arithmetic processes
3.9.6. Thám mã Vigenere
Để thám mã Vigenere, trước hết cần xác định độ dài từ khóa, ký hiệu là m. Sau đó mới xác định từ khóa. Có hai kỹ thuật để xác định độ dài từ khóa đó là phương pháp Kasiski và phương pháp chỉ số trùng hợp ngẫu nhiên.
Phương pháp Kasiski được đưa ra bởi Friedrich Kasiski năm 1863. Phương pháp này làm việc như sau:
Tìm trên bản mã các cặp xâu kí tự giống nhau có độ dài ít nhất là 3, ghi lại khoảng cách giữa vị trí chữ cái đầu tiên trong các xâu và xâu đầu tiên. Giả sử nhận được d1, d2 … Tiếp theo ta phỏng đoán m là số sao cho ước số chung lớn nhất của các di chia hết cho m.
Ví dụ: Plaintext: conghoa|danchun|handant|runghoa|sapsuat|hanghoa Keyword: abcdefg
Ciphertext: CPPJLTG DBPFLZT HBPGESZ RVPJLTG SBRVYFZ HBPJLTG
Vị trí xuất hiện của dãy PJL lần lượt là: 3, 24, 38. Do vậy, dãy d1, d2 … là 21, 35; gcd(d1, d2 …) = 7
Phương pháp chỉ số trùng hợp ngẫu nhiên sẽ cho biết các bằng chứng để nhận được giá trị m. Phương pháp này được đưa ra bởi Wolfe Friedman năm 1920 như sau:
Giả sử x=x1x2…xn là xâu có n ký tự. Chỉ số trùng hợp ngẫu nhiên của x, ký hiệu là Ic(x), được định nghĩa là xác suất mà hai phần tử ngẫu nhiên của x là giống nhau. Giả sử chúng ta ký hiệu tần suất của A, B, C, …, Z trong x lần lượt là f0, f1, …, f25. Chúng ta có thể chọn hai phần tử của x theo ( )n
2 = n!/(2!(n-2)!) cách. Với mỗi 25 0≤i≤ , có ( )fi 2 cách chọn các phần tử là i. Vì vậy, chúng ta có công thức: Ic(x) = ( 1) ) 1 ( 25 0 − − ∑ = n n f f i i i
Bây giờ, giả sử x là xâu văn bản tiếng Anh. Ta có Ic(x) ≈∑
= 25 0 2 i i p = 0.065 Ví dụ: Cho bản mã trong hệ mật mã Vigenere [1, trang 33]:
CHREEV OAHMAE RATBIA XXWTNX BEEOPH BSBQMQ EQERB RVXUOA XXAOSXX …
LXFPSK
ZBWELE
AMRVLO … … WCHRQH …
PEEWEV KAKOE WADREM XMTBHHC HRTKDN VRZCHR CLQOHP WQAIIW XNRMGW OIIFKBE
Theo phương pháp Kasiski, đầu tiên xâu CHR xuất hiện ở 4 vị trí trong bản mã, lần lượt là: 1, 166, 236 và 286. Khoảng cách giữa các xâu là 165, 235 và 285. Ước số chung lớn nhất của các số này là 5. Vậy ta có m =5.
Theo phương pháp chỉ số ngẫu nhiên, với m=1 thì chỉ số ngẫu nhiên là Ic(x) = 0.045; m=2, Ic(x)=0.046 và 0.041; m=3, Ic(x)=0.043, 0.050, 0.047; m=4, Ic(x)=0.042, 0.039, 0.046, 0.040; m=5, Ic(x)=0.063, 0.068, 0.069, 0.072; Ta dừng và nhận được m = 5. Để xác định khóa mã, ta sử dụng phương pháp thống kê sau đây:
Giả sử x=x1x2…xn và y=y1y2…yn’ là hai xâu có n và n’ ký tự. Chỉ số ngẫu nhiên chung của x và y, ký hiệu là MIc(x,y), được định nghĩa là xác suất mà một phần tử ngẫu nhiên của x giống với một phần tử ngẫu nhiên của y. Nếu chúng ta ký hiệu tần suất của A, B, C, …, Z trong x và y lần lượt là f0, f1, …, f25. và f’0, f’1, …, f’25. Thì:
MIc(x,y) = ' ' 25 0 nn f f i i i ∑ =
Bây giờ, giả sử x,y là xâu văn bản tiếng Anh. Ta có MIc(xi,yj) ≈ 0.065 Ví dụ:
Giả sử m=5 như ta đã thực hiện ở trên. Theo phương pháp thống kê [1, trang 35] ta tìm được khóa mã là: JANET. Vậy bản tin rõ sẽ là: the almond tree was in ...
BÀI 5 - MÃ NÉN DỮ LIỆU 5.1. Khái niệm cơ bản
Nén dữ liệu là quá trình biến đổi dữ liệu từ dạng có dung lượng lớn trở thành dạng dữ liệu có dung lượng nhỏ hơn: từ A->A’ mà A’ có dung lượng <A.
Giải nén là quá trình làm ngược lại của quá trình nén dữ liệu, nghĩa là từ A’ A (trở về dạng dữ liệu guyên thủy)
Nén dữ liệu rất có lợi cho việc truyền thông trên mạng, vấn đề bảo mật thông tin, tiết kiệm dung lượng bộ nhớ lưu trữ,…
5.2. Các phương pháp nén dữ liệu
5.2.1. Nén bảo toàn
Đó là mô hình nén dữ liệu cho phép người sử dụng bảo toàn thông tin trong suốt quá trình nén. Điều này được giải thích như sau:
Với D là dữ liệu ban đầu,F: là hàm nén (chứa giải thuật nén) F(D) = D’ và F(D’)=D’’ mà D’’=D
Thông thường phương pháp này thường được áp dụng với dữ liệu văn bản Nén bảo toàn sẽ được dựa trên hai mô hình khác nhau:
Mô hình thống kê: nén dựa vào xác suất xuất hiện của nó các ký hiệu trong nguồn
Mô hình từ điển: mã hoá một chuỗi ký hiệu chỉ bằng một từ mã
5.2.2. Nén không bảo toàn
Nén không bảo toàn là mô hình nén dữ liệu mà tính bảo toàn của dữ liệu không được coi trọng.
F(D) = D’ và F(D’)=D’’ mà D’’<> D
Kỹ thuật này thường áp dụng cho việc nén dữ liệu là các loại tệp ảnh vì nói chung nó cũng không ảnh hưởng gì nhiều đến hình dạng ảnh.
Hầu hết, các kỹ thuật nén không bảo toàn để điều chỉnh sự cân bằng giữa độ chính xác nén và hiệu quả nén.
Phương pháp nén ảnh: CompuSever GIF (Graphics Interchange Format) và JPEG (Join Photographic Experts Group). Ngoài ra còn có nén MPEG ( The Moving Picture Experts Group)
Phương pháp nén âm thanh: hai thông số quan trọng nhất của âm thanh số hoá là tốc độ lấy mẫu và độ phân giải mẫu. Tốc độ lấy mẫu thường là 8 KHz, độ phân giải
mẫu thường là 8 bit. Nén âm thanh cũng gồm cả nén bảo toàn và nén không bảo toàn, tuy nhiên nén bảo toàn không hiệu quả bằng nén không bảo toàn. Tốc độ lấy mẫu và độ phân giải mẫu xác định hệ số mất mát cho phép của phương pháp nén không bảo toàn để tín hiệu sau quá trình nén- giải không bị méo dạng. Phương pháp mã hoá phổ biến để nén tiếng nói là phương pháp mã hoá dự đo án tuyến tính (LPC- Linear Predictive Coding). LPC dựa trên các phương pháp ước tính bình phương bé nhất cổ điển và sự tương hợp ngẫu nhiên giữa một mô hình toán học lý tưởng (mô hình dự đoán tuyến tính) với các đặc trưng riêng của tiếng nói con người. Một hệ thống LPC hoàn chỉnh bao gồm hai khâu là phân tích và tổng hợp. Một cải tiến rất quan trọng của LPC là thuật toán nén tổn hao thông dụng ADPCM (Adaptive Diffirence Pulse Code Modulation).
5.3. Mô hình thống kê
5.3.1. Mô hình thống kê tĩnh
Dạng đơn giản nhất của mô hình thống kê tĩnh là một bảng tĩnh liệt kê các giá trị xác suất theo cách tính thông thường. Trước đây, do việc phân tích và xây dựng mã