Tải bản đầy đủ (.doc) (24 trang)

BÀI TOÁN SỐ NGUYÊN TỐ VÀ CÁC PHƯƠNG PHÁP PHÂN TÍCH RA THỪA SỐ NGUYÊN TỐ

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 (233.3 KB, 24 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
_______________________________

BÀI TẬP LỚN
LÝ THUYẾT MÃ HÓA THÔNG TIN
Đề tài:
BÀI TOÁN SỐ NGUYÊN TỐ VÀ CÁC PHƯƠNG PHÁP
PHÂN TÍCH RA THỪA SỐ NGUYÊN TỐ

Sinh viên thực hiện:

Trịnh Xuân Hinh
Trần Hậu Tin
Phạm Văn Thành
Nhóm 5
Lớp KHMT1-K4

Giảng viên hướng dẫn: Ths. Mai Thanh Hồng

Hà Nội, 5/2013


MỤC LỤC
MỤC LỤC........................................................................................................................... 2
LỜI NÓI ĐẦU..................................................................................................................... 1
CHƯƠNG I: TỔNG QUAN LÝ THUYẾT VÀ MÃ HÓA THÔNG TIN....................................2
I.Lý thuyết thông tin.........................................................................................................2
CHƯƠNG II: SỐ NGUYÊN TỐ VÀ CÁC PHƯƠNG PHÁP PHÂN TÍCH RA THỪA SỐ
NGUYÊN TỐ...................................................................................................................... 7
Kết Luận........................................................................................................................... 21


Tài Liệu Tham Khảo:........................................................................................................ 22


LỜI NÓI ĐẦU
Hiện nay thông tin đã và đang tác động trực tiếp đến mọi mặt hoạt động kinh tế xã
hội của hầu hết các quốc gia trên thế giới. Thông tin có một vai trò hết sức quan
trọng, bởi vậy chúng ta phải làm sao đảm bảo được tính trong suốt của thông tin
nghĩa là thông tin không bị sai lệch, bị thay đổi, bị lộ trong quá trình truyền từ nơi
gửi đến nơi nhận. Với sự phát triển rất nhanh của công nghệ mạng máy tính đặc
biệt là mạng internet thì khối lượng thông tin ngày càng chuyển tải nhiều hơn.
Nhưng vấn đề đặt ra là phải làm sao để đảm bảo được tính bảo mật của

thông tin. Do đó, hiện nay giải pháp là dùng các hệ mã hóa thông tin
để mã hóa thông tin sau đó gửi đi để đảm bảo những thông tin gửi đi
trên mạng được nguyên vẹn. Số nguyên tố đóng vai trò quan trọng
trong mã hóa thông tin, rất nhiều hệ mã yêu cầu tìm và sử dụng số
nguyên tố lớn. Trong phạm vi bài tập lớn này nhóm em sẽ tìm hiểu về
bài toán số nguyên tố, các phép thử kiểm tra số nguyên tố lớn, cách tạo
số
nguyên tố lớn, và các thuật toán để phân tích ra thừa số nguyên tố.

1


CHƯƠNG I: TỔNG QUAN LÝ THUYẾT VÀ MÃ HÓA THÔNG TIN

I.

Lý thuyết thông tin
Khái niệm cơ bản của lý thuyết thông tin có thể được nắm bắt thông qua việc xem

xét hình thức liên lạc phổ biến nhất của con người: ngôn ngữ. Hai yếu tố quan
trọng của một ngôn ngữ ngắn gọn là: các từ thông dụng (như "một", "cái", "tôi")
nên ngắn gọn hơn các từ kém thông dụng hơn (như "thông tin", "thợ thủ công") để
các câu không bị quá dài. Sự cân bằng độ dài các từ như vậy cũng tương tự như
trong nén dữ liệu và là một thành phần cơ bản của mã hóa nguồn. Ngoài ra, nếu
một phần của câu không nghe được hoặc bị nghe nhầm do tiếng ồn, chẳng hạn như
do có ô tô chạy qua, thì người nghe vẫn có thể đoán ra ý nghĩa của câu. Sự vững
chắc đó là một thành phần thiết yếu cho hệ thống liên lạc điện tử cũng như cho
ngôn ngữ. Tính chất đó trong truyền thông được đảm bảo bởi mã hóa kênh. Mã hóa
nguồn và mã hóa kênh là những mối quan tâm chính của lý thuyết thông tin.

1. Entropy
Lý thuyết thông tin được định nghĩa là khối lượng thông tin trong một thông báo
như là số bít nhỏ nhất cần thiết để mã hoá tất cả những nghĩa có thể của thông báo
đó.
Ví dụ, trường ngay_thang trong một cơ sở dữ liệu chứa không quá 3 bít
thông tin, bởi vì thông tin tại đây có thể mã hoá với 3 bít.

0

= Sunday

1

= Monday

10 = Tuesday
11 = Wednesday
100 = Thursday
101 = Friday

110 = Saturday
111 is unused
Nếu thông tin này được biểu diễn bởi chuỗi ký tự ASCII tương ứng, nó sẽ chiếm
nhiều không gian nhớ hơn, nhưng cũng không chứa nhiều thông tin hơn. Tương ự
như trường gioi_tinh của một cơ sở dữ liệu chứa chỉ 1 bít thông tin, nó có thể lưu
2


trữ như một trong hai xâu ký tự ASCII : Nam, Nữ. Khối lượng thông tin trong một
thông báo M là đo bởi Entropy của thông báo đó, ký hệu bởi H(M). Entropy của
thông báo gioi_tinh chỉ ra là 1 bít, ký hiệu H(gioi_tinh) = 1, Entropy của thông báo
số ngày trong tuần là nhỏ hơn 3bits.
Trong trường hợp tổng quát, Entropy của một thông báo là log 2n, với n là số khả
năng có thể.
H(M) = log2n

2.

Tốc độ của ngôn ngữ. (Rate of Language)

Đối với một ngôn ngữ, tốc độ của ngôn ngữ là r = H(M)/N
trong trường hợp này N là độ dài của thông báo. Tốc độ của tiếng Anh bình thường
có một vài giá trị giữa 1.0 bits/chữ cái và 1.5 bits/chữ cái, áp dụng với giá trị N rất
lớn.
Tốc độ tuyệt đối của ngôn ngữ là số bits lớn nhất, chúng có thể mã hoá trong mỗi
ký tự. Nếu có L ký tự trong một ngôn ngữ, thì tốc độ tuyệt đối là :
R = log2L
Đây là số Entropy lớn nhất của mỗi ký tự đơn lẻ. Đối với tiếng Anh gồm 26 chữ
cái, tốc độ tuyệt đối là log226 = 4.7bits/chữ cái. Sẽ không có điều gì là ngạc nhiên
đối với tất cả mọi người rằng thực tế tốc độ của tiếng Anh nhỏ hơn nhiều so với tốc

độ tuyệt đối.

3.

An toàn của hệ thống mã hoá

Shannon định nghĩa rất rõ ràng, tỉ mỉ các mô hình toán học, điều đó có nghĩa là hệ
thống mã hoá là an toàn. Mục đích của người phân tích là phát hiện ra khoá k, bản
rõ p, hoặc cả hai thứ đó. Hơn nữa họ có thể hài lòng với một vài thông tin có khả
năng về bản rõ p nếu đó là âm thanh số, nếu nó là văn bản tiếng Đức, nếu nó là
bảng tính dữ liệu, v. v . . .
Trong hầu hết các lần phân tích mã, người phân tích có một vài thông tin có khả
năng về bản rõ p trước khi bắt đầu phân tích. Họ có thể biết ngôn ngữ đã được mã
hoá. Ngôn ngữ này chắc chắn có sự dư thừa kết hợp với chính ngôn ngữ đó. Nếu nó
là một thông báo gửi tới Bob, nó có thể bắt đầu với "Dear Bob". Chắc chắn là "Dear
Bob " sẽ là một khả năng có thể hơn là chuỗi không mang ý nglĩa gì chẳng hạn
"tm*h&rf". Mục đích của việc thám mã là sửa những tập hợp khả năng có thể có
của bản mã với mỗi khả năng có thể của bản rõ.
Có một điều giống như hệ thống mã hoá, chúng đạt được sự bí mật tuyệt đối. Hệ
thống mã hoá này trong đó bản mã không mang lại thông tin có thể để tìm lại bản
3


rõ. Shannon phát triển lý thuyết cho rằng, hệ thống mã hoá chỉ an toàn tuyệt đối nếu
nếu số khoá có thể ít nhất là nhiều bằng số thông báo có thể. Hiểu theo một nghĩa
khác, khoá tối thiểu dài bằng thông báo của chính nó.
Ngoại trừ an toàn tuyệt đối, bản mã mang lại một vài thông tin đúng với bản rõ, đ
iều này là không thể tránh được. Một thuật toán mật mã tốt giữ cho thông tin ở mức
nhỏ nhất, một người thám mã tốt khai thác những thông tin này để phát hiện ra bản
rõ.

Người phân tích mã sử dụng sự dư thừa tự nhiên của ngôn ngữ để làm giảm số khả
năng có thể của bản rõ. Nhiều thông tin dư thừa của ngôn ngữ, sẽ dễ dàng hơn cho
sự phân tích mật mã. Chính vì lý do này mà nhiều sự thực hiện mã hoá sử dụng
chương trình nén bản rõ để giảm kích thước văn bản trước khi mã hoá chúng. Bi
vậy quá trình nén làm giảm sự dư thừa của thông báo.
Entropy của hệ thống mã hoá là đo kích thước của không gian khoá (keyspace).
H(K) = log2(number of keys )

4. Sự lộn xộn và sự rườm rà. (Confusion and Diffusion)
Theo nhà khoa học Shannon, có hai k thuật cơ bản để che dấ u sự dư thừa thông tin
trong thông báo gốc đó là : sự lộn xộn và sự rườm rà.
Kỹ thuật lộn xộn (Confusion) che cấu mối quan hệ giữa bản rõ và bản gốc.
Kỹ thuật này làm thất bại sự cố gắng nghiên cứu bản mã tìm kiếm thông tin dư thra
và thống kê mẫu. Phương pháp dễ nhất để thực hiện điều này là thông qua lỹ thuật
thay thế. Một hệ mã hoá thay thế đơn giản, chẳng hạn hệ mã dịch vòng Caesar, dựa
trên nền tảng của sự thay thế các chữ cái, nghĩa là chữ cái này được thay thế bằng
chữ cái khác. Sự tồn tại của một c hữ cái trong bản mã, là do việc dịch chuyển đi k
vị trí của chữ cái trong bản rõ.
Kỹ thuật rườm rà (Diffusion) làm nất đi sự dư thừa của bản rõ bằng bề rộng
của nó vượt quá bản mã (nghĩa là bản mã kích thước nhỏ hơn bản rõ). Một người
phân tích tìm kiếm sự dư thừa đó sẽ có một thời gian rất khó khăn đầ tìm ra chúng.
Cách đơn giản nhất tạo ra sự rườm rà là thông qua việc đổi chỗ (hay còn gọi là
hoán vị).

II.

Lý thuyết mã hóa

Lý thuyết mã hóa :là một ngành của toán học (mathematics) và khoa học điện toán
(computer science)) nhằm giải quyết tình trạng lỗi dễ xảy ra trong quá trình truyền

