Tải bản đầy đủ (.pdf) (79 trang)

Vấn đề kiểm tra các số nguyên tố lớn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.33 MB, 79 trang )

ĐẠI HỌC QUỐC GIA HÀ NÔI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ








TRƯƠNG CÔNG QUYỀN



VẤN ĐỀ KIỂM TRA CÁC SỐ NGUYÊN TỐ LỚN







LUẬN VĂN THẠC SỸ







HÀ NỘI – 2011


ĐẠI HỌC QUỐC GIA HÀ NÔI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ






TRƯƠNG CÔNG QUYỀN

VẤN ĐỀ KIỂM TRA CÁC SỐ NGUYÊN TỐ LỚN



Ngành: Công nghệ Thông tin
Chuyên ngành: Hệ thống Thông tin
Mã số: 60 48 05




LUẬN VĂN THẠC SỸ



NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS. TS Trịnh Nhật Tiến








HÀ NỘI – 2011

5
MỤC LỤC

LỜI CAM ĐOAN 2
LỜI CẢM ƠN 3
GIỚI THIỆU 4
DANH MỤC TỪ VIẾT TẮT 7
Chương 1. CÁC KHÁI NIỆM CƠ BẢN 8
1.1. MỘT SỐ KHÁI NIỆM TRONG SỐ HỌC, ĐẠI SỐ 8
1.1.1. Khái niệm trong số học 8
1.1.2. Khái niệm trong đại số 9
1.1.3. Đồng dư và phương trình đồng dư tuyến tính 12
1.1.4. Thặng dư thu gọn và phần tử nguyên thủy 15
1.1.5. Phương trình đồng dư bậc hai và thặng dư bậc hai 17
1.2. MỘT SỐ THUẬT TOÁN 20
1.2.1. Thuật toán tính ước chung lớn nhất 20
1.2.2. Thuật toán tính phần tử nghịch đảo theo Modulo 24
1.2.3. Thuật toán phân tích một số ra các thừa số nguyên tố 25
1.3. ĐỘ PHỨC TẠP TÍNH TOÁN 30
1.3.1. Khái niệm về độ phức tạp tính toán 30
1.3.2. Lớp phức tạp 33
1.3.3. Hàm một phía và cửa sập một phía 35
Chương 2. MỘT SỐ PHƯƠNG PHÁP KIỂM TRA SỐ NGUYÊN TỐ 37
2.1. SỐ NGUYÊN TỐ 37
2.1.1 Khái niệm số nguyên tố 37

2.1.2. Tính chất của số nguyên tố 37
2.1.3. Định lý cơ bản của số học 38
2.1.4. Sự phân bố số nguyên tố 39
2.2. SỐ NGUYÊN TỐ CÓ DẠNG ĐẶC BIỆT 41
2.2.1. Số nguyên tố Mersenne 41

6
2.2.2. Số nguyên tố Fermat 47
2.3. MỘT SỐ PHƯƠNG PHÁP KIỂM TRA SỐ NGUYÊN TỐ 49
2.3.1. Phương pháp cổ điển 49
2.3.2. Phương pháp xác suất 52
Chương 3. ỨNG DỤNG CỦA SỐ NGUYÊN TỐ VÀ THỬ NGHIỆM
CHƯƠNG TRÌNH 62
3.1. MÃ HÓA 62
3.1.1 Hệ mã hóa RSA 62
3.1.1 Hệ mã hóa Elgamal 63
3.1.1 Hệ mã hóa Rabin 64
3.2. KÝ SỐ 65
3.2.1. Chữ ký RSA 66
3.2.2. Chữ ký Elgamal 67
3.2.3. Sơ đồ chuẩn chữ ký số DSS 68
3.2.4. Chữ ký không thể phủ định 69
3.3. CÁC GIAO THỨC THỎA THUẬN, PHÂN PHỐI KHÓA 71
3.3.1. Giao thức phân phối khoá Blom. 71
3.3.2. Giao thức phân phối khoá Diffie-Hellman. 72
3.3.3. Giao thức thoả thuận khoá Diffie-Hellman. 73
3.3.4. Giao thức thoả thuận khoá “Trạm tới Trạm”. 74
3.3.5. Giao thức thoả thuận khoá MTI. 75
3.4. THỬ NGHIỆM CHƯƠNG TRÌNH 76
3.4.1. Cấu hình hệ thống. 76

3.4.2. Chức năng chính. 76
3.4.3. Chương trình 77
KẾT LUẬN 80
TÀI LIỆU THAM KHẢO 81



7
DANH MỤC TỪ VIẾT TẮT

Gcd (Greatest Common Divisor)
Ước số chung lớn nhất
Lcm (Least Common Multiple)
Bội số chung nhỏ nhất
Mod
Modulo

