CÁC PHÉP TÍNH TRÊN ĐA THỨC

Một phần của tài liệu Giáo trình bảo mật thông tin (Trang 71)

Ta sẽ khảo sát một số phép tính modulo trên các đa thức.

Tính “đa thức dư” cũng tƣơng tự nhƣ tính số dƣ đối với các số: Số dƣ của đa thức p(x) cho đa thức d(x) (deg p(x)  deg d(x)) là đa thức duy nhất r(x) thoả điều kiện p(x) = q(x)  d(x) + r(x) với điều kiện deg r(x) < deg d(x). Nếu r(x) = 0 ta nĩi d(x) chia hết p(x), hoặc d(x) là thừa số của p(x). r(x) gọi là đa thức dƣ. Thơng thƣờng ngƣời ta chọn d(x) là đa thức tối giản

(đa thức nguyên tố), tức là nĩ chỉ cĩ thừa số là 1 và chính nĩ.

Phép rút gọn p(x) theo modulo d(x) là tìm đa thức dƣ r(x) sao cho: p(x) = q(x)  d(x) + r(x). Ta thấy, số hạng bậc cao nhất của q(x) và d(x) nhân với nhau sẽ ra số hạng bậc cao nhất của p(x) từ đĩ để giảm bậc của đa thức ta sẽ rút gọn số hạng cao nhất trƣớc bằng cách thay nĩ bởi phần cịn lại của đa thức tối giản (đĩ là một tính chất của tốn tử XOR).

Để minh hoạ, ta xét GF(23

) = {0, 1, x, x + 1, x2, x2 + 1, x2 + x, x2 + x + 1}, hay là các số 3 bit: {000, 001, 010, 011, 100, 101, 110, 111}. Để rút gọn các đa thức bậc cao, ta sử dụng đa thức tối giản d(x) = x3

Cĩ thể thấy, x3 cĩ thể đƣợc rút gọn bằng cách thay nĩ bởi x + 1. Ví dụ: Rút gọn p(x) = x4 + x3 + x2 + x hay: 11110. Ta cĩ: x3 = d(x) + x + 1 = (x + 1) mod d(x)  x4 = (x2 + x) mod d(x). Do đĩ: p(x) = x4 + x3 + x2 + x = (x2 + x) + (x + 1) + x2 + x = (x + 1) mod d(x). Tƣơng tự cho chuỗi bit ta cũng cĩ: 11110 = 10000 + 1000 + 110 = 110 + 11 + 110 = 11.

5.5.1 Phép cộng đa thức

Cộng trong GF(qn) là lấy tổng các hệ số tƣơng ứng theo mod q: Nếu a(x) = an-1xn-1 +…+ a1x + a0 và b(x) = bn-1xn-1 +…+ b1x + b0 thì a(x)  b(x) = (an-1  bn-1)  xn-1 +…+ (a1 b1)  x + (a0 b0). Ở đây, phép tính  là phép cộng hai hệ số, sau đĩ lấy modulo q.

Trong GF(2n) thì phép cộng hai đa thức chính là phép XOR của hai số n bit. Kết quả của phép tính cộng đa thức trong GF(23) cĩ thể đƣợc tham chiếu theo bảng dƣới đây:

Hình 5.1 Cộng hai đa thức trong GF(23)

5.5.2 Phép nhân đa thức

Nhân trong GF(qn) là nhân 2 đa thức bình thƣờng sau đĩ:

Ví dụ: Nhân trong GF(23) với d(x) = x3

+ x + 1

Hình 5.2 Nhân hai đa thức trong GF(23)

5.5.3 Biểu diễn đa thức trên GF(2n

)

Cĩ thể biểu diễn các đa thức trên GF(2n) nhƣ là các chuỗi bit của các hệ số:

a(x) = an-1an-2…a1a0

Ví dụ: Trong GF(23): x2 + 1  101; x2 + x + 1  111

Phép cộngXOR ()

Ví dụ: (x2+1)  (x2+x+1) = x  101  111 = 010