thông số liệu trên các kênh truyền có độ nhiễu cao (noisy channels)), dùng những
phương pháp tinh xảo khiến phần lớn các lỗi xảy ra có thể được chỉnh sửa. Nó còn
4


xử lý những đặc tính của mã (codes)), và do vậy giúp phù hợp với những ứng dụng
cụ thể.
Có hai loại mã hiệu:
1. Mã hóa dùng nguồn (Mã hóa entrôpi (Entropy encoding))
2. Mã hóa trên kênh truyền (Sửa lỗi ở phía trước (Forward error correction))

Cái đầu tiên chúng ta nói đến là mã hóa dùng nguồn. Ý định của phương pháp này
là nén dữ liệu từ chính nguồn của nó, trước khi truyền đi, giúp cho việc truyền
thông có hiệu quả hơn. Chúng ta chứng kiến thói quen này hằng ngày trên Internet,
nhất là trong cách dùng "zip" nén dữ liệu để giảm lượng dữ liệu phải truyền, giảm
nhẹ gánh nặng cho mạng lưới truyền thông, đồng thời thu nhỏ cỡ tập tin. Cái thứ hai
là mã hóa trên kênh truyền. Bằng việc cộng thêm những bit mới vào trong dữ liệu
được truyền, còn gọi là bit chẵn lẻ (parity bits), kỹ thuật này giúp cho việc truyền
thông tín hiệu chính xác hơn trong môi trường nhiễu loạn của kênh truyền thông.
Có nhiều chương trình ứng dụng, mà người dùng trung bình không để ý đến, sử
dụng mã hóa trên kênh truyền. Kỹ thuật Reed-Solomon được dùng để nhằm sửa lỗi
do những vết xước và bụi trên bề mặt đĩa âm nhạc CD thông thường. Trong ứng
dụng này, kênh truyền thông lại chính là bản thân cái đĩa CD. Điện thoại di động
"Cell phones" cũng dùng kỹ thuật mã hóa có hiệu ứng cao (powerful coding
technique) để sửa các lỗi trong việc truyền sóng rađiô ở tần số cao bị yếu mờ và bị
nhiễu. Modem xử lý số liệu, việc truyền thông qua đường điện thoại, và đương
nhiên ngay cả chính NASA, tất cả đều sử dụng kỹ thuật mã hóa trên kênh truyền
hiệu ứng để truyền những bit số liệu qua đường dây.
Lý thuyết toán học.