8
Chương 1. CÁC KHÁI NIỆM CƠ BẢN
1.1. MỘT SỐ KHÁI NIỆM TRONG SỐ HỌC, ĐẠI SỐ
1.1.1. Khái niệm trong số học
1). Ký hiệu chia hết
Cho a và b là hai số nguyên dương.
Số a chia hết cho số b ký hiệu là a  b  Tồn tại n  N sao cho:
a = b * n
Khi đó người ta nói b là ước của a và ký hiệu: b | a.
2). Ước số chung lớn nhất
Cho a và b là hai số nguyên dương.
Ước số chung lớn nhất của a và b là số tự nhiên m lớn nhất sao cho m | a và m | b.
Khi đó ký hiệu là gcd(a, b) = m.

3). Hai số nguyên tố cùng nhau
Cho a và b là hai số nguyên dương.
Số a và số b được gọi là 2 nguyên tố cùng nhau  gcd(a, b) = 1.
4). Đồng dư modulo
Cho n  N, n  0 và a, b 
*
n
Z
.
Ký hiệu a  b (mod n) nghĩa là a đồng dư với b theo mod n
 Tồn tại số nguyên k 
*
n
Z
sao cho a = b + k * n
Tức là (a - b) = k * n, như vậy n | (a - b).
5). Một số tính chất của đồng dư modulo
(a  b) (mod n)  [(a mod n)  (b mod n)] (mod n)
(a * b) (mod n)  [(a mod n) * (b mod n)] (mod n)

9
1.1.2. Khái niệm trong đại số
1). Khái niệm nhóm
Nhóm là một cặp (G, *), trong đó G là tập hợp khác rỗng, * là phép toán hai
ngôi trên G thoả mãn ba điều kiện sau:
1. Phép toán có tính kết hợp:
(x * y) * z = x * (y * z) với mọi x, y, z G.
2. Có phần tử phần tử trung lập e  G:
x * e = e * x = x với mọi x  G.
3. Với mọi x  G, có phần tử nghịch đảo x’ G:

x * x’ = x’ * x = e
2). Nhóm con
Cho G là một Nhóm, cho S  G và S  . S được gọi là Nhóm con của G nếu:
1/. Phần tử trung lập e của G nằm trong S.
2/. S khép kín đối với luật hợp thành trong G (tức là x * y  S với mọi x, y S).
3/. S khép kín đối với phép lấy nghịch đảo trong G (tức x
-1
 S với mọi xS).
3). Nhóm Cyclic
a). Khái niệm Nhóm Cyclic
Nhóm (G, *) được gọi là Nhóm Cyclic nếu nó được sinh ra bởi một trong
các phần tử của nó.
Tức là có phần tử g  G mà với mỗi a  G, đều tồn tại số n  N để
g
n
= g * g * … * g = a (Chú ý: g * g * … * g là g * g với n lần).
Khi đó g được gọi là phần tử sinh hay phần tử nguyên thuỷ của nhóm G.
Nói cách khác: G được gọi là Nhóm Cyclic nếu tồn tại g  G sao cho mọi
phần tử trong G đều là một luỹ thừa nguyên nào đó của g.

10
Ví dụ: Nhóm (Z
+
, +) gồm các số nguyên dương là Cyclic với phần tử sinh
g = 1.
b). Cấp của Nhóm Cyclic:
Cho (G, *) là Nhóm Cyclic với phần tử sinh g và phần tử trung lập e. Nếu
tồn tại số tự nhiên nhỏ nhất n mà g
n
= e, thì G sẽ chỉ gồm có n phần tử khác nhau:

e, g, g
2
, g
3
, . . . , g
n - 1
. Khi đó G được gọi là nhóm Cyclic hữu hạn cấp n.
Nếu không tồn tại số tự nhiên n để g
n
= e, thì G có cấp .
Ví dụ: (Z
+
, +) gồm các số nguyên dương là Cyclic với phần tử sinh g = 1, e
= 0. Đó là Nhóm Cyclic vô hạn, vì không tồn tại số tự nhiên n để g
n
= e,
c). Cấp của một phần tử trong Nhóm Cyclic:
Phần tử   G được gọi là có cấp d, nếu d là số nguyên dương nhỏ nhất sao
cho 
d
= e, trong đó e là phần tử trung lập của G.
Như vậy phần tử  có cấp 1, nếu  = e.
4). Tập Z
n
và Z
*

Z
n
= 0, 1, 2, . , n - 1. Tức Z

n
là tập các số nguyên không âm < n.
Tập này cùng với phép cộng lập thành Nhóm Cyclic có phần tử sinh là 1. Đó là
Nhóm hữu hạn có cấp n.
Z
n
*
= e  Z
n
, e là nguyên tố cùng nhau với n. Tức là e # 0.
Đó là tập các số nguyên dương < n, nhưng nguyên tố cùng nhau với n.
được gọi là tập Thặng dư thu gọn theo mod n, lập thành một Nhóm với phép nhân
mod n.
(n) là số các phần tử của tập
*
n
Z
.

11
5). Một số kết quả
Những kết quả sau đã được chứng minh, nhắc lại để sử dụng:
* Định lý Lagrange: Cho G là nhóm Cấp n và g G. Khi đó cấp của g là
ước của n.
* Hệ quả: Giả sử g
*
n
Z
có Cấp m thì m là ước của  (n).
Nếu b 

*
n
Z
thì b
 (n)
 1 (mod n).