Phép nhânDịch chuyển & XOR (với d(x) = x3 + x + 1)

Ví dụ: (x+1) (x2 +1) = x (x2 +1) + 1 (x2 +1) = x3 + x + x2 + 1 = x +1 + x + x2 + 1 = x2

011 101 = dịch trái 1 bit (101)  dịch trái 0 bit (101) = 1010  101 = 1111 = 1111 + 1011 = 100

Rút gọn moduloRút gọn từ trái sang phải

Ví dụ: Rút gọn x3 + x2 + x + 1 = (x + 1) + (x2 + x + 1) = x2

1111 = 1111  1011 = 100 5.6. GIỚI THIỆU LÝ THUYẾT PHỨC TẠP

Lý thuyết phức tạp (Complexity theory) là lĩnh vực tốn học nghiên cứu mức độ khĩ khăn trong việc giải các bài tốn nĩi chung. Các bài tốn thơng thƣờng sẽ đƣợc giải bởi những thuật tốn. Theo lý thuyết phức tạp, các thuật tốn sẽ đƣợc xếp loại tuỳ theo mức độ khĩ của chúng. Độ phức tạp của thuật tốn cĩ thể coi nhƣ là một hàm của dữ liệu đầu vào.

Dƣới đây là độ phức tạp thuật tốn giải vài bài tốn phổ biến (n là độ dài chuỗi bit đầu vào): (adsbygoogle = window.adsbygoogle || []).push({});

̶ Phép nhân các số: O(n2) ̶ Nhân các ma trận: O(n2(2n-1)) ̶ Giải ơ chữ: O(26n)

̶ Kiểm tra số nguyên tố: O(n2(log log n))

Thơng thƣờng, chúng ta hay làm việc với độ phức tạp xấu nhất. Tuy nhiên, trong một số trƣờng hợp ta sẽ làm việc với độ phức tạp trung bình.

Một số thuật tốn với độ phức tạp khác nhau:

Thuật toán với thời gian đa thức (polynomial time) (P) là thuật tốn mà nĩ giải một bài tốn cụ thể trong thời gian O(p(n)), với p là một đa thức của độ dài đầu vào n.

Thuật toán với thời gian lũy thừa (exponential time) (E) – là thuật tốn mà thời gian giải của nĩ cĩ tốc độ tăng rất lớn theo đầu vào (do đĩ, nĩ khơng giải đƣợc trên máy tính với các giá trị đầu vào lớn).

Thuật toán khơng tự quyết với thời gian đa thức (non-deterministic polynomial time) (NP) là thuật tốn mà mọi dự đốn lời giải của bài tốn tƣơng ứng cĩ thể đƣợc kiểm tra trong thời gian đa thức. Tuy nhiên, lời giải thì nĩ lại cĩ thời gian luỹ thừa.

Xét các bài tốn cĩ thuật tốn giải tƣơng ứng. Các bài tốn mà thuật tốn giải nĩ cĩ thời gian đa thức sẽ đƣợc gọi là các bài tốn với đơ ̣ phƣ́c ta ̣p đa thức.

nếu dƣ̃ liê ̣u đầu vào nhỏ . Các bài tốn NP là các bài tốn chƣa đƣợc phân loại. Bình thƣờng, nĩ thuộc loại bài tốn với độ phức tạp luỹ thừa , nhƣng nếu biết thêm mơ ̣t điều kiê ̣n nhỏ (khĩa), nĩ sẽ trở thành bài tốn với độ phƣ́c ta ̣p đa thƣ́c.

Đối với bài tốn mật mã thì mã hĩa và giải mã cần đơn giản (khi biết khĩa), nhƣng thám mã phải rất khĩ (khi khơng biết khĩa). Từ yêu cầu trên, bài tốn mật mã cần phải thuộc lớp NP.

5.7. CÂU HỎI VÀ BÀI TẬP

1. Tính các lũy thừa sau, sử dụng thuật tốn bình phƣơng và nhân: a. 321 mod 11

b. 7109 mod 13