III.
+

Modular số học.

Về cơ bản a = b(mod n) nếu a = b+kn trong đó k là một số nguyên. Nếu a và b
dương và a nhỏ hơn n, bạn có thể nghĩ rằng a là phần dư của b khi chia cho n. Nói
chung a và b đều là phần dư khi chia cho n. Đôi khi b gọi là thặng dư của a, modulo
n, đôi khi a gọi là đồng dư của b, modulo n.
Tập hợp các số nguyên từ 0 đến n-1 còn được gọi là tập hợp thặng dư hoàn toàn
modulo n. Đi ều này có nghĩa là, với mỗi s ố nguyên a, thì thặng dư modul n là một
số từ 0 đến n -1.
Modulo số học cũng giống như số học bình thường, bao gồm các phép giao hoán,
kết hợp và phân phối. Mặt khác giảm mỗi giá trị trung gian trong suốt quá trình
tính toán.
5


(a+b) mod n = ((a mod n) + (b mod n)) mod n (a- b) mod n = ((a mod n) - (b mod
n)) mod n (axb) mod n = ((a mod n) X (b mod n)) mod n (ax(b + c)) mod n = (((a X
b) mod n) + ((a X c) mod n)) mod n
Hệ thống mã hoá sự dụng nhiều sự tính toán modulo n, bởi vì vấn đề này giống
như tính toán logarithm rời rạc và diện tích hình vuông là khó khăn. Mặt khác nó
làm việc dễ hơn, bởi vì nó bị giới hạn trong tất cả giá trị trung gian và kết quả. Ví
dụ : a là một số k bits, n là kết quả trung gian của phép cộng, trừ, nhân sẽ không
vượt quá 24 bits. Như vậy chúng ta có thể thực hiện hàm mũ trong modulo số học
mà không cần sinh ra kết quả trung gian đồ sộ.
+

Số nguyên tố.


Số nguyên tố là một số lớn hơn 1, nhưng chỉ chia hết cho 1 và chính nó, ngoài ra
không còn số nào nó có thể chia hết nữa. Số 2 là một số nguyên tố. Do vậy 7, 17,
53, 73, 2521, 2365347734339 cũng là số nguyên tố. Số lượng số nguyên tố là vô
tận. Hệ mật mã thường sử dụng số nguyên tố lớn cỡ 512 bits và thậm chí lớn hơn
như vậy.
+ Ước số chung lớn nhất.

Hai số gọi là cặp số nguyên tố khi mà chúng khôn g có thừa số chung nào khác 1,
hay nói một cách khác, nếu ước số chung lớn nhất của a và n là bằng

1.

Chúng ta có thể viết như sau : gcd(a,n)=1

Số 15 và 28 là một cặp số nguyên tố, nhưng 15 và 27 thì không phải cặp số nguyên
tố do có ước số chu ng là 1 và 3, dễ dàng thấy 13 và 500 cũng là một
cặp số nguyên tố. Một số nguyên tố là một cặp số nguyên tố với tất cả những số
khác loại trừ những số là bội số.
Một cách dễ nhất để tính toán ra ước số chung lớn nhất của hai số là nhờ vào
thuật toán Euclid. Knuth mô ả thuật toán và một vài mô hình của thuật toán đã
được sửa đổi.
Định lý fermat nhỏ: cho p là số nguyên tố a là số nguyên dương không chia hết cho
p. Khi đó ta có:
ap-1≡ 1 mod p
Từ định nghĩa Fermat ta có các hệ quả:
Cho a € z và p là số nguyên tố thì ap= a mod p.
Nếu e , d nguyên dương và thỏa mãn điều kiện ed≡1(mod p-1) thì (a e)d=(ad)e=a mod
p
6



CHƯƠNG II: SỐ NGUYÊN TỐ VÀ CÁC PHƯƠNG PHÁP PHÂN TÍCH RA
THỪA SỐ NGUYÊN TỐ
Số nguyên tố đóng vai trò quan trọng trong mã hóa thông tin. Rất nhiều hệ mã yêu
cầu tìm và sử dụng các số nguyên tố lớn vấn đề đặt ra là làm thế nào tìm được số
nguyên tố lớn? Liệu có thể lấy ngẫu nhiên một số nguyên lẻ rồi phân tích nó ra
thành thừa số nguyên tố.
Việc phân tích ra thừa số nguyên tố như thế cần rất nhiều thời gian và rõ ràng
không phải là phương pháp tốt. Nếu phân tích ra thừa số không quá khó thì nhiều hệ
mã sẽ phá sản. Chúng ta sẽ tìm hiểu một số phép thử nhằm kiểm tra một số có phải
là số nguyên tố hay không với thời gian chấp nhận được:
I.

