Phép chia hai số lớn dương

Một phần của tài liệu CÁC PHƯƠNG PHÁP TẤN CÔNG RSA (Trang 45)

Cho hai số lớn x = (xn-1..x0), y = (ym-1..y0) có độ dài là n và m, ta xét hai trường hợp sau:

4.2.5.1 Phép chia hai số lớn có thương nhỏ hơn hoặc bằng 9

Input: Hai số lớn x = (xn-1..x0), y = (ym-1..y0) có độ dài là n và m Output: z = x / y, z có độ dài là k = n – m;

Algorithm:

1.For i = 0 to i = 10 do 2. BigNum c ;

4. If (Sosanh(c,a)==1) return i-1 ;//c>a 5. Else IF(Sosanh(c,a)==2) retum i ;//c=a

4.2.5.2 Chia hai số lớn

Thuật toán chia hai số lớn dựa trên ý tưởng của phép chia thông thường Input : Hai số lớn x, y có độ đài n, m

Output : z – x/y Algorithm:

1. BigNum b, z, c1 ;

2. If ( y[0] == 0 && m = 1)

cout << “ Loi Chia Cho 0”; return b; 3. If ( x < y ) 3.1. z = 0; 3.2 Độ dài của b là 1; 3.3 dau = l;// b dương 3.4 return z; 4. t, i = 0

5. for j = n – 1 down to j ≥0 // đảo ngược 5.1. Độ dài của số lớn b là ;

5.2 b[0] = x[j];

5.3 if ( j == n - 1) then c1 = c1 + b;

else Dich(c1,1);// Dịch c1 sang trái 1vị trí c1 = c1 + b;

Chuan(c1); // loại bỏ các số 0 : dạng 0001 thành 12 5.5 if( Sosanh(c1,y) != 0){

t = Chia(c1,y);// chia hai số lớn có thương 9 ≥ t b = y * t; z[i] = t; i++; c1 = c1- b; Chuan(c1); 5.6 If(i != 0) then z[i]=0 ; i++; 6. Độ dài của z là i;

7. Giá trị dấu của z = giá tri dấu của x * giá trị dấu của y 8. z = dao(z); // đảo ngược lại số z ;

9. retum z; 4.2.6 Lũy thừa Input: a, k ∈ Zn Output: ak mod n Algorithm: 1. Đưa k về dạng: k= ∑= i i i i k

0 2 ở đây dạng biểu diễn này chính là dạng biểu diễn trong hệ cơ số 2 của k.

2. Xét b =1và nếu k = 0 thì b là kết quả 3. Xét A = a

4. Nếu k0 = 1 thì b = a 5. For (i = 1; i < t; i++)

6. Return b;

4.2.7 Ước chung lớn nhất

Sử dụng thuật toán Euclidean mở rộng tìm ước chung lớn nhất của 2 số. Input: Hai số lớn a, b với a> b

Output: d = gcd(a,b) và 2 số nguyên x,y thỏa mãn a.x + b.y = d Algorithm:

1. if( b== 0) then {d = a; x = 1; y = 0; return (d, x, y);} 2. a1 = 1; a2 = 0; a3 = a; b1 = 0; b2 = 1 ; b3 = b; 3. q = a3 div b3; 4. While (b3!= 0) 4.1. c1 = a1; c2 = a2; c3 = a3; 4.2. a1 = b1; a2 = b2; a3 = b3; 4.3. b1 = c1 – q.b1; b2 = c2 – q.b2; b3 = c3 – q.b3; 5. If (a2 < 0) then a2 = a + a2 6. d = a2; x.= a1; y = a3; 7. return (d, x, y);

4.2.8 Phép nhân theo module p

Để tính a.b mod p, ta biều diễn b dưới dạng nhị phân b = ∑

= k j j ib 0 . 2 trong đó bj = 0 hoặc bằng 1. Áp dụng thuật toán Horner: (adsbygoogle = window.adsbygoogle || []).push({});

a.b mod p = ∑ = k j j ib p p 0 mod ) mod . 2 ( ~2;.b)

Thuật toán tính a.b mod p như sau: Input: Ba số lớn a, b, p

Output: z = a.b mod p Algorithm:

1. b = ∑ = k j j ib 0 . 2 ; 2. z = a; 3. For (i = k - 1; i ≥ 0; i--) z = z2 mod p; If (bj = 1) then z = z + a; 4. return z;

4.2.9 Tìm phần từ nghịch đảo theo module p