2. Tính số nghịch đảo sử dụng cả hai cách sau: định lý Euler và thuật tốn Euclid mở rộng:

a. 11-1 mod 35; b. 13-1 mod 48;

3. Tính hàm phi Euler φ(n) khi giá trị n bằng: a. 600 b. 2012 4. Làm các phép tính trong GF(23), với d(x) = x3 + x + 1 a. (x2 + 1) + (x2 + x) b. (x2 + x) + (x2 + x + 1) c. (x2 + 1)  (x2 + x) d. (x2 + x)  (x2 + x + 1)

5. Tính các lũy thừa sau trên GF(24) với đa thức tối giản (x5+x2+1): a. (x+1)8;

b. (x2+1)6; c. (x3+1)3

Chương 6

CHUẨN MẬT MÃ CAO CẤP AES

Chương 6 trình bày về mật mã khối AES - là chuẩn mật mã cao cấp đang được sử dụng rộng rãi trong thời gian hiện nay.

Vào những năm cuối của thập kỷ 90, chuẩn mật mã khối DES đã bị bẻ khố bằng vét cạn khố và trở nên khơng cịn an tồn nữa. Việc thay thế DES bằng một mật mã mới, hiệu quả hơn là cần thiết. Viện chuẩn và cơng nghệ của Mỹ (NIST) đã tổ chức cuộc thi thiết kế thuật tốn cho chuẩn mật mã mới (đƣợc đặt tên là Advanced Encryption Standard - AES). Chuẩn mật mã mới dự kiến sẽ đƣợc tìm ra trong một cuộc thi cơng khai trên mạng Internet. Cuộc thi đƣợc cơng bố vào tháng 9/1997. Đến tháng 6/1998, đã cĩ 15 thuật tốn ứng viên đƣợc chấp nhận. Tất cả các thuật tốn đều đƣợc phân tích bởi các nhà mật mã học dựa trên các tiêu chí về bảo mật và hiệu suất thực hiện (trên các máy tính với cấu hình khác nhau, trên thẻ thơng minh, hoặc đƣợc cài đặt trực tiếp trên phần cứng) và tính khả thi khi bộ nhớ hạn chế. NIST đã tổ chức hai hội thảo khoa học để đánh giá các thuật tốn này vào các tháng 8/1998 và tháng 3/1999. Đến tháng 8/1999, NIST cơng bố 5 thuật tốn tốt nhất vào chung kết là: MARS, RC6, Rijndael, Serpent, và Twofish. Tháng 5/2000, NIST tổ chức hội thảo khoa học lần thứ ba để đánh giá tồn diện 5 thuật tốn chung kết này. Tại hội thảo, đại diện tác giả các thuật tốn đã trình bày kỹ những ý tƣởng của mình để các đại biểu đánh giá. Cuối cùng, tháng 10/2000, NIST chính thức cơng bố Rijndael thắng cuộc để trở thành chuẩn mật mã mới AES. Tháng 11/2001, thiết kế chi tiết của AES đƣợc chính thức cơng bố trên FIPS PUB 197.

6.1. MẬT MÃ RIJNDAEL (AES)

Mật mã Rijndael đƣợc thiết kế bởi hai nhà mật mã học ngƣời Bỉ là Vincent Rijmen và Joan Daemen. Đây là mật mã khối với khố mã hố cĩ thể đƣợc lựa chọn với độ dài khác nhau 128/192/256 bit; khối dữ liệu mã hố đầu vào dài 128 bit. Dữ liệu mã hố đƣợc phân thành 4 nhĩm, mỗi nhĩm 32 bit (4 byte). Số vịng lặp tƣơng ứng với các khố là: 10/12/14, trong đĩ, mỗi vịng lặp bao gồm các phép biến đổi sau:

̶ Thay thế byte (dùng một S-box duy nhất)

̶ Đổi chỗ theo dịng (đổi chỗ các byte trong từng dịng) ̶ Trộn các cột (sử dụng phép nhân ma trận)