Một Số Phép Thử Kết Luận Một Số Lớn Là Số Nguyên Tố
1. Kiểm tra trên cơ sở định luật nhỏ của Fermat
Phương pháp này dựa trên định luật nhỏ của Fermat: Nếu như n là số nguyên tố
thì bất kỳ số a ∈ Z thỏa mãn phương trình sau:
(1) a n ≡ a(mod n)
Nếu như UCLN (a, n) = 1 , thì:
(2) a n −1 ≡ 1(mod n) .
Cho nên để kiểm tra tính nguyên tố của n, chúng ta chọn một số bất kỳ a ∈ Z và
kiểm tra xem có thỏa mãn định lý của Fermat hay không? Nếu như định lý Fermat
không thỏa với một giá trị a nào đó thì n là hợp số. Nếu như định lý thỏa mãn, thì
chúng ta cũng không thể kết luận rằng n là số nguyên tố, bởi vì định lý chỉ đúng
trong điều kiện cần. Vì vẫn tồn tại n là hợp số, thì đối với bất kỳ số a ∈ Z , thì ta vẫn
có được đằng thức a n ≡ a(mod n) , số này còn được gọi là số Carmichael.
Ví dụ, chúng ta xem số 561=3.11.17. Chúng ta chứng tỏ số này là số
Carmichael. Đồng dư thức a 561 ≡ a (mod 561) sẽ tương đương với hệ a 561 ≡ a (mod 3) ,
a 561 ≡ a(mod11) , a 561 ≡ a(mod17) . Nếu 3|a, thì a 561 ≡ a ≡ 0(mod 3) . Nếu như 3 không là


ước của a, thì a 2 ≡ 1(mod 3) , từ đây ta có a 560 ≡ 1(mod 3) , hay a 561 ≡ a (mod 3) . Tương
tự kiểm tra đối với hai số 11 và 17.
Như vậy việc kiểm số nguyên tố theo Fermat là có khuyết điểm.

Các bước kiểm tra tính nguyên tố như sau:
7


1. Chọn ngẫu nhiên a từ tập {1,2,..., n − 1} và kiểm tra điều kiện UCLN(a,n)=1
2. Nếu như điều kiện trên không thỏa mãn thì n là hợp số
3. Kiểm tra đẳng thức (2)
4. Nếu như đẳng thức (2) không thỏa mãn thì trả lời n là hợp số
5. Nếu như đẳng thức đúng thì trả lời là chưa biết, nhưng có thể kiểm tra lại
một số lần với các a khác nhau.
Giải thuật Fermat kiểm tra tính nguyên tố của số
Đầu vào: n: giá trị để kiểm tra tính nguyên tố; k: tham số tham gia vào quá trình
kiểm tra .
Đầu ra: hợp số nếu n là hợp số, nếu không nguyên tố xác suất
repeat k times:
lấy a ngẫu nhiên trong [1, n − 1]
if an − 1 mod n ≠ 1 then
return hợp số
return nguyên tố xác suất
Khi dùng thuật toán tính nhanh luỹ thừa theo mođun, thời gian thi hành của
thuật toán là O(k × log3n), ở đó k là số lần kiểm tra với mỗi số a ngẫu nhiên, và n là
giá trị ta muốn kiểm tra. Và từ việc kiểm tra này dẫn ta đến phần sau.
Định nghĩa : Cho n>1 là số tự nhiên lẻ, n − 1 = 22.d , ở đây d là số lẻ. Số n gọi là
số giả nguyên tố chặc chẽ trong cơ sỡ a, a ∈ N , nếu như UCLN (a, n) = 1 hoặc
a d ≡ 1(mod n) , hoặc


r

a d .2 ≡ −1(mod n) , với

0≤ r < s.

Từ định nghĩa chúng ta có điều sau. Nếu n là số nguyên tố, thì a n −1 ≡ 1(mod n) ,
tức

a2

s −1


d

a2

s

d

≡ 1(mod n) .

Từ

đây ta




a2

s −1

d

≡ −1(mod n) , thì chúng ta dừng, nếu như a 2

≡ ±1(mod n) . Nếu như
s −1

d

≡ 1(mod n) , thì chúng

ta lại khai căn cho đến khi tìm được a d hay căn đó đồng dư với -1.
Để kiểm tra tính nguyên tố của các số lẻ n, 7 < n < 25.109 , ta dùng quá trình như
sau:
Bước 1: Kiểm tra tính chặc chẽ giả nguyên tố của n trong cơ sở 2,3,5,7. Nếu n
không là chặt chẽ giả nguyên tố một trong các cơ sở đó thì n là hợp số.
8


Bước 2: Nếu n=3215031751, thì n là hợp số, ngược lại n là số nguyên tố.
Như vậy chúng ta thấy việc kiểm tra trên cơ sỡ tính chặc chẽ giả nguyên tố là
hiệu quả đối với việc tìm số hợp số, thế nhưng cách này cũng chỉ đúng trong một
điều kiện cần thiết. Trong một số kết quả chứng tỏ rằng, điều kiện cần và đủ để
kiểm tra số nguyên tố là n < (67107840) 2 .
2.


Phép thử Miller:

Mệnh đề 1: cho p là số nguyên tố và giả sử x 2 = 1(mod p), thif x= 1 hay x =-1(mod
p)
Trên cơ sở định lý Fermat nhỏ và mệnh đề 1, Miller đã đề xuất một phương pháp
kiểm tra số nguyên tố như sau:
Định nghĩa: cho số nguyên dương n với n-1=2 st , trong đó s là 1 số nguyên không
âm và t là 1 số lẻ n vượt qua phép thử Miller cơ sở b nếu b t=1(mod n) hoặc bkt=1(mod n) với k=2i, 0 <=j<=s-1
Giả sử bn-1 =(mod n) hỏi n có phải số nguyên tố không?
Điều kiện bn-1 =1 (mod n) thực ra chưa thể khẳng định n có phải số nguyên tố hay
không vì thế cần tính x= by(mod n) với y=(n-1)/2. Nếu n là số nguyên tố, ta phải có
x= 1(mod n) hoặc x=-1(mod n). Thực vậy do x2=x*x= (b(n-1)/2)(b(n-1)/2)≡1 theo định lý
fermat nhỏ và mệnh đề 1, căn bậc hai (mod) của một số nguyên phải bằng 1 hoặc
-1. Vì thế khi tính x ta cần xem xét các trường hợp sau:
x≡p(mod n), p≠±1. Trong trường hợp này theo mệnh đề 1, x không thể nguyên tố.
Kết luận x không vượt qua được phép thử Miller
x≡-1(mod n) trong trường hợp này theo mệnh đề 1, x có thể là số nguyên tố(và có
thể không). Nhưng do ta không có thông tin gì thêm nên ta chấp nhận x vượt qua
phép thử Miller.
x≡1(mod n) trường hợp này x cũng có thể là số nguyên tố nhưng ta nên kiểm tra
thêm:
a. Nếu y chia hết cho 2 lặp lại với x≡by/2(mod n).
b. Nếu y không chia hết cho 2, do không có thông tin gì thêm ta cũng chấp
nhận x vượt qua phép thử Miller.
Thuật toán luôn dừng và mọi số nguyên tố đều vượt qua phép thử Miller
Ví dụ với n= 257( nguyên tố), ta sẽ chứng tỏ n vượt qua các cơ sở b=22,b=17 và
b=4
Với b=22
9



