Tải bản đầy đủ (.docx) (25 trang)

Thuật toán sinh 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 (206.81 KB, 25 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA AN TOÀN THÔNG TIN

BÁO CÁO BÀI TẬP LỚN MÔN HỌC
MẬT MÃ HỌC NÂNG CAO
Chủ đề số 02
TÌM HIỂU CÁC THUẬT TOÁN SINH SỐ NGUYÊN TỐ
Giảng viên: TS. Nguyễn Tuấn Anh
Thực hiện: sinh viên Đặng Văn Huân
HÀ NỘI, 2015
Ý KIẾN CỦA GIẢNG VIÊN
MỤC LỤC
3
DANH MỤC CÁC BẢNG
4
LỜI NÓI ĐẦU
Mật mã học là một ngành có lịch sử hàng nghìn năm nay, nó gắn liền với
nhu cầu bảo mật an toàn thông tin của con người ngay từ thời cổ đại. Sự ra
đời của mạng máy tính đã có tác động rất lớn đến sinh hoạt chung của loài
người. Mạng máy tính ra đời giúp cho con người dễ dàng trao đổi thông tin,
chia sẻ dữ liệu, v.v… một cách nhanh chóng mà không cần quan tâm đển
khoảng cách về địa lý. Bên cạnh ích lợi cũng tồn tại hiểm họa. Tiêu biểu là
hiểm họa lộ thông tin. Để phòng chống hiểm họa này các nhà khoa học đã
nghiên cứu, phát triển các hệ mật khác nhau.
Nhằm đảm bảo an toàn thông tin, nhiều hệ mật mã ra đời gần đây có sử
dụng các số nguyên tố như là một tham số thiết yếu. Vì vậy, số nguyên tố là
một đề tài thu hút được nhiều sự quan tâm của các chuyên gia mật mã. Nhận
thấy tầm quan trọng của số nguyên tố, cùng tinh thần học tập cao nhóm chọn
đề tài nghiên cứu “Tìm hiểu các thuật toán sinh số nguyên tố”.
Do kiến thức còn hạn chế, bản báo cáo không thể tránh khỏi những
thiếu sót mong sự góp ý của thầy cô và các bạn đọc giúp bản báo cáo hoàn


thiện hơn.
5
Chương I. TỔNG QUAN VỀ SỐ NGUYÊN TỐ
I.1. Định nghĩa số nguyên tố
Số nguyên tố là số chỉ có 2 ước, đó là 1 và chính nó. Tức là nó chỉ chia
hết cho số 1 và chính nó.
I.2. Tính chất của số nguyên tố
1. Ước tự nhiên khác 1 nhỏ nhất của một số tự nhiên n là số nguyên tố.
2. Cho p là số nguyên tố; a N; a 0. Khi đó
3. Nếu tích của nhiều số chia hết cho một số nguyên tố p thì có ít nhất
một thừa số chia hết cho p.
4. Ước số dương bé nhất khác 1 của một hợp số a là một số nguyên tố
không vượt quá
5. 2 là số nguyên tố nhỏ nhất và cũng là số nguyên tố chẵn duy nhất
6. Tập hợp các số nguyên tố là vô hạn (tương đương với việc không có
số nguyên tố lớn nhất).
I.3. Ứng dụng của số nguyên tố trong mật mã
Các số nguyên tố lớn là một trong các tham số an toàn quan trọng trong
các thuật toán lược đồ mật mã hiện đại như thuật toán mã hoá khoá công khai
RSA, lược đồ chữ ký số RSA, lược đồ trao đổi khoá Diffie-Hellman, lược đồ
mã hoá Elgammal. Số nguyên tố lớn góp phần vào việc tăng độ an toàn của
các hệ mật.
6
Chương II. MỘT SỐ THUẬT TOÁN SINH SỐ NGUYÊN TỐ
Theo chuẩn ISO/IEC 18032, các thuật toán sinh số nguyên tố được chia
thành hai loại:
- Các thuật toán dựa trên các phép kiểm tra tính nguyên tố xác xuất
- Các thuật toán sinh số nguyên tố tất định.
II.1. Một số thuật toán sinh số nguyên tố xác suất
Xác suất sai phụ thuộc vào phép kiểm tra được dùng. Xác suất mà một

hợp số được chấp nhận là không đáng kể. Để giảm thiểu xác suất sai, người ta
thường thực hiện nhiều vòng lặp với cùng một đầu vào.
II.1.1. Một số phép kiểm tra tính nguyên tố
II.1.1.1. Phép kiểm tra tính nguyên tố Miller-Rabin
a. Định lý
Cho n là số nguyên dương lẻ, ta viết
1 2
h
n m− =
, với m là số lẻ. Nếu
n là số nguyên tố thì với mọi số nguyên dương
a n<
:
( )
(
)
2
1 mod 1 mod .
k
m m
a n k h a n
≡ ∨ ∃ < ≡ −
Nếu n là hợp số thì :
(
)
{ }
2
1
: 1 1, ( 1mod ) 1 mod
4

k
m m
n
a a n a n k h a n

≤ ≤ − ≡ ∨ ∃ < ≡ − ≤
b. Thuật toán
Thuật toán kiểm tra số nguyên n có dạng
–1 2
h
n m=
với m lẻ.
Đầu vào: h,m,n
Đầu ra: “n là số nguyên tố” hoặc “n là hợp số”
Các bước thực hiện:
7
1. Chọn ngẫu nhiên một số nguyên a thoả mãn
1 – 1a n< <
2. Tính
gcd ( , )d a n=
Nếu
1d >
thì “n là hợp số” và dừng.
3. Tính
mod
m
b a n=
Nếu
1b
=

thì “n là số nguyên tố” và dừng.
4. Với
0 -1b h= ÷
thực hiện:
Nếu
1b n
= −
thì “n là số nguyên tố” và dừng.
Ngược lại tính, tính
2
modb b n=
.
5. Kết luận “n là hợp số” và dừng.
Chú ý:
- Phép kiểm tra chỉ chấp nhận các số mà tất cả các vòng lặp đều chấp
nhận. Bởi vậy phép kiểm tra có thể dừng sớm khi một cơ sở không
dẫn đến việc chấp nhận.
- Với mỗi a, xác suất để chấp nhận nhầm n là số nguyên tố không quá
1/ 4
.
- Nếu chọn k số a độc lập với nhau và cả k lần đều kết luận “n là số
nguyên tố” thì xác suất phạm sai lầm không quá
1/ 4
k
.
- Các thuật toán xác suất tuy không khẳng định chính xác được một số
có là nguyên tố hay không nhưng chúng lại được dùng làm công cụ kỹ
thuật cho các thuật toán tất định.
8
II.1.1.2. Phép kiểm tra tính nguyên tố Lehman

Phép kiểm tra Lehmann dựa trên một thực tế sau: Số nguyên lẻ N > 1 là
nguyên tố khi và chỉ khi
* ( 1)/ 2
: 1 mod
N
N
a Z a N

∀ ∈ ≡ ±

* ( 1)/ 2
: 1 mod
N
N
a Z a N

∃ ∈ ≡ −
.
Đầu vào: số cần kiểm tra N và một tham số t
Đầu ra: “N là số nguyên tố” hoặc “N là hợp số”
Các bước thực hiện:
1. Lấy f = “false”
2. Thực hiện t lần
- Chọn ngẫu nhiên một số nguyên b, 1 < b < N – 1
- Lấy y = b
(N-1)/2
mod N
- Nếu y ≠ 1 và y ≠ N – 1 thì trả về “không chấp nhận”
- Nếu y = N – 1 thiết lập f = “true”
3. Nếu f = “true” thì trả về “chấp nhận”, ngược lại trả về “không

chấp nhận”
II.1.1.3. Thuật toán sàng Eratosthenes
a. Định lý
Số nguyên dương
n là nguyên tố nếu và chỉ nếu nó không chia
hết cho bất kỳ số nguyên d nào thoả mãn
1 d < n<
b. Thuật toán
Đầu vào: Số N cần kiểm tra.
Đầu ra: Trả lời N là số nguyên tố hoặc N là hợp số.
9
Các bước thực hiện:
1. Đặt
2;a =
2. Phân tích
N q a r= × +
.
3. Kiểm tra
- Nếu
0r
=
thì trả lời “ N là hợp số”.
- Nếu
0r

thì kiểm tra:
 Nếu
a N

thì dừng: N là số nguyên tố;

 Nếu
a N<
thì đặt
1a a= +
; và quay về bước 2.
II.1.1.4. Thuật toán Lucas- Lehmer kiểm định các số Mersenne
a. Định nghĩa số Mersenne
Cho số nguyên
2s

. Số Mersenne là số nguyên dạng
2 1
s

.
Nếu
2 1
s

là số nguyên tố thì nó được gọi là số nguyên tố Mersenne.
b. Định lý
Cho
3s ≥
. Số Mersenne
2 1
s
n = −
là nguyên tố nếu và chỉ nếu hai điều
kiện sau đây được thỏa mãn:
- s là nguyên tố.

- Dãy các số nguyên được xác định bởi
0
4u =

2
1
( 2)mod
k k
u u n
+
= −
với
0k ≥
thỏa mãn
2
0
s
u

=
.
c. Mô tả thuật toán
10
Đầu vào: Số Mersenne
2 1
s
n = −
với
3s


.
Đầu ra: Trả lời n là số nguyên tố hoặc n là hợp số.
Các bước thực hiện:
1. Chia thử để kiểm tra xem s có ước nào nằm giữa 2 và
 
s
. Nếu
có, trả lời “n là hợp số”. Dừng;
2. Đặt
4u
=
.
3. Với k từ 1 đến
2s

, tính
2
2 (mod )u u n
= −
4. Nếu
0u
=
thì trả lời “n là số nguyên tố”, dừng. Ngược lại, trả
lời “n là hợp số”. Dừng
II.1.2. Một số thuật toán sinh số nguyên tố xác suất
Giả sử T là một trong những phép kiểm tra tính nguyên tố. Xác suất sai
của T phụ thuộc vào số vòng lặp kiểm tra. Các thuật toán sinh số nguyên tố
xác suất có sử dụng chung đầu vào k – độ dài của số nguyên tố cần sinh (đơn
vị tính là bit).
II.1.2.1. Thuật toán lựa chọn ngẫu nhiên

Các bước thực hiện
1. Chọn ngẫu nhiên một số nguyên lẻ N sao cho 2
k-1
< N < 2
k

2. Nếu N qua được phép kiểm tra T thì dừng. Còn không quay lại
bước 1
II.1.2.2. Thuật toán tìm kiếm tăng dần
Các bước thực hiện:
1. Chọn ngẫu nhiên số lẻ n
0
sao cho 2
k-1
< n
0
< 2
k
.
11
Lấy N = n
0
và N
max
= min(2
k
, n
0
+ 2
µ

). Thực hiện thủ tục dưới
đây:
2. Nếu N qua được phép kiểm tra T, cho đầu ra là N và dừng
3. Lấy N = N+2. Nếu N>N
max
quay lại bước 1, còn không quay về
bước 2.
Trong thuật toán có xuất hiện tham số µ. Tham số này giới hạn lượng
tăng dần khi thực hiện tìm kiếm một số nguyên tố. Có một gợi ý rằng sử dụng
tham số
µ
= 10ln(2
k
). Kết quả này cho xác suất cao trong việc tìm thấy một số
nguyên tố trong khoảng đầu tiên và phân bố của các số nguyên tố tìm được
hầu như là đều.
II.2. Một số thuật toán sinh số nguyên tố tất định
II.2.1. Cơ sở lý thuyết
II.2.1.1. Định lý Pocklington
Cho s là ước dương của
1N

,
s N>
. Giả sử có một số nguyên a
thoả mãn:

với mọi ước nguyên tố q của s. Khi đó N là số nguyên tố.
II.2.1.2. Phép chia thử kiểm tra tính nguyên tố
Tính nguyên tố của một số nguyên N có thể được chứng minh bởi phép

chia thử. Được thực hiện như sau:
1.Với tất cả các số nguyên tố p ≤ N
1/2
, nếu N mod p = 0 thì kết luận N là
hợp số, kết thúc.
2.Kết luận N là nguyên tố, kết thúc.
Với các số nguyên nhỏ, phương pháp chia thử mất ít thời gian tính toán
hơn các phương pháp kiểm tra khác. Các cài đặt cho việc kiểm tra tính
12
nguyên tố trong chuẩn này có thể định nghĩa một cận cho phép chia thử L,
dưới giá trị này phép chia thử được sử dụng để kiểm tra tính nguyên tố của
các số nguyên. Chuẩn này không thiết lập giá trị cho L.
II.2.2. Thuật toán sinh số nguyên tố của Maurer
Đầu vào: k (độ dài của số nguyên tố cần sinh).
Đầu ra: Số nguyên tố p và một chứng nhận tính nguyên tố của nó,
( )
C p
.
Các bước thực hiện:
1. Nếu
2
k
L<
thì sinh ngẫu nhiên một số nguyên lẻ p có độ dài k bít,
sau đó kiểm tra tính nguyên tố bằng phép chia thử kiểm tra tính
nguyên tố. Lặp lại cho đến khi p là một số nguyên tố. Cho đầu ra p
và chứng nhận
( )
0
C p

.
2. Nếu
2k M≤
, lấy
1/ 2r =
. Ngược lại, thực hiện lặp lại điều dưới
đây cho đến khi
k rk M
− >
.
Lựa chọn ngẫu nhiên một số thực
, 0 1s s≤ ≤
, và lấy
1
2
s
r

=
3. Lấy
1
1k rk= +
 
 
. Gọi đệ qui thuật toán này với đầu vào là
1
k
, để
xác định một số nguyên tố q có độ dài
1

k
bít và một chứng nhận
( )
C q
.
4. Lấy
13
5. Chọn ngẫu nhiên số nguyên R sao cho
2t R t
< ≤
và lấy
2 1p Rq= +
6. Chọn một số nguyên a với
1 – 1a p< <
. Nếu thỏa mãn các điều
kiện :

( 1)
(mod ) 1
p
a p

=

2
gcd( 1, ) 1
R
a p− =
thì cho đầu ra p và chứng nhận
( ) ( )

, , , p q a C q
7. Ngược lại, lặp lại các bước từ 5 đến 7.
II.2.3. Thuật toán sinh số nguyên tố của Shawe-Taylor
II.2.3.1. Thuật toán
Thuật toán sử dụng duy nhất một tham số: L, giới hạn phép chia thử.
Đầu vào: số nguyên k – số bit của số nguyên tố cần sinh
Đầu ra: số nguyên tố N
Các bước thực hiện:
1. Nếu 2
k
< L thì sinh ngẫu nhiên một số nguyên lẻ k bít, N, và kiểm
tra tính nguyên tố bằng cách chia thử. Lặp lại cho đến khi N là
một số nguyên tố. Cho đầu ra N và dừng.
2. Nếu k lẻ, lấy k
1
= . Nếu k chẵn lấy k
1
= . Gọi đệ qui thuật toán
này với đầu vào là k
1
, để tìm một số nguyên tố k
1
bít q.
3. Chọn ngẫu nhiên số nguyên x, 2
k-1

x < 2
k
4. Lấy t =
14

5. Nếu 2tq + 1

2
k
, thì lấy t=
6. Lấy N = 2qt + 1
7. Lựa chọn ngẫu nhiên một số nguyên a sao cho 1 < a < N – 1 và
lấy x = a
2t
mod N. Nếu:
• x

1
• gcd(x – 1, N) = 1
• x
q
 1 mod N
thì cho đầu ra là N
8. Ngược lại lấy t = t + 1 và lặp lại các bước từ 5 đến 8.
II.2.3.2. Tính đúng đắn của thuật toán
a. Số nguyên N ở đầu ra thuật toán có độ dài đúng k bít
- Qua bước 5 và bước 6 của thuật toán chúng ta thấy
N = 2qt + 1 < 2
k
- Qua bước 4 của thuật toán ta có t > x/2q, kết hợp với việc chọn
2
k-1

x < 2
k

được chọn tại bước 3 của thuật toán nên ta có:
t ≥ 2
k-1
/2q. Thay giá trị t vào công thức tính N ta có:
N = 2qt + 1 ≥ 2(2
k-1
/2q)q + 1 = 2
k-1
+ 1
Như vậy ta có 2
k-1
+ 1


N < 2
k
. Nói cách khác: N có độ dài đúng k bit
b. Số N ở đầu ra thuật toán là số nguyên tố
Tính nguyên tố của số N được đảm bảo bởi các phép tính toán và kiểm
tra trong bước 7 của thuật toán. Cụ thể:
- Điều kiện 1
x
q
= 1 mod N  a
2tq
= 1 mod N  a
(N-1)
= 1 mod N.
- Điều kiện 2
gcd(x - 1, N) = 1  gcd(a

2t
–1, N)=1  gcd(a
(N-1)/q
– 1, N) = 1.
15
- Mặt khác, bước 2 của thuật toán q là số nguyên tố có số bít làk
1

k/2 + 1. Do đó q 
N
.
Thỏa mãn được các điều kiện trên, số N đã thỏa mãn định lý
Pocklington. Như vậy N là số nguyên tố.
16
Chương III. CÀI ĐẶT THUẬT TOÁN SINH SỐ NGUYÊN TỐ
CỦA SHAWE-TAYLOR
III.1. Cài đặt thuật toán
Công cụ được nhóm lựa chọn để thực hiện việc cài đặt thuật toán gồm :
- Ngôn ngữ lập trinh C++
- Thư viện tính toán số lớn GMP
1 Giới thiệu về ngôn ngữ lập trình C++
Đã có nhiều sách trên thế giới viết về C/C++ và hầu hết là ca ngợi,
nhất là các lập trình viên luôn xem C/C++ là công cụ mạnh và uyển
chuyển.
- Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử
chuẩn, nhưng hầu hết đều được biểu diễn bằng những chuỗi ký tự
ngắn gọn.
- Tính cấu trúc (structured): C có một tập hợp những chỉ thị của
lập trình như cấu trúc lựa chọn, lặp… Từ đó các chương trình viết
bằng C được tổ chức rõ ràng, dễ hiểu.

- Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện
chuẩn vô cùng phong phú nên khi chuyển từ máy tính này sang máy
tính khác các chương trình viết bằng C vẫn hoàn toàn tương thích.
- Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển và cú
pháp, chấp nhận nhiều cách thể hiện, có thể thu gọn kích thước
của các mã lệnh làm chương trình chạy nhanh hơn.
- Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình
riêng rẽ thành các tập tin đối tượng (object) và liên kết (link) các đối
tượng đó lại với nhau thành một chương trình có thể thực thi được
(executable) thống nhất.
17
III.1.1. Giới thiệu thư viện tính toán số lớn GMP
Thư viện lập trình số lớn GMP được xây dựng và phát triển bởi tổ chức
nguồn mở GNU, nhằm mục đích hỗ trợ cho các lập trình viên khi tương tác, xử lý
trên các số nguyên lớn.
GMP là một thư viện miễn phí với độ chính xác số học tuỳ ý, vận hành trên
các số nguyên, số hữu tỷ và số dấu chấm động. Thực tế, độ chính xác không có giới
hạn, ngoại trừ phụ thuộc vào dung lượng bộ nhớ có trên hệ thống mà GMP đang
chạy. GMP có một tập phong phú các hàm, và các hàm đều có quy tắc biểu diễn.
- Tính toán số nguyên (MPZ): có khoảng 150 hàm số học và logic.
- Tính toán số hữu tỷ (MPQ): có khoảng 35 hàm chức năng
- Tính toán số dấu chấm động (MPF): có khoảng 70 chức năng
GMP được thiết kế để chạy nhanh nhất có thể, cho cả các toán hạng nhỏ và
các toán hạng rất lớn. Tốc độ đạt được bằng cách sử dụng “Full-words” cho các loại
số học cơ bản, sử dụng thuật toán tính nhanh, với các mã Assembly được tối ưu hoá
cao cho các vòng lặp trong phổ biến của nhiều loại CPU, và chú trọng tới tốc độ.
Phiên bản GMP đầu tiên được phát hành vào năm 1991, nó tiếp tục được
phát triển và duy trì với các phiên bản mới sau mỗi một năm. Tính tới thời điểm
tháng 3 năm 2014, phiên bản GMP mới nhất là 6.0.0
Một số hàm sử dụng trong chương trình:

mpz_t za: khai báo biến za
mpz_init_set(za,zb): khai báo za có kiểu số nguyên lớn và gắn giá trị za=zb
mpz_mul(za,zb,zc): thực hiện tính za = zb.zc
mpz_tdiv_q(za,zb,zc): thực hiện chia lấy phần nguyên
mpz_add(za,zb,zc): thực hiện cộng số nguyên lớn za = zb + zc
mpz_sub(za,zb,zc): thực hiện trừ số nguyên lớn za = zb - zc
18
III.1.2. Cài đặt thuật toán
a. Chương trình gồm 4 module:
- Sinh ngẫu nhiên nguyên lẻ k bit
long OddRandom(…)
- Chia thử để kiểm tra tính nguyên tố của số N
int trial_div(…)
- Sinh ngẫu nhiên số nguyên có A trong khoảng giới hạn
GenRandomINT(…)
- Sinh số nguyên tố N sử dụng thuật toán của Shawe-Taylor
SHAWE_TAYLOR(…)
b. Thuật toán Shawe-taylor được cài đặt chi tiết như sau:
void SHAWE_TAYLOR(long k,mpz_t *ZN){
//Khoi tao
long k1=0,N=0;
mpz_t ZQ,ZX,ZT,temp,ZF;
mpz_init(ZF); mpz_init(ZQ); mpz_init(ZX);
mpz_init(ZT); mpz_init(temp); mpz_init(*ZN);
//Step 1
if(k<=20){
do{
N=OddRandom(k);
}while(!trial_div(N));
mpz_init_set_ui(*ZN,N);

}else{
//Step 2
if(k%2 ==0) k1=k/2+1;
else k1= (k+3)/2;
SHAWE_TAYLOR(k1,&ZQ);//Gọi đệ quy thuật toán
//Step 3
mpz_t tempMIN;
mpz_init_set_ui(tempMIN,2);
for(int i=1;i<k-1;i++)
19
{
mpz_mul_ui(tempMIN,tempMIN,2);
}
mpz_t tempMAX;
mpz_init_set_ui(tempMAX,2);
for(int i=1;i<k;i++)
{
mpz_mul_ui(tempMAX,tempMAX,2);
}
mpz_sub_ui(tempMAX,tempMAX,1);
GenRandomINT(tempMIN,tempMAX,&ZX);
//Step 4
mpz_mul_ui(temp,ZQ,2);
mpz_tdiv_q(ZT,ZX,temp);
mpz_add_ui(ZT,ZT,1);
//
int success = 0;
while(success!=1){
//Step 5
mpz_t temp2;

mpz_init(temp2);
mpz_mul(temp2,temp,ZT);
mpz_add_ui(temp2,temp2,1);
mpz_t temp3;
mpz_init(temp3);
mpz_ui_pow_ui(temp3,2,k);
if(mpz_cmp(temp2,temp3)>=0){
mpz_sub_ui(temp3,temp3,1);
mpz_tdiv_q(ZT,temp3,temp);
mpz_add_ui(ZT,ZT,1);
20
}
//Step 6
mpz_mul(*ZN,temp,ZT);
mpz_add_ui(*ZN,*ZN,1); //N = 2qt + 1
//Step 7
mpz_t ZA;
mpz_init_set_ui(tempMIN,2);
mpz_init(tempMAX);
mpz_sub_ui(tempMAX,*ZN,1);
GenRandomINT(tempMIN,tempMAX,&ZA);
mpz_t temp4;
mpz_init(temp4);
mpz_mul_ui(temp4,ZT,2);
mpz_powm(ZX,ZA,temp4,*ZN);
//kiem tra dieu kien
mpz_t z_one;
mpz_init_set_ui(z_one,1);
mpz_t temp5;
mpz_init(temp5);

if(mpz_cmp(ZX,z_one)!=0){
mpz_sub_ui(temp5,ZX,1);
mpz_gcd(temp5,temp5,*ZN);
if(mpz_cmp(temp5,z_one)==0){
mpz_powm(ZX,ZX,ZQ,*ZN);
if(mpz_cmp(ZX,z_one)==0) success = 1;
}
}
//Step 8
if(success == 0) mpz_add_ui(ZT,ZT,1);
}
21
}
}
III.1.3. Kết quả thực nghiệm
Ví dụ số nguyên tố 1024 bit:
121393443472837634861571108138119684940681801915303355531
251954585709000392189057199566606376153571950285275858268
876598228596245687832865356080102250053950430958837563748
195284857979578838502797275359675196181856147094946678456
097401560667019185659921250603600435042115600458239918760
452710613766445335514111
Ví dụ số nguyên tố 2048 bit:
182390389082385737399160858290016465262713818569118615686
231868001036229082731683578055272893611103298461407863005
895451688159510121716861563261918853831171435345934810609
494294525714279027058466116795381140735417240321699249765
430214933277832745285335530979964544465842413815827125332
253690811404977726263862444552671885688685134701770436911
559547082725687122398785947916153596580372277311313963755

656489534421289058872118403269529763417410486709369178708
363253090718619109161403027489625236886295248352475514740
289241295865919985670739702593119408206455248636624978193
08491210887142346343198905550179243723513034609
22
Ví dụ số nguyên tố 3072 bit:
570732091516615537093927700431615067798818095344798233883
767481374129961504303656588432846013465918070651513661359
496257494887850244713725352913363933456304979090835872394
390278376704765705559764920989196999844683834491715729509
508752317119751665601366422419072409985701212684428445152
284126810491410653202667539543108739147160776240417168497
341717403578717540678539445372895945772864209483845533820
726788064521375295088763589818923095167340799519532148825
196099975460257987495050800072046167886175453022544383031
472029714177838408436888427198767068892719536563545002012
046242834954661372429738091944322009748399363181589804055
687771476091014967050396051160181354476748289183889331390
812162437476250232527700216107968144137259039532734335430
604526496735745127512313842154517231448509202001695248244
357586705965132929495964040046230398822148371860946852474
924905451750289793663003121116995556890900469279660595866
7310124503621
Bảng 1: Kết quả thực nghiệm
Độ dài
modulus
(bít)
Thời gian sinh (giây)
Bộ sinh
nhanh nhất

Bộ sinh lâu
nhất
Tổng thời
gian
Thời gian
trung bình
1024 0.08 5 17.8 1.78
2048 2 40 127 12.7
3072 9 111 491 49.1
23
KẾT LUẬN
Vấn đề sinh các số nguyên tố lớn, đặc biệt là các số nguyên tố lớn dùng
trong mật mã, là một lĩnh vực khá rộng, trong một thời gian ngắn học viên
không thể nghiên cứu hết toàn bộ các thuật toán sinh số nguyên tố đã được đề
cập trong báo cáo. Bởi vậy, nhóm chỉ giới hạn tập trung nghiên cứu thuật toán
sinh số nguyên tố của Shawe- Taylor.
Sau một thời gian lỗ lực nghiên cứu mặc dù đây là thuật toán khó số
lượng tài liệu để nghiên cứu không nhiều, kết quả chính nhóm đạt được là
việc chứng minh tính đúng đắn của thuật toán, mô phỏng thuật toán bằng
ngôn ngữ lập trình C++ và thống kê được thời gian sinh của các số nguyên tố
có độ dài 1024, 2048, 3072 bít.
24
TÀI LIỆU THAM KHẢO
[1] A. Menezes, P. van Oorschot, and S. Vanstone, “Handle Book of
Cryptography”, CRC Press, 1996.
[2] Joint Technical Committee ISO/IEC JTC 1, “ISO/IEC 18032”, 2005
[3] Richard Crandall, Carl Pomerance, “Prime Numbers”, 2005
[4] Dương Tử Cường, “Ngôn ngữ lập trình C++ từ cơ bản đến hướng đối
tượng”, Nhà xuất bản khoa học kỹ thuật, Hà Nội, 2005
[5] Prime number, 26/01/2015, Hà Nội.

<URL: />25

×