Bên ngồi các vịng lặp cịn cĩ các bƣớc khởi tạo, XOR các khĩa con và một vịng kết thúc chỉ gồm ba bƣớc (thiếu bƣớc trộn cột). Tất cả các phép tốn đƣợc tổ hợp dựa vào phép tính XOR và các bảng dữ liệu nên rất nhanh và hiệu quả. Thuật tốn cũng hiệu quả hơn cho các máy tính 32 bit.

Các tham số của thuật tốn AES đƣợc biểu diễn trong bảng sau:

Độ dài khố

(words/bytes/bits) 4/16/128 6/24/192 8/32/256 (adsbygoogle = window.adsbygoogle || []).push({});

Độ lớn dữ liện đầu vào

(words/bytes/bits) 4/16/128 4/16/128 4/16/128 Số vịng lặp 10 12 14 Độ lớn khố vịng lặp (words/bytes/bits) 4/16/128 4/16/128 4/16/128 Độ lớn khố mở rộng (words/bytes/) 44/176 52/208 60/240

Hình 6.1 Các tham số của AES

Nhƣ đã trình bày ở trên, thuật tốn AES cho phép ngƣời sử dụng cĩ thể lựa chọn độ dài khố phù hợp. Cĩ ba bộ tham số khác nhau tƣơng ứng với ba độ dài khố khác nhau là 128 bit, 192 bit và 256 bit. Sau đây chúng ta chỉ xét trƣờng hợp khố 128 bit, các trƣờng hợp khác cĩ thể xem thêm trong tài liệu về chuẩn AES, FIPS PUB 197.

Hình 6.2 Mã hố và giải mã AES

Thuật tốn AES nhận đầu vào là dữ liệu cần mã hố gồm 16 byte đƣợc lƣu trong mảng in[16] với kiểu phần tử là byte, khố mở rộng gồm 44 word đƣợc lƣu trong mảng w[44] với kiểu phần tử là word. AES xuất dữ liệu đã mã hố gồm 16 byte đƣợc lƣu trong mảng out[16] với kiểu phần tử là byte.

Biến tạm state[4,4] là mảng hai chiều cĩ kiểu phần tử là byte dùng để lƣu trữ dữ liệu trong quá trình biến đổi. Đầu tiên, dữ liệu đầu vào in[16] sẽ đƣợc gán cho state[4,4], tiếp theo sẽ đƣợc XOR với 16 byte đầu của khố mở rộng. Sau đĩ là 9 vịng lặp, mỗi vịng cĩ 4 phép biến đổi: SubBytes, ShiftRows, MixColumns and AddRoundKey và nhƣ đã nĩi ở trên, tất cả nhằm biến đổi giá trị state. Sau đĩ là 3 phép biến đổi nữa và cuối cùng là gán kết quả cho giá trị out[16] để xuất ra ngồi nhƣ là dữ liệu đã đƣợc mã hố.

Chúng ta sẽ lần lƣợt khảo sát các phép biến đổi chính của AES. Đầu tiên là phép gán in cho state:

Hình 6.4 Biến đổi dữ liệu đầu vào

Bản chất ở đây là việc chuyển ma trận một chiều thành ma trận hai chiều. Cĩ thể sử dụng cơng thức chuyển đổi sau: s [r, c] = in [r + 4c], trong đĩ r là chỉ số của hàng và c là chỉ số của cột.

Hình 6.5 Biến đổi dữ liệu đầu ra

Bản chất ở đây là việc chuyển ma trận hai chiều thành ma trận một chiều. Cĩ thể sử dụng cơng thức biến đổi sau: out[i] = s[i mod 4, i div 4], với i = [0..15].

Một vịng tính tốn của AES gồm cĩ các bƣớc nhƣ sau:

Hình 6.6 Vịng tính tốn đầu tiên

Ta sẽ khảo sát các phép biến đổi trong các vịng tính tốn này. Đầu tiên là phép biến đổi SubBytes.

