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

Tiểu luận MẬT MÃ VÀ AN TOÀN DỮ LIỆU Phương pháp “Xác Suất” kiểm tra số nguyên tố lớn Thuật toán SolowayStrassen

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 (173.78 KB, 9 trang )

2
ĐẠI HỌC CÔNG NGHỆ
ĐẠI HỌC QUỐC GIA HÀ NỘI
MẬT MÃ VÀ AN TOÀN DỮ LIỆU
Phương pháp “Xác Suất” kiểm tra số nguyên tố lớn
Thuật toán Soloway-Strassen
Giảng viên: PGS.TS Trịnh Nhật Tiến
Thực hiện: Nguyễn Thị Dung
Hà Nội, 2014
4
Thuật toán Soloway-Strassen
1 Thuật toán Soloway-Strassen
1.1. Modulo 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, ta 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ư modulo 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.
(a+b) mod n = ((a mod n) + (b mod n)) mod n
(a-b) mod n = ((a mod n) - (b mod n)) mod n
(a×b) mod n = ((a mod n) × (b mod n)) mod n
(a×(b + c)) mod n = (((a × b) mod n) + ((a × 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ộ.
5
1.2. Thặng dư bậc hai Modulo
Định nghĩa: Thặng dư bậc hai (quadratic residue) mod n là một số nguyên
a, với a Z
n
*
, thoả mãn phương trình x
2
= a mod n có nghiệm x Z
n
*
. Ngược lại a là
bất thăng dư bậc hai mod n.
Ví dụ: 4 là thặng dư mod 5 vì 3
2
= 9 = 4 mod 5. Trong trường hợp khác, 3 là
bất thặng dự bởi vì không có số nguyên nào trong tập hợp {0, 1, 2, 3, 4} bình
phương bằng 3 mod 5.
1.3. Ký hiệu Lagrăng
Định nghĩa: nếu 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:
=
Kí hiệu Lagrăng được sử dụng trong tiêu chuẩn Euler do Euler chứng minh:
= a
(p-1)/2
(mod p)
1.4. Ký hiệu Jacobi
Định nghĩa: với n

1 lẻ và mọi số nguyên a

0. Giả sử n có triển khai chính tắc
thành thừa số nguyên tố là n = p
1
e1
p
2
e2
p
3
e3
… p
k
ek
, thì ký hiệu Jacobi được định
nghĩa như sau:

=
Khi n = p là số nguyên tố thì giá trị của ký hiệu Legendre và Jacobi là như nhau.
Định lý: Với m, n >1 là số nguyên lẻ và với a, b là số nguyên bất kỳ. Thì ký hiệu
Jacobi có các tính chất sau:
(i) =0, 1, hoặc -1. Hơn nữa, =0 nếu và chỉ nếu gcd(a, n)

1
(ii) =
6
(iii) =
(iv) Nếu a=b mod n thì =
(v) =1
(vi) = =
(vii) = =
(viii) =
Các tính chất này cho phép chúng ta định nghĩa đệ quy ký hiệu Jacobi. Nếu
n là số lẻ, và a=2
k
a
1
, và a
1
cũng là số lẻ, thì:
= =
Định nghĩa đệ quy này được diễn giải bởi thuật toán sau, thuật toán hiệu quả
để tính







n
a
mà không cần phải phân tích n thành thừa số nguyên tố:
BigInteger jacobi(BigInteger a, BigInteger b)
{
if (a == 0) return 0;
if (a == 1) return 1;
if (a == 2)
{
BigInteger b8 = b % 8;
if (b8 == 3 || b8 == 5) return -1;
else return 1;
}
if ((a % 2) == 0) return jacobi(2, b) * jacobi(a / 2, b);
if (a >= b) return jacobi(a % b, b);
if ((a % 4) == 3 && (b % 4) == 3) return -jacobi(b, a);
else return jacobi(b, a);
}
7
1.5. Thuật toán Soloway-Strassen
INPUT: n là một số tự nhiên lẻ
OUTPUT: FALSE nếu n là hợp số
TRUE nếu n không phải hợp số
int SolowayStrassen(BigInteger n, int k)
{
if (n % 2 == 0) return 0;
int i = 0;
do

{
BigInteger a = RandomNumber(2, n);
if (gcd(a, n) != 1) return 0;
BigInteger numjacobi = jacobi(a, n);
BigInteger numlegenged = BigInteger.ModPow(a,(n - 1)/2,n);
if (numlegenged != (n - 1) || numjacobi != -1)
if (numlegenged != numjacobi) { return 0; }
i++;
} while (i < k);
return 1;
}
Thời gian chạy
Thời gian chạy của thuật toán tính Jacobi là O(log
2
n). Thuật toán Euler-
witness thực hiện với hai phép tính chính: a
(n-1)/2
mod n và






n
a
. Sử dụng phương
pháp bình phương liên tiếp, phép tính thứ nhất thực hiện trong thời gian O(log n),
và phép tính thứ hai được xác định thực hiện trong thời gian là O(log
2

n). Các toán
tử so sánh có thời gian chạy coi như không đáng kể, vì vậy độ phức tạp thời gian
của thuật toán euler-witness là O(log
2
n). Kiểm tra Solovay-Strassen thực hiện
thuật toán k lần nên có thời gian thực hiện là O(k. log
2
n).
Với thuật toán Solovay-Strassen, chúng ta có (1/2)
k
khả năng phân loại sai
cho thời gian thực hiện O(k. log
2
n).
8
1.6. Xác suất sai
Định lý: Nếu n là hợp số lẻ thì tồn tại không quá số tự nhiên dương a nhỏ
hơn n, nguyên tố cùng nhau với n sao cho n là số giả nguyên tố Euler cơ sở a.
Đị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)/4 cơ sở a để n là số giả nguyên tố mạnh Fermat.
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 Soloway-
Strassen trả lời TRUE".
Xác suất điều kiện P(B|A) .
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á , nghĩa là P(B|A) . Tuy nhiên để tính xác suất
sai của kiểm tra Soloway-Strassen 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-
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 Soloway-Strassen là:

P(A|B) = =
Trong công thức này P(A) đã biết ở trên, P(B|A), còn = 1 vì khi n là số
nguyên tố thì chắc chắn mệnh đề Q(n, a) là đúng và . Từ đó
P
P
Sau n lần lặp thì xác suất sai sẽ trở nên còn rất bé độ khoảng .
2 Ví dụ minh họa
Giả sử chúng ta muốn xác định nếu n =221 là một số nguyên tố. Ta có (n-
1)/2 = 110.
Chọn ngẫu nhiên một số a = 47. Chúng ta tính toán:
9
a
(n-1)/2
mod n = 47
110
mod 221 = -1 mod 221
(a/n) mod n = (47/221) mod 221 = -1 mod 221
Điều này chỉ ra rằng hoặc là 221 là số nguyên tố, hoặc 47 là một số nguyên
tố giả Euler đối với 221.
Chúng ta thử với một số a ngẫu nhiên khác, lần này, chọn a =2:
a
(n-1)/2
mod n = 2
110
mod 221 = 30 mod 221
(a/n)mod n = (2/221) mod 221 = -1 mod 221
3 Chứng minh tinh đúng đắn của thuật toán
Có thể, thuật toán sẽ trả về một kết quả không chính xác. Nếu đầu vào là n là
một số nguyên tố, thì đầu ra hầu như chắc chắn là số nguyên tố. Tuy nhiên, nếu
đầu vào là hợp số thì có thể đầu ra có thể là nguyên tố. Số n được gọi là giả nguyên

tố.
Với n lẻ và là hợp số, ít nhất, một nửa các số a (a thỏa mãn gcd(a,n) = 1) là
bằng chứng Euler. Chúng ta có thể chứng minh điều này như sau: cho {a
1
, a
2
, …,
a
m
} là các giả mạo Euler và a là một bằng chứng Euler. Thì với i = 1, 2, …, m:
(a.a
i
)
(n-1)/2
= a
(n-1)/2
. a
i
(n-1)/2
= a
(n-1)/2
. (mod n).
Vì = , nên (a.a
i
)
(n-1)/2
(mod n).
Như vậy mỗi số a
i
cho một a.a

i
, là một bằng chứng Euler. Nên mỗi giả mạo
Euler cho một bằng chứng Euler và số các số bằng chứng Euler lớn hơn hoặc bằng
số các số giả mạo Euler.
Do đó, nếu n là hợp số, ít nhất một nửa của a với gcd(a, n)=1 là một bằng
chứng Euler. Vì thế, xác suất thất bại là nhiều nhất 2
-k
4 Chương trình
10
Kết quả test
Đầu vào Đầu ra
3241234143123411732
This is Composite number
3241234143123411733
This is Prime number
423424234242343
This is Prime number
21343534534797234723427
This is Prime number
98794712641768548325265829167413913539
This is Prime number
9347123418648163941643816843568176481649
1734618734691471658194174618491841983471
8347618418346182473189471834618471946189
3471846183461841483
This is Prime number
2417461946184187418681518718461841946182
4619824618418461824618461849146184816481
7634816348164816481547164517547147154715
4718471648174517465178346716354764571457

8145716547254754712572451785471634735472
5472645763471841746173647135473547153747
1354716354754754716761741355509
This is Prime number
F2fafadfa3 Not is number
11

×