22(n-1)/2=22128≡1mod (257)
2264 ≡ 1 (mod 257)
2232 ≡ -1 (mod 257)
Với b=17
17(n-1)/2=17128≡1mod (257)
1764 ≡ 1 (mod 257)
1732 ≡ 1 (mod 257)
1716 ≡ -1 (mod 257)
Với b=4
4(n-1)/2=4128≡1mod (257)
464 ≡ 1 (mod 257)
432 ≡ 1 (mod 257)
416 ≡ 1 (mod 257)
48 ≡ 1 (mod 257)
44 ≡ -1 (mod 257)
Khi một số nguyên dương không vượt qua được phép thử Miller thì chắc chắn nó là
hợp số, nhưng khi nó vượt qua được phép thử Miller thì chưa chắc nó đã là số
nguyên tố. Tuy nhiên không một hợp số nào có thể vượt qua mọi phép thử Miller
với các cơ sở khác nhau.
Mệnh đề 2: giả sử n là một hợp số dương lẻ thì n sẽ không thể vượt qua 75% các cơ
sở b,1≤b≤n
3.

Phép thử Rabin-Miler

Theo mệnh đề 2 ở phép thử Miller cho ta ước lượng xác suất một số nguyên có
nguyên tố hay không, như vậy khi một số nguyên tố lớn vượt qua phép thử Miller
với 1 cơ sở b nào đó giữa n và n-1 thì ta có thể nói là hơn 75% n là số nguyên tố.

Vậy thực hiện phép thử Miller với nhiều cơ sở khác nhau thì có thể hy vọng xác
suất gần 1.
Khi sử dụng kiểm tra Miller-Rabin chúng ta căn cứ vào một mệnh đề Q(p,a)đúng
với các số nguyên tố p và mọi số tự nhiên a ∈ A ⊂ N và kiểm tra xem chúng có đúng
với số n muốn kiểm tra và một số a ∈ A được chọn ngẫu nhiên hay không? Nếu
mệnh đề Q(n,a) không đúng, tất yếu n không phải là số nguyên tố, còn nếu Q(n,a)
10


đúng, số n có thể là số nguyên tố với một xác suất nào đó. Khi tăng số lần thử, xác
suất để n là số nguyên tố tăng lên.
Bổ đề: Cho trường hữu hạn Z p , trong đó p là số nguyên tố. Chắc chắn rằng 1 và
-1 luôn là các căn bậc hai của 1 theo mođun p. Chúng là hai căn bậc hai duy nhất
của 1. Thật vậy, giả sử rằng x là một căn bậc hai của 1 theo mođun p. Khi đó:
x 2 ≡ 1(mod p )
x 2 − 1 ≡ 0(mod p)
( x − 1)( x + 1) ≡ 0(mod p)

Từ đó, x − 1 hoặc x + 1 là chia hết cho p.
Bây giờ giả sử p là một số nguyên tố lẻ, khi đó p - 1 là số chẵn và ta có thể viết p
− 1 dưới dạng 2 s ⋅ m , trong đó s là một số tự nhiên lớn hơn hay bằng 1 và m là số lẻ
- Điều này nghĩa là ta rút hết các thừa số 2 khỏi p − 1. Lấy số a bất kỳ trong tập
{1,2,..,p-1}. Xét dãy số x k = a 2

k

⋅m

với k=0,1,2,...,s. Khi đó xk = (xk


− 1

)2, với

k=1,2,...,s và xs = a p −1 .
Từ định lý Fermat nhỏ:
a p −1 ≡ 1(mod p )

Hay
xs ≡ 1(mod p)

Hay
xs2−1 ≡ 1(mod p)

Do đó hoặc xs −1 ≡ 1(mod p ) hoặc xs −1 ≡ −1(mod p) . Nếu xs −1 ≡ −1(mod p) ta dừng
lại, còn nếu ngược lại ta tiếp tục với xs − 2.
Sau một số hữu hạn bước ta có: hoặc ta có một chỉ số k, 0 ≤ k ≤ s − 1 sao cho
xk ≡ −1(mod p) , hoặc tới k=0 ta vẫn có xk ≡ 1(mod p ) .

Ta có mệnh đề Q(p,a) như sau: Nếu p là số nguyên tố lẻ và p - 1 = 2 s ⋅ m thì với
k

mọi a: 00 ≤ k ≤ s sao cho xk = a 2

k

⋅m

≡ −1(mod p ) .


11


Giải thuật kiểm tra Miller-Rabin
Đầu vào: Số tự nhiên lẻ n.
Đầu ra: FALSE nếu n là hợp số, nếu không TRUE
1. Phân tích n - 1 = 2 s ⋅ m trong đó s ≥ 1 và m là số tự nhiên lẻ
2. Chọn ngẫu nhiên số tự nhiên a ∈ {2,...,n-1}.
3. Đặt b = am(mod n)
4. Nếu b ≡ 1(mod n) thì trả về TRUE. Kết thúc.
5. Cho k chạy từ 0 đến s-1:
a. Nếu b ≡ −1(mod n) thì trả về TRUE. Kết thúc.
b. Thay b:=b2(mod n).
6. Trả lời FALSE. Kết thúc.
Chúng ta xem tính chặt chẻ của thuật giải trên. Bây giờ chúng ta xem, nếu như
thuật toán trả lời FALSE mà trong khi đó n là số nguyên tố. Vì n là hợp số nên ta có
a m ≠ 1(mod n) . Bây giờ xét dãy các giá trị b được kiểm tra trong bước 2 của thuật