AES sử dụng S-box để biến đổi một byte thành một byte khác bằng cách tách byte đầu vào thành hai số 4 bit. Các số này là chỉ số hàng và chỉ số cột của S-box để từ đĩ xuất ra byte đầu ra.

Hình 6.7 Biến đổi với S-box

S-box của AES là một bảng nhƣ sau:

Hình 6.8 S-box

S-box đƣợc xây dựng từ phép biến đổi Affine: b‟i = bi  b(i +4)mod8 

b(i +5)mod8  b(i +6)mod8  b(i +7) mod 8  ci với 0  i < 8 và bi là bit thứ i của byte đầu vào, ci là bit thứ i của byte {63}= {0110 0011} = {c7c6c5c4 c3c2c1c0}. Biểu diễn biến đổi này dƣới dạng ma trận nhƣ sau:

Hình 6.9 Xây dựng S-box

Ví dụ: Nếu đầu vào là b = {00} = {0000 0001} thì kết quả sẽ là b‟ = {0001 1111} + {0110 0011} = {0111 1100} = {7c}

Phép biến đổi thứ hai là ShiftRows:

Hình 6.10 Biến đổi ShiftRows

Trong bốn hàng của state thì hàng đầu tiên giữ nguyên, các hàng thứ hai, ba, tƣ quay trái một, hai hoặc ba byte tƣơng ứng. Ta thấy các byte ở đƣờng chéo chính sẽ chuyển sang bên cạnh trái. Hoặc ta cũng cĩ thể tính theo cơng thức: s‟[ r, c ] = s [ r, ( r + c ) mod 4].

Phép biến đổi thứ ba là MixColumns. Đây là phép biến đổi phức tạp bao gồm phép nhân ma trận và rút gọn hệ số trên trƣờng GF(28) với đa thức tối giản: x4

+ 1 và rút gọn kết quả trên trƣờng GF(28) với đa thức tối giản: x8

+ x4 + x3 + x + 1 (1 0001 1011).

Đa thức 4 số hạng với các hệ số là các phần tử của trƣờng GF(28 (adsbygoogle = window.adsbygoogle || []).push({});

) cĩ dạng: a(x) = a3x3 + a2x2 + a1x + a0, trong đĩ ai là các số thuộc GF(28). Tƣơng tự b(x) = b3x3 + b2x2 + b1x + b0. Khi nhân hai đa thức với nhau: c(x) = a(x)b(x) thì c(x) sẽ cĩ dạng: c(x) = c6x6 + c5x5 + c4x4 + c3x3 + c2x2 + c1x + c0 Với: c0 = a0b0 c1 = a1  b0 a0 b1 c2 = a2 b0 a1 b1 a0  b2 c3 = a3 b0 a2 b1 a1 b2 a0 b3 c4 = a3 b1 a2 b2 a1 b3 c5 = a3 b2 a2 b3 c6 = a3 b3

