PHÉP TÍNH MODULO

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

Lý thuyết số là một ngành của tốn học đã tồn tại và cĩ lịch sử từ rất lâu đời. Lý thuyết số chủ yếu nghiên cứu về các con số và tính chất của chúng, đặc biệt là các số nguyên. Lý thuyết số tồn tại song song với mật mã học và dƣờng nhƣ chúng khơng cĩ nhiều mối quan hệ với nhau. Đến nửa cuối thế kỷ 20, nhiều nghiên cứu khác nhau đã cho thấy mối quan hệ mật thiết giữa lý thuyết số và mật mã học. Nhiều thuật tốn mã hố khố cơng khai xây dựng vào thập niên 70 của thế kỷ trƣớc hồn tồn dựa trên cơ sở lý thuyết số. Sau này các thuật tốn mã hố khối khác cũng xây dựng dựa trên nền tảng của lý thuyết số. Và ngày nay, mối quan hệ giữa mật mã hiện đại và lý thuyết số là khơng thể tách rời. Trong chƣơng này, chúng ta sẽ khảo sát một số khái niệm và thuật tốn của lý thuyết số, làm cơ sở nền tảng trong xây dựng các thuật tốn mật mã hiện đại sẽ đƣợc khảo sát ở các chƣơng sau nhƣ: RSA, AES,…

Lý thuyết số chủ yếu làm việc trên tập các số nguyên rời rạc. Các phép tính sử dụng nhiều trong lý thuyết số là phép cộng và phép nhân. Các phép tính khác nhƣ trừ, chia hay luỹ thừa đƣợc suy ra từ hai phép tính cơ bản trên. Nếu khơng cĩ chú thích gì đặc biệt thì khi nĩi là các số ta sẽ hiểu là các số nguyên. Trƣớc tiên, chúng ta sẽ ơn lại một số kiến thức cơ bản.

Ta nĩi số b  0 chia hết số a nếu  số m sao cho: a = m  b. Ký hiệu: b|a và nĩi b là ước số của a. Khi đĩ ta nĩi, a chia hết cho b hay a là bội số

của b. Ví dụ: các số 1, 2, 3, 4, 6, 8, 12, 24 chia hết 24 và là ƣớc số của 24.

Số nguyên tố là số mà chỉ cĩ hai ƣớc số: 1 và chính nĩ. Ví dụ các số nguyên tố: 1 (là số nguyên tố đặc biệt), 2, 3, 5, 7,… Tƣơng tự, các đa thức cĩ khái niệm tối giản. Đa thức với hệ số nguyên x2

+ x = x (x + 1) là khơng tối giản vì cĩ thể phân tích thành tích của hai đa thức nguyên với bậc nhỏ hơn. Cịn đa thức x3

+ x + 1 là tối giản vì nĩ khơng thể phân tích thành tích của hai đa thức nguyên khác.

Phân tích một số là viết triển khai số đĩ dƣới dạng tích của các số khác: 48 = 4  6  2. Ta thấy việc phân tích một số khĩ khăn hơn nhiều so

nguyên tố, ta gọi đĩ là phân tích một số ra thừa số nguyên tố (phân tích nguyên tố), ví dụ: 48 = 2  2  2  2  3 = 24  3. Hai số gọi là nguyên tố

cùng nhau nếu chúng khơng cĩ ƣớc số chung nào khác ngồi số 1. Ví dụ 48

và 25 là nguyên tố cùng nhau và ký hiệu: (48, 25) = 1.

Hai số a và b gọi là đồng dư (congruence) theo modulo n và ký hiệu a = b mod n, (n > 0) nếu phép chia a và b cho n cĩ cùng số dƣ.

Ví dụ: 100 = 34 mod 11.

Nếu 0  b  n - 1 thì b là thặng dư (residue) của a theo mod n. Ví dụ: -12 mod 7 = -5 mod 7 = 2 mod 7 = 9 mod 7. Các số -12, -5, 2, 9, là đồng dƣ theo mod 7 nhƣng chỉ cĩ giá trị 2 đƣợc gọi là thặng dƣ vì 0  2  6.