toán. Vì b được bình phương qua bước 5, nên ta kiểm tra các giá trị

a m , a 2 m ,..., a 2

s −1

m

. Vì kết quả thuật giải là FALSE nên ta cũng có:

i


a 2 m ≠ −1(mod n)
Với 0 ≤ i ≤ s − 1
Theo định lý Fermat ta có

a2

s

Khi đó

a2

s −1

m

có a 2

m

≡1(mod n)

a2

s −1

m

là căn bậc 2 của 1 modulo n, theo bổ đề ta có hoặc


≡ 1(mod n) hoặc a 2

s −1

m

s −1

m

≠ −1(mod n) , nên a 2

≡ −1(mod n) . Mà theo giả thuyết chứng minh ta

s −1

m

≡ 1(mod n) . Và ta có a 2

s−2

m

là căn bậc 2 của

1.
Bằng cách tương tự: a 2


s −1

m

≡ 1(mod n)

Và lặp lại lập luận trên, cuối cùng ta có:
12


a m ≡ 1(mod n)
Điều này là mâu thuẫn.
Xác suất trả lời sai:
Định lý: nếu n là hợp số dương lẻ thì trong các số a ∈ {2,..,n-1} tồn tại không quá
n −1
cơ sở a để n là số giả nguyên tố mạnh Fermat.
4

Gọi A là biến cố "Số n là hợp số". B là biến cố "Kiểm tra Miller-Rabin trả lời n
là số nguyên tố". Khi đó xác suất sai của kiểm tra này là xác suất để số n là hợp số
trong khi thuật toán cho câu trả lời TRUE, nghĩa là xác suất điều kiện P(A|B).
Theo định lý trên nếu n là hợp số thì khả năng kiểm tra này trả lời TRUE xảy ra
với xác suất không vượt quá

1
1
, nghĩa là P(B|A) ≤ . Tuy nhiên để tính xác suất sai
4
4


của kiểm tra Miller-Rbin cần tính xác suất diều kiện P(A|B). Dựa trên định lý về
ước lượng số các số nguyên tố ta đưa ra ước lượng:
P ( A) ≈ 1 −

2
ln n − 2

ln n
ln n

Theo định lý Bayes trong lý thuyết xác suất ta có công thức để tính xác suất sai
của kiểm tra Miller-Rabin là:
P ( A | B) =

P (B | A ) ⋅ P( A)
P ( B | A) ⋅ P ( A)
=
P( B)
P ( B | A) ⋅ P ( A) + P ( B | A) ⋅ P ( A)
1
4

Trong công thức này P(A) đã biết ở trên, P(B|A) ≤ , còn P( B | A) = 1 vì khi n là
số nguyên tố thì chắc chắn mệnh đề Q(n,a) là đúng và P( A) = 1 − P( A) =

2
. Từ
ln n

đây ta có

P( A | B) =

P ( B | A) ⋅ (ln n − 2)
P ( B | A) ⋅ (ln n − 2) + 2

Kiểm tra Miller-Rabin lặp:
Theo công thức tính xác suất sai trên đây, với n lớn (cỡ 130 chữ số thập phân),
nếu thực hiện phép thử Miller-Rabin chỉ một lần, xác suất sai là khá lớn, tới trên
90%. Để giảm xác suất sai, ta lặp lại phép thử k lần với k số ngẫu nhiên a khác
nhau, nếu n vượt qua 50 lần thử thì P(B|A) ≤

1
, khi thay vào công thức với 50 lần
4k
13


thử nếu cả 50 lần, phép thử đều "dương tính" thì xác suất sai giảm xưống chỉ còn là
một số rất nhỏ không vượt quá 9 ⋅10 −29 .
4.

Kiểm tra bằng Solovay-Strasen

Xem tiêu chuẩn Euler là mệnh đề Q(p,a). Khi đó Q(p,a) đúng với mọi số nguyên
tố p và mọi số tự nhiên a, 1 ≤ a < p . Thay số nguyên tố p bằng số lẻ n ta định nghĩa:
Hợp số n được gọi là số giả nguyên tố Euler cơ sở a(1 ≤ a < n ) nếu:
a
( n−1) / 2
(mod n) .
 ≡a

n
 

Định lý: Nếu n là hợp số lẻ thì tồn tại không quá

n
số tự nhiên dương a nhỏ hơn
2

n, nguyên tố cùng nhau với n sao cho n là số giả nguyên tố Euler cơ sở a.
Chứng minh:
b ∈ N , mà

Chúng ta đi chứng minh tồn tại số
b

n −1
2

UCLN (b, n) = 1



b
≠  (mod n) . Giả sử n = p1α1 ⋅ ⋅ ⋅ pkα k - tức là phân tích n ra thừa số nguyên tố.
n

Nếu n chia hết cho số bình phương số nguyên tố, thì tìm được b ∈ N ,
UCLN (b, n) = 1 , sao cho b n−1 ≠ 1(mod n) , từ đây b


n −1
2

≠ ±1(mod n) . Rõ ràng rằng, tồn

α
tại α i ≥ 2 . Theo định lý về phần dư trung hoa, có thể tìm được b ∈ N , b(mod pi ) i

α
là căn nguyên thủy trong Z p , còn khi j ≠ i, b ≡ 1(mod p j ) . Nếu như b n−1 ≡ 1(mod n) ,
j

αi
i

α
α
α −1
thì b n−1 ≡ 1(mod pi ) , từ đây n − 1φ ( pi ) = pi ( pi − 1) , điều này là không thể bởi vì ni

i

i

1 không chia hết cho pi .
Bây giờ giả sử rằng n = p1 ... pk . Chúng ta tìm số b ∈ N , sao cho b(mod p1 ) -là căn
nguyên thủy trong Z p , và b ≡ 1(mod p j ) khi j>1. Khi đó UCLN (b, n) = 1 và
1

 b   b   b   b 

  =   ⋅ ⋅ ⋅   =   = −1
 n   p1   pk   p1 