Để tính nghịch đảo, chúng ta sẽ sử dụng thuật toán Euclidean mở rộng. Cụ thể: Algorithm:

Input: a ∈ Zn với gcd(a, n) =1 Output: a-1 mod n

1. Sử dụng giải thuật Euclidean mở rộng tìm x, y thỏa mãn điều kiện ax + by = d và d = gcd(a,n).

2. Nếu d > 1 thì a-1 mod n không tồn tại, nếu ngược lại thì x là giá trị cần tìm.

4.2.10 Phép cộng có dấu

Phép cộng hai số có dấu được thực hiện dựa trên phép so sánh, phép cộng và phép trừ hai số không âm đã trình bảy. Dấu của số lớn được lưu bít cao nhất của số lớn

Thuật toán cộng hai số lớn có dấu được thực hiện như sau: Input: Hai số lớn x, y

Output: z = x + y; Algorithm:

1. If (x, y cùng dấu) 1.1.z = x + y;

2. if (x dương) // y âm 2.1. If(s = Sơsanh(x,y)!=0) Retum z = x - y; 2.2. If(s==0) z = y - x; Đặt z cùng dấu với y; return z; 3. if (x âm) // y dương

3.1.if((s = Sosanh (x,y))==0) Retum z = y - x; 3.2 if(sl==0) z = x.y; Đặt z cùng dấu với x; Retum z 4.2.11 Phép trừ có dấu

Phép trừ hai số có dấu được thực hiện dựa trên phép cộng hai số có. Cụ thể: Input: Hai số lớn x, y

Output: z = x -y Algorithm:

1. Đổi dấu của y;

2. Cộng có dấu z = x + y; 3. retum z;

4.3.12 Phép nhân có dấu

Phép nhân hai số có dấu được thực hiện dựa trên phép nhân hai số không âm đã được trình bày ở trên. Thuật toán nhân hai số có dấu như sau:

Input: Hai số lớn x, y Output: z = x * y; Algorithm:

1. If (x, y cùng dấu) return z = x.y; 2. If(x, y khác dấu)

z = x.y; Đổi dấu z; 3. Return z;

Chương 5 - PHƯƠNG PHÁP TẤN CÔNG BẰNG NHÂN TỬ HOÁ SỐ N SỬ DỤNG ĐỊNH LÝ FERMAT 5.1 Bổ đề 1

Giả sử rằng n=p.q với p#q là hai số nguyên tố lẻ. Ngoài ra ta giả thiết rằng p < q. Khi đó:

i/ p < n < q

ii/ Số p gần n hơn số q. Tức là giả sử α , β > 0 sao cho: p + α = n = q - β, khi đó α < β

Chứng minh: (adsbygoogle = window.adsbygoogle || []).push({});

ii/ Từ kết quả ở i/ ta suy ra có tồn tại hai số dương α , β sao cho: p = n - α và q = n + β Từ đó: n = p.q = ( n - α )( n + β) = n - α n + β n - α β Hay: (β - α ) n - α β =0 (1) (β - α ) n = α β hay n = α β β - α Do α , β > 0 và n > 0 nên β - α > 0 => β # α vì nếu β = α thì từ (1) ta suy ra α β = 0. T

Từ đó hoặc α = 0 hoặc β = 0. Nhưng nếu α = 0 thì p = n vô lý, tương tự nếu

β = 0 thì q = n cũng vô lý. Mệnh đề được chứng minh

Từ bổ đề 1 ta suy ra rằng giữa hai nhân tử nguyên tố của số n thì nhân tử bé hơn p gần n hơn so với số q.

5.2 Định lý Fermat

Định lý 7 Fermat: Giả sử n là một số nguyên dương lẻ có dạng n = p.q. trong đó

pq và p, q là các số nguyên tố. Khi đó biểu thức n có thể được viết dưới dạng: n = t2 – s2

(t, s là các số nguyên dương). Các số nguyên t, s, p và q có mối quan hệ: t = p2+q và s =

2

p q

Phương pháp này được xây dựng dựa trên định lý Fermat, cụ thể: (6) Đặt x = 2.  N + 1, y = 1, r =  2 N - n. (7) If r ≤0 go to (4) (8) r = r – y, y = y+2 goto (2)

(9) If r =0 then thuật toán dừng Khi đó chúng ta sẽ có:

n =  −  +2−  2 2 y x y x

{Đây chính là hai nhân tử của n(p,q)} và 2 y x− là phân số có giá trị lớn nhất ≤ N (10) r = r + x x = x+2 goto (3) Ví dụ: Cho n = 9401 x = 2.  N + 1 = 193 y = 1, r =  2 N - n = -185