Nếu muốn chuyển c(x) thành đa thức cĩ 4 số hạng thì phải rút gọn (ví dụ cho x4

+ 1. Khi đĩ xi mod (x4 + 1) = xi mod 4, (x6 = x2, x5 = x, x4 = x0). Giả sử sau khi rút gọn ta nhận đƣợc:

d(x) = d3x3 + d2x2 + d1x + d0.

Lúc đĩ: d0 = c0 c4 = (a0 b0)  (a3 b1)  (a2 b2)  (a1 b3) d1 = c1 c5 = (a1 b0)  (a0 b1)  (a3 b2)  (a2 b3) d2 = c2 c6 = (a2 b0)  (a1 b1)  (a0 b2)  (a3 b3) d3 = c3 = (a3 b0)  (a2 b1)  (a1 b2)  (a0 b3) Cĩ thể viết lại kết quả dƣới dạng tích ma trận nhƣ sau:

d0 = a0 a3 a2 a1  b0 d1 a1 a0 a3 a2 b1 d2 a2 a1 a0 a3 b2 d3 a3 a2 a1 a0 b3

Trong biến đổi MixColumns ta cĩ: a(x) = {03} x3

+ {01} x2 + {01} x + {02}. Khi đĩ: s‟(x) = a(x)  s(x) (Phép nhân đa thức 4 số hạng với hệ số GF(28), rút gọn cho x4

+ 1). Cụ thể ta sẽ cĩ:

. Với c = [0..3] Nhƣ vậy ta cĩ thể viết triển khai thành:

s‟0,c = ( {02}  s0,c )  ( {03}  s1,c )  s2,c s3,c s‟1,c = s0,c ( {02}  s1,c )  ( {03}  s2,c )  s3,c s‟2,c = s0,c s1,c ( {02}  s2,c )  ( {03}  s3,c ) s‟3,c = ( {03}  s0,c )  s1,c s2,c ( {02}  s3,c ) Ví dụ ta cĩ: [s0,0 s1,0 s2,0 s3,0] = [d4 bf 5b 30], lúc đĩ: s‟0,c = ( {02}  {d4})  ( {03}  {bf})  {5b}  {30} = {02}  1101 0100  {03}  1011 1111  0101 1101  0011 0000 = 1101 01000  (1011 11110  1011 1111)  0101 1101  0011 0000 = (1101 01000  1011 11110)  1011 1111  0101 1101  0011 0000 = 0000 0100 = {04}.

Phép biến đổi cuối cùng trong vịng lặp là XOR với khố con. Các bit sẽ đƣợc XOR theo từng bit tƣơng ứng:

6.2. BIẾN ĐỔI KHỐ

Khĩa mở rộng gồm 44 word sẽ đƣợc tạo ra từ khĩa ban đầu 4 word (1 word = 32 bits). Các khĩa con (round key) dài 4 word sẽ đƣợc lấy tuần tự từ khĩa mở rộng 44 word (Tổng cộng cĩ 11 khĩa con).

Hình 6.13 Tạo khố mở rộng

Mã giả tạo khố mở rộng nhƣ sau:

Hình 6.14 Mã giả tạo khố mở rộng

Thuật tốn nhận đầu vào là khố mã hố gồm 16 byte đƣợc lƣu trong mảng key[16] với kiểu phần tử là byte, đầu ra là khố mở rộng gồm 44 word đƣợc lƣu trong mảng w[44] với kiểu phần tử là word. Biến tạm temp cĩ kiểu word. 16 byte đầu tiên của khố mở rộng chính là khố mã hố ban đầu. Các khĩa sau đĩ sẽ đƣợc tính theo cơng thức: w[ i ] = w[ i-4 ]  temp, trong đĩ, temp = w[i-1] nếu i khơng chia hết cho 4, ngƣợc lại, temp sẽ đƣợc tính mới dựa trên giá trị temp cũ.

Ý nghĩa các hàm nhƣ sau:

RotWord: Quay trái một byte trong word: [b0,b1,b2,b3]  [b1,b2,b3,b0]

SubWord: Thay thế từng byte trong word, sử dụng S-box.

Rcon[ j ]: = (RC[ j ], 00, 00, 00), với RC[1] = 1, RC[j] = 2  RC[j-1] (Nhân trong GF(28), với đa thức rút gọn là x8

+ x4 + x3 + x + 1 hay {01}{0b}). Round key 8: EA D2 73 21 B5 8D BA D2 31 2B F5 60 7F 8D 29 2F i Temp w[35] Sau RotWord Sau SubWord Rcon (9) Sau XOR (new temp) w [ i - 4 ] w [32 ] w[ i ] w [36 ]

36 7F8D292F 8D292F7F 5DA515D2 1B000000 46A515D2 EAD27321 AC7766F3

Hình 6.15 Ví dụ minh hoạ tính w[36] của round key 9

6.3. SỬ DỤNG AES TRONG THỰC TẾ

AES là chuẩn mật mã khối sử dụng rộng rãi trong ngày nay. AES đã cĩ mặt tại nhiều quy trình an tồn khác nhau. Trong thực tế, để mã hố dữ

Một phần của tài liệu Giáo trình bảo mật thông tin (Trang 71)