Đồng dư thức b
Bởi vì k ≥ 2 thì 1 ≡ b

n −1
2
n −1
2

≡ −1(mod n) tương đương với b

n −1
2

≡ −1(mod p j ) , với j=1,…,k.

≡ −1(mod p2 ) , là không thể.

Như vậy số b tồn tại. Chúng ta xem 2 tập hợp :

14


n −1


a
W1 = a | 1 ≤ a ≤ n − 1,UCLN ( a, n) = 1, a 2 ≡  (mod n) ,

n


n −1


a
W2 = a | 1 ≤ a ≤ n − 1,UCLN ( a, n) = 1, a 2 ≠  (mod n) ,
n



 a1a2   a1  a 2 
 =    . Cho nên đối
 n   n  n 

Nếu như a1 ∈ W1 , a2 ∈ W2 , thì a1a 2 ∈ W2 , bởi vì 

với số a ∈ W1 , thặng dư không âm nhỏ nhất của a(mod n) thuộc W2 . Dẫn đến ,
| W2 |≥| W1 | , từ đây rút ra điều khẳng định của định lý.

Giải thuật kiểm tra Solovay-Strasen
Đầu vào: n: là số tự nhiên lẻ
Đầu ra: FALSE nếu n là hợp số, nếu không TRUE
1. Chọn a ngẫu nhiên trong khoảng[1,n-1]
a
n

2. Tính ký hiệu Jacobi J=  
3. Tính x =a(n − 1) / 2(mod n)


4. Nếu J ≠ x thì trả về FALSE nếu khác trả về TRUE.
Gọi A là biến cố "Số nguyên lẻ n là hợp số"; B là biến cố: "Thuật toán Solova1
2

Strassen trả lời TRUE". Xác suất điều kiện P(B|A) ≤ .
Tương tự phép thử Miller-Rabin tính được xác suất sai của phép thử SolovaStrasen là:

II.

P ( A | B) =

P (B | A ) ⋅ P( A)
P ( B | A) ⋅ P ( A)
=
.
P( B)
P ( B | A) ⋅ P ( A) + P ( B | A) ⋅ P ( A)

P( A / B) ≈

P( B | A) ⋅ (ln n − 2)
.
P( B | A) ⋅ (ln n − 2) + 2

Tạo Số Nguyên Tố Lớn:

Định nghĩa: một số nguyên tố p được gọi là số nguyên tố mạnh nếu tồn tại các số
nguyên r,s và t thỏa mãn các điều kiện sau:
(a) p - 1 có một thừa số lớn là r.

(b) p + 1 có một thừa số lớn là s.
(c) r – 1 có một thừa số nguyên tố lớn là t.
15


Thuật toán Gordon:
(1) Phát sinh ngẫu nhiên hai số nguyên tố s và t đủ lớn có số ký số tương đương.
(2) Chọn một số nguyên dương i* và tìm số nguyên r=2it+1, với i= i*, i*+1,
i*+2,... đầu tiên vượt qua phép thử Rabin-Miller.
(3) Tính z = sr-1 mod r.
(4) Tính p*= 2zs-1.
(5) Chọn một số nguyên k*, sau đó tìm số nguyên p= p*+2krs, với k = k*,
k*+1, k*+2,... đầu tiên vượt qua phép thử Rabin- Miller.
(6) Reaturn p.
Mệnh đề: p tìm được theo thuật toán Gordon là một số nguyên tố mạnh,
Chứng minh: theo định lý Fermat nhỏ, ta có sr-1≡ 1(mod r).
Vậy: p*=2zs -1 ≡ 2sr-2*s-1 ≡ 2*1-1≡ 1 (mod r) và
p*=2zs -1≡ -1 (mod r)
Từ đó ta có:

III.

(a) p – 1 = p* +2krs -1 ≡ 0(mod r) -> r= 2it+1 là một thừa số nguyên tố lớn của
p-1
(b) p+1 = p* + 2krs+1≡0(mod r) -> s là một thừa số nguyên tố lớn của p+1.
(c) r-1 = 2it≡0(mod t)-> t là một thừa số nguyên tố lớn của r-1
Một Số Thuật Toán Phân Tích Ra Thừa Số Nguyên Tố
1. Phương pháp Fermat:

Cho n là số nguyên dương lẻ. Giả sử

n = a.b, với a, b là các số nguyên.
Do n lẻ nên a, b đều lẻ. Ta có thể viết n dưới dạng:
n = s2 – t2
với:

s=(a+b)/2,
t=(a-b)/2.

Do a và b đều là các số nguyên lẻ nên s và t cũng là các số nguyên dương lẻ.
Tương tự, nếu có 1 số nguyên dương lẻ được viết dưới dạng:
Ta có thể phân tích:
n=c.d
với

c=(x+y)/2,
d=(x-y)/2.
16


Rút ra từ nhận xét trên, ta có thể tiếp cận bài toán phân tích ra thừa số 1 số
nguyên dương lẻ n theo cách tìm hai bình phương sao cho hiệu của chúng bằng
n.
Nghĩa là:
Ta đi tìm các nghiệm phương trình:
n = x 2 – y2
Ta viết:
y2 = x2 – n
Và tìm các số bình phương có dạng x2 – n.
Quá trình được thi hành bắt đầu từ số nguyên nhỏ nhất m ≥ √n và tìm nghiệm
trong dãy số sau: m2 – n, (m+1)2 – n, (m+2)2 – n,...

Tiến trình trên đảm bảo dừng do m không thể vượt quá (n+1)/2. Thực vậy:
((n+1)/2)2 – n=((n-1)/2)2
Và tất cả các số hàng của biểu thức này đều là các số nguyên.
Ví dụ với n = 11
Bắt đầu với m = 4 > √11≈ 3.32 và xét dãy sau:
42-11=16-11=5
52-11=25-11=14
62-11=36-11=25=52
Vậy: 11= 62-52=(6+5)(6-5)=11×1.
Hạn chế:
-

Tuy nhiên phương pháp này hiệu quả nhất khi n là tích của hai số nguyên tố
gần nhau. Đây là kẽ hở để có thể bẻ khóa một số hệ mã (như RSA chẳng
hạn).

