TRANSFORM TRONG XỬ LÝ PHÉP NHÂN SỐ LỚN
3.2.1 Giới thiệu thuật tốn FFT
Cho hai số lớn X và Y với kích thƣớc lớn nhất là n-1, chúng cĩ thể đƣợc viết ở dạng sau:
X = P(B), Y = Q(B)
thức
Với B là cơ số (Thơng thƣờng B=10 hoặc là lũy thừa của 10). P và Q là hai đa
P(z) = n-1 ∑ j = 0 xj zj, Q(z) = n-1 ∑ j = 0 yjzj.
Kết quả khi thực hiện nhân P(z) với Q(z) trong R(z), khi đĩ ta cĩ đƣợc tích X.Y = R(B). Bằng cách sắp xếp lại theo hệ số của R(z) ta thu đƣợc kết quả của phép nhân X với Y.
Dựa trên lý thuyết này, ta áp dụng để thực hiện việc nhân hai đa thức cĩ bậc nhỏ hơn n.
Một đa thức cĩ bậc nhỏ hơn m là duy nhất khi nĩ đƣợc tạo bởi các giá trị cụ thể tại m điểm. Do đĩ, để tính tích R(z)= P(z).Q(z) ta cần đi tính các giá trị R(wk) tại 2n điểm phân biệt ứng với mỗi wk, điều này cũng cĩ nghĩa là ta cần tính các giá trị của P(wk) và Q(wk). Thuật tốn FFT là một gợi ý phù hợp với việc lựa chọn cho wk căn của đơn vị.
2ikπ 2iπ wk = exp = ωk, ω = exp 2n 2n
Với cách lựa chọn này, các giá trị wk thỏa mãn hai thuộc tính sau:
• Tập hợp các giá trị (P(w0),…,P(w2n-1)) và (Q(w0),…,Q(w2n-1)) cĩ thể tính tốn đƣợc trong thời gian O(n logn).
• Từ các giá trị R(wk) với i = 0,…,2n-1, đa thức R(z) thu đƣợc trong thời
gian O(n logn).
Khi đĩ, hệ số thứ k kí hiệu là rk của R(z) thỏa mãn:
2n-1 1 rk = T wk , T(z) = ∑ R(wj) zj, 2n
3.2.2 Biến đổi Fourier
j = 0
Cho dãy A = (a0, a1,…, a2n-1), tìm dạng biến đổi Fourier của dãy A.
Gọi F2n(A) là dạng biến đổi Fourier của A, khi đĩ F2n(A) đƣợc biểu diễn nhƣ sau:
F2n(A) = (b0, b1, …, b2n-1), bk =
2n-1
∑
j = 0
aj ωjk. (*)
Cuối cùng ta thu đƣợc R(z) bằng dạng biến đổi Fourier ngƣợc với các hệ số R(ωj
F (F2n(R)) = 2n R,
F (A) = (b0, b1, …, b2n-1), bk = 2n 2n-1 ∑ j = 0 aj ω-jk.
3.2.3 Biến đổi Fourier nhanh
Thuật tốn Fast Fourier Transform là phƣơng pháp để tìm ra dạng biến đổi Fourier của dãy số A trong thời gian O(n logn). Cách này nhanh hơn với phƣơng pháp truyền thống cần đến thời gian O(n2) với n là lũy thừa của 2.
bk = 2n-1 ∑ j = 0 aj ωjk = n-1 ∑ j = 0 a2j (ω2)jk + ωk n-1 ∑ j = 0 a2j+1 (ω2)jk. sau:
Nĩi cách khác, để tính tốn các hệ số bk của F2n(A), ta thực hiện các bƣớc
Định nghĩa 2 dãy con kích thƣớc n, A0 chứa các hệ số chẵn cịn A1 chứa các hệ số lẻ.
A0 = (a0, a2, …, a2n-2), and A1 = (a1,a3,…,a2n-1).
• Tìm các biến đổi Fourier
C = Fn(A0) = (c0,c1,…,cn-1) and D = Fn(A1) = (d0,d1,…,dn-1).
• Từ đĩ suy ra biểu diễn Fourier của B = (b0,…,b2n-1) = F2n(A) theo các cơng thức sau:
bk = ck + ωk
dk, bn+k = ck - ωk
dk, 0 ≤ k < n.
3.2.3 Phép nhân số lớn áp dụng giải thuật FFT
3.2.3.1 Giải thuật
Phần này trình bày thuật tốn để thực hiện phép nhân hai số lớn với FFT. Phƣơng pháp này đƣợc Schưnhage và Strassen đề xuất năm 1971 và cho tới nay
Cho n là lũy thừa của 2 và hai số nguyên lớn X và Y cĩ ít hơn n hệ số khi biểu diễn ở dạng đa thức cơ số B.
X và Y cĩ dạng biểu diễn đa thức nhƣ sau:
n-1 X = ∑ j = 0 xj Bj, Y = n-1 ∑ j = 0 yj Bj.
Để tính Z=XY ta thực hiện các bƣớc sau :
• Tìm dạng biến đổi Fourier X* của X với kích thƣớc 2n:
X* = (x0*,x1*,…,x2n-1*) ≡ F2n(x0,x1,…,xn-1,0,…,0) • Tƣơng tự, ta tìm Y* là dạng biểu diễn Fourier của Y:
Y* = (y0*,y1*,…,y2n-1*) ≡ F2n(y0,y1,…,yn-1,0,…,0). • Nhân các phần tử tƣơng ứng của X* với Y* rồi lƣu kết quả trong Z*
Z* = (z0*,z1*,…,z2n-1*), zi* ≡ xi* yi*. • Biến đổi Fourier ngƣợc để tìm Z từ Z*
1 Z = (z0,z1,…,z2n-1) ≡ F
(Z*).
2n 2n
• Đa thức Z chính là kết quả cần tìm của tích XY
2n-1
Z = ∑
i = 0
zi Bi
Chú ý rằng X* là dạng biến đổi Fourier của dãy x0,…,xn-1 với n số 0 đƣợc thêm vào sau x0,…,xn-1 và Y* là dạng biến đổi Fourier của dãy y0,…,yn-1 với n số 0 đƣợc thêm vào sau y0,…,yn-1
3.2.3.1 Cài đặt giải thuật nhân nhanh
Thực hiện việc nhân nhanh số lớn sử dụng thuật tốn FFT áp dụng trong nhân nhanh hai số lớn nhằm biến đổi rời rạc Fourier trong thời gian O(nlogn).
Giải thuật Discrete Fourier Transform (DFT) sẽ đƣợc áp dụng trong sơ đồ sau để thực hiện phép nhân: [a0 ,a1 ,a2 ,...,an-1 ] [b0 ,b1 ,b2 ,...,bn-1 ] Thêm các số 0 Thêm các số 0 [a0 ,a1 ,a2 ,...,an-1 ,0,0,...,0] [b0 ,b1 ,b2 ,...,bn-1 ,0,0,...,0] DFT DFT [y0 ,y1 ,y2 ,...,y2n-1 ] [z0 ,z1 ,z2 ,...,z2n-1 ] Khối thực hiện nhân [y0 z0 ,y1 z1 ,...,y2n-1 z2n-1 ] DFT ngƣợc [c0 ,c1 ,c2 ,...,c2n-1 ]
3.2.3.1 Cài đặt thuật tốn FFT và DFT Mơ phỏng thuật tốn FFT:
Cho dãy A cĩ chiều dài là m, w là căn nguyên thủy bậc m của đơn vị. Kết quả đƣợc lƣu trong vector V
FFT(A, m, w,V) {
if (m==1) return vector V = (a_0) else {
A_even = (a_0, a_2, ..., a_{m-2}) A_odd = (a_1, a_3, ..., a_{m-1}) V_even = FFT(A_even, m/2, w^2)
//w^2 là căn nguyên thủy bậc m/2 của đơn vị. V_odd = FFT(A_odd, m/2, w^2) for (j=0; j < m/2; ++j) { V[j] = V_even[j] + w^j*V_odd[j] V[j+m/2] = V_even[j] - w^j*V_odd[j] } }
Thuật tốn Direct fourier transform
int DFT(int dir,int m,double *x1,double *y1) { long i,k; double arg; double cosarg,sinarg; double *x2=NULL,*y2=NULL; x2 = malloc(m*sizeof(double)); y2 = malloc(m*sizeof(double)); if (x2 == NULL || y2 == NULL) return(FALSE); for (i=0;i<m;i++) { x2[i] = 0; y2[i] = 0;
arg = - dir * 2.0 * 3.141592654 * (double)i / (double)m; for (k=0;k<m;k++) {
cosarg = cos(k * arg); sinarg = sin(k * arg);
y2[i] += (x1[k] * sinarg + y1[k] * cosarg); }
}
/* Copy the data back */ if (dir == 1) {
for (i=0;i<m;i++) {
x1[i] = x2[i] / (double)m; y1[i] = y2[i] / (double)m; } } else { for (i=0;i<m;i++) { x1[i] = x2[i]; y1[i] = y2[i]; } } free(x2); free(y2); return(TRUE); }
Thuật tốn Fast Fourier Transform
X và Y là hay dãy số gồm 2m phần tử. dir = 1 thực hiện chiều thuận của FFT. dir = -1 thực hiện chiều ngƣợc của FFT. */
short FFT(short int dir,long m,double *x,double *y) { long n,i,i1,j,k,i2,l,l1,l2; double c1,c2,tx,ty,t1,t2,u1,u2,z; n = 1; for (i=0;i<m;i++) n *= 2; i2 = n >> 1; /* Sử dụng phép dịch phải*/ j = 0; for (i=0;i<n-1;i++) { if (i < j) { tx = x[i]; ty = y[i]; x[i] = x[j]; y[i] = y[j];
x[j] = tx; y[j] = ty; } k = i2; while (k <= j) { j -= k; k >>= 1; } j += k; } /* Thực hiện FFT */ c1 = -1.0; c2 = 0.0; l2 = 1; for (l=0;l<m;l++) { l1 = l2; l2 <<= 1; /* Sử dụng phép dịch trái*/ u1 = 1.0; u2 = 0.0; for (j=0;j<l1;j++) { for (i=j;i<n;i+=l2) { i1 = i + l1; t1 = u1 * x[i1] - u2 * y[i1]; t2 = u1 * y[i1] + u2 * x[i1]; x[i1] = x[i] - t1; y[i1] = y[i] - t2; x[i] += t1; y[i] += t2; } z = u1 * c1 - u2 * c2; u2 = u1 * c2 + u2 * c1; u1 = z; } c2 = sqrt((1.0 - c1) / 2.0); if (dir == 1) c2 = -c2; c1 = sqrt((1.0 + c1) / 2.0); }
/* Thực hiện chiều thuận của FFT */ if (dir == 1) {
x[i] /= n; y[i] /= n; } } return(TRUE); }
Cơ số B đƣợc sử dụng khi áp dụng cài đặt là 2. Ta chọn cơ số này vì máy tính biểu diễn thơng tin trong hệ cơ số 2. Việc tối ƣu hĩa trong cài đặt sẽ đƣợc thực hiện với các phép dịch bit. Thuật tốn sẽ thực hiện rất nhanh do phép dịch bit cĩ tốc độ thực hiện nhanh.
Bằng việc sử dụng các phép dịch bit, ta đã tối ƣu hĩa việc cài đặt thuật tốn nhân nhanh so với cách cài đặt thơng thƣờng.
3.3 CÀI ĐẶT THỬ NGHIỆM CÁC PHÉP TỐN VỚI SỐ LỚN
Từ các kết quả phân tích, các thuật tốn số học đƣợc cài đặt thành chƣơng trình để chạy thử nghiệm với các số lớn.
3.2.1 Xử lý phép cộng –trừ
Giải thuật cộng – trừ hai số nguyên lớn cĩ thể đƣợc thực hiện dễ dàng khi hai số đã đƣợc tổ chức dữ liệu để biểu diễn.
Ví dụ 3.1:
Giả sử ta cần cộng hai số a, b đã đƣợc biểu diễn ở dạng chuỗi là Sa và Sb. Giải thuật cộng hai số lớn cĩ thể đƣợc thực hiện nhƣ sau:
Bước 1: Đƣa hai số a, b về cùng độ dài N (Nếu độ dài của a và b là khác nhau) bằng cách thêm các số 0 vào đầu của số cĩ độ dài nhỏ hơn. Ta đƣợc Sa và Sb cĩ cùng độ dài N với N =Max[Length(Sa), Length(Sb)]
Bước 2: Gán giá trị Remem =0 (Remem là biến để nhớ số hàng chục của kết quả (Sa[k] + Sb[k]), đảo ngƣợc Sa và Sb
Bước 3: Cộng từng vị trí tƣơng ứng của hai chuỗi Sa và Sb từ trái sang phải.
Lƣu kết quả mỗi bƣớc trong chuỗi Sc với Sc[k]= (Sa[k] + Sb[k]+Remem) mod 10, Remem = (Sa[k] + Sb[k]) div 10. Gán Sc[N+1]=Remem
Bước 4:
Đảo ngƣợc Sc (Chỉ lấy từ vị trí 1 đến vị trí cuối cùng khác 0) ta thu đƣợc kết quả trong Sc. (Chiều dài của Sc cĩ thể từ 0 đến N+1)
Giải thuật trên cĩ thể áp dụng tƣơng tự cho phép trừ, bên cạnh cách tổ chức dữ liệu bằng chuỗi (Thƣờng gặp hạn chế vì chiều dài của chuỗi cũng cĩ giới hạn) ta cĩ thể tổ chức dữ liệu sử dụng Stack.
Dễ thấy độ phức tạp của thuật tốn này luơn là O(n).
3.2.2Xử lý phép nhân
Cĩ nhiều giải thuật để thực hiện nhân nhanh hai số lớn. Ở đây ta sử dụng giải thuật nhân nhanh ứng dụng giải thuật Fast Fourier Transform (FFT).
Giải thuật nhân nhanh hai số nguyên lớn với N chữ số cĩ thể thực hiện đƣợc với độ phức tạp O(n ln(n)ln(ln(n))) khi áp dụng thuật tốn FFT.
CHƢƠNG 4: ỨNG DỤNG TRONG XÂY DỰNG HỆ MÃ RSA
4.1 XÂY DỰNG HỆ MÃ RSA THỬ NGHIỆMGiao diện chƣơng trình: Giao diện chƣơng trình:
Văn bản thu đƣợc sau mã hĩa:
Kết quả khi thực hiện quá trình giải mã:
4.2 ĐÁNH GIÁ VÀ NHẬN XÉT KẾT QUẢ
4.2.1Chƣơng trình xử lý các phép tốn với số lớn:
Minh họa các thuật tốn cộng, nhân, lũy thừa nhanh với số lớn.
Thể hiện đƣợc các thơng số khi cần kiểm nghiệm nhân hai số lớn nhƣ: - Tính chính xác của thuật tốn.
- Thời gian thực hiện (Tính bằng đơn vị thời gian) khi thực hiện với nhiều phép nhân số lớn liên tục.
4.2.1 Chƣơng trình mơ phỏng hệ mã RSA:
Thực hiện quá trình thử nghiệm mã hĩa với các tham số
CHƢƠNG V: KẾT LUẬN
CÁC KẾT QUẢ ĐẠT ĐƢỢC:
Đề tài bƣớc đầu đƣa ra giải pháp để xử lý các phép tốn số học với số lớn trong các hệ mã cơng khai dựa trên cơ sở tốn học và tính tốn độ an tồn của các hệ mã cơng khai.
Các kết quả nghiên cứu và ứng dụng bƣớc đầu đã thực hiện đƣợc mục đích của đề tài. Bằng việc tối ƣu hĩa các phép xử lý tính tốn phức tạp trong hệ mã cơng khai và minh chứng trong hệ mã cụ thể RSA. Giải thuật đƣợc áp dụng để tối ƣu hĩa phép nhân là giải thuật xử lý cĩ độ phức tạp nhỏ nhất đƣợc biết đến cho tới thời điểm
hiện nay.
Chƣơng trình thử nghiệm đƣợc xây dựng nhằm chứng minh tính khả thi của các kết quả nghiên cứu.
Chƣơng trình hồn thiện cần cĩ sự đầu tƣ nhiều hơn về mặt thời gian và cơng sức. Đề tài cĩ thể tiếp tục phát triển để đem lại ứng dụng đáp ứng đƣợc yêu cầu thực tế.
HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Các kết quả của đề tài cĩ thể đƣợc áp dụng trong nhiều hệ mã cơng khai khác nhau và tiếp tục đƣợc cải tiến để cĩ đƣợc tốc độ thực thi tốt hơn.
Các kết quả cĩ thể đƣợc áp dụng trên nhiều hệ thống bảo mật, thực hiện trong các giao dịch trên mạng, thực hiện tạo và xác thực chữ ký điện tử.
Bên cạnh đĩ, cần tối ƣu hơn nữa các phép tồn bằng các cài đặt đƣợc thử nghiệm với các ngơn ngữ lập trình mạnh.
Tác giả mong muốn cĩ thể tiếp tục phát triển để đƣa các kết quả đã nghiên cứu vào ứng dụng trong thực tế.
TÀI LIỆU THAM KHẢO Tiếng Việt
[1]. Phan Đình Diệu (1999), Lý thuyết mật mã và an tồn thơng tin, Nxb Đại Học Quốc Gia Hà Nội, Hà Nội.
[2]. Dƣơng Anh Đức, Trần Minh Triết (2005), Mã hĩa và ứng dụng, Nxb Đại Học Quốc Gia TP Hồ Chí Minh, TP Hồ Chí Minh.
[3]. Phạm Huy Điển, Hà Huy Khối (2003), Mã hĩa thơng tin Cơ sở tốn học & ứng dụng, Viện tốn học Hà Nội, Hà Nội.
[4]. Bùi Dỗn Khanh, Nguyễn Đình Thúc (2005), Giáo trình mã hĩa thơng tin Lý thuyết & ứng dụng, Nxb Lao Động Xã Hội, TP Hồ Chí Minh.
[5]. PGS Hồ Thuần (2000), Giáo trình Lý thuyết mật mã và an tồn dữ liệu, Đại học Bách Khoa Hà Nội, Hà Nội.
Tiếng Anh
[6]. Andreas V. Meier (2005), “The ElGamar Cryptosystems”
[7]. Deninis Luciano, Gordon Prichett (1978), From Caesar Ciphers To Public Key Cryptosystems. (http://www.maa.org/pubs/Calc_articles/ma079.pdf) [8]. RHUL M.Sc Advanced Cryptography, Week 7: Public Key Cryptography +
RSA, Spring 2004.
[9]. Dr Andreas Steffen (2000), Secure Network Communication Part II Public Key Cryptography.
[10]. Dr Cunsheng Ding, HKUST Hong Kong (September 2004), The ElGamal Public Key Cryptosystem.
http:/www.cs.ust.hk/faculty/cding/CSIT571/SLIDES/slide09.pdf
[11]. R.Rivest, MIT Laboratory for computer Science and RSA Data Security, Inc. (April 1992), The MD5 Message – Digest Algorithm.
http://www.faqs.org/rfcs/rfc1321.html
[12]. RSA Laboratories’ FAQ, RSA Security Inc.(http://www.rsasecurity.com) [13]. Ph.D William. Stallings (1999), Cryptography And Internetwork Security –
Principles And Practice, PRENTICE HALL.
[14]. Message Authentication, Hash Function, Digital Signature schemes.
http://www.williamstallings.com
[15].Tsuyoshi Takagi, Juniorprofessor (2003), Efficiency Comparison Of Several RSA Variants.