Nếu p là số nguyên tố thì  (p) = p -1.
Do đó với mọi b 
*
p
Z
(tức b nguyên tố với p) thì b
 (p)
 1 (mod n) hay
b
p -1
 1 (mod n).
* Định lý: Nếu p là số nguyên tố thì
*
p
Z
là Nhóm Cyclic.
Chú ý: Phần tử  
*
n
Z
có cấp d nếu d là số nguyên dương nhỏ nhất sao cho

d
= e trong

*
n
Z
, tức là 
d
 1 (mod n).
6). Khái niệm Logarit rời rạc
Cho p là số nguyên tố,  là phần tử nguyên thuỷ của Z
p,

*
p
Z
.
Logarit rời rạc chính là việc giải phương trình x = log

 (mod p) với ẩn x.
Hay phải tìm số x duy nhất sao cho: 
x
  (mod p).
- Bổ đề: Nếu (a, n) = 1 thì tồn tại a
-1
 Z
n
thoả mãn a * a
-1
 1 (mod n).
- Định lý (Euler tổng quát): Nếu (a, n) = 1 thì a
(n)
mod n = 1.

- Hệ quả: Với p là một số nguyên tố và (a, p) = 1 thì a
p-1
(mod p) = 1.

12
1.1.3. Đồng dư và phương trình đồng dư tuyến tính
Cho n là một số nguyên dương. Hai số nguyên a và b là đồng dư với nhau
theo mô đun n, và viết a  b (mod n), nếu n/a-b (tức cũng là nếu a – b chia hết cho
n, hay khi chia a và b cho n được cùng một số dư như nhau).
Ví dụ: 23  8 (mod 5), vì 23 – 8 = 5.3, -19  9 (mod 7) vì -19 – 9 = - 4.7
Quan hệ đồng dư (theo một môđun n) trên tập hợp các số nguyên có các tính
chất phản xạ, đối xứng và bắc cầu, tức là một quan hệ tương đương, do đó nó tạo ra
một phân hoạch trên tập hợp tất cả các số nguyên Z thành ra các lớp tương đương:
hai số nguyên thuộc cùng một lớp tương đương khi và chỉ khi chúng cho cùng một
số dư nếu chia cho n. Mỗi lớp tương đương như vậy được đại diện bởi một số duy
nhất trong tập hợp Z
n
= {0, 1, 2, 3, , n-1}, là số dư chung khi chia các số trong lớp
đó cho n. Vì vậy, ta có thể đồng nhất Z
n
với tập hợp tất cả các lớp tương đương các
số nguyên theo mod n; trên tập đó ta có thể xác định các phép tính cộng, trừ và nhân
theo mod n.
Ví dụ: Z
25
= {0, 1, 2, 24}. Trong Z
25
, 15 +14 = 4, vì 15 + 14 = 29  4 (mod 25).
Tương tự, 15.14  10 trong Z
25

.
Cho a

Z
n
. Một số nguyên x

Z
n
được gọi là nghịch đảo của a theo modn,
nếu a.x  1 (modn). Nếu có số x như vậy thì ta nói a là khả nghịch, và ký hiệu x là
a
-1
mod n. Thí dụ 22
-1
mod 25 = 8, vì 22.8 = 186  1 (mod 25). Từ định nghĩa ta có
thể suy ra rằng a là khả nghịch theo mod n khi và chỉ khi gcd (a,n) = 1, tức là khi a
và n nguyên tố với nhau.
Dịnh nghĩa phép chia trong Z
n
như sau:
a : b (mod n) = a.b
-1
mod n.
Phép chia chỉ thực hiện được khi b là khả nghịch theo mod n.
Ví dụ 15: 22 (mod 25) = 15 : 22
-1
mod 25 = 20.

13

Bây giờ xét các phương trình đồng dư tuyến tính
Phương trình đồng dư tuyến tính có dạng
a. x

b (mod n)
(1.1.3.1)
Trong đó a, b, n là các số nguyên, n > 0, x là ẩn số. Phương trình đó có nghiệm khi
và chỉ khi d = gcd (a,n) /b, và khi đó có đúng d nghiệm theo mod n. Thực vậy, đặt
a” = a/d, b’ = b/d, n’ = n/d ta thấy phương trình đồng dư (1.1.3.1) tương đương với
phương trình
a’x

b’ (mod n’)
Vì gcd(a’, n’) = 1, nên phương trình này có một nghiệm theo mod n’:
x = xo