-

Mặc dù vẫn giải quyết được việc phân tích số n ra thừa số nguyên tố nhưng
phương pháp Fermat không hiệu quả .Thậm chí phương pháp này còn tệ hơn
phương pháp chia thử, vì chia thử chỉ thử với tối đa tới √n nhưng fermat thì
có trường hợp phải thử tới (n+1)/2-√n số nguyên. khi n rất lớn, tới (n+1)/2√n càng lớn hơn √n.

2. Phương pháp Monte- Carlo:

17


Mô tả thuật toán:
Cho n là một hợp số và p là ước nguyên tố nhỏ nhất của n.

Tạo ngẫu nhiên dãy số m0, m1,...,mk thỏa mãn:
k là một số lớn hơn p
k là một số nhỏ hơn n
mi 0≤i≤k, được ngẫu nhiên
nếu trong dãy được tạo như trên có một cặp số m q và mr thỏa mã đồng thời hai điều
kiện:
mq≡mr (mod p)
mq ≠ mr (mod n)
thì gcd(mq –mr,n) là một ước không tầm thường của n do:
p|(mq –mr)
n|(mq –mr)
Vấn đề đặt ra là làm sao tìm ra cặp số nhanh nhất có thể. Ta thực hiện 2 bước chính:
Bước 1: Khởi tạo tiến trình với m0 được tạo ngẫu nhiên.
Bước 2: mi≡m2i-1+1(mod n), 0≤mi≤n.
Đây không phải là dãy ngẫu nhiên hoàn toàn. Khi phát sinh phần tử m 2i, kiểm tra
ước chung lớn nhất của m2i-mi và n, nếu gcd(m2i-mi,n)=d 1không tầm thường của n
Ví dụ:
Phân tích n=323 ra thừa số nguyên tố.
Giả sử m0 =423, tính
m1=4232+1≡321(mod 323)
m2=3312+1≡ 65(mod 323). Vì gcd(m2-m1, n)=1 ước tầm thường, Ta tính tiếp:
m3=652+1 ≡27(mod 323)
m4=272+1 ≡ 84(mod 323)
Vì gcd (m4-m2)=19, là ước không tầm thường.Vậy kết quả phân tích n=323=19.17.
3. Phương pháp Rho
Nếu n là một hợp số, và n có một thừa số p sao cho
18



(p-1) là ước số của k! nào đó. Khi ấy, (p-1) là tích của toàn số nguyên tố nhỏ, thì k
sẻ không quá lớn, và k! có thể tính được.
Theo định lý Fermat nhỏ, ta có:
2p-1≡1(mod p)
Và do (p-1)|k!, tồn tại q sao cho k!=(p-1)q. kết quả là:
2k!=2(p-1)q(2p-1)q≡1q=1(mod p)
Nghĩa là p|(2k!-1).
Đặt Z =2k!-1 mod n
Nếu n|(2k!-1) ta có:
Z=(2k!-1)-ni với i nguyên dương
Ta có p|Z vì là ước của cả 2 k!-1 lẫn n. Như thế ta có thể tìm được một ước số của n
bằng cách tính gcd(Z,n). Z và n sẽ không nguyên tố cùng nhau, nghĩa là
gcd(Z,n)=d>1, vậy d là 1 ước không tầm thường của n
Nếu n|(2k!-1) phương pháp Rho sai vì ta sẽ có Z≡0 (mod n) và gcd(Z,n)=gcd(0,n)=n
Trong trường hợp n có các thừa số nguyên tố lớn, ta sẽ chọn một sơ sở b>2 khi tính
bk!-1.
Ví dụ: n= 632887
Chọn cơ sở b=261482. Ta tạo dãy ri≡bi!(mod n), i= 1,2,3,... cho đến khi gcd(r i-1,n)
không tầm thường như sau:
r1 = 261482 (mod 632887)
r2 = r12= 155053(mod 632887); gcd(r2-1,n)=1
r3= r23= 386889(mod 632887); gcd(r3-1,n)=1
r4 = r34= 181843(mod 632887); gcd(r4-1,n)=1
r5 = r45= 293943(mod 632887); gcd(r5-1,n)=1
r6 = r56= 630444(mod 632887); gcd(r6-1,n)=1
r7 = r67= 249467(mod 632887); gcd(r7-1,n)=1
r8 = r78= 234544(mod 632887); gcd(r8-1,n)=1
r9 = r89= 422180(mod 632887); gcd(r9-1,n)=1
r10 = r910= 582903(mod 632887); gcd(r10-1,n)=769
19



Ở bước thứ 10, ta tìm được 769 là một ước không tầm thường của n=632887 là số
ta cần tìm.

20


Kết Luận
Số nguyên tố là một số lớn hơn 1, nhưng chỉ chia hết cho 1 và chính nó, ngoài ra
không còn số nào nó có thể chia hết nữa. Số 2 là một số nguyên tố. Do vậy 7, 17,
53, 73, 2521, 2365347734339 cũng là số nguyên tố. Số lượng số nguyên tố là vô
tận. Hệ mật mã thường sử dụng số nguyên tố lớn cỡ 512 bits và thậm chí lớn hơn
như vậy. Số nguyên tố đóng vai trò quan trọng trong mã hóa thông tin. Rất nhiều
hệ mã yêu cầu tìm và sử dụng các số nguyên tố lớn . Trong bài tập lớn này bọn em
tìm hiểu về các phép thử kiểm tra 1 số nguyên tố lớn. Các tạo số nguyên tố lớn và
phân tích ra thừa số nguyên tố. Trong tìm hiểu có nhiều chỗ thiếu sót mong cô và
các bạn góp ý để bài tập lớn có thể hoàn thiện hơn.

21


Tài Liệu Tham Khảo:

[1].Ths.Nguyễn Đình Thúc, Bùi Doãn Khanh (2011), Mã hóa thông tin với Java.
Tập 2, Mã hóa - mật mã.
[2].Ths.Mai Thanh Hồng- Đại Học Công Nghiệp Hà Nội, Slide bài giảng lý thuyết
mã hóa thông tin.
[3].Phạm Thị Liên(2009), Lý thuyết thông tin và mã hóa.


22



×