Chúng ta sẽ định nghĩa các phép tính modulo. Nếu tính theo modulo n thì kết quả sẽ thuộc [0, n-1]. Các phép tính cộng: (a + b) mod n; trừ: (a - b) mod n; nhân: (a  b) mod n đều đƣợc thực hiện theo trình tự nhƣ các phép tính số học bình thƣờng nhƣng sau đĩ kết quả phải rút gọn theo mod n và sẽ nằm trong khoảng [0, n-1]. Các phép tính này thực hiện dễ dàng vì kết quả của chúng luơn nằm trong tập các số nguyên.

Phép tính nghịch đảo: số nguyên b-1

là nghịch đảo của b nếu b  b-1 = 1 mod n. Ví dụ: 2 là nghịch đảo của 3 theo mod 5 vì 2  3 = 1 mod 5. Lúc đĩ ta ký hiệu: 2-1

= 3 mod 5. Tất nhiên cũng cĩ: 3-1 = 2 mod 5. Giá trị nghịch đảo khơng phải lúc nào cũng tồn tại. Ví dụ: khơng tồn tại 4-1

mod 6. Thật vậy, giả sử tồn tại số m = 4-1

mod 6. Khi đĩ theo định nghĩa: 4m = 1 mod 6 hay  số nguyên k sao cho 4m = 6k + 1. Điều này khơng thể xảy ra vì vế trái là số chẵn cịn vế phải là số lẻ. Vậy thì khi nào nghịch đảo tồn tại? Ngƣời ta đã chứng minh đƣợc rằng điều kiện cần và đủ để tồn tại nghịch đảo a-1

mod n là a và n phải là hai số nguyên tố cùng nhau: (a, n) = 1.

Từ khái niệm số nghịch đảo chúng ta sẽ định nghĩa phép chia theo modulo. Khi tính: (a / b) mod n, nếu b|a thì tính bình thƣờng. Trƣờng hợp ngƣợc lại, ta sẽ định nghĩa: (a / b) mod n = (a  b-1) mod n. Ví dụ: 7/2 = (7 

2-1) mod 5 = 7  3 = 21 mod 5 = 1.

5.2. BÀI TỐN RƯT GỌN LUỸ THỪA

Rút gọn một số theo modulo là phép tốn tìm thặng dƣ của số đĩ. Ví dụ: để rút gọn a mod n ta tính số dƣ r của phép chia a cho n: a = d  n + r ; với 0  r  n-1. Số r chính là thặng dƣ cần tìm và ký hiệu r = a mod n. Cĩ một số quy tắc cơ bản khi rút gọn theo modulo nhƣ sau:

(a  b) mod n = [(a mod n)  (b mod n)] mod n Ví dụ, ta cĩ thể dùng các quy tắc trên để rút gọn (250

+ 2100) mod 26 nhƣ sau: 250 = (25)10 = 3210 = 610 = (62)5 = 105 = 100  1000 = (-4)  (-40) = 160 = 4 mod 26. Do đĩ: 250 + 2100 = 250 (1 + 250) = 4  (1 + 4) = 20 mod 26.

Các luật của phép tốn modulo gồm cĩ: (tất cả theo mod n)

- Luật giao hốn: a + b = b + a; a  b = b  a

- Luật kết hợp: (a + b) + c = a + (b + c); (a  b)  c = a  (b  c)

- Luật phân phối: (a + b)  c = (a  c) + (b  c)

- Luật bất biến: 0 + w = w; 1  w = w

Nhiều thuật tốn mã hĩa yêu cầu rút gọn theo lũy thừa: Ví dụ, rút gọn am mod n (a – cơ số, m – số mũ, n – modulo). Nếu với cách thơng thƣờng ta phải tính: am

=a  a .….  a (m phép tính nhân) nhƣ vậy cĩ thể rất lâu và khĩ thực thi với các số lớn.

Sử dụng thuật tốn bình phương và nhân chỉ cần O(log2m) phép tính cho phép rút gọn lũy thừa. Ý tƣởng của thuật tốn là lặp lại các lũy thừa của cơ số. Ví dụ, rút gọn 250

mod 26. Đầu tiên, ta phân tích số mũ thành cơ số 2: 50 = 1100102. Nhƣ vậy: 250

= 232  216  22. Các số mũ 2, 16, 32 ứng với các bit 1 trong triển khai trên. Lần lƣợt bình phƣơng theo cơ số 2 và rút gọn theo mod 26 ta sẽ đƣợc: 21