b’. a’
-1
(mod n’)
và do đó phương trình (1.2.1) có d nghiệm theo mod n là:
x = xo, xo + n’, , xo + (d - 1) n’ (mod n)
Tất cả d nghiệm đó khác nhau theo mod n, nhưng cùng đồng dư với nhau
theo mod n’.
Bây giờ ta xét hệ thống các phương trình đồng dư tuyến tính. Một hệ như
vậy có thể đưa về dạng











)(mod

)(mod
)(mod
222
111
kkk
nax
nax
nax



(1.1.3.2)
Ký hiệu: n = n
1
.n
2
n
k
, N
i
= n/n
i
. Có định lý sau đây:

Định lý về Số dư (định lý số dư Trung Quốc). Giả sử các số nguyên
n
1
, n
2
, , n
k
là từng cặp nguyên tố với nhau. Khi đó, hệ phương trình đồng dư tuyến
tính (1.1.3.2) có một nghiệm duy nhất theo mod n.

14
Nghiệm duy nhất nói trong định lý 1.1.3.2 được cho bởi biểu thức:
x =

k
i=1
a
i
.N
i
.M
i
mod n,
trong đó M
i
= N
i

-1
mod n

i
(có M
i
vì N
i
và n
i
nguyên tố với nhau).
Nhận xét:
Định lý số dư Trung Quốc cho phép tính đồng dư theo modulo của một số
lớn (tích của nhiều số nguyên tố cùng nhau), thông qua tính toán đồng dư theo
modulo các số nhỏ (từng thừa số).
Ví dụ: Tìm nghiệm của hệ phương trình:

3118(mod 5353)
139(mod 391)
239(mod 247)
x
x
x









Vì các số 5353, 391, 247 nguyên tố cùng nhau, nên theo định lý Trung Quốc

về số dư hệ, có nghiệm duy nhất theo modulo m = 5353*391*247 = 516976681.
Để tìm x mod m ta tính:
m
1
= m/5353 = 96577 → y
1
= 96577
-1
mod 5353 = 5329
m
2

= m/391 = 1322191 → y
2
= 1322191
-1
mod 391 = 16
m
3
= m/247 = 2093023 → y
3
= 2093023
-1
mod 247 = 238
x = 31188.96577.5329 + 139.1322191.16 + 239.2093023.238 (mod m)
= 13824 (mod m)
Nếu (n
1
, n
2

) = 1, thì cặp phương trình x  a (mod n
1
) và x  a (mod n
2
) có
nghiệm duy nhất x  a (mod n) theo mod n với n = n
1
n
2
.

15
1.1.4. Thặng dư thu gọn và phần tử nguyên thủy
Tập Z
n
= {0, 1, 2, , n-1} thường được gọi là tập các thặng dư đầy đủ theo
mod n, vì mọi số nguyên bất kỳ đều có thể tìm được trong Z
n
một số đồng dư với
mình (theo mod n). Tập Z
n
là đóng đối với các phép tính cộng, trừ và nhân theo
mod n, nhưng không đóng đối với phép chia, vì phép chia cho a theo mod n chỉ có
thể thực hiện được khi a và n nguyên tố với nhau, tức khi gcd(a,n) = 1.
Bây giờ ta xét tập Z
n
*
= {a

Z

n
: gcd(a,n) = 1}, tức Z
n
*
là tập con của Z
n
bao
gồm tất cả các phần tử nguyên tố với n. Ta gọi tập đó là tập các thặng dư thu gọn
theo mod n. Mọi số nguyên tố với n đều có thể tìm thấy trong Z
n
*
một đại diện đồng
dư với mình theo mod n.
Chú ý rằng nếu p là một số nguyên tố thì Z
p
*
= {1, 2, , p-1}.
Tập Z
n
*
lập thành một nhóm con đối với phép nhân của Z
n
, vì trong Z
n
*
phép
chia theo mod n bao giờ cũng thực hiện được, gọi Z
n
*
là nhóm nhân của Z

n
.
Theo đại học số học, gọi số các phần tử trong một nhóm là cấp của nhóm đó.
Ký hiệu

(n) là số các số nguyên dương bé hơn n và nguyên tố với n. Như vậy,
nhóm Z
n
*
có cấp

(n), và nếu p là số nguyên tố thì nhóm Z
p
*
có cấp p-1.
Một phần tử g

Z
n
*
có cấp m, nếu m là số nguyên dương bé nhất sao cho
g
m
= 1 trong Z
n
*
. Theo một định lý trong Đại số, có m/

(n). Vì vậy, với mọi b


Z
n
*

luôn có b

(n)
 1 mod n.
Nếu p là số nguyên tố, thì do

(p) = p – 1, có với mọi b

Z
n
*
b
n-1
 (mod p)
(1.1.4)
Nếu b có cấp p-1, tức p-1 là số mũ bé nhất thỏa mãn công thức (1.1.4) thì các
phần tử b, b
2
, , b
p-1
đều khác nhau và theo mod p, chúng lập thành Z
p
*
. Theo thuật
ngữ đại số, khi đó ta nói Z
n

*
là một nhóm cyclic và b là một phần tử sinh, hay phần
tử nguyên thủy của nhóm đó. Trong lý thuyết số, người ta đã chứng minh được cái
tính chất sau đây của các phần tử nguyên thủy:

16
1/. Với mọi số nguyên tố p, Z
p
*
là nhóm cyclic, và có

(p-1) phần tử nguyên
thủy
2/. Nếu p-1= p
1
a1
. p
2
a2
p
s
as
là khai triển chính tắc của p – 1 và nếu

)(mod1
1
1
pa
p
p



, …,
)(mod1
1
pa
ps
p



3/. Nếu g là phần tử nguyên thủy theo mod p, thì ß = g
i
mod p với mọi i mà
gcd (i, p-1)=1, cũng là phần tử nguyên thủy theo mod p.
Ba tính chất đó là cơ sở giúp ta tìm các phần tử nguyên thủy theo mod p, với
p là số nguyên tố bất kỳ. Ngoài ra, cũng chú ý một số tính chất sau đây, có thể được
sử dụng nhiều trong các chương trình sau:
a/. Nếu p là số nguyên tố và gcd(a,p) = 1, thì a
p-1
 1 (mod p) (định lý
Fermat).
b/. Nếu a

Z
n
*
, thì a

(n)

 1(mod n). Nếu r  s (mod

(n)) thì a
r
 a
s
(mod n)
(định lý Euler).

17
1.1.5. Phương trình đồng dư bậc hai và thặng dư bậc hai
Xét phương trình đồng dư bậc hai có dạng đơn giản sau đây:
x
2
 a (mod n)
Trong đó n là một số nguyên dương, a là số nguyên với gcd(a,n) = 1, và x là
ẩn số. Phương trình đó không phải bao giờ cũng có nghiệm, khi nó có nghiệm thì ta
nói a là một thặng dư bậc hai mod n; nếu không thì nói a là một bất thặng dư bậc
hai mod n. Tập các số nguyên nguyên tố với n được phân hoạch thành hai tập con:
tập Q
n
các thặng dư bậc hai mod n, và tập Q
n
các bất thặng dư mod n.
Khi n = p là số nguyên tố, ta có tiêu chuẩn Euler sau đây: Số a là thặng dư
bậc hai mod p nếu và chỉ nếu a
(p-1)/2
 1 (mod p). Tiêu chuẩn đó được chứng minh
như sau:
Giả sử có x sao cho x

2
 a (mod p), khi đó ta cũng sẽ có
a
(p-1)/2
 (x
2
)
(p-1)/2
 x
p-1
 1 (mod p).
Ngược lại, giả sử a
(p-1)/2
 1 (mod p). Khi đó a

Z
n
. Lấy b là một phần tử
nguyên thủy mod p, ắt có một số i nào đó sao cho a = b
i
mo p. Từ đó,
a(
p-1)/2
 b
i(p-1)/2
 1 (mod p).
Phần tử b có cấp p – 1, do đó (p-1) chia hết i(p-1)/2, i phải là số chẵn, i = 2j,
và a có căn bậc hai là  b
j
mod p.


Cho p là một số nguyên tố lẻ. Với mọi a ≥ 0 ta định nghĩa ký hiệu Legendre









p
a
như sau:








p
a
=









p
p
Qakhi
Qakhi
pakhi
1
1
)(mod00

Từ định nghĩa ta suy ra ngay a là thặng dư bậc hai mod p khi và chỉ khi









p
a
= 1.

18
Theo tiêu chuẩn Euler nói trên, với mọi a ≥ 0, ta có:











p
a
 a
(p-1)/2
(mod p).
Bây giờ ta mở rộng ký hiệu Legengdre để được ký hiệu Jacobi đối với mọi
số nguyên lẻ n ≥ 1 và mọi số nguyên a ≥ 0, cũng được ký hiệu bởi






n
a
và được
định nghĩa như sau: Giả sử a có khai triển chính tắc thành thừa số nguyên tố là
k
a
k
aa
pppn

21
21

thì







n
a
=
ak
k
aa
p
a
p
a
p
a


























2
2
1
1

Khi n = p là số nguyên tố thì giá trị của các ký hiệu Legendre và Jacobi là
như nhau. Việc tính ký hiệu Legendre có thể phức tạp khi p rất lớn, trong khi việc
tính ký hiệu Jacobi có thể thuận lợi hơn do có thể sử dụng các tính chất 1-4 sau đây:
1/. Nếu m1  m2 (mod n), thì







n
m1
=






n
m2

2/.






n
2
=






)8(mod3,1
)8(mod1,1
nkhi
nkhi

3/.






n
mm 2.1
=






n
m1
.







n
m2

4/. Nếu m và n đều là số lẻ, thì






n
m
=























)4(mod1)4(mod1,
)4(mod3&)4(mod3,
mnkhi
m
n
mnkhi
m
n

Ví dụ: Dùng các tính chất đó, ta tính được:







9283
7411
=







7411
9283
=






7411
1872
=






7411
2
4
.






7411

117

=






7411
117
= -






117
7411
= -






117
40
= -







117
2
3
.






117
5

=






117
5
=







5
117
=






5
2
= -1

19
9283 là một số nguyên tố. Do đó, giá trị -1 của ký hiệu Jacobi






9283
7411
cũng
là giá trị của cùng ký hiệu Legendre đó, và ta kết luận được rằng 7411 là bất thặng

dư bậc hai mod 9283, hay phương trình x
2
 7411 (mod 9283) là vô nghiệm.
Bây giờ xét việc giải phương trình đồng dư bậc hai
x
2
 a (mod n)
(1.1.5)
Trong một trường hợp đặc biệt khi n = p là số nguyên tố có dạng p = 4m + 3,
tức p đồng dư với 3 theo mod 4, và a là một số nguyên tố với p. Theo tiêu chuẩn
Euler ta biết phương trình (1.4.4) có nghiệm khi và chỉ khi a
(p-1)2
 (mod p). Khi đó
ta có:

)(mod
1
2
1
paa
p





)(mod
)1(2
paa
m




do đó x   a
m+1
(mod p) là hai nghiệm của phương trình (1.1.5)

20
1.2. MỘT SỐ THUẬT TOÁN
1.2.1. Thuật toán tính ước chung lớn nhất
Ký hiệu Z là tập hợp các số nguyên, Z = { , -2, -1, 0, 1, 2, }, và Z
+
là tập
hợp các số nguyên không âm, Z
+
= {0, 1, 2, }. Trong mục này sẽ nhắc lại một số
kiến thức về số học của các số nguyên cần cho việc trình bày lý thuyết mật mã. Vì
để luận văn không quá dài dòng, các kiến thức sẽ được nhắc đến chủ yếu là các khái
niệm, các mệnh đề sẽ được sử dụng, v.v , còn các phần chứng minh sẽ được lược
bỏ.
Tập hợp Z là đóng kín đối với các phép cộng, trừ và nhân, nhưng không
đóng kín đối với phép chia: chia một số nguyên cho một số nguyên không phải bao
giờ cũng được kết quả là một số nguyên! Vì vậy, trường hợp chia hết, tức khi chia
số nguyên a cho số nguyên b được thương là một số nguyên q, a = b.q, có một ý
nghĩa đặc biệt. Khi đó, nói a chia hết cho b, a là bội số của b, b là ước số của a, và
ký hiệu là b|a. Dễ thấy ngay rằng số 1 là ước số của mọi số nguyên bất kỳ, số 0 là
bội số của mọi số nguyên bất kỳ, mọi số nguyên a đều là ước số, đồng thời là bội số
của chính nó.
Định lý 1.2
Nếu b > 0 và b|a thì gcd(a,b) = b.

Nếu a = bq +r thì gcd(a,b) = gcd(b,r).
Một số nguyên m được gọi là bội số chung của a và b nếu a|m và b|m. Số m
được gọi là bội số chung bé nhất của a và b và được ký hiệu là lcm(a,b), nếu m>0,
m là bội số chung của a và b, và mọi bội số chung của a và b đều là bội của m. Ví
dụ lcm(14,21) = 42.
Với hai số nguyên dương a và b bất kỳ ta có quan hệ
lcm(a,b).gcd(a,b) = a.b.

21
Từ định lý 1.2 ta suy ra thuật toán sau đây thực hiện việc tìm ước số chung
lớn nhất của hai số nguyên bất kỳ:
Thuật toán Euclide tìm ước số chung lớn nhất:
INPUT: hai số nguyên không âm a và b, với a≥b.
OUTPUT: ước số chung lớn nhất của a và b
1. Trong khi còn b>0, thực hiện:
1.1. đặt r

a mod b,a

b, b

r.
2. Cho ra kết quả (a).
Ví dụ: Dùng thuật toán Euclide tìm gcd(4864, 3458), lần lượt được các giá trị
gán cho các biến a, b và r như sau:
Bảng 1.2.1. Mô tả quá trình tính toán của thuật toán Euclid

a
b
c

4864 = 1.3458 + 1406
4864
3458

3458 = 2.1406 + 646
3458
1406
1406
1406 = 2.646 + 114
1406
646
646
646 = 5.114 + 76
646
114
114
114 = 1.76 +38
114
76
76
76 = 2.38 +0
76
38
38

38
0
0
Cho hai số nguyên bất kỳ a và b, b > 1. Thực hiện phép chia a cho b ta sẽ
được hai số q và r sao cho

a = b.q + r, 0 ≤ r <b.

22
Số q được gọi là số thương của phép chia a cho b, ký hiệu a div b và số r
được gọi là số dư của phép chia a cho b, ký hiệu a mod b. Ví dụ: 25 div 7 = 3 và 25
mod 7 = 4, -25 div 7 = -4 và – 25 mod 7 = 3.
Một số nguyên d được gọi là ước số chung của hai số nguyên a và b nếu d/a
và d/b. Số nguyên d được gọi là ước số chung lớn nhất của a và b nếu d>0, d là ước
số chung của a và b, và mọi ước chung của a và b đều là ước số của d. Ký hiệu ước
số chung lớn nhất của a và b là gcd (a,b). Ví dụ gcd (12, 18) = 6, gcd (-18, 27) = 3.
Dễ thấy rằng với mọi số nguyên dương a ta có gcd (a, 0) = a, ta cũng sẽ qui
ước xem rằng gcd (0,0) = 0.
Một số nguyên a > 1 được gọi là số nguyên tố, nếu a không có ước số nào
ngoài 1 và chính a; và được gọi là hợp số, nếu không phải là nguyên tố. Ví dụ các
số 2, 3, 5, 7 là số nguyên tố; các số 6, 8, 10, 12, 14, 15 là hợp số. Hai số a và b được
gọi là nguyên tố với nhau, nếu chúng không có ước số chung nào khác 1, tức là nếu
gcd (a,b) = 1. Một số nguyên n > 1 bất kỳ đều có thể viết dưới dạng:
k
a
k
aa
pppn
21
21


Trong đó p
1
, p
2

, ,p
k
là các số nguyên tố khác nhau, a
1
, a
2
, a
k
là các số mũ
nguyên dương. Nếu không kể thứ tự các thừa số nguyên tố thì dạng biểu diễn đó là
duy nhất, ta gọi đó là dạng khai triển chính tắc của n. Ví dụ dạng khai triển chính
tắc của 1800 là 2
3
3
2
5
2
.
Các số nguyên tố và các vấn đề về số nguyên tố có một vai trò quan trọng
trong số học và trong ứng dụng vào lý thuyết mã hóa, sẽ xét riêng trong chương sau.
Thuật toán cho kết quả: gcd (4864, 3458) = 38.
Biết rằng nếu gcd (a,b) = d, thì phương trình bất định
a.x + b.y = d
có nghiệm nguyên (x,y), và một nghiệm nguyên (x,y) như vậy có thể tìm
được bởi thuật toán Euclide mở rộng như sau:

23
Thuật toán Euclide mở rộng:
INPUT: hai số nguyên không âm a và b với a ≥b.
OUTPUT: d = gcd (a,b) và hai số x, y sao cho a.x +b.y = d

1. Nếu b = 0 thì đặt d

a, x

1, y

0 và cho ra (d, x, y).
2. Đặt x
2
= 1, x
1
= 0, y
2
= 0, y
1
= 1.
3. Trong khi còn b > 0 thực hiện:
3.1 q

a div b, r

a mod b, x

x
2
– qx
1
, y

y

2
– qy
1
.
3.2 a

b, b

r, x
2


x
1
, x
1


x, y
2

y
1
và y
1


y.
4. Đặt d


a, x

x2, y

y2, và cho ra kết quả (d, x, y)
Ví dụ: Dùng thuật toán Euclide mở rộng cho các số a = 4864 và b = 3458,
lần lượt được các giá trị sau đây cho các biến a, b, q, r, x, y, x
1
, x
2
, y
1
, y
2
(sau mỗi
chu trình thực hiện hai lệnh 3.1 và 3.2).
Bảng 1.2.2. Mô tả quá trình tính toán của thuật toán Euclid mở rộng
a
b
q
r
x
y
x1
x2
y1
y2
4864
3458





0
1
1
0
3458
1406
1
1406
1
-1
1
0
-1
1
1406
646
2
646
-2
3
-2
1
3
-1
646
114
2

114
5
-7
5
-2
-7
3
114
76
5
76
-27
38
-27
5
38
-7
76
38
1
38
32
-45
32
-27
-45
38
38
0
2

0
-91
128
-91
32
128
-45
Dễ thử lại rằng sau mỗi lần thực hiện chu trình gồm hai lệnh 3.1 và 3.2 các
giá trị x, y, r thu được luôn thỏa mãn 4864. x + 3458.y = r, và do đó khi kết thúc các
vòng lặp (ứng với giá trị b = 0), thực hiện tiếp lệnh 4 ta được kết quả d = 38 và
y = -45, cặp số (32, -45) thỏa mãn: 4864.32 + 3458. (-45) = 38.

24
1.2.2. Thuật toán tính phần tử nghịch đảo theo Modulo
* Định nghĩa:
Cho a  Z
n
, nếu tồn tại b  Z
n
sao cho a.b  1 (mod n), ta nói b là phần tử
nghịch đảo của a trong Z
n
và ký hiệu a
-1
.
Một phần tử có phần tử nghịch đảo, gọi là khả nghịch.
* Định lý: gcd (a, n) = 1  Phần tử a  Z
n
có phần tử nghịch đảo.
Chứng minh:

Nếu a.a
-1
≡ 1 (mod n) thì a.a
-1
= 1 + kn ↔ a.a
-1
- kn = 1 → (a, n) =1.
Nếu (a, n) = 1, ta có a.a
-1
+ kn = 1 → a.a
-1
= 1 + kn, do đó a.a
-1
≡ 1 (mod n).
* Hệ quả: Mọi phần tử trong Z
n
*
đều có phần tử nghịch đảo.
* Tìm phần tử nghịch đảo bằng Thuật toán Euclid mở rộng.
Input: a  Zn , n
Output: Phần tử nghịch đảo của a.
Procedure Invert(a, n);
Begin
g
0
:=n; g
1
:=a; u
0
:=1; u

1
:=0; v
0
:=0; v
1
:=1;
i:=1;
while g
i
 0 do
begin
y:= g
i-1
div g
i
; g
i+1
:= g
i+1
- y.g
i
;
u
i+1
:= u
i+1
- y.u
i
; v
i+1

:= v
i+1
- y.v
i
;
i:= i+1;
end;
t := v
i+1
;
if t > 0 then a
-1
:= t else a
-1
:=t + n;
End;

Ví dụ: Tìm phần tử nghịch đảo của 3 trong Z
7

Tức là phải giải phương trình 3.x ≡ 1(mod 7), x sẽ là phần tử nghịch đảo
của 3.

25
I
g
i
u
i


v
i

y
1
7
1
0

1
3
0
1
2
2
1
1
-2
3
3
0



Vì t = v2 = -2 < 0 do đó x = a
-1
:= t + n = -2 + 7 = 5.
Vậy 5 là phần tử nghịch đảo của 3 trong Z
7


Chú ý
Định lý (Euler tổng quát): Nếu (a, n) = 1 thì a
(n)
mod n = 1
Hệ quả: Nếu p là số nguyên tố và (a, p) = 1, thì a
p-1
(mod p) = 1
1.2.3. Thuật toán phân tích một số ra các thừa số nguyên tố
Đặt vấn đề: Có một khối lượng khổng lồ các tài liệu về các thuật toán phân
tích thừa số. Tuy vậy, trong phần này chỉ đưa ra một cái nhìn khái quát bao gồm
việc thảo luận sơ lược về các thuật toán phân tích thừa số tốt nhất hiện thời và cách
sử dụng chúng trong thực tế. Ba thuật toán hiệu quả nhất trên các số thật lớn là:
sàng bậc hai, thuật toán đường cong Elliptic và sàng trường số. Các thuật toán nổi
tiếng khác bao gồm: phương pháp p và thuật toán (p – 1) của Pollard, thuật toán (p
+ 1) của Williams, thuật toán liên phân số và dĩ nhiên là cả phép chia thử.
1.2.3.1. Phương pháp Pollard
Thuật toán (p – 1) của Pollard (đưa ra vào năm 1975) là một ví dụ về một
thuật toán đơn giản khi được áp dụng đối với các số nguyên lớn.
Inputs: n, số nguyên cần phân tích; và f(x), hàm tạo số giả ngẫu nhiên
modulo n.
Output: một nhân tử không tầm thường (khác 1 và n) của n, hoặc không
thực hiện được.


26
x ← 2, y ← 2; d ← 1
While d = 1:
x ← f(x)
y ← f(f(y))
d ← GCD(|x − y|, n)

If d = n, return không thực hiện được
Else return d.
Hình 1. 2: Thuật toán phân tích thừa số p - 1
Chú ý rằng thuật toán có thể không tìm thấy nhân tử và trả về kết quả không
thực hiện được với một hợp số n. Trong trường hợp này sử dụng hàm f(x) khác và
thử lại. Thuật toán cũng không làm việc khi n là số nguyên tố, trong trường hợp
này d sẽ luôn là 1.
Đối với hàm f, chúng ta chọn đa thức với hệ số nguyên. một trong những
dạng chung nhất đó là: f(x) = x
2
+ c mod n, c ≠ 0, -2.
Ví dụ: Cho n = 8051 và f(x) = x2 + 1 mod 8051.
i
x
i
y
i
gcd(|x
i
– y
i
|, 8051)
1
5
26
1
2
26
7474
1

3
677
871
97
97 là một nhân tử không tầm thường của 8051. Nhân tử còn lại là thương của
phép chia n cho 97 bằng 83.

27
1.2.3.2. Thuật toán đường cong Elliptic
Thuật toán đường cong Elliptic mạnh hơn (được Lenstra xây dựng vào
những năm 80) trên thực tế là sự tổng quát hóa của phương pháp p - 1. Ta sẽ không
thảo luận về mặt lý thuyết ở đây mà chỉ nhấn mạnh rằng, thành công của phương
pháp đường cong Elliptic tuỳ thuộc vào một tình huống tương tự: một số nguyên
“gần với” p chỉ có các thừa số nguyên tố bộ. Trong khi phương pháp p - 1 phụ
thuộc vào quan hệ trong Z
p
thì phương pháp đường cong Elliptic phụ thuộc vào các
Nhóm xác định trên các đường cong Elliptic theo modulo n.
1.2.3.3. Thuật toán kiểu Las Vegas
Thuật toán được xây dựng trên cơ sở một số nguyên tố nhất định liên quan
tới các căn bậc hai của 1 theo modulo n, trong đó n = p * q là tích của hai số nguyên
tố lẻ phân biệt.
1. Chọn w là ngẫu nhiên và 1  w  n – 1
2. Tính x = gcd (w, n)
3. Nếu 1 < x < n thì thoát (thành công: x = p hoặc x = q)
4. Tính a = A (b)
5. Viết ab - 1 = 2
s
r, r lẻ
6. Tính v = w

r
mod n
7. Nếu v = 1 (mod n) thì thoát (không thành công)
8. Trong khi v

1 (mod n) thì thực hiện
9. v
0
= v
10. v = v
2
mod n
11. Nếu v
0
 -1 (mod n) thì thoát (không thành công)
ngược lại
tính x = gcd (v
0
+ 1, n)
(thành công: x = p hoặc x = q)
Hình 1. 3: Thuật toán phân tích thừa số (cho trước số mũ giải mã a)

×