Duyệt từ trên xuống dưới từ trái qua phải theo cột r, y, x

R Y X R Y X R Y X -185 1 193 167 13 197 7 29 197 8 1 195 154 15 197 -22 31 197 7 3 195 139 17 197 175 31 199 4 5 195 122 19 197 144 33 199 -1 7 195 103 21 197 111 35 199 194 7 197 82 23 197 76 37 199 187 9 197 59 25 197 39 39 199 178 11 197 34 27 197 0 41 199 vậy

n = 9401 =  −  +2−  2 2 y x y x =  −  +2 −  2 41 199 2 41 199 = 79. 119 p = 79 q = 119 KẾT LUẬN

Hơn hai thập niên nghiên cứu vào các bài toán tính toàn về RSA để tìm sự tấn công hiệu quả nhưng không có một tấn công hiệu quả nào được tìm ra. Những sự tấn công được khám phá cho đến nay chủ yếu minh hoạ các cạm bẫy phải tránh trong quá trình cài đặt RSA. Lúc này có vẻ như sự cài đặt đúng cách có thể đảm bảo được an ninh trong thế giới số.

Chúng ta phân loại tấn công RSA ra thành 5 loại:

 Tấn cơ bản khai thác sự sai sót của hệ thống

 Tấn công khoá riêng có số mũ thấp không đủ, khoá riêng có số mũ thấp không bao giờ được sử dụng.

 Tấn công khoá công khai có số mũ thấp  Tấn công trong cài đặt

Hệ mật mã RSA đựơc cài đặt và triển khai đúng theo chuẩn mà các nhà phát triển RSA đã khuyến cáo có độ an toàn cao. Nhưng ngày nay với sự phát triển rất nhanh của các hệ tính toán số hứa hẹn trong tương lai sẽ có một cuộc chạy đua giữa các hệ tính toán số với các nhà phát triển RSA

TÀI LIỆU THAM KHẢO

Tài liệu tiếng việt:

[1] Đặng Văn Cương - Vấn đề an toàn của hệ mật mã khoá công khai - Luận văn thạc sĩ, Khoa công nghệ thông tin - Đại học công nghệ 2003

[2] Nguyễn Thị Miền – Thanh toán từ xa – Luận văn đại học, Khoa công nghệ thông tin - Đại học công nghệ 2008

[3] Nguyễn Minh Hải - Đấu thầu từ xa - Luận văn đại học, Khoa công nghệ thông tin - Đại học công nghệ 2008

[4] Đặn Thị Lan Hương - Vấn đề an toàn thông tin trong thương mại điện tử - Luận văn đại học, Khoa công nghệ thông tin - Đại học công nghệ 2008 (adsbygoogle = window.adsbygoogle || []).push({});

[5] Phan Đình Diệu – Lý thuyết mật mã và an toàn thông tin, Đại học quốc gia Hà Nội 2002

[6] Trịnh Nhật Tiến – Giáo trình an toàn dữ liệu – Khoa công nghệ thông tin, Đại học quốc gia Hà Nội

Tài liệu tiếng anh:

[7] D.Bleichenbacher. Chosen ciphertext attacks against protocols based on the RSA encryption standard PKCS #1

[8] D.Boneh, R.Demillo, and R.Lipton. On the importance of checking cryptographic protocols for faults.

[9] D.Boneh and G.Durfee. New results on cryptanalysis of low private exponent RSA. Preprint, 1998

[10] Mark Stamp Richard M.Low: “Applied Cryptanalysis”, A John Wiley & Sons INC publication, San Jose state University, San Jose CA 2007

[11] M. Wiener. Cryptanalysis of short RSA secret exponents. IEEE Transactions on Information Theory, 1990

[12] Neal Koblitz: “ A course in Number theory and Cryptography” New York, Berlin Heidelberg, London, Paris, Tokyo, 1987

[13] J. Hastad. Solving simultaneous modular equation of low degree. SIAM J. of Computing, 1988

[14] http://www.RSA.com

[15] http://www.RSAsercurity.com

[16] S. Goldwasser. The search for provably secure cryptosystems. In Cryptology and computational number theory, volume 42 of Proceeding of the 42nd Symposium in Applied Mathematics. American Mathematical Society, 1990

Một phần của tài liệu CÁC PHƯƠNG PHÁP TẤN CÔNG RSA (Trang 45)