= 2  22 = 4 24 = 16  28 = 256 = 22 mod 26 216 = 484 = 16232 = 256 = 22. Nhƣ vậy: 250 = 232  216 22 = 22 

(16  4) = 22  64 = 22  12 = 264 = 4 mod 26. Khái quát lại, ta cĩ thể trình bày thuật tốn bình phƣơng và nhân để rút gọn am

mod n nhƣ sau:

Khởi tạo: cơsố = a, kếtquả =1,

phân tích sốmũ m theo cơ số 2: m = ek

... e1e0

for mỗi bit ei (tính từ phải sang trái) của sốmũ if ei = 0 then

cơsố ( cơsốcơsố ) mod n

if ei = 1 then

kếtquả ( kếtquảcơsố ) mod n

cơsố ( cơsốcơsố ) mod n Cuối cùng kếtquả chính là giá trị cần tìm.

sốmũ kếtquả cơsố 1100102 1 2 0 - 22= 4 1 1  4 = 4 42= 16 0 - 162= 256 = 22 0 - 222 = 484 = 16 1 16  4 = 64 = 12 162= 256 = 22 1 22  12 = 264 = 4 -

Kết quả của ví dụ trên là: 250 mod 26 = 4.

Thuật tốn bình phƣơng và nhân khá hiệu quả trong giải quyết bài tốn rút gọn theo modulo, đặc biệt là cho các số lớn.

5.3. BÀI TỐN TÍNH NGHỊCH ĐẢO THEO MODULO

Trƣớc khi giải quyết bài tốn nghịch đảo, chúng ta sẽ nhắc lại bài tốn cổ điển của lý thuyết số là tìm ƣớc số chung lớn nhất (ƢSCLN) hay great common divisor (gcd). Ước số chung lớn nhất của hai số a và b là số nguyên lớn nhất chia hết cả a và b. Ta ký hiệu là ƢSCLN(a, b) hay gcd(a, b) hay đơn giản là (a, b). Khi (a, b) = 1 thì a và b là 2 số nguyên tố cùng nhau. Thuật tốn Euclid là một thuật tốn cổ điển rất hiệu quả trong việc tìm ƢSCLN của 2 số. Ta sẽ nhắc lại thuật tốn này.

Ý tƣởng của thuật tốn xuất phát từ phát biểu sau: Giả sử a  b là hai số nguyên khác 0, nếu số d đồng thời chia hết a và b (d|a & d|b) và r là số dƣ của phép chia a cho b (r = a mod b) thì d|r. Từ phát biểu này, cĩ thể suy ra: gcd(a, b) = gcd(b, r). Ta thấy a  b và b > r, do đĩ, bài tốn tìm ƢSCLN của hai số a và b đã chuyển thành bài tốn tím ƢSCLN của hai số bé hơn là b và r. Thuật tốn Euclid tìm (a, b) nhƣ sau:

Giả sử a ≥ b > 0 Đặt g0 = a, g1 = b

Lặp: gi+1 = gi-1 mod gi (gi+1 là số dư của gi-1 cho gi ) cho đến khi gk+1 = 0

Lúc đĩ: (a, b) = gk

Ta thấy ngay, theo thuật tốn và nhận xét ở trên thì: (a, b) = (g0, g1) = (g1, g2) = … = (gk, gk+1) = (gk, 0) = gk. Thuật tốn phải dừng vì dãy số

nguyên khơng âm{gi} với i > 0 là đơn điệu giảm bị chặn bởi 0 nên sẽ dừng tại giá trị 0. Ví dụ ta cần tính gcd(98, 56). Ta cĩ: (98, 56) = (56, 42) = (42, 14) = (14, 0) = 14.

Ta sẽ áp dụng thuật tốn Euclid để tìm nghịch đảo a-1

mod n. Điều kiện cần thiết để tồn tại nghịch đảo nhƣ đã nĩi ở trên là (n, a) = 1. Giả sử đã tìm các dãy số {gi},{ui},{vi} sao cho gi = ui  n + vi  a. i và dãy {gi} giảm dần đến 1. Khi đĩ k sao cho gk = 1 suy ra: 1 = uk  n + vk  a suy ra vk là nghịch đảo của a (vk = a-1 mod n). Vấn đề bây giờ là tìm các dãy {gi},{ui},{vi} nhƣ thế nào? Chúng ta sẽ thực hiện điều này bằng phƣơng pháp xây dựng dần dần:

