Academia.eduAcademia.edu
Lý thuyết Thông tin BÀI 13 MÃ VÒNG 13.1 Giới thiệu 13.2 Các tính chất của mã vòng 13.3 Ma trận sinh và ma trận kiểm tra của mã vòng 13.4 Mã BCH 13.1 Gi i thi u Định nghĩa 13.1 M t mã tuy n tính C(n, k) đ ợc gọi là mã vòng n u w = a0a1…an–2an–1 là m t từ mã thì v = an–1a0a1…an–2 cũng là m t từ mã. Nói cách khác mã vòng là mã có tính vòng, có nghĩa là dịch vòng một từ mã thì kết quả cũng là một từ mã. Chú ý đây chúng ta thấy việc dịch vòng được thực hiện từ trái sang phải (gọi là dịch phải), tuy nhiên với từ mã có chiều dài n bit thì việc dịch vòng ngược lại từ phải sang trái i bit (gọi là dịch trái) thì kết quả cũng giống với việc dịch phải (n – i) bit. Vì vậy nếu chúng ta dịch trái (dịch từ phải sang trái) một từ mã thì kết quả cũng là một từ mã. Tuy nhiên đây khi nói dịch thì chúng ta hiểu là dịch phải. Đa th c mã N u w = a0a1…an–2an–1 là m t từ mã thì w(x) = a0 + a1x + … + an–2xn - 2 + an–1xn - 1 là đa thức mã t ơng ứng v i từ mã w. Vậy chúng ta có một song ánh giữa các từ mã với các đa thức mã. Mỗi đa thức mã là một đa thức trên trư ng GF(2) và có bậc ≤ n – 1. Như sau này chúng ta sẽ thấy, chúng ta sẽ dựa vào các đa thức mã này để chứng minh các tính chất của mã vòng. Ví dụ 13.1 Bảng sau đây trình bày một mã vòng C(7, 4). Các bạn có thể kiểm tra rằng mã này là một mã tuyến tính và có tính vòng. Thông báo u = a0 … ak–1 0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 Từ mã w = b0 … bn–1 0000000 1101000 0110100 1011100 0011010 1110010 0101110 1000110 0001101 1100101 0111001 1010001 0010111 1111111 Đa thức mã w(x) = b0 + b1x + … + bn–2xn - 2 + bn–1xn - 1 0 1 + x + x3 x + x2 + x4 1 + x2 + x3 + x4 x2 + x3 + x5 1 + x + x2 + x5 x + x3 + x4 + x5 1 + x4 + x5 x3 + x4 + x6 1 + x + x4 + x6 x + x2 + x3 + x6 1 + x2 + x6 x2 + x4 + x5 + x6 1 + x + x2 + x3 + x4 + x5 + x6 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 103 Lý thuyết Thông tin 0111 1111 0100011 1001011 x + x5 + x6 1 + x3 + x5 + x6 Chú ý Vì tổng của hai từ mã là một từ mã nên tổng của hai đa thức mã là một đa thức mã. w(i), w(i)(x) w(i) là từ mã do dịch từ mã w i bit, và w(i)(x) là đa thức mã t ơng ứng của w(i). Chú ý chúng ta coi w chính là w(0). Bây gi chúng ta sẽ tìm mối liên hệ giữa w(i)(x) với w(x). Chúng ta dựa vào ví dụ trên để tìm mối liên hệ này. i 0 1 2 3 4 5 6 w(i) 1101000 0110100 0011010 0001101 1000110 0100011 1010001 w(i)(x) 1 + x + x3 x + x2 + x4 = x * (1 + x + x3) = x * w(x) x2 + x3 + x5 = x2 (1 + x + x3) = x2 * w(x) x3 + x4 + x6 = x3 (1 + x + x3) = x3 * w(x) 1 + x4 + x5 = x4 + x5 + x7 mod 7 x + x5 + x6 = x5 + x6 + x8 mod 7 1 + x2 + x6 = x6 + x7 mod 7 + x9 mod 7 Chúng ta thấy rằng w(i)(x) = xi * w(x) tuy nhiên nếu w(i)(x) có xp với p ≥ n thì xp được thay bằng xp mod n. Mặc khác trên trư ng GF(2) chúng ta có xn + j = xj * (xn + 1) + xj hay xn + j mod (xn + 1) = xj Từ đây chúng ta có bổ đề sau về mối liên hệ giữa w(i)(x) với w(x). Bổ đề 13.1 w(i)(x) = [xi * w(x)] mod (xn + 1) 13.2 Các tính chất của mã vòng Trong phần này chúng ta sẽ dẫn ra một số tính chất của mã vòng. Định lý 13.1 Đa thức mã khác 0 có b c nhỏ nhất là duy nhất. Hay nói cách khác không tồn t i hai đa thức mã khác 0, khác nhau và cùng có b c nhỏ nhất. Ch ng minh Giả sử tồn tại hai đa thức mã khác 0, khác nhau và cùng có bậc nhỏ nhất là r, 0 < r < n. g(x) = g0 + g1x + … + gr–1xr - 1 + xr f(x) = f0 + f1x + … + fr–1xr - 1 + xr Từ đây suy ra đa thức mã g(x) + f(x) có bậc nhỏ hơn r, mâu thuẫn. Chứng minh hoàn tất. Chúng ta kí hiệu đa thức mã có bậc nhỏ nhất là g(x) và kí hiệu là g(x) = g0 + g1x + … + gr–1xr - 1 + xr Định lý 13.2 H số tự do g0 của g(x) ph i bằng 1. Ch ng minh Giả sử g0 = 0. Suy ra g(x) = x * (g1 + … + gr–1xr - 2 + xr - 1) Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 104 Lý thuyết Thông tin Đặt f(x) = (g1 + … + gr–1xn - 2 + xr - 1). Chúng ta suy ra f(x) cũng là một đa thức mã. Vì từ mã tương ứng với f(x) là kết quả của việc dịch trái 1 bit hay dịch phải (n – 1) bit từ mã tương ứng với g(x). Mà bậc của f(x) bằng r – 1 và dĩ nhiên f(x) khác 0. Điều này mâu thuẫn với định nghĩa của g(x). Từ đây suy ra điều phải chứng minh. Định lý 13.3 M t đa thức v(x) trên tr ờng GF(2) có b c ≤ n – 1 là đa thức mã n u và chỉ n u nó là m t b i số của g(x). Tức là nó có thể vi t v(x) = q(x) * g(x). Ch ng minh Trước hết chúng ta chứng minh nếu v(x) = q(x) * g(x) và bậc của v(x) ≤ n – 1 thì v(x) là đa thức mã. Thực vậy, chúng ta có v(x) = q(x) * g(x) = ⎜⎜ ∑ qi x i ⎟⎟ * g ( x ) = ∑ qi (x i * g ( x ) ) ⎛ p ⎝ i =0 ⎞ ⎠ p i =0 trong đó p là bậc của q(x) và p + r ≤ n – 1. Mà do x * g(x) với 0 ≤ i ≤ p là đa thức mã (tương ứng với từ mã do từ mã g(x) dịch i bit). Nên v(x) là đa thức mã vì bằng với một tổ hợp tuyến tính của các đa thức mã. Bây gi nếu v(x) là đa thức mã thì chia v(x) cho g(x) chúng ta được v(x) = q(x) * g(x) + r(x) trong đó r(x) là đa thức dư và có bậc nhỏ hơn bậc của g(x). Nhưng đối với các đa thức trên trư ng GF(2) chúng ta có thể suy ra r(x) = q(x) * g(x) + v(x) Nên r(x) là một đa thức mã. Vì vậy do định nghĩa của g(x) chúng ta suy ra r(x) = 0. Chứng minh hoàn tất. Từ định lý này chúng ta gọi tên đa thức g(x) là đa thức sinh, vì từ g(x) có thể sinh ra tất cả các đa thức mã khác. i Định lý 13.4 Đa thức sinh của m t mã vòng C(n, k) có b c r = n – k. Ch ng minh Gọi r là bậc của đa thức sinh g(x). Từ định lý trên chúng ta có mỗi đa thức mã v(x) là một bội số của g(x) v(x) = q(x) * g(x) Vì vậy có bao nhiêu từ mã thì có bấy nhiêu đa thức q(x). Trước hết chúng ta thấy do bậc của v(x) ≤ n – 1 nên bậc của q(x) ≤ (n – 1) – r. Do đó có tổng cộng 2n – r đa thức q(x) (vì q(x) có n – r hệ số thuộc trư ng GF(2)) Mặt khác số lượng từ mã là 2k. Từ đây suy ra n – r = k hay r = n – k Chứng minh hoàn tất. Từ định lý này chúng ta có thể biểu diễn đa thức sinh g(x) như sau g(x) = g0 + g1x + … + gn – kxn – k trong đó g0 = gn – k = 1. Định lý 13.5 Đa thức sinh của m t mã vòng C(n, k) là m t c số của xn + 1. Ch ng minh Từ Bổ đề 13.1 chúng ta suy ra g(i)(x) = [xi * g(x)] mod (xn + 1) Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 105 Lý thuyết Thông tin hay chúng ta có thể viết xi * g(x) = q(x) * (xn + 1) + g(i)(x) Bây gi chọn i = k và để ý bậc g(x) = n – k nên chúng ta suy ra q(x) = 1 tức là xk * g(x) = (xn + 1) + g(i)(x) Từ đây suy ra xn + 1 = xk * g(x) + g(i)(x) (i) Mà do g (x) là một đa thức mã nên g(i)(x) phải là một bội của g(x), tức là chúng ta có thể viết g(i)(x) = g(x) * a(x). Thế vào trên chúng ta suy ra điều phải chứng minh. xn + 1 = g(x) * (xk + a(x)) Định lý 13.6 N u g(x) là m t đa thức có b c (n – k) và là c số của (xn + 1) thì g(x) sinh ra mã vòng C(n, k), hay nói cách khác g(x) là đa thức sinh của m t mã vòng C(n, k) nào đó. Ch ng minh Xét k đa thức g(x), x * g(x), …, xk – 1 * g(x). Các đa thức này đều có bậc ≤ n – 1. Gọi v(x) là một tổ hợp tuyến tính của k đa thức này với các hệ số ai ∈ GF(2). v(x) = a0g(x) + a1x * g(x) + … + ak – 1xk – 1 * g(x) v(x) là một đa thức có bậc ≤ n – 1 và là bội số của g(x). Có tất cả 2k đa thức v(x) khác nhau và tạo nên một không gian tuyến tính của các đa thức mã với g(x), x * g(x), …, xk – 1 * g(x) là các đa thức làm cơ s . Vì vậy 2k tổ hợp (a0a1 … ak – 1) tương ứng với 2k đa thức này tạo nên một mã tuyến tính C(n, k). Bây gi chúng ta chứng minh mã này có tính vòng, tức là chứng minh nếu v là một từ mã thì dịch v 1 bit chúng ta được v(1) cũng là một từ mã. Điều này cũng tương đương với nếu v(x) là một đa thức mã thì v(1)(x) cũng là một đa thức mã. Đầu tiên chúng ta biểu diễn v(x) v(x) = b0 + b1x + … + bn – 1xn – 1 thì v(1)(x) = bn – 1 + b0x + b1x2 + … + bn – 2xn – 1 Theo Bổ đề 13.1 chúng ta có v(1)(x) = [x * v(x)] mod (xn + 1) Dựa vào biểu diễn của v(x) và v(1)(x) chúng ta suy ra x * v(x) = bn – 1(xn + 1) + v(1)(x) n Do v(x) và (x + 1) đều là bội của g(x) nên v(1)(x) cũng là bội của g(x). Vì vậy v(1)(x) cũng là đa thức mã. Chứng minh hoàn tất. 13.3 Ma tr n sinh và ma tr n kiểm tra của mã vòng Ma trận sinh c a mã vòng Từ các định lý trên chúng ta suy ra một từ mã là một tổ hợp tuyến tính của các từ mã tương ứng với các đa thức mã g(x), x * g(x), …, xk – 1 * g(x). Và với chú ý rằng các đa thức g(x), x * g(x), …, xk – 1 * g(x) độc lập tuyến tính với nhau. Vì vậy ma trận sinh của mã vòng C(n, k) sẽ là, trong đó g0 = gn – k = 1. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 106 Lý thuyết Thông tin G k ×n k7 k4 1 444 −7 + 14448 64444 −4 ⎡ 6444n4 8⎤ ⎢g g1 g 2 L g n− k 0 0 L 0 ⎥ ⎥ ⎢ 0 0 L 0 ⎥ ⎢ 0 g 0 g1 L g n − k −1 g n − k = ⎢⎢ 0 0 g 0 L g n − k − 2 g n − k −1 g n − k L 0 ⎥⎥ ⎢M M M M M ⎥ M M M M ⎥ ⎢ g1 g 2 L g n−k ⎥ g0 ⎢0 0 L 0 ⎥⎦ ⎢⎣ Ví dụ 13.2 Tìm một mã vòng C(7, 4). Theo các tính chất của mã vòng chúng ta suy ra đa thức sinh của mã có bậc bằng 3 và là một ước số của x7 + 1. Phân tích đa thức này ra thừa số chúng ta được x7 + 1 = (1 + x)(1 + x + x3)(1 + x2 + x3) đây chúng ta có hai thừa số của x7 + 1 cùng có bậc bằng 3, mỗi thừa số sẽ sinh ra một mã vòng C(7, 4). Bây gi chúng ta chọn chẳng hạn g(x) = (1 + x + x3) Từ đây chúng ta suy ra ma trận sinh của mã vòng này là G4×7 ⎡1 ⎢0 =⎢ ⎢0 ⎢ ⎣0 1 0 1 0 0 0⎤ 1 1 0 1 0 0⎥⎥ 0 1 1 0 1 0⎥ ⎥ 0 0 1 1 0 1⎦ Bộ mã này chính là bộ mã được trình bày trong Ví dụ 13.1. Mã vòng dạng hệ thống Để tìm mã vòng dạng hệ thống, chúng ta biến đổi từ ma trận sinh thành ma trận sinh dạng hệ thống. đây chúng ta chú ý rằng do tính vòng nên từ dạng hệ thống loại 1 chúng ta có thể dịch vòng k bit để biến đổi sang dạng hệ thống loại 2 và ngược lại. Ví dụ từ ma trận sinh trong Ví dụ 13.2 chúng ta biến đổi như sau thì được ma trận sinh hệ thống dạng 2: h3 = h3 + h1, h4 = h4 + h1 + h2 trong đó hi là hàng thứ i của ma trận. Ght ( 4×7 ) ⎡1 ⎢0 =⎢ ⎢1 ⎢ ⎣1 1 0 1 0 0 0⎤ 1 1 0 1 0 0⎥⎥ 1 1 0 0 1 0⎥ ⎥ 0 1 0 0 0 1⎦ ⎡1 ⎢0 =⎢ ⎢0 ⎢ ⎣0 0 0 0 1 1 0⎤ 1 0 0 0 1 1⎥⎥ 0 1 0 1 1 1⎥ ⎥ 0 0 1 1 0 1⎦ Và từ đây chúng ta có thể có được ma trận sinh hệ thống dạng 1 bằng cách dịch vòng k = 4 bit. Kết quả chúng ta có ma trận sinh hệ thống dạng 1 như sau Ght ( 4×7 ) Mã hoá thành từ mã hệ thống Ngoài việc dùng ma trận sinh hệ thống để mã hoá một thông báo thành từ mã hệ thống chúng ta có thể dùng cách sau đây để mã hoá thông báo u = a0a1...ak - 1 thành từ mã hệ thống dạng 2 w = b0b1...bn–k–1a0a1...ak - 1 trong đó n – k bit bi là các n – k bit kiểm tra. Gọi u(x) là đa thức tương ứng với thông báo u. Vì vậy bậc của u(x) ≤ k – 1. Chia xn–k * u(x) cho g(x) chúng ta được Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 107 Lý thuyết Thông tin Từ đây suy ra xn–k * u(x) = q(x) * g(x) + a(x) xn–k * u(x) + a(x) = q(x) * g(x) Vì xn–k * u(x) + a(x) là bội của g(x) nên nó là đa thức mã. Và để ý từ mã tương ứng với đa thức mã này có k bit sau là k bit thông báo, đó chính là từ mã hệ thống dạng 2 tương ứng với thông báo u. Ví dụ 13.3 Cho mã vòng C(7, 4) có ma trận sinh là g(x) = (1 + x + x3). Hãy mã hoá thông báo u = 1010 thành từ mã hệ thống dạng 2. Chúng ta có u(x) = 1 + x2. Nhân u(x) với xn–k = x3 rồi chia cho g(x) chúng ta được. x3 * (1 + x2) = x3 + x5 = x2 * (1 + x + x3) + x2 Từ đây suy ra w(x) = x2 + x3 + x5 là đa thức mã và từ mã tương ứng w = 0011010 là từ mã hệ thống dạng 2 tương ứng với u. Ma trận kiểm tra c a mã vòng Để tìm ma trận kiểm tra của mã vòng chúng ta có thể sử dụng cách đã biết là tìm ma trận kiểm tra từ ma trận sinh hoặc ma trận sinh hệ thống. Tuy nhiên đối với mã vòng chúng ta có một cách xác định ma trận kiểm tra nhanh chóng hơn. Trước hết vì g(x) là một ước số của xn + 1 nên chúng ta có thể biểu diễn xn + 1 = g(x) * h(x) Và chúng ta gọi h(x) là đa thức đối ngẫu của g(x). Để ý h(x) có bậc k và có thể được biểu diễn như sau, trong đó h0 = hk = 1 h(x) = h0 + h1x + … + hkxk Gọi v(x) = a0 + a1x + … + an – 1xn – 1 là đa thức mã tương ứng với từ mã v = (a0a1…an – 1) Chúng ta có thể biểu diễn như sau trong đó q(x) có bậc ≤ k – 1 v(x) = q(x) * g(x) Bây gi chúng ta nhân v(x) với h(x) và được v(x) * h(x) = q(x) * g(x) * h(x) = q(x) * (xn + 1) = q(x) + xn * q(x) Do q(x) có bậc ≤ k – 1 nên từ đây chúng ta suy ra các hệ số của xk, xk + 1, …, xn–1 trong v(x) * h(x) bằng 0. Từ cách tính hệ số của xk, xk + 1, …, xn–1 trong v(x) * h(x) theo các hệ số ai và hj của v(x) và h(x) chúng ta suy ra n – k đẳng thức sau ∑h k i =0 k ∑h i =0 ∑h k i =0 k −i k −i k −i ai = 0 ai +1 = 0 M ai + n − k −1 = 0 Từ các đẳng thức này chúng ta suy ra các tích vectơ sau bằng 0 (a0a1 … an – 1) * (hkhk–1 … h00 … 0)T = 0 (a0a1 … an – 1) * (0hkhk–1 … h0 … 0)T = 0 M Vì vậy nếu chúng ta đặt (a0a1 … an – 1) * (0 … 0hkhk–1 … h0)T = 0 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 108 Lý thuyết Thông tin H ( n − k )×n +4 −7 − 144 k7 n4 k4 1 444 ⎡ 64444 8⎤ 8 644 ⎢h h hk −2 L h0 0 0 L 0⎥ k −1 ⎢ k ⎥ 0 L 0⎥ ⎢ 0 hk hk −1 L h1 h0 = ⎢⎢ 0 hk L h2 h1 h0 L 0 ⎥⎥ 0 ⎢M M M M M⎥ M M M M ⎢ ⎥ 0 L 0 hk hk −1 hk −2 L h0 ⎥ ⎢0 ⎢⎣ ⎥⎦ thì chúng ta suy ra v × HT = 0. Từ đây suy ra H là một ma trận kiểm tra của mã vòng. Ví dụ 13.4 Cho mã vòng C(7, 4) có ma trận sinh là g(x) = (1 + x + x3). Từ đây suy ra h(x) = (1 + x + x2 + x4) Và chúng ta có ma trận kiểm tra của bộ mã như sau H 3×7 ⎡1 0 1 1 1 0 0⎤ = ⎢⎢0 1 0 1 1 1 0⎥⎥ ⎢⎣0 0 1 0 1 1 1⎥⎦ Chú ý Mã vòng là mã cho phép thiết kế các mạch mã hoá, sửa sai và giải mã dễ dàng và hiệu quả nên được sử dụng rộng rãi trong thực tế. Bây gi chúng ta sẽ trình bày ứng dụng của trư ng GF(2m) trong việc xây dựng các mã vòng. Trước hết chúng ta có định lý sau. Định lý 13.7 Cho a là m t ph n t khác 0 của tr ờng GF(2m) có chu kỳ là n, đa thức tối thiểu f(x) của a có b c là m. Thì mã có ma tr n sau làm ma tr n kiểm tra là m t mã vòng C(n, n – m), trong đó mỗi ph n t trong ma tr n bên d i đ ợc thay th bằng vectơ m thành ph n t ơng ứng của nó. Hm×n = [1 a a2 … an – 2 an–1] Hơn n a mã vòng này có đa thức sinh chính là f(x). Ch ng minh Trước hết chúng ta chứng minh rằng nếu w = (b0b1b2…bn–2bn–1) là một từ mã thì v = (bn– 1b0b1…bn–3bn–2) cũng là một từ mã, từ đó suy ra mã có tính vòng. Thật vậy nếu w là từ mã thì chúng ta có w × HT = 0 hay b0 + b1a + b2a2 + … + bn–2an–2 + bn–1an–1 = 0 trong đó các bi ∈ GF(2) còn các aj ∈ GF(2m). Nhân a vào đẳng thức trên chúng ta suy ra b0a + b1a2 + b2a3 + … + bn–2an–1 + bn–1an = 0 hay bn–1 + b0a + b1a2 + b2a3 + … + bn–2an–1 = 0 tức là (bn–1b0b1…bn–3bn–2) cũng là một từ mã. Thứ hai vì đa thức tối thiểu của a có bậc là m nên m phần tử 1, a, a2, …, am–1 là độc lập tuyến tính. Từ đó suy ra m hàng của H là độc lập tuyến tính. Vì vậy mã thực sự là mã vòng C(n, n – m). Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 109 Lý thuyết Thông tin Cuối cùng nếu biểu diễn f(x) = f0 + f1x + f2x2 + … + fm–1xm–1 + fmxm–1 (với chú ý f0 = fm = 1) thì do f(a) = 0 nên chúng ta suy ra w = (f0f1… fm0 … 0) (gồm n thành phần) là một từ mã. Và không tồn tại đa thức mã v(x) nào có bậc nhỏ hơn m, vì nếu ngược lại lúc đó chúng ta có do v × HT = 0 suy ra v(a) = 0. Điều này mâu thuẫn với định nghĩa f(x) là đa thức tối thiểu của a. Chứng minh hoàn tất. Ví dụ 13.5 Xét trư ng GF(24) và a có đa thức tối thiểu là f(x) = 1 + x + x4 như trong Ví dụ 11.7. Chú ý a có chu kỳ là 15. Thì ma trận sau là ma trận kiểm tra của mã vòng C(15, 11) có đa thức sinh chính là f(x) H 4×15 ⎡1 ⎢0 =⎢ ⎢0 ⎢ ⎣0 0 0 0 1 0 0 1 1 0 1 0 1 1 1⎤ 1 0 0 1 1 0 1 0 1 1 1 1 0 0⎥⎥ 0 1 0 0 1 1 0 1 0 1 1 1 1 0⎥ ⎥ 0 0 1 0 0 1 1 0 1 0 1 1 1 1⎦ Nếu đa thức tối thiểu của a là f(x) = 1 + x + x2 + x3 + x4 thì a có chu kỳ là 5 và các phần tử 1, a, ..., a4 được biểu diễn dưới dạng vectơ như sau: 1 = (1000) a = (0100) a2 = (0010) a3 = (0001) a4 = 1 + a + a2 + a3 = (1111) Từ đây suy ra ma trận sau là ma trận kiểm tra của mã vòng (5, 1) H 4×5 ⎡1 ⎢0 =⎢ ⎢0 ⎢ ⎣0 0 0 0 1⎤ 1 0 0 1⎥⎥ 0 1 0 1⎥ ⎥ 0 0 1 1⎦ 13.4 Mã BCH nhị phân Mã BCH có tên viết tắt của ba ngư i sáng lập ra nó đó là Bose, Chaudhuri và Hocquenghem. Đây là mã vòng có khả năng sửa được nhiều lỗi. Bây gi chúng ta sẽ đưa ra qui trình để xây dựng mã BCH nhị phân có khả năng sửa được nhiều lỗi. Đối với các số nguyên dương m và t bất kỳ chúng ta sẽ xây dựng một mã BCH nhị phân có các thông số sau: Độ dài từ mã: n = 2m – 1 Số bit kiểm tra: n – k ≤ mt Khoảng cách Hamming: dmin ≥ 2t + 1 Trước hết chúng ta chứng minh định lý sau đây. Định lý 13.8 Cho a là m t ph n t của tr ờng GF(2m) có đa thức tối thiểu là m t đa thức căn b n b c m. Thì mã có ma tr n sau làm ma tr n kiểm tra là m t mã vòng có kho ng cách Hamming ≥ 2t + 1, trong đó mỗi ph n t trong ma tr n bên d i đ ợc thay th bằng vectơ m thành ph n t ơng ứng của nó. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 110 Lý thuyết Thông tin ⎡1 a ⎢ 3 ⎢1 a H = ⎢1 a 5 ⎢ M ⎢M ⎢1 a 2t −1 ⎣ a2 a6 a 10 M a 2( 2t −1) a n−2 L a 3( n − 2 ) L a 5( n − 2 ) L M M ( 2 t −1)(( n − 2 ) L a ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ( 2 t −1)(( n −1) ⎥ a ⎦ a n −1 a 3( n −1) a 5( n −1) M Hơn n a đa thức sinh g(x) của b mã là đa thức b i số chung nhỏ nhất của các đa thức tối thiểu của các ph n t a, a3, a5, …, a2t–1. Ch ng minh Từ định lý chúng ta suy ra a có chu kỳ là n = 2m – 1 và vì vậy a là một phần tử cơ s của trư ng GF(2m). Trước hết chúng ta chứng minh rằng nếu w = (b0b1b2…bn–2bn–1) là một từ mã thì v = (bn– b b 1 0 1…bn–3bn–2) cũng là một từ mã, từ đó suy ra mã có tính vòng. Thật vậy nếu w là từ mã thì chúng ta có w × HT = 0 hay viết ngược lại H × wT = 0 Nhân ma trận B sau với H chúng ta được ⎡a 0 ⎢0 a 3 ⎢ B = ⎢0 0 ⎢ ⎢M M ⎢⎣ 0 0 ⎡ a ⎢ 3 ⎢ a B × H = ⎢ a5 ⎢ ⎢ M ⎢a 2t −1 ⎣ a2 a6 a 10 M a 2 ( 2t −1) 0 0 a5 M 0 a3 a9 a 15 M 0 ⎤ 0 ⎥⎥ 0 ⎥ L ⎥ M M ⎥ L a 2t −1 ⎥⎦ L L a 3( 2t −1) a n −1 L a 3( n −1) L a 5( n −1) L M M ( 2 t −1)(( n −1) L a 1⎤ ⎥ 1⎥ 1⎥ ⎥ M⎥ 1⎥⎦ Chúng ta có (B×H)×wT = B×(H×wT) = B×0 = 0 Mà chúng ta để ý nếu dịch vòng ma trận (B×H) 1 cột theo chiều từ trái sang phải được thì kết quả là ma trận H. Từ đây suy ra H×vT = 0 với v là kết quả của việc dịch vòng w 1 bit (theo chiều từ trái sang phải). Hay nói cách khác v × HT = 0. Từ đây suy ra mã có tính vòng. Thứ hai để chứng minh bộ mã có khoảng cách Hamming ≥ 2t + 1 chúng ta chỉ cần chứng minh mỗi tập 2t cột của ma trận H là độc lập tuyến tính. Thật vậy giả sử tồn tại r cột k k có các phần tử đi đầu là a 1 , a 2 , …, a kr là có tổng bằng 0 trong đó r ≤ 2t. Từ đây chúng ta suy ra hệ sau, gọi là hệ (1) a k1 ⎛⎜ a k1 ⎞⎟ ⎠ ⎝ M +a 3 k2 k + ⎛⎜ a 2 ⎞⎟ ⎝ ⎠ 3 ( )3 + … + a kr =0 + … + a kr =0 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 111 ⎛⎜ a k1 ⎞⎟ ⎠ ⎝ 2t −1 ⎛ k ⎞ + ⎜⎜ a 2 ⎟⎟ ⎝ ⎠ 2t −1 Lý thuyết Thông tin ( )2t −1 + … + a kr =0 Mỗi phương trình trong hệ 1 có dạng p(a) = 0 trong đó p(a) là đa thức của a. Đặt a với i = 1, 2, …, r. Từ đây chúng ta nhận được hệ (2) sau + y2 + … + yr = 0 y1 3 3 + y2 + … + yr3 = 0 y1 ki = yi M y12t - 1 + y22t - 1 + … + yr2t - 1= 0 Để ý trong trư ng GF(2m) thì (y1 + y2 + … + yr)2 = y12 + y22 + … + yr2 Vì vậy chúng ta có hệ (3) sau + y2 + … + yr = 0 y1 y12 + y22 + … + yr2 = 0 y13 + y23 + … + yr3 = 0 y14 + y24 + … + yr4 = 0 M y12t - 1 + y22t - 1 + … + yr2t - 1= 0 y12t + y22t + … + yr2t = 0 Chúng ta chỉ lấy r phương trình đầu và viết dưới dạng ma trận sau, gọi là (4) ⎡ 1 ⎢ y ⎢ 12 ⎢ y1 ⎢ ⎢ M ⎢⎣ y1 r −1 1 y2 2 y2 M r −1 y2 1 ⎤ ⎡ y1 ⎤ ⎡0⎤ y r ⎥⎥ ⎢⎢ y 2 ⎥⎥ ⎢⎢0⎥⎥ 2 L y r ⎥ × ⎢ y 3 ⎥ = ⎢0 ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ M M ⎥ ⎢ M ⎥ ⎢M⎥ r −1 L y r ⎥⎦ ⎢⎣ y r ⎥⎦ ⎢⎣0⎥⎦ L L Phương trình (4) có dạng Ay = 0, trong đó các phần tử của ma trận A và của vectơ y là các phần tử của trư ng GF(2m). Các phần tử y1, y2, …, yr là khác phần tử 0 vì vậy phương trình Az = 0 là có nghiệm không tầm thư ng trong trư ng GF(2m). Vì vậy det A = 0 (là phần tử 0 của trư ng GF(2m)). Mà theo Bổ đề 13.2 chúng ta có det A = ∏ ( y i − y j ) với i, j ∈ {1, 2, i> j m …, r}. (Chú ý trong trư ng GF(2 ) phép trừ giống với phép cộng). Mà do các phần tử aq k với q = 1, 2, …, n = 2m – 1 là phân biệt nhau nên (yi – yj) ≠ 0 ∀ i ≠ j (Chú ý yi = a i ). Vì vậy det A = ∏ ( y i − y j ) ≠ 0. Mâu thuẫn. Từ đây suy ra điều phải chứng minh. i> j Cuối cùng gọi g(x) = g0 + g1x + g2x2 + … + gn–1xn–1 là đa thức sinh của bộ mã. Do (g0g1g2 … gn–1) là từ mã và (g0g1g2 … gn–1)× HT = 0, nên suy ra g(a) =0 3 g(a ) = 0 g(a5) = 0 M g(a2t–1) = 0 Nếu đặt f1(x), f3(x), f5(x), …, f2t–1(x) là các đa thức tối thiểu lần lượt của các phần tử a, a3, a5, …, a2t–1. Từ Bổ đề 11.5 chúng ta suy ra g(x) chia hết cho f1(x), f3(x), f5(x), …, f2t–1(x). Đặt p(x) là bội số chung nhỏ nhất của f1(x), f3(x), f5(x), …, f2t–1(x). Suy ra g(x) chia hết cho p(x). Suy ra bậc của g(x) ≥ bậc của p(x). Mặt khác nếu biểu diễn p(x) bằng p(x) = p0 + p1x + p2x2 + … + pn–1xn–1 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 112 Lý thuyết Thông tin trong đó pn–1 không nhất thiết bằng 1. (Chú ý các đa thức tối thiểu đều là ước của x 2 −1 + 1 nên p(x) cũng vậy và có bậc ≤ n = 2m – 1.) Thì do tất cả p(a), p(a3), p(a5), …, p(a2t–1) đều bằng 0 nên (p0p1p2 … pn–1)× HT = 0 nên (p0p1p2 … pn–1) là từ mã, từ đó suy ra p(x) là đa thức mã. Vì vậy theo định nghĩa của đa thức sinh chúng ta suy ra g(x) = p(x). Chứng minh hoàn tất. m Bổ đề 13.2 Ma tr n A sau có định thức bằng ∏(y i> j i − y j ) v i i, j ∈ {1, 2, …, r}. Định thức này đ ợc gọi là định thức Vandermonde. ⎡ 1 ⎢ y ⎢ 12 A = ⎢ y1 ⎢ ⎢ M ⎢⎣ y1 r −1 y2 y2 2 M y2 1 ⎤ L y r ⎥⎥ 2 L yr ⎥ ⎥ M M ⎥ r −1 L y r ⎥⎦ L 1 r −1 Ch ng minh Thật vậy, det A là một đa thức đồng đều det A = p(y1, y2, ..., yr) trong đó p(y1, y2, ..., yr) là một tổng của các thành phần, mỗi thành phần bao gồm tích của các yik với mọi i = 1, 2, ..., r sao cho tổng bậc của mỗi thành phần là bằng nhau. Dễ thấy bậc của mỗi thành phần của p bằng 1 + 2 + … + (r – 1) = r(r – 1)/2. Chú ý nếu yi = yj thì det A = 0. Từ đây suy ra p(y1, y2, ..., yr) chia hết cho (yi – yj) ∀i ≠ j. Kết hợp với trên chúng ta suy ra det A = p(y1, y2, ..., yr) = ∏ ( y i − y j ) với i, j ∈ {1, 2, …, r}. i> j Chứng minh hoàn tất. Ví dụ 13.6 Cho m = 4, t = 2 chúng ta sẽ xây dựng một mã vòng có chiều dài từ mã là 24 – 1 = 15 và có khoảng cách Hamming d ≥ 5. Chúng ta sẽ xây dựng bằng cách dựa vào trư ng GF(24). Cho a là phần tử có đa thức tối thiểu là đa thức căn bản có bậc 4 sau f1(x) = 1 + x + x4 Trư ng này chính là trư ng GF(24) trong Ví dụ 11.7. a có chu kỳ n = 2m – 1 = 15. Chúng ta có ma trận kiểm tra của bộ mã như sau. ⎡1 a H =⎢ 3 ⎣1 a a2 a3 a4 a5 a6 a7 a8 a9 a 10 a 11 a 12 a 12 a6 a9 a 12 a 15 a 18 a 21 a 24 a 27 a 30 a 33 a 36 a 39 a 14 ⎤ ⎥ a 42 ⎦ Thay mỗi phần tử ai bằng vectơ (m = 4 thành phần) tương ứng chúng ta được Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 113 Lý thuyết Thông tin ⎡1 ⎢0 ⎢ ⎢0 ⎢ 0 H =⎢ ⎢1 ⎢ ⎢0 ⎢0 ⎢ ⎣⎢0 0 0 0 1 0 0 1 1 0 1 0 1 1 1⎤ 1 0 0 1 1 0 1 0 1 1 1 1 0 0⎥⎥ 0 1 0 0 1 1 0 1 0 1 1 1 1 0⎥ ⎥ 0 0 1 0 0 1 1 0 1 0 1 1 1 1⎥ 0 0 0 1 1 0 0 0 1 1 0 0 0 1⎥ ⎥ 0 0 1 1 0 0 0 1 1 0 0 0 1 1⎥ 0 1 0 1 0 0 1 0 1 0 0 1 0 1⎥ ⎥ 1 1 1 1 0 1 1 1 1 0 1 1 1 1⎦⎥ Và đa thức sinh g(x) là bội số của hai đa thức tối thiểu tương ứng với phần tử a và a3. Theo Ví dụ 11.7 chúng ta có đa thức tối thiểu của a3 là f3(x) = 1 + x + x2 + x3 + x4. Từ đây suy ra g(x) = f1(x) * f3(x) = (1 + x + x4) * (1 + x + x2 + x3 + x4) = 1 + x4 + x6 + x7 + x8 Chú ý Trong trư ng hợp đa thức tối thiểu của a không phải là đa thức căn bản thì chúng ta sẽ tìm được mã vòng có chiều dài n ≠ 2m + 1, với n là chu kỳ của a. Trư ng hợp này sinh viên tự lấy ví dụ. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 114 Lý thuyết Thông tin BÀI 14 GI I THI U V M T MÃ HOÁ 14.1 Giới thiệu 14.2 Một số phép mật mã đơn giản 14.3 Bẻ gãy (breaking) một hệ mật mã 14.4 Kết hợp các phương pháp mật mã hoá 14.5 Sự không chắc chắn và sự bảo mật hoàn hảo (perfect secrecy) 14.6 Các hàm một chiều (one-way function) 14.7 Cơ s toán học của mật mã hóa 14.1 Gi i thi u Mã hoá bảo mật (hay mật mã hóa) có một lịch sử lâu đ i. Trước hết nó đã từng được sử dụng từ rất lâu trong các cuộc chiến tranh cổ đại và sau đó kéo dài cho đến tận bây gi . Tuy nhiên từ khi chiếc máy tính đầu tiên ra đ i và kéo theo sau đó là cả một cuộc cách mạng dữ dội về thông tin và truyền thông đã làm thay đổi cuộc sống của con ngư i. Chúng ta không còn trao đổi và xử lý thông tin theo những cách thức truyền thống tốn nhiều th i gian và công sức mà càng ngày càng chuyển nhiều trao đổi qua những môi trư ng điện tử nhanh chóng và hiệu quả. Chẳng hạn như các giao dịch tài chính, chuyển khoản, mua sắm, đăng ký kết hôn, đăng ký khai sinh, … càng ngày càng được thực hiện qua môi trư ng mới, môi trư ng điện tử. Tuy nhiên chúng ta cần nhấn mạnh rằng đi kèm với sự phát triển của khoa học kỹ thuật, các thiết bị điện tử hiện đại hoàn toàn có thể “bắt” được các thông tin đang được truyền đi trên mạng, trên internet hay qua điện thoại vô tuyến, hữu tuyến, sóng vệ tinh, … Vì vậy nhu cầu bảo mật thông tin ngày càng tr nên quan trọng và cấp thiết. Trong các bài học sau đây chúng ta chủ yếu trình bày những nét chính của lĩnh vực mật mã hóa dữ liệu. Nếu muốn nghiên cứu chuyên sâu chi tiết, bạn đọc có thể tham khảo thêm từ các tài liệu tham khảo được nêu hoặc từ nguồn tài nguyên phong phú trên internet. Trước hết trong bài học này chúng ta sẽ trình bày các vấn đề và các khái niệm cơ bản của bảo mật. Thông báo, văn bản (message, plaintext) Thông báo, văn b n là m t chuỗi h u h n kí hi u lấy từ m t b ng ch cái ∑ và th ờng đ ợc kí hi u là m. đây ∑ thư ng là bảng chữ cái tiếng Anh gồm 26 kí tự, thỉnh thoảng có thêm cả kí tự khoảng trắng. Mật mã hóa (encryption), phép mật mã hoá e(m) M t mã hoá là vi c bi n đổi m t thông báo sao cho nó không thể hiểu nổi đối v i bất kỳ ai ngo i trừ ng ời nh n đ ợc mong muốn. D hiểu hơn m t mã hóa là vi c “ngụy trang” hay “che dấu” thông báo, văn b n d i m t d ng khác để cho nh ng ng ời “ngoài cu c” không thể xác định đ ợc thông báo, văn b n gốc. Phép m t mã hóa th ờng đ ợc kí hi u là e(m), v i m là thông báo c n m t mã hóa. Trong thực tế, mật mã hoá được xem như là một hàm, một ánh xạ hay một giải thuật với một tập các thông số (ngoài thông số cần có là thông báo cần mã hoá). Từ đây chúng ta có khái niệm khoá. Khoá (key), khóa mã hóa, khóa giải mã Khoá là m t thông số đ u vào của phép mã hoá hoặc gi i mã (nó không ph i là thông báo cũng nh là chuỗi m t mã). Khóa dùng để mã hóa kí hi u là ke và khóa dùng để gi i mã kí hi u là kd. Trong m t số h m t mã hóa 2 khóa này chính là m t lúc Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 115 Lý thuyết Thông tin đó chúng ta gọi chung là k, ng ợc l i trong m t số h m t mã hóa 2 khóa này là khác nhau. Tuy nhiên gi a 2 khóa này th ờng có m t mối liên h v i nhau. Một phép mật mã hoá có thể có nhiều khoá mã hóa (tương ứng có nhiều khóa giải mã). Các khóa này thư ng được sinh ra từ một khóa mã hóa ban đầu nào đó được chọn trước. Chuỗi mật mã (cipher, ciphertext, cryptogram) Chuỗi m t mã là chuỗi “ngụy trang”, tức là chuỗi k t qu t ơng ứng của chuỗi thông báo qua phép m t mã hóa và th ờng đ ợc kí hi u là c. c = e(m, ke). Phép giải mã (decryption) d(c, kd) Phép gi i mã là quá trình xác định thông báo gốc từ chuỗi m t mã c và khóa gi i mã kd và th ờng đ ợc kí hi u là d(c, kd). d(c, kd) = m. Chúng ta có thể xem phép giải mã như là một ánh xạ ngược của phép mã hóa. Hệ mật mã (cryptosystem) M t cách hình thức, m t h m t mã đ ợc định nghĩa là m t b bốn (M, K1, K2, C). Trong đó M là t p các thông báo m trên các b ng ch cái ∑, K1 là t p h u h n các khoá mã hóa ke, K2 là t p h u h n các khoá gi i mã kd, C là t p các chuỗi m t mã c trên b ng ch cái Γ, ngoài ra còn có thêm gi thi t rằng tồn t i các hàm hay gi i thu t e và d sao cho e: M × K1 → C và đối v i mỗi cặp (m, ke) ∈ M × K1, d: C × K2 → M d(e(m, ke) , kd) = m Chú ý Chúng ta thông thư ng giữa ke và kd có mối liên hệ với nhau và thư ng được sinh ra theo từng cặp nên trong nhiều trư ng hợp chúng ta có thể xem một hệ mật mã như là một bộ ba (M, K, C) trong đó K là tập hợp các khóa mã hóa k. Trong ngữ cảnh của lý thuyết mật mã hóa đôi lúc chúng ta nói mã hóa thay cho mật mã hóa và hệ mã thay cho hệ mật mã. Hệ mật mã khóa bí mật (secret key cryptosystem) H mã khóa bí m t hay còn gọi là h mã đối xứng (symmetric cryptosystem) là h mã mà trong đó vi c mã hóa và gi i mã dùng chung m t khóa bí m t. Hệ mật mã khóa công khai (public key cryptosystem) H mã khóa công khai hay còn gọi là h mã bất đối xứng (assymmetric cryptosystem) là h mã mà trong đó vi c mã hóa và gi i mã s dụng 2 khóa khác nhau, từ khóa này không thể tìm ra khóa kia m t cách d dàng. Khóa dùng để mã hóa th ờng đ ợc thông báo công khai và đ ợc gọi là khóa công khai (public key), còn khóa dùng để gi i mã đ ợc gi bí m t và đ ợc gọi là khóa bí m t hay khóa riêng t (private key). Chú ý Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 116 Lý thuyết Thông tin Hiện nay có một số hệ mã đối xứng dùng 2 khóa khác nhau cho việc mã hóa và giải mã. Cả 2 khóa này đều được giữ bí mật vì từ khóa này có thể xác định được khóa kia không khó khăn. Dĩ nhiên nó cũng không được gọi là hệ mã khóa “công khai” được. 14.2 M t số phép m t mã đơn gi n Phép thay thế đơn giản Trong phép này, khoá là m t hoán vị π của b ng ch cái ∑ và mỗi kí hi u của thông báo đ ợc thay bằng nh của nó qua hoán vị π. Thư ng thư ng, khoá được biểu diễn như một chuỗi 26 kí tự, chẳng hạn nếu khoá là UXEOS…, thì nó biểu thị rằng bất kỳ một sự xuất hiên của A trong thông báo thì được thay bằng U, B được thay bằng X, C được thay bằng E, D được thay bằng O, E được thay bằng S, … Các khoảng trắng thư ng được giữ nguyên không bị thay thế. Phép thay thế n-gram Thay vì thay thế đối với các kí tự, ngư i ta có thể thay thế cho từng cụm 2 kí tự (gọi là digram) hoặc từng cụm 3 kí tự (gọi là trigram) và tổng quát cho từng cụm n kí tự (gọi là ngram). Nếu bảng chữ cái ∑ gồm 26 kí tự tiếng Anh thì phép thay thế n-gram sẽ có khoá là một hoán vị của 26n n-gram khác nhau (có 26n chuỗi khác nhau chiều dài n). Trong trư ng hợp digram thì hoán vị gồm 262 digram và có thể biểu diễn tốt nhất bằng một dãy 2 chiều 26 × 26 trong đó các hàng biểu diễn kí hiệu đầu tiên, các cột biểu diễn kí hiệu thứ hai, nội dung của các ô biểu diễn chuỗi thay thế. Ví dụ bảng 2 chiều sau biểu thị AA được thay bằng EG, AB được thay bằng RS, BA được thay bằng BO, BB được thay bằng SC, … A B … A EG BO B RS SC … Phép hoán vị bậc d Đối với một số nguyên dương d bất kỳ, chia thông báo m thành từng khối có chiều dài d. Rồi lấy một hoán vị π của 1, 2, …, d và áp dụng π tới mỗi khối. Chẳng hạn nếu d = 5 và π = (4 1 3 2 5), thì có nghĩa là hoán vị (1 2 3 4 5) sẽ được thay bằng hoán vị mới (2 4 3 1 5). Ví dụ nếu chúng ta có thông báo m = JOHN |IS A |GOOD |ACTOR thì qua phép mật mã này sẽ tr thành chuỗi mật mã sau c = ONHJ |SA I |ODOG |COTAR Để giải mã ngược lại ta phải tìm hoán vị ngược π - 1. Trong trư ng hợp này chúng ta có π - 1 = (2 4 3 1 5). Tổng quát nếu π = (i1 i2 … in) thì π - 1 = (j1 j2 … jn) trong đó ji k = k , có nghĩa là trong π - 1 vị trí thứ i1 chứa giá trị 1, vị trí thứ i2 chứa giá trị 2, … Phương pháp Vigenère và Caesar Trong phương pháp này, khoá bao gồm một chuỗi của d kí tự. Chúng được viết lặp lại bên dưới thông báo và được cộng modulo 26, với chú ý rằng bảng chữ cái được đánh số từ A = 0 đến Z = 25. Các kí tự khoảng trắng sẽ được giữ nguyên không cộng. Chẳng hạn với d = 3, nếu khoá là chuỗi ABC thì thông báo m= M A R Y I S G O O D với khoá Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 117 Lý thuyết Thông tin k= A B C A B C A B C A tr thành c= M B T Y J U G P Q D Trong trư ng hợp d = 1, như vậy khoá chỉ là một kí tự đơn, thì được gọi là phương pháp Caesar vì được cho là được sử dụng lần đầu b i Julius Caesar. Phương pháp Playfair Đây là một sơ đồ dựa trên sự thay thế digram trong đó khoá là một hình vuông kích thước 5 × 5 chứa một sự sắp xếp nào đó của 25 kí tự của bảng chữ cái (không tính kí tự J vì sự xuất hiện ít của nó và có thể thay nó bằng I). Giả sử chúng ta có ma trận khoá như sau B W L C Q Y S A O N D F R I M G U K V H Z P X E T Sự thay thế sẽ được thực hiện như sau. Chẳng hạn nếu digram cần thay thế là AV thì trong hình chữ nhật có A, V là hai đỉnh chéo nhau thay A bằng đỉnh kề của nó theo đư ng thẳng đứng chính là O và tương tự thay V bằng đỉnh kề của nó theo đư ng thẳng đứng chính là K. Tương tự nếu digram cần thay thế là VN thì chuỗi thay thế là HO. Nếu các kí tự của digram nằm trên hàng ngang thì chuỗi thay thế là các kí tự bên phải của chúng. Chẳng hạn nếu digram là WU thì chuỗi thay thế là SP, nếu digram là FP thì chuỗi thay thế là UW, nếu digram là XR thì chuỗi thay thế là LK. Tương tự nếu các kí tự của digram nằm trên hàng dọc thì chuỗi thay thế là các kí tự bên dưới của chúng. Chẳng hạn nếu digram là SO thì chuỗi thay thế là AN, nếu digram là MR thì chuỗi thay thế là DI, nếu digram là GH thì chuỗi thay thế là UG. Trong trư ng hợp digram là một cặp kí tự giống nhau chẳng hạn OO hoặc là một kí tự được đi kèm một khoảng trắng chẳng hạn B฀ thì có nhiều cách xử lý, cách đơn giản nhất là giữ nguyên không biến đổi digram này. Phương pháp khoá tự động (autokey) Trong phương pháp này, có một khoá “mồi” (priming key), cái mà thư ng là ngắn và được sử dụng để kh i đầu quá trình mật mã hoá. Quá trình mã hoá được tiếp tục bằng cách sử dụng cả bản thân thông báo lẫn chuỗi mật mã (cryptogram) đang chạy. Xét ví dụ sau: Giả sử khoá mồi là VENUS và thông báo là SEND SUPPLIES. Đầu tiên sử dụng thông báo như một khoá đang chạy, chúng ta mã hoá bằng phép cộng mod 26. (Chú ý các khoảng trắng sẽ được bỏ qua) m: k: Chuỗi mật mã S V N E E I N N A D U X S S K U S M P E T P N C L D O I S A E U Y S P H Sử dụng chuỗi mật mã trên như là một khoá với khoá mồi như cũ chúng ta được kết quả mã hoá như sau. m: k: Chuỗi mật mã S V N E E I N N A D U X S S K U N H P I X P A P L X I I K S E M Q S T L Phương pháp biến đổi tuyến tính Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 118 Lý thuyết Thông tin Ý tư ng cơ bản là chia thông báo thành những khối có chiều dài d và gắn khối này với một vectơ x, gồm d số nguyên, và rồi nhân vectơ x này với một ma trận không suy biến (tức có định thức khác 0) sẽ được chuỗi mật mã y = Ux. Việc giải mã được thực hiện bằng cách nhân y với ma trận nghịch đảo U - 1 của U, x = U - 1y. Để đảm bảo các phép toán được thực hiện trên một trư ng, các tính toán sẽ được tính trong modulo của một số nguyên tố. Chẳng hạn lấy bảng chữ cái ∑ gồm 37 kí tự như sau và được đánh số lần lượt từ 0 đến 36: 10 chữ số từ 0 đến 9, khoảng trắng, và 26 kí tự chữ cái. Với bảng chữ cái này, nếu chọn d = 2 và ma trận làm khoá là: ⎡3 13⎤ k=U= ⎢ ⎥ ⎣ 22 15⎦ Thông báo m = FRIEND được biểu diễn như là m = FR | IE | ND = 15, 27 | 18, 14 | 23, 13 Thì ⎡ 3 13⎤ ⎡15 18 23⎤ ⎡ 26 14 16 ⎤ ⎢ 22 15⎥ × ⎢ 27 14 13 ⎥ = ⎢32 14 35⎥ ⎣ ⎦ ⎣ ⎦ ⎣ ⎦ Vậy chuỗi mật mã là c = 26, 32 | 14, 14 | 16, 35 = Q, W | E, E | G, Z = QWEEGZ 14.3 Bẻ gãy (breaking) m t h m t mã Bẻ gãy một hệ mật mã có nghĩa là gì? Nó có nghĩa là việc xác định được văn bản hay thông báo gốc từ những gì có thể biết được. Chúng ta cần phân tích những khả năng có thể bị bẻ gãy của một hệ mật mã, có như vậy mới giúp chúng ta xây dựng được những yêu cầu, tiêu chuẩn đối với một hệ mật mã an toàn và cho ra đ i những hệ mật mã này và những hệ mật mã ngày càng an toàn hơn (cái mà sẽ được trình bày trong các bài sau). Nói chung việc xây dựng và bẻ gãy các hệ mật mã đó là một quá trình chiến đấu giữa hai bên, một bên là những ngư i xây dựng còn một bên là những ngư i tìm các yếu điểm của cách xây dựng để vượt qua. Chính quá trình bẻ gãy đã giúp cho việc xây dựng ngày càng tốt hơn, tuy nhiên ngược lại các kỹ thuật bẻ gãy cũng ngày càng phát triển và tinh vi hơn. Đây có thể xem là một trư ng hợp điển hình của quá trình chiến đấu và phát triển không ngừng của hai mặt của một vấn đề. Quay tr lại với việc bẻ gãy, những chuyên gia mật mã hay những kẻ tấn công thư ng được giả thiết biết đầy đủ thông tin về hàm mã hoá e, hàm giải mã d và khóa mã hóa ke. Thêm vào đó, họ cũng có thể có nhiều thông tin hỗ trợ như các thống kê về ngôn ngữ, kiến thức về ngữ cảnh, vân vân. Họ sẽ chắn chắn có một chuỗi mật mã nào đó, và tất cả những gì mà họ thiếu là khoá gi i mã kd từ đó họ có thể sử dụng d để giải mã c một cách chính xác. Và vì vậy vi c bẻ gãy có thể qui v vi c tìm/tính khóa gi i mã kd từ những gì họ biết. Việc bẻ gãy có thể minh họa như hình ảnh bên dưới. Bộ phát sinh khoá k ke m Bộ mã hoá e kd c = e(m, k) Bộ giải mã d Những kẻ tấn công Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM m 119 Lý thuyết Thông tin Hình 14.1 Mô hình của một hệ mật mã Những giả thiết trên là hoàn toàn thực tế. Thật vậy những phương pháp mã hóa và giải mã hầu như không thể giữ bí mật. Đối với những phương pháp mã hóa đơn giản thì những kẻ tấn công đã biết đầy đủ. Còn đối với những phương pháp mã hóa phức tạp thì thư ng không phải do một ngư i nghĩ ra mà là do một nhóm hoặc nhiều ngư i cùng nghĩ ra. Thậm chí ngay cả khi chỉ do một ngư i nghĩ ra thì khi áp dụng vào các hệ thống truyền thông vẫn có thể có nhiều ngư i quản lý hệ thống đó biết. Chính vì vậy việc giữ bí mật phương pháp mã hóa là rất khó. Bí mật lúc này giống như một “cây kim trong bọc”, lâu ngày cũng có thể bị phát hiện. Mà một khi một ngư i khác đã biết thì nhiều ngư i có thể biết. Và điều này cũng đúng đối với phép giải mã. Chính vì hiểu được điều này nên mới có sự ra đ i của hệ mã khóa công khai như đã được giới thiệu trên. Trong hệ mã khóa công khai, giải thuật mã hóa, giải mã, và cả khóa mã hóa đều được công khai, chỉ có duy nhất một cái cần giữ bí mật đó là khóa dùng để giải mã. Điều này cũng giống các loại ổ “khóa bi” hay “khóa số vòng” trong thực tế. Chúng ta nhớ rằng, nguyên lý chế tạo của các loại ổ “khóa bi” hay “khóa số vòng” hoàn toàn có thể biết được, nhưng để m được ổ khóa chúng ta cần phải có chìa. Có ba khả năng tấn công cái mà chúng ta dự đoán đối phương có thể sẽ tấn công trên hệ thống của chúng ta: 1. Tấn công chỉ dựa trên chuỗi mật mã (crytogram-only attack): Đây là trư ng hợp đối phương chỉ biết một vài mẫu chuỗi mật mã c. 2. Tấn công dựa trên văn bản đã biết (known-plaintext attack): Trư ng hợp này thực tế hơn trư ng hợp (1). Trong trư ng hợp này những ngư i tấn công được giả thiết là đã biết một độ dài đáng kể của văn bản thông báo và chuỗi mật mã tương ứng, và từ đó cố gắng tìm ra khoá (mã hóa cũng như giải mã). Đây là một sự tấn công dữ dội khó chống đỡ hơn nhiều nhưng ngày nay được xem như là một chuẩn an toàn tối thiểu phải đạt được. Thật vậy vào th i điểm hiện tại, tiêu chuẩn thích hợp nhất để đánh giá một hệ mật mã là khả năng của nó để chống đỡ sự tấn công thậm chí còn mạnh hơn như sau 3. Tấn công dựa trên văn bản được chọn (chosen-plaintext attack): Trong trư ng hợp này, những ngư i tấn công có thể đã có được một số lượng tuỳ ý của các cặp thông báo và chuỗi mật mã tương ứng (m, c). Không khó để thấy rằng không có hệ thống (hay phương pháp) mật mã nào đã mô tả mục 14.2 trên đây có thể chống đỡ một cuộc tấn công dựa trên văn bản được chọn. Trư ng hợp liên quan đến khả năng bị tấn công của nó đối với sự tấn công dựa trên văn bản đã biết là phức tạp hơn. Chẳng hạn, xét hệ thống đơn giản nhất – hệ thống dùng phương pháp thay thế đơn giản – sao cho khoá k là một hoán vị của 26 chữ cái trong đó A → P, B → F, vân vân. Bây gi nếu thông báo m được g i là “silly message” bao gồm chữ A được lặp lại n lần, thì trong chuỗi mật mã c tương ứng, chữ P sẽ được lặp lại n lần. Không thành vấn đề chúng ta có n lớn bao nhiêu, cặp thông báo - chuỗi mật mã cụ thể này sẽ không sinh ra khoá k. Tuy nhiên bằng việc dựa vào các thống kê về xác suất xuất hiện của các kí tự, đồng th i duyệt qua các phương án chọn khóa theo thứ tự được đánh giá là hợp lý nhất đến ít hợp lý hơn cộng với sự trợ giúp tính toán với tốc độ nhanh của các siêu máy tính, việc tìm ra khóa sẽ là không quá khó và tốn nhiều th i gian. Shannon và nhiều nhà nghiên cứu khác bằng những nghiên cứu về thống kê và entropy của tiếng Anh đã phát biểu rằng Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 120 Lý thuyết Thông tin V i nh ng chuỗi m t mã có chi u dài 30 kí tự hoặc hơn biểu di n cho nh ng chuỗi thông báo có nghĩa trong ti ng Anh thì g n nh chắc chắn có thể tìm ra khóa của nó trong các ph ơng pháp mã hóa nói trên. Tóm lại có thể nói rằng nếu đã cho một chiều dài vừa đủ của thông báo và chuỗi mật mã, bất kỳ hệ thống hay phương pháp mật mã trên đều có thể bị bẻ gãy (crack), tức là khóa có thể được tìm thấy. đây chúng ta xem một ví dụ đơn giản về cách bẻ gãy. Ví dụ 14.1 Giả sử một hệ mật mã được biết là dựa trên phương pháp Caesar với bảng chữ cái gồm 27 kí tự được đánh số như sau A = 0, B = 1, …, Z = 25, khoảng trắng = 26 và phép cộng thực hiện theo mod 27. Chúng ta chộp được chuỗi mật mã c sau HWXGOQCCZOXGOXBORCST Chúng ta đề nghị cách tấn công sau để tìm khoá chưa biết k0. Chọn các khoá dự tuyển cho k0 một cách ngẫu nhiên và đổi ngược chuỗi mật mã, theo từng kí tự, cho đến khi nào thông báo có ý nghĩa. Vì vậy, nếu đầu tiên chúng ta chọn k0 = E, chúng ta sẽ đổi ngược c và nhận được DSTC … tại ngữ cảnh này chúng ta thấy rằng E không phải là khoá k0. Lại chọn k0 = Z, cái này sẽ đổi ngược c thành JYZ … cái này bác bỏ Z. Sự lựa chọn kế tiếp (theo linh cảm ???!!!) của chúng ta là k0 = P và nhanh chóng thấy rằng chuỗi mật mã đã được biến đổi thành chuỗi văn bản có nghĩa THIS BOOK IS IN CODE Tại ngữ cảnh này chúng ta không đảm bảo rằng không có cặp thông báo-khoá khác mà sẽ sinh ra cùng chuỗi mật mã trên. Tuy nhiên thủ tục kiểm tra của những khoá khác cũng tương tự như vậy. 14.4 K t hợp các ph ơng pháp m t mã hoá Một cách tự nhiên để tăng tính bảo mật là kết hợp nhiều phương pháp mật mã hoá với nhau. Hai cách như vậy, được Shannon đề nghị từ năm 1949, vẫn tạo nên cơ s của nhiều hệ mật mã thực tế. Đó là 1. Cách dùng tổng trọng số: Nếu S1, S2, …, Sn là các hệ mã hoá có cùng không gian ∑ pi = 1 thì tổng của chúng n thông báo và 0 < pi < 1 và i =1 ∑ pi S i n i =1 là hệ mật mã dùng Si với xác suất pi. Lấy ví dụ trong trư ng hợp n = 2 tức là có 2 hệ mã hóa S1, S2.. Thì hệ thống p1S1 + p2S2 có m + n khóa k1, k2, …, km, k1’, k2’, …, kn’ trong đó khóa ki được sử dụng với xác suất p1qi còn khóa kj’ được sử dụng với xác suất p2qi’. 2. Cách dùng tích: Áp dụng các hệ thống (hay phương pháp) nối tiếp nhau, đầu ra của hệ thống này, chẳng hạn S1, là đầu vào của hệ thống kế tiếp, chẳng hạn S2. Dĩ nhiên tập hợp đầu ra của hệ thống đi trước S1 phải là tập con của tập hợp đầu vào của hệ thống đi sau kế tiếp S2. Nếu thực hiện được thì chúng ta kí hiệu hệ thống kết hợp này là S = S1 ο S2. Giả sử S1 có các khóa k1, k2, …, km, mỗi khóa ki được dùng với xác suất qi, S2 có các khóa k1’, k2’, …, kn’, mỗi khóa kj’ được dùng với xác suất qj’, thì S = S1 ο S2 có mn khóa với Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 121 Lý thuyết Thông tin các xác suất qiqj’. Chú ý rằng S1 ο S2 thư ng có ít hơn mn khóa có hiệu quả, vì một vài phép biến đổi của tích có thể trùng nhau. 3. Chúng ta có thể kết hợp đồng th i cả hai cách trên. S3 ο (p1S1 + p2S2) = p1S3 ο S1 + p2S3 ο S2 (p1S1 + p2S2) ο S3 = p1S1 ο S3 + p2S2 ο S3 S1 ο (S2 ο S3) = (S1 ο S2) ο S3 Chú ý S1 ο S2 tổng quát không bằng với S2 ο S1. 14.5 Sự không chắc chắn và sự b o m t hoàn h o (perfect secrecy) Xét một hệ mật mã (M, K, C) và giả thiết rằng M = {m1, m2, …, mn} là một tập hữu hạn các thông báo. Gọi pi là xác suất thông báo mi được g i đi, qj là xác suất khóa kj được chọn và việc chọn khóa độc lập với thông báo được g i đi. Từ hai sự phân bố xác suất này chúng ta suy ra sự phân bố xác suất của chuỗi mật mã c P (c ) = ∑ pi k j n i =1 trong đó vế phải được tính tổng trên tất cả các cặp thông báo - khóa (mi, kj) sao cho e(mi, kj) = c. Đến đây chúng ta có thể coi việc mật mã hóa tương tự như một kênh truyền thông được trình bày trong BÀI 9, trong đó tập thông báo M là một nguồn r i rạc không nhớ, còn hàm mã hóa e với các khóa k là kênh truyền. Chúng ta có H ( M ) = − ∑ pi log pi n i =1 H ( K ) = − ∑ q j log q j H (C ) = − ∑ P (c) log P(c) n i =1 Chúng ta gọi H(K | C) là sự không chắc chắn về khóa, H(M | C) là sự không chắc chắn về thông báo. Đôi khi chúng ta kí hiệu hệ mật mã (M, K, C) bằng S và rồi kí hiệu sự không chắc chắn về khóa, H(K | C), là H(S). Định lý 14.1 Sự không chắc chắn v khóa quan h v i sự không chắc chắn v thông báo bằng H(K | C) = H(M | C) + H(K | M, C) Ch ng minh H(M | C) = = H(K | C) = = H(M, C) - H(C) H(M, K, C) - H(K | M, C) - H(C) H(K, C) - H(C) H(M, K, C) - H(M | K, C) - H(C) Nhưng H(M | K, C) = 0 Nên H(K | C) Từ đây suy ra điều phải chứng minh. = H(M, K, C) - H(C) Hệ quả 14.1 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 122 Lý thuyết Thông tin Sự không chắc chắn v khóa l n hơn hoặc bằng sự không chắc chắn v thông báo. Vì H(M | C) là độ bất ng trung bình về thông báo m khi nhận được chuỗi mật mã c nên chúng ta có thể nói rằng một hệ mật mã (M, K, C) là hoàn hảo nếu H(M | C) = H(M). Có nghĩa là việc nhận được chuỗi mật mã c không giúp chúng ta biết thêm gì về thông báo m. Hay nói cách khác nguồn M và C độc lập với nhau. Tuy nhiên như chúng ta sẽ thấy rất khó để đạt được điều này. Định lý 14.2 M t h m t mã (M, K, C) là hoàn h o n u và chỉ n u P(m | c) = P(m) v i mọi thông báo m ∈ M và chuỗi m t mã c ∈ C. Hệ quả 14.2 M t h m t mã (M, K, C) là hoàn h o n u và chỉ n u P(c | m) = P(c) v i mọi thông báo m ∈ M và chuỗi m t mã c ∈ C. Định lý 14.3 Đi u ki n c n để m t h m t mã (M, K, C) là hoàn h o là nó có số l ợng khóa ít nhất là bằng số l ợng thông báo. Ch ng minh Xét tập thông báo M = {m1, m2, …, mn} và một khóa k cố định. Khóa này sẽ ánh xạ các thông báo mi khác nhau thành các chuỗi mật mã khác nhau ci. Vì hệ mật mã là hoàn hảo nên dựa vào hệ quả trên đây chúng ta có P(ci | mi) = P(ci) đồng th i P(ci | mj) = P(ci) với mọi j ≠ i. Vì vậy phải có một khóa k’ khác nào đó cái mà ánh xạ mj thành ci. Điều này đúng cho mọi j (1 ≤ j ≤ n), và tất cả các khóa như vậy phải khác nhau. Vì vậy phải có ít nhất là n khóa. Ví dụ 14.2 Một ví dụ cổ điển về hệ mật mã hoàn hảo là “one-time pad”. Nó được giới thiệu lần đầu b i G. S. Vernam vào năm 1926. Nó hoạt động như sau. Giả sử bảng chữ cái Σ là bảng chữ cái tiếng Anh gồm 26 kí tự (các dấu chấm câu và khoảng trắng được bỏ qua) và các kí tự này được biểu diễn theo đúng thứ tự thành các số nguyên từ 0 đến 25.. Thông báo m g i đi gồm n kí tự. Để mã hóa m, sinh một chuỗi ngẫu nhiên n kí tự từ bảng chữ cái Σ, mỗi kí tự sẽ có một xác suất được chọn là 1/26 và việc chọn các kí tự là độc lập lẫn nhau. Dãy ngẫu nhiên này (z1, z2, ..., zn) sẽ làm khóa cho phép mã hóa sau. C = e(m, k) = (y1, y2, ..., yn) trong đó yi = xi + zi (mod 26) Dễ dàng thấy rằng hệ thống này có 26n khóa có thể, vì vậy H(K) = n log 26 Vì các khóa này đều có khả năng được chọn như nhau nên chúng ta có P(k | c) = 1/26n Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 123 Lý thuyết Thông tin với bất kỳ khóa k nào. Hệ mật mã này đã được chứng minh là hệ mật mã hoàn hảo. Tuy nhiên có một vài hạn chế lớn trong việc sử dụng các hệ mật mã này. 1. Không có một phương pháp toán học để sinh ra các chuỗi ngẫu nhiên độc lập làm khóa. Chỉ có một số phương pháp toán học sinh ra các chuỗi “giả ngẫu nhiên” mà thôi, tuy nhiên chúng không đảm bảo được rằng sẽ đạt được mức độ bảo mật giống như trư ng hợp ngẫu nhiên thật sự. 2. Chiều dài các khóa đúng bằng chiều dài thông báo và phải được truyền đến bên nhận để bên nhận dùng cho việc giải mã. Như vậy khóa này cũng có thể bị bắt được trên đư ng truyền và vì vậy đến lượt nó lại cần phải được mã hóa!!! Mặc dù có những hạn chế như vậy nhưng chúng cũng đã được sử dụng khá nhiều trong thực tế trước đây. 14.6 Các hàm m t chi u (one-way function) Ý tư ng dùng các hàm một chiều để mã hóa là cốt lõi của các phương pháp mật mã hóa. Tuy nhiên rất khó để đưa ra một định nghĩa toán học chính xác cho nó. Một cách không hình thức, một hàm một chiều là một hàm f: S → T, trong đó S, T là hai tập bất kỳ sao cho 1. Với bất kỳ x ∈ S, f(x) là dễ dàng để tính. 2. Đã cho một y = f(x) với một x nào đó chưa được biết, thì rất “khó” (hoặc không khả thi) để tìm ra được x đối với phần lớn các y thuộc T. Khó đây đồng nghĩa với việc phải tốn rất nhiều th i gian và chi phí để tìm ra x. Nó rõ ràng rằng, đã cho f(x), một cách tìm x là tìm kiếm vét cạn thông qua tất cả những giá trị x có thể của S. Tuy nhiên điều này sẽ không khả thi nếu S quá lớn, chẳng hạn nếu S là tập tất cả những chuỗi nhị phân 200 bit (có 2200 chuỗi như vậy). Ví dụ 14.3 Cho S là tập tất cả các cặp số nguyên tố (p, q) và f(p, q) = p × q Dễ thấy rằng từ p, q chúng ta dễ dàng tìm ra f(p, q) nhưng ngược lại trong trư ng hợp p và q là các số nguyên tố khá lớn, chẳng hạn có khoảng 100 chữ số, từ f(p, q) chúng ta phải tốn rất “nhiều” th i gian mới có thể tìm ra p và q. Một ví dụ khác như sau. Cho S = {1, 2, ..., p - 1} với p là một số nguyên tố khá lớn (chẳng hạn có 200 chữ số). Có khá nhiều đa thức f(x) (là song ánh) trên S f(x) = a0 + a1x + a2x2 + ... + anxn (mod p) sao cho từ x chúng ta dễ dàng tính được f(x) nhưng điều ngược lại thì rất khó. Bài toán mật khẩu (password) Một trong những ứng dụng đầu tiên của các hàm một chiều là vào việc giải quyết bài toán về bảo mật các mật khẩu trong các mô hình chứng thực (xác nhận quyền hợp lệ) điện tử (electronic authentication scheme). Ví dụ xét một hệ thống máy tính truy xuất từ xa trong đó mỗi ngư i sử dụng (user) phải đăng nhập (log on) vào hệ thống bằng cách g i đi một mật khẩu (password) bí mật. Rất nguy hiểm về mặt bảo mật nếu chúng ta lưu danh sách những ngư i sử dụng và password của họ trong một dạng không mã hóa trong một file trên máy, vì nó gần như không thể giữ bí mật nội dung file được. R. M. Needham đã đề nghị giải pháp sau đây cho bài toán này. Cho f là một hàm một chiều nào đó trong đó miền xác định của nó là tập các password có thể (là những chuỗi kí tự). Khi một ngư i sử dụng mới tham gia vào hệ thống, anh ta sẽ Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 124 Lý thuyết Thông tin chọn một password, gọi là pi, cho mình. Thay vì máy tính lưu trữ pi, nó sẽ lưu trữ chuỗi f(pi) cái mà dễ dàng tính được từ pi. Một ngư i bất kỳ không có quyền hợp lệ là có thể xem được nội dung của file cái mà chứa danh sách tên ngư i sử dụng tương ứng. Có nghĩa là file này không cần được giữ bí mật. Khi ngư i sử dụng ui đăng nhập vào hệ thống, anh ta chỉ cần gõ vào tên đăng nhập ui và mật khẩu pi của anh ta, máy tính sẽ tính f(pi) và so sánh nó với phần tử (ui , f(pi)) trong file. Sự trùng khớp cho phép ui truy xuất vào hệ thống. Còn những ngư i không có quyền hợp lệ muốn bẻ gãy hệ thống bằng cách ăn cắp password thì phải tìm pi từ f(pi) tức là tìm hàm ngược của f. 14.7 Cơ sở toán học của m t mã hóa Kí hiệu ước số chung lớn nhất c số chung l n nhất của các số nguyên n1, n2, …, nk đ ợc kí hi u là gcd(n1, n2, …, nk). Hàm-phi Euler φ(n) V i n là số tự nhiên, φ(n) đ ợc định nghĩa là số các số tự nhiên nhỏ hơn n và nguyên tố cùng nhau v i n. Ví dụ φ(4) = 2 (bao gồm 1 và 3), φ(5) = 4, φ(6) = 1, φ(7) = 6, φ(8) = 4. Ta có một số kết quả sau. 1. Với p nguyên tố thì φ(p) = p - 1, 2. Với p nguyên tố, k là số tự nhiên thì φ(pk) = pk – pk - 1 = pk - 1(p – 1) 3. Với m, n là các số tự nhiên nguyên tố cùng nhau thì φ(mn) = φ(m) φ(n) Định lý 14.4 Định lý Fermat N u p là số nguyên tố, a là m t số nguyên thì ap ≡ a (mod p) N u p không là c số của a thì ap – 1 ≡ 1 (mod p) Ví dụ 14.4 45 ≡ 4 (mod 5), 47 ≡ 4 (mod 7), 47 - 1 ≡ 1 (mod 7), 105 - 1 ≡ 0 (mod 5) Định lý 14.5 Định lý Fermat mở rộng (Euler) N u a và m nguyên tố cùng nhau thì aφ(m) ≡ 1 (mod m) Trong trư ng hợp m là nguyên tố thì φ(m) = m – 1 ta có định lý Fermat. Hệ quả 14.3 V i a, b, c, m là các số tự nhiên, a ≡ b (mod φ(m)), c và m nguyên tố cùng nhau (tức gcd(c, m) = 1) thì ca ≡ cb (mod m) Thật vậy a ≡ b (mod φ(m)) nên a = kφ(m) + b suy ra ca ≡ ckφ(m) + b ≡ ckφ(m) × cb≡ 1 × cb ≡ cb (mod m) Hệ quả 14.4 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 125 Lý thuyết Thông tin N u e, d là các số nguyên thõa mãn e.d ≡ 1 (mod φ(m)) thì v i mọi số c nguyên tố cùng nhau v i m ta có (c e ) d ≡ c(mod m) Hệ quả này được suy ra từ hệ quả trên bằng cách áp dụng a = e.d còn b = 1. Căn nguyên th y (primitive root) Cho n và a là các số tự nhiên nguyên tố cùng nhau và 1 ≤ a ≤ n. N u ∀ d, 1≤ d < φ(n) mà ad ≠ 1 (mod n) thì a đ ợc gọi là căn nguyên thủy của n. Ví dụ, 2 là căn nguyên thủy của 5 b i vì trong mod 5 21 = 2, 22 = 4, 23 = 3, 24 = 1 Nhận xét Không phải mọi số nguyên đều có căn nguyên thủy. 8 là số tự nhiên nhỏ nhất không có căn nguyên thủy. Định lý 14.6 Số n có căn nguyên thủy n u và chỉ n u n là 1, 2, 4 hoặc n có d ng pk hoặc 2pk trong đó p là m t số nguyên tố lẽ và k là số tự nhiên. N u n có căn nguyên thủy thì nó có chính xác φ(φ(n)) căn nguyên thủy. Bổ đề 14.1 Mỗi số tự nhiên mà không ph i là số chính ph ơng (bình ph ơng của m t số tự nhiên khác) là căn nguyên thủy của m t số nguyên tố nào đó. Nhận xét Nếu n là số tự nhiên khá lớn (có vài trăm chữ số), cho đến bây gi chưa có một giải thuật hiệu quả (chạy trong th i gian “chấp nhận được”) để tìm căn nguyên thủy của nó. Hàm logarit rời rạc Cho n là m t số tự nhiên bất kỳ có căn nguyên thủy là a. V i x, y là các số tự nhiên trong đó (0 ≤ x < φ(n)) và thõa y = ax (mod n) thì x đ ợc gọi là logarit rời r c của y v i cơ số a và tính trong mod n và đ ợc vi t x = loga y (mod n) Nhận xét Hàm ax trên là một hàm một chiều. Tức là từ x chúng ta dễ dàng tính được y, nhưng ngược lại từ y rất khó để tính được x. Hiện tại chưa có một giải thuật hiệu quả nào, chạy trong th i gian “chấp nhận được”, thực hiện được điều này. ng dụng hàm một chiều để giải quyết bài toán phân phối khóa Một trong những bài toán cơ bản của các phương pháp mật mã hóa cổ điển là làm thế nào để phân phối khóa một cách an toàn. Nếu thông báo không thể được truyền đi an toàn thì liệu khóa có thể được truyền đi một cách an toàn ? Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 126 Lý thuyết Thông tin Năm 1976, Diffie và Hellman đã đề nghị một cách rất hiệu quả để giải quyết bài toán này bằng cách dựa trên tính chất một chiều của hàm logarit r i rạc đã nói trên và sau đó phương pháp này đã được hiện thực b i Hewlett Packard và tập đoàn Mitre. Xét một tập những ngư i sử dụng ui (1 ≤ i ≤ n) muốn truyền thông với nhau. Cho p là một số nguyên tố rất lớn (p lớn hơn n nhiều) và có căn nguyên thủy là a. Mỗi ngư i sử dụng ui sẽ sinh ra một cách độc lập một số tự nhiên xi ngẫu nhiên trong khoảng {1, 2, ..., p - 1} và giữ nó bí mật. Tuy nhiên, anh ta sẽ công bố khóa công khai của anh ta là y i = a xi (mod p) Khi ui và uj truyền thông với nhau thì chúng sẽ sử dụng khóa giữa chúng như sau k ij = a xi x j (mod p ) Để tính được kij, uj sẽ dựa vào y i = a (mod p) đã công bố công khai của ui và khóa xj bí mật của nó, rồi tính kij bằng cách sau xi k ij = y i j (mod p ) x Và đối ui để tính được kij cũng sẽ làm tương tự như trên. Bằng cách này, dễ nhận thấy rằng, một ngư i khác ui và uj muốn biết được kij là rất khó. Đến đây chúng ta kết luận bài này bằng một phát biểu dựa trên ý kiến của Shannon. Bất kỳ một hệ mật mã nào cũng có thể bị bẽ gãy vấn đề là chúng ta sẽ xây dựng hệ mật mã sao cho việc bẻ gãy là tốn nhiều th i gian và chi phí. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 127 Lý thuyết Thông tin BÀI 15 CHU N M T MÃ HÓA D LI U - DES 15.1 Giới thiệu 15.2 Giải thuật mã hóa và giải mã 15.3 Độ an toàn của DES 15.1 Gi i thi u Sau chiến tranh Thế giới lần II, chính phủ, quân đội Mỹ và một số công ty Mỹ nhận thấy tầm quan trong của việc bảo mật dữ liệu đã tiến hành xây dựng các công cụ mã hóa. Đối với dân chúng, mặc dù vấn đề này cũng thu hút được sự quan tâm nhưng việc bảo mật thông tin truyền nhận vẫn còn theo phương pháp truyền thống là dùng cục xi để niêm phong. Cuộc cách mạng máy tính và thông tin điện tử đã tác động lên xã hội và làm thay đổi cách thức truyền thông thông thư ng của dân chúng. Chính phủ Mỹ đã sớm nhận ra rằng cùng với sự bùng nổ của cuộc cách mạng máy tính, sẽ là sự bùng nổ và tăng trư ng của các dịch vụ truyền thông, tài chính điện tử … Lúc đó nhu cầu bảo mật thông tin của các cơ quan và dân chúng sẽ ngày càng tăng và sẽ m ra một chân tr i rộng lớn của việc ứng dụng mã hóa bảo mật vào trong việc bảo mật thông tin. IBM là một trong những công ty đầu tiên nghiên cứu về vấn đề này và đã lập một nhóm nghiên cứu vào cuối thập niên 1960. Nhóm này đứng đầu là Horst Feistel đã lập ra hệ mã hóa khóa bí mật có tên gọi là Lucifer. Và nó đã có khách hàng đầu tiên là tập đoàn bảo hiểm Lloyd’s of London vào năm 1971. Vào những năm 1973 - 4 Cục Tiêu chuẩn Quốc gia Hoa Kỳ (National Bureau of Standards – NBS) đã khuyến khích những ai quan tâm g i những đề nghị đối với chuẩn mật mã hóa dữ liệu. Các yêu cầu cơ bản đối với giải thuật mật mã hóa là 1. Có tính bảo mật cao. 2. Công khai, dễ hiểu. Khả năng bảo mật được chốt vào khóa chứ không vào bản thân giải thuật (cái mà không thể giữ bí mật được) 3. Nó có thể triển khai trên các thiết bị điện tử kích thước nhỏ. Năm 1977 dựa vào Lucifer, NBS công bố chuẩn mật mã hóa dữ liệu Hoa Kỳ (Data Encryption Standard - DES). DES đã được sử dụng rộng rãi không chỉ Mỹ mà còn nhiều nước trên thế giới trong gần 3 thập kỷ qua. Nó dùng khóa có độ dài 56 bit để mã hóa các khối dữ liệu 64 bit. Cả bên mã hóa lẫn bên giải mã đều dùng chung một khóa. Và DES thuộc vào hệ mã khóa bí mật. 15.2 Gi i thu t mã hóa và gi i mã Trên quan điểm toán học, DES có thể được xem như một chuỗi mật mã đơn giản trên bảng chữ cái 264 kí tự. Tức là thông báo được “bẻ” ra thành từng khối 64 bit và mỗi khối như vậy được xem là một kí tự. Thông báo 64 bit DES Chuỗi mật mã 64 bit Khóa 56 bit Hình 15.1 Mô hình DES Khóa k được chọn là một trong 256 chuỗi 56 bit và từ nó trích ra 16 khóa con k1, k2, …, k16. Mỗi khóa con ki là một chuỗi con 48 bit của khóa k 56 bit. Mỗi khóa con này được sử dụng trong một khối mã hóa (thực hiện một vòng mã hóa) để biến đổi 64 bit đầu vào của Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 128 Lý thuyết Thông tin khối thành 64 bit đầu ra. Kí hiệu mỗi khối mã hóa này là EB. Những khối mã hóa này sẽ được dùng nối kế tiếp nhau như hình minh họa bên dưới. đây, DES có sử dụng phép hoán vị kh i đầu (IP – initial permutation) và hoán vị ngược của nó (IP - 1) lượt cuối tuy nhiên chúng thật sự không mang ý nghĩa mật mã hóa. k1 Thông báo 64 bit 32 IP 32 EB 1 Hình 15.2 k2 32 32 EB 2 k16 32 32 32 32 EB 16 IP - 1 Chuỗi mật mã 64 bit Hình ảnh 16 vòng mã hóa của DES Cách tạo các khóa con Input: - Khóa k ban đầu 56 bit. Khóa này được giữ bí mật. - Phép hoán vị P56 để hoán vị chuỗi 56 bit. - Dãy 16 số si nguyên dương, mỗi số xác định số bước dịch vòng sang trái cho mỗi khóa con tương ứng. Dãy 16 số này là (1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1) - Phép chọn S48 mô tả 48 vị trí được chọn từ một chuỗi có 56 bit. Output: - Các khóa con ki 48 bit. B c 1. Dùng phép hoán vị P56 để hoán vị k được kết quả là h. Viết h thành hLhR trong đó hL là 28 bit đầu của h còn hR là 28 bit sau của h. B c 2. Dịch vòng hL và hR sang trái si bit (ứng với việc tạo ra khóa ki). Ghép hai kết quả con này lại được kết quả là g. B c 3. Áp dụng phép chọn S48 để chọn ra 48 bit 48 vị trí đã cho được kết quả là khóa con ki. Quá trình mã hóa c a các khối EBi Input: - Chuỗi w 64 bit xuất ra từ khối trước đó. - Khóa ki tương ứng với khối EBi. - 8 hộp thay thế Sj - box, (j = 1, 2, …, 8) cho biết công khai. Mỗi hộp là một ma trận 4 × 16 (4 hàng và 16 cột). Mỗi hàng là mỗi vectơ 16 thành phần, mỗi thành phận nhận giá trị nguyên từ 0 đến 15 và không có hai thành phần nào giống nhau. Nói cách khác mỗi hàng là một hoán vị nào đó của dãy số nguyên từ 0 đến 15: (0, 1, 2, …, 15). - Phép hoán vị P32 để hoán vị một chuỗi 32 bit. Output: - Chuỗi 64 bit kết quả (sẽ là đầu vào của khối kế tiếp). B c 1. Viết w = a0a1…a63 = XLXR trong đó XL là 32 bit đầu của w, XR là 32 bit sau của w, tức XL = a0a1…a31, XR = a32a33…a63. Trong bước này chỉ có 32 bit sau XR được biến đổi còn 32 bit đầu XL vẫn giữ nguyên. Quá trình biến đổi XR như sau. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 129 Lý thuyết Thông tin B1. 1. Từ chuỗi XR 32 bit chúng ta sinh ra chuỗi E 48 bit (để sau này đem cộng với khóa 48 bit) bằng cách nhặt ra 8 lần mỗi lần 6 bit cụ thể như sau. Lần đầu dịch vòng XR sang phải 1 bit được kết quả a63a32a33…a61a62 rồi nhặt ra 6 bit đầu là a63a32a33a34a35a36. Lần hai dịch vòng kết quả vừa rồi sang trái 4 bit được kết quả a35a36…a63a32a33a34 rồi nhặt ra 6 bit đầu là a35a36a37a38a39a40. Các lần kế tiếp lại dịch kết quả của lần trước sang trái 4 bit rồi nhặt ra 6 bit đầu. Xếp 8 lần nhặt 6 bit này thành 8 hàng ta được kết quả sau. a63 a32 a33 a34 a35 a36 a35 a39 a 43 a36 a 40 a 44 a37 a 41 a 45 a38 a 42 a 46 a39 a 43 a 47 a 40 a 44 a 48 a 47 a51 a55 a59 a 48 a52 a56 a60 a 49 a53 a57 a61 a50 a54 a58 a62 a51 a55 a59 a63 a52 a56 a60 a32 48 bit kết quả này ta gọi là E. B1. 2. Viết khóa con ki theo thứ tự từ trái qua, thành 8 hàng mỗi hàng 6 bit như trên. Cộng 8 hàng trên với 8 hàng của khóa theo phép XOR bit. Kết quả là một “ma trận” M có kích thước 8 × 6, ma trận này dùng để định vị “tọa độ” các thành phần trong các S - box. M 8× 6 = b11 b21 b31 b12 b22 b32 b13 b23 b33 b14 b24 b34 b15 b25 b35 b16 b26 b36 b41 b51 b42 b52 b43 b53 b44 b54 b45 b55 b46 b56 b61 b71 b81 b62 b72 b82 b63 b73 b83 b64 b74 b84 b65 b75 b85 b66 b76 b86 B1. 3. Mỗi hàng bj1 bj2 bj3 bj4 bj5 bj6 bj7 bj8 sẽ được dùng với hộp Sj - box (là ma trận 4 × 16) tương ứng theo cách sau (ma trận 4 × 16). Hai bit bj1bj8 tạo nên giá trị chỉ ra chỉ số hàng của Sj - box (đánh số bắt đầu bằng 0). Bốn bit bj2 bj3 bj4 bj5 bj6 bj7 tạo nên giá trị chỉ ra chỉ số cột của Sj - box (đánh số bắt đầu bằng 0). Phần tử tương ứng với hàng và cột này sẽ được chọn. Đây là một giá trị nguyên trong khoảng từ 0 đến 15, (được biểu diễn thành một chuỗi 4 bit). 8 hàng của M sẽ cho phép chọn ra được 8 phần tử trong 8 Sj - box tương ứng, mỗi phần tử sẽ là một chuỗi 4 bit. Viết 8 chuỗi này theo thứ tự ta được chuỗi kết quả N 32 bit. B1. 4. Dùng phép hoán vị P32 để hoán vị chuỗi N bước trên ta được chuỗi kết quả R của Bước 1. Chúng ta có thể xem tất cả các bước biến đổi trong Bước 1 này tạo thành một phép biến đổi Ti (tương ứng với khối EBi) biến đổi nữa chuỗi bên phải XR (32 bit) của chuỗi thông báo w (64 bit) thành chuỗi kết quả XR* = Ti(XR) (32 bit) Đến cuối bước này chuỗi văn bản w = XLXR được biến đổi thành chuỗi sau Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 130 w = XLXR → XLTi(XR) = XLXR* B Lý thuyết Thông tin c 2. Cộng XL với XR* theo phép XOR và thay XL bằng kết quả này. Nếu kí hiệu phép XOR là ⊕ thì chúng ta viết bước này như sau: XL ⊕ XR* Đến cuối bước này chuỗi văn bản w = XLXR được biến đổi thành chuỗi sau w = XLXR → XLTi(XR) = XLXR* → (XL⊕XR*)XR Ta có thể xem từ lúc bắt đầu quá trình mã hóa của khối EBi cho đến cuối bước này chúng ta đã thực hiện một phép biến đổi Π được biểu diễn như sau. Π(XL, XR) = (XL⊕Ti(XR), XR) Một số tài liệu gọi Π là ánh xạ “nâng” theo Ti (có chứa khóa ki trong quá trình tính toán của Ti). Chú ý chúng ta có Π2(XL, XR) = Π(XL⊕Ti(XR), XR) = (XL⊕Ti(XR)⊕Ti(XR), XR) = (XL, XR) Vậy Π có hàm ngược của nó cũng chính là nó, Π. Đây là cơ s cho việc giải mã sau này. B c 3. Dùng phép đảo vế dữ liệu để chuyển 32 bit đầu thành 32 bit sau và ngược lại. Nếu chúng ta kí hiêu phép đảo về là ℜ thì chúng ta có thể định nghĩa ℜ như sau: ℜ(XL, XR) = XR, XL trong đó XL và XR lần lượt là nửa đầu và nửa sau của chuỗi X. Đến cuối bước này chuỗi văn bản w = XLXR được biến đổi thành chuỗi sau w = XLXR → Π(XL, XR) = (XL⊕Ti(XR), XR) = (XL⊕XR*, XR) → (XL⊕XR*, XR) = XR(XL⊕XR*) Chúng ta cũng thấy rằng hàm ℜ có hàm ngược của nó cũng chính là nó, ℜ. Đến đây ta có thể xem quá trình mã hóa của một khối EBi như là một hàm f được biểu diễn như sau f(XL, XR) = ℜ[Π(XL, XR)] Để đơn giản chúng ta có thể viết f như sau trong đó hàm nào đứng trước có nghĩa là được thực hiện trước. f=Ποℜ Và rõ ràng hàm f có hàm ngược của nó là f -1 = ℜ ο Π Cuối cùng chúng ta có thể biểu diễn giải thuật mã hóa của DES như sau: IP o ∏ T1 oℜ o ∏ T2 oℜ o K o ∏ T15 oℜ o ∏ T16 o IP −1 Chú ý vòng thứ 16 không sử dụng phép đảo vế dữ liệu như các vòng trước. Vì vậy nếu chúng ta xem lại Hình 15.2 sẽ thấy khối EB cuối do không thực hiện phép đảo vế dữ liệu như các khối trước nên đầu ra của nó được đảo chéo. Từ đây chúng ta cũng xác định được qui trình giải mã IP o ∏ T16 oℜ o ∏ T15 oℜ o K o ∏ T2 oℜ o ∏ T1 o IP −1 15.3 Đ an toàn của DES Ban đầu, DES có vẻ như vững chắc, tuy nhiên sau một th i gian dài sử dụng DES đã bộc lộ ra những yếu điểm. Yếu điểm chỗ chiều dài của khóa chỉ 56 bit là không đủ lớn. Số lượng khóa có thể sinh ra là không đủ lớn so với số lượng chip và tốc độ xử lý của các siêu máy tính ngày nay, nhất là các dàn máy song song chuyên dụng phục vụ cho việc giải mã. Năm 1997 một nhóm nghiên cứu đã sử dụng một siêu máy tính để dò các loại khóa có thể Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 131 Lý thuyết Thông tin sinh ra của DES và đã tìm ra được khóa trong vòng chưa đầy 2 gi đồng hồ. Chính vì vậy một số hệ mã mới đã được ra đ i chẳng hạn như Giải thuật Mã hóa Dữ liệu Quốc tê (International Data Encryption Algorithm - IDEA) dùng khóa với chiều dài 128 bit hoặc Chuẩn Mã hóa Nâng cao (Advanced Encryption Standard - AES) với khóa có chiều dài còn lớn hơn. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 132 Lý thuyết Thông tin BÀI 16 H MÃ KHÓA CÔNG KHAI RSA 16.1 Giải thuật mã hóa và giải mã RSA 16.2 Độ an toàn của RSA Hệ mã khóa công khai RSA do ba nhà nghiên cứu Rivest, Shamir và Adleman đề xuát vào năm 1978. Việc xây dựng nó đặt trên nên tảng các bài toán số học mà đặc biệt là các bài toán về các số nguyên tố lớn. 16.1 Gi i thu t mã hóa và gi i mã RSA Quá trình mã hóa Chúng ta sẽ mã hóa từng khối kí tự một. Mỗi khối kí tự có chiều dài m (kí tự). Số m này sẽ được lựa chọn sao cho phù hợp. Nếu văn bản ban đầu có chiều dài không là bội số của m thì chúng ta sẽ bổ sung thêm nhiều lần một kí tự X nào đó để chiều dài này là bội số của m. Input: - Số tự nhiên m là chiều dài của khối kí tự cần mã hóa. - Khối kí tự w cần mã hóa có chiều dài m (kí tự). - Số nguyên n (n = pq với p và q là hai số nguyên tố đủ lớn, thư ng lớn hơn số M được tính bên dưới). - Số tự nhiên ke đủ lớn sao cho, gcd(ke, φ(n)) = 1, đồng th i tồn tại số tự nhiên kd thỏa ke × kd ≡ 1 (mod φ(n)). Thư ng ke được khuyên nên chọn là một số nguyên tố. đây cặp số (n, ke) chính là khóa công khai còn (n, kd) chính là khóa bí mật. Bí mật được chốt số kd. Output: - Chuỗi mật mã c (là chuỗi các kí số). B c 1. Biểu diễn khối kí tự w thành một số nguyên trong khoảng {1, 2, ..., n}. Thông thư ng cách biểu diễn như sau. Mỗi kí tự của w trong bảng chữ cái (giả sử là bảng chữ cái latinh gồm 26 kí tự) được biểu diễn bằng một số có hai chữ số. Chẳng hạn, A là 01, B là 02, …, Z là 26. Kết quả chuỗi w được biểu diễn thành một chuỗi các kí số và có chiều dài là 2m (kí số). Gọi chuỗi số này là N. Rõ ràng N có giá trị không vượt quá giá trị cực đại sau đây M = 2626…26 (m lần số 26) M = 26(100m - 1)/99 N<M Các số nguyên tố p, q dùng để tính n thư ng lớn hơn số M này. p, q > M > N Như vậy N sẽ nguyên tố cùng nhau với p, q và dĩ nhiên là nguyên tố cùng nhau với n. B c 2. Số tự nhiên ke được chọn đủ lớn để N k e > n với đa số các số N trên. Chuỗi mật mã c chính là chuỗi số có được thông qua phép toán sau. c ≡ N k e (mod n) Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 133 Lý thuyết Thông tin Dĩ nhiên số c nhỏ hơn n và với việc chọn ke thỏa N k e > n thì c không thể trùng với N k e được. Quá trình giải mã Input: - Chuỗi mật mã c (là chuỗi các kí số). - Số nguyên n đã cho giải thuật mã hóa. - Khóa bí mật kd. Output: - Khối kí tự w ban đầu cần mã hóa. B c 1. Theo Hệ quả 14.4 chúng ta có (N ) ke kd tức là ≡ N (mod n) c k d ≡ N (mod n) Vậy chuỗi N được tính bằng cách (với N < n) N ≡ c k d (mod n) B c 2. Chiều dài của N sẽ là 2m hoặc 2m – 1 kí số. Nếu N dài 2m – 1 kí số thì thêm số 0 vào vị trí đầu bên trái của N (để đủ 2m kí số). Tách từng hai kí số một từ trái sang và biến đổi thành kí tự chữ trong bảng chữ cái đã cho ta được khối kí tự cần mã hóa ban đầu w. Nhận xét Mấu chốt của hệ mã khóa công khai RSA nằm chỗ cho dù biết chuỗi mật mã c và khóa công khai ke, nếu không biết được khóa bí mật kd thì việc tìm ra N là rất khó. Ta có ke × kd ≡ 1 (mod φ(n)). Vậy để tìm khóa kd chúng ta phải biết φ(n). Việc tìm φ(n) dựa vào n đã biết không dễ hơn so với việc phân tích n ra thành các thừa số nguyên tố, b i vì khi đã biết φ(n) thì chúng ta có thể giải ra p và q bằng một hệ hai phương trình hai biến. n = pq φ(n) = (p – 1) × (q – 1). Khó đây nằm chỗ chúng ta phải làm việc với những số nguyên rất rất lớn. Chẳng hạn bảng sau đây cho chúng ta thấy độ phức tạp của các thuật toán phân tích một số nguyên n ra thừa số nguyên tố bằng các thuật toán hiệu quả nhất hiện nay trên một máy tính có tốc độ xử lý 1 tỉ phép tính trong 1 giây. (Tham khảo từ trang 5 và 6 sách số [5]) Số chữ số thập phân 50 75 100 200 300 500 Số phép tính bit 1,4 × 1010 9,0 × 1012 2,3 × 1015 1,2 × 1023 1,5 × 1029 1,3 × 1039 Th i gian 14 giây 2,5 gi 26 ngày 15 gi 3,8 × 106 năm 4,9 × 1012 năm 4,2 × 1022 năm Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 134 Lý thuyết Thông tin 16.2 Đ an toàn của RSA Nếu p và q là các số nguyên tố khoảng 100 chữ số thập phân thì n có khoảng 200 chữ số. Việc phân tích n thành p và q như bảng trên cho thấy tốn một khoảng th i gian hàng triệu năm với những máy tính rất mạnh. Sau khi tìm ra hệ mã này, Rivest, Shamir và Adleman đã công bố trên một bài báo khoa học đăng MIT. Sau đó trên cột báo Martin Gardner’s của t báo Scientific American, họ có đưa ra l i thách thức bạn đọc bẻ khóa một mẩu tin nhỏ đã được mã hóa với n = 114381625757888867669235779976146612010218296721242362562561842 935706935245733897830597123563958705058989075147599290026879543541 e = 9007 Mẩu tin “first solver wins one hundred dollars” xuất hiện trong dạng mã hóa với A = 01, B = 02, …, Z = 26 và chỉ được giải mã vào ngày 26/4/1994 bằng một cố gắng tổng lực mang tính quốc tế (qua internet) với việc sử dụng 1600 cái bao gồm các trạm làm việc (workstations), các máy cỡ lớn (mainframes) và các siêu máy tính (supercomputers) tấn công trong vòng 8 tháng liên tục để phân tích số nêu trên ra thừa số nguyên tố. Thực tế này cho thấy rằng thuật toán RSA là rất an toàn, vì không mấy khi có điều kiện để huy động một lực lượng tính toàn hùng hậu như thế vào công việc giải mã một mẫu tin. Nhận xét Giải thuật mã hóa RSA mặc dù rất an toàn nhưng tốc độ mã hóa và giải mã chậm, chậm hơn giải thuật DES nhiều lần (hàng ngàn lần). Vì vậy ngư i ta thư ng kết hợp hai phương pháp mã hóa DES và RSA theo cách sau: 1. Dùng DES để mã hóa khối văn bản. 2. Dùng RSA để mã hóa khóa mà DES đã dùng để mã hóa khối văn bản. Sự kết hợp này tích hợp được cả ưu điểm nhanh chóng của DES và ưu điểm an toàn của RSA. Các giải thuật mã hóa DES và RSA còn được ứng dụng vào rất nhiều vấn đề khác của việc mật mã hóa chẳng hạn như việc xác nhận chủ thể (xác nhận ngư i g i văn bản để tránh sự giả mạo) hay còn gọi là chữ ký điện tử. Tuy nhiên trong khuôn khổ của môn học này không đủ th i lượng cho phép chúng ta trình bày vấn đề này. Để tìm hiểu thêm bạn đọc có thể xem thêm các tài liệu tham khảo. Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 135 Lý thuyết Thông tin TÀI LI U THAM KH O [1] [2] [3] [4] [5] [6] [7] Masud Mansuripur, Introduction to Information Theory, Prentice–Hall, Inc, 1987 Robert B.Ash, Information Theory, Dover Publications, Inc, New York, 1990 C. E. Shannon, A Mathematical Theory of Communication, The Bell System Technical Journal, Vol. 27, pp. 379–423, 623–656, July, October, 1948. Dominic Welsh, Codes and Cryptography, Arendon Press, Oxford, 1987 Phạm Huy Điển, Hà Huy Khoái, Mã hóa thông tin. Cơ sở toán học & ứng dụng, NXB ĐHQG Hà Nội, 2004 Đặng Văn Chuyết, Nguyễn Tuấn Anh, Cơ sở Lý thuy t truy n tin (t p m t và hai), NXB Giáo dục, 1998 Nguyễn Thúy Vân, Lý thuy t mã, NXB Khoa học Kỹ thuật, 2000 Ngư i soạn Hồ Văn Quân - Khoa CNTT - ĐH Bách Khoa Tp.HCM 136