Với g0 = n, u0 = 1, v0 = 0 ta cĩ: g0 = u0 n + v0a Với g1 = a, u1 = 0, v1 = 1 ta cĩ: g1 = u1n + v1a

Tính: y = g0 div g1(kết quả của phép chia nguyên g0 cho g1) Nhân đẳng thức thứ hai với y và trừ vào đẳng thức thứ nhất: g0 = u0 n + v0 a

g1 = u1 n + v1 a  y ---

(g0 – y  g1) = (u0 – y  u1)  n + (v0 – y  v1)  a

g2 = u2 n + v2 a

Ta cĩ thể thấy ngay là g2 = g0 mod g1 Làm tƣơng tự, ta tính: y = g1 div g2

(g1 – y  g2) = (u1 – y  u2)  n + (v1 – y  v2)  a

g3 = u3n + v3a

…………..

Ta thấy {gi} chính là dãy Euclid, do vậy, nếu cứ làm tiếp tục thì đến khi nào đĩ sẽ cĩ: gk+1 = 0, từ đĩ ta cĩ gk = (a, n) = 1 vk=a-1(mod n).

Thuật tốn Euclid mở rộng cĩ thể đƣợc trình bày nhƣ sau:

Tìm a-1 mod n (điều kiện: (a, n) = 1, n > a > 0)

Đặt:

Lặp: y = gi-1 div gi gi+1 = gi-1 – ygi ui+1 = ui-1 – yui vi+1 = vi-1 – yvi Đến khi gk = 1 Ta cĩ vk = a-1 mod n

Để minh hoạ cho thuật tốn Euclid, xét ví dụ: Tính 299-1

mod 323. i y g u v Đẳng thức tƣơng đƣơng 0 - 323 1 0 323 = 1  323 + 0  299 1 - 299 0 1 299 = 0  323 + 1  299 2 1 24 1 -1 24 = 1  323 + -1  299 3 12 11 -12 13 11 = -12  323 + 13  299 4 2 2 25 -27 2 = 25  323 + -27  299 5 5 1 -137 148 1 = -137  323 + 148 299 Vậy: 299-1 mod 323 = 148

Để tối ƣu thuật tốn, cĩ thể bỏ ngay đi các cột i và “Đẳng thức tƣơng đƣơng”. Ngồi ra cĩ thể nhận xét rằng việc tính vi khơng phụ thuộc vào kết quả ui do đĩ cột ui cũng cĩ thể bỏ. Thuật tốn cịn lại:

y g v - 323 0 - 299 1 1 24 -1 12 11 13 2 2 -27 5 1 148

Tƣơng ứng với mơ tả thuật tốn nhƣ sau:

Tìm a-1 mod n (điều kiện: (a, n) = 1, n > a > 0)

g0 = n, v0 = 0 g1 = a, v1 = 1 Lặp: y = gi-1 div gi gi+1 = gi-1 – ygi vi+1 = vi-1 – yvi Đến khi gk = 1 Ta cĩ vk = a-1 mod n

Thuật tốn cịn cĩ thể tối ƣu nữa trong quá trình cài đặt nếu thay vì sử dụng cấu trúc mảng, chúng ta sẽ dùng các biến thƣờng để tính tốn.

Bài tốn tính nghịch đảo theo modulo cĩ thể đƣợc thực hiện bằng các phƣơng pháp khác nữa. Sau đây, chúng ta tiếp tục khảo sát thêm một phƣơng pháp.

Ta gọi tập thặng dư đầy đủ (TTDĐĐ) theo mod n là tập tất cả các số từ 0 đến n-1: [0..n-1]. Tập thặng dư rút gọn (TTDRG) theo mod n bao gồm các số thuộc TTDĐĐ thoả điều kiện nguyên tố cùng nhau với n. Ví dụ: Khi n = 10 thì TTDĐĐ(10) = {0,1,2,3,4,5,6,7,8,9}, TTDRG(10) = {1,3,7,9}.

Số phần tử của TTDRG đƣợc gọi là hàm phi Euler: φ(n). Nhƣ vậy φ(10) = 4. Cĩ thể tính φ(n) theo sơ đồ sau:

̶ Bắt đầu từ tập n-1 số [1..n-1]

̶ Loại bỏ tất cả các ƣớc số nguyên tố của n và tất cả các bội số của chúng ̶ Số các phần tử cịn lại chính là φ(n)

Tuy nhiên, ta cũng cĩ thể tính φ(n) dựa trên các khẳng định sau: ̶ Nếu p là số nguyên tố thì: φ(p) = p - 1;

̶ Nếu p là số nguyên tố thì: φ(pr

) = pr (p - 1) ̶ Nếu (a, b) = 1 thì: φ(a  b) = φ(a)  φ(b)

Ngồi ra, nếu số n đƣợc phân tích thành các thừa số nguyên tố

. Khi đĩ φ(n) = φ(n) = φ( ) = =

= = .

Hoặc tính theo cách ở trên: φ(1000) = φ(23 53) = φ(23)  φ(53) = 22

52 4 = 400.

Định lý Fermat

Giả sử p là số nguyên tố và (a, p) = 1. Khi đĩ: ap-1

= 1 mod p.

Chứng minh:

Xét tập hợp các số nguyên dƣơng nhỏ hơn p: X = {1, 2,..., p - 1}, ta nhân mỗi thành phần với a và lấy modulo p để cĩ tập hợp Y = {a mod p, 2a mod p,... (p-1)a mod p}. Ta nhận thấy, thứ nhất, khơng cĩ hai số nào trong Y bằng nhau. Ngƣợc lại, giả sử rằng: ja mod p = ka mod p trong đĩ 1 j < k p -1  (k - j)a = 0 mod p. Điều này vơ lý vì (a, p) = 1 và 1 k - j p - 1. Thứ hai, khơng cĩ phần tử nào của Y bằng 0 vì a khơng chia hết cho p. Cuối cùng, các phần tử của Y đều nằm trong tập X. Do đĩ, cĩ thể kết luận rằng tập Y chính là một hốn vị của tập X. Bởi vậy: a  2a  …  (p-1)a mod p = (a mod p)  (2a mod p)  …  ((p-1)a mod p) = 1  2  …  (p-1)

 (p-1)!  ap-1 = (p-1)! mod p  ap-1 = 1 mod p (đpcm).

Định lý Euler

Với mọi số nguyên dƣơng n và (a, n) = 1. Khi đĩ: aφ(n) = 1 mod n.

Chứng minh:

Theo định nghĩa, là số phần tử trong TTDĐĐ của n và nguyên

tố cùng nhau với n. Xét tập các số đĩ: X = {x1, x2,..., }, 0 < xi  xj < n và (xi, n) = 1. Bây giờ, nhân mỗi thành phần này với a và lấy modulo n:

Y = {(ax1 mod n), (ax2 mod n),..., (a mod n)}

Tập hợp Y là một hốn vị của X, bởi những nguyên nhân sau:

1. Vì (a, n) = 1 và (xi, n) = 1  (axi, n) = 1. Nhƣ vậy, tất cả các thành phần của Y là những số nhỏ hơn n và nguyên tố cùng nhau với n.

2. Khơng cĩ sự trùng lặp trong Y. Giả sửa ngƣợc lại: axi mod n = axj

mod n thì xi = xj. Vơ lý!

Nhƣ vậy: 

mod n)   =

Định lý Euler là trƣờng hợp tổng quát của định lý Fermat. Trong định lý Euler, khi n là số nguyên tố thì ta sẽ nhận đƣợc định lý Fermat.

Bây giờ ta cĩ vài cách tính nghịch đảo a-1mod n. Nếu đã biết φ(n) thì từ định lý Euler ta tìm đƣợc: a-1

mod n = (a-1 aφ(n)) mod n = aφ(n) -1 mod n. Đến đây, chúng ta cĩ thể dùng thuật tốn bình phƣơng và nhân để rút gọn aφ(n) -1 mod n. Nhƣ vậy, để tính nghịch đảo theo modulo chúng ta cĩ thể dùng các phƣơng pháp: thử sai, thuật tốn Euclid mở rộng hoặc dùng định lý Euler kết hợp với thuật tốn bình phƣơng và nhân. Trong ba cách đĩ thì cách đơn giản nhất là sử dụng thuật tốn Euclid mở rộng.

Định lý Fermat cĩ thể đƣợc sử dụng để tìm các số nguyên tố lớn. Để tạo các khố mật mã ngƣời ta phải sử dụng các số nguyên tố lớn (khoảng

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