Luận văn Các thuật toán tối ưu hóa trong bảo mật thông tin

CÁC THUẬT TOÁN TỐI ƯU HÓA TRONG BẢO MẬT THÔNG TIN LUẬN VĂN THẠC SĨ KHOA HỌC 1. Lý do chọn đề tài Các hệ mã công khai như RSA thực hiện tính toán với các số nguyên lớn hàng trăm chữ số. Độ phức tạp trong việc giải mã các hệ mã này tỉ lệ thuận với độ lớn của các số nguyên tham gia vào việc tạo khóa mã hóa và khóa công khai. Do đó để hệ mã an toàn, cần tăng kích thước của các số nguyên. Mặt khác, khi kích thước của các số nguyên cần xử lý lớn thì thời gian xử lý của chương trình mã hóa cũng tăng lên. Thông tin cần mã hóa ngày càng đa dạng và có khối lượng lớn, đòi hỏi hệ mã giảm thiểu thời gian xử lý. Các công cụ và giải thuật nhằm bẻ khóa các hệ mật mã được cải tiến đòi hỏi hệ mã cần được nâng cấp tính bảo mật. Tuy nhiên, việc nghiên cứu và triển khai các nâng cấp trong việc tối ưu hóa về mặt thuật toán trong các phép xử lý số học của các hệ mã còn hạn chế trong phạm vi các chương trình độc quyền. Để hỗ trợ giải quyết các vấn đề trên, đề tài này tập trung vào việc xây dựng một số thuật toán tối ưu hóa nhằm tăng hiệu quả các phép tính toán thực hiện với số nguyên lớn. Các kết quả của đề tài sẽ được ứng dụng trong việc hỗ trợ cho các phép xử lý số học của các hệ mã. Từ đó làm tăng tốc độ xử lý và tính bảo mật của các hệ mã. Từ tính cấp thiết của vấn đề tối ưu hóa các hệ mã công khai, đồng thời được sự hướng dẫn và gợi ý của PGS.TSKH Nguyễn Xuân Huy tôi đã chọn đề tài cho luận văn tốt nghiệp Cao học ngành khoa học máy tính là: “Các thuật toán tối ưu hóa trong bảo mật thông tin”. MỤC LỤC Trang LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC . DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ MỞ ĐẦU . 1 CHưƠNG 1 - LÝ THUYẾT MẬT MÃ 6 1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ MÃ HÓA . 6 1.2 LÝ THUYẾT ĐỘ PHỨC TẠP 10 1.3 CƠ SỞ TOÁN HỌC CỦA MẬT MÃ . 13 CHưƠNG 2 - NGHIÊN CỨU CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MẬT KHÓA CÔNG KHAI . 20 2.1 GIỚI THIỆU VỀ HỆ MẬT VỚI KHÓA CÔNG KHAI . 20 2.2 HỆ MẬT MÃ KHÓA CÔNG KHAI RSA 22 2.3 HỆ MẬT MÃ KHÓA CÔNG KHAI RSA WITH CRT 29 2.4 CƠ CHẾ HOẠT ĐỘNG CỦA RSA 34 2.5 KHẢ NĂNG BỊ BẺ KHÓA CỦA HỆ MÃ CÔNG KHAI RSA . 36 2.6 HỆ MẬT MÃ KHÓA CÔNG KHAI ELGAMAL 40 CHưƠNG 3 - MỘT SỐ GIẢI THUẬT XỬ LÝ SỐ HỌC ÁP DỤNG ĐỂ TỐI ưU HÓA QUÁ TRÌNH MÃ HÓA VÀ GIẢI MÃCỦA HỆ MÃ RSA 41 3.1 PHÂN TÍCH CÁC PHÉP XỬ LÝ TOÁN HỌC TRONG HỆ MÃ RSA 41 3.2 ỨNG DỤNG GIẢI THUẬT FAST FOURIER TRANSFORM TRONG XỬ LÝ PHÉP NHÂN SỐ LỚN 45 3.1 CÀI ĐẶT THỬ NGHIỆM CÁC PHÉP TOÁN VỚI SỐ LỚN 53 CHưƠNG 4: ỨNG DỤNG TRONG XÂY DỰNG HỆ MÃ RSA . 56 4.1 XÂY DỰNG HỆ MÃ RSA THỬ NGHIỆM . 56 4.2 ĐÁNH GIÁ VÀ NHẬN XÉT KẾT QUẢ . 59 CHưƠNG 5 – KẾT LUẬN VÀ HưỚNG PHÁT TRIỂN 60

pdf67 trang | Chia sẻ: maiphuongtl | Lượt xem: 2242 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Luận văn Các thuật toán tối ưu hóa trong bảo mật thông tin, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
, N=p*q với p và q là các số nguyên tố phân biệt, số nguyên e sao cho thỏa mãn gcd(e, (p – 1) * (q – 1)) = 1, và số nguyên c. Tìm một số nguyên m sao cho me  c (mod N). Bài toán RSA cũng có độ khó tƣơng tự nhƣ bài toán phân tích số nguyên, nhƣng nó dễ dàng đƣợc giải nếu nhƣ biết đƣợc hai số nguyên tố p và q. 2.2.2 Định nghĩa các tập làm việc của hệ RSA  Tập các bản rõ (plaintext): P = ZN = {0, 1,…, N-1}.  Tập các bản mã (ciphertext): C = ZN = {0, 1,…, N-1}.  Tập các khóa: K = {(n, p, q, e, d): N = p * q, e * d 1(mod φ(N))} 2.2.3 Quá trình tạo khoá, mã hoá và giải mã a) Tạo khóa:  Tạo hai số nguyên tố phân biệt p và q lớn, sao cho bài toán phân tích thật sự là khó giải (kích cỡ mỗi số khoảng 512 bits  1024 bits).  Tính N = p* q và φ(N) = (p – 1) * (q – 1).  Chọn một số nguyên ngẫu nhiên e sao cho 1 < e < φ(N) và gcd(e, φ(N)) = 1  Sử dụng thuật toán Euclid mở rộng, để tính số nguyên d duy nhất, sao cho 0 < d < φ(N) và e * d  1 mod φ(N) (d là nghịch đảo của e modulo N)  Hai số (e, N) làm khóa công khai, còn (d, N) đƣợc giữ bí mật làm khóa riêng. Các số nguyên tố p, q sẽ bị xóa khi kết thúc quá trình tạo khóa. b) Mã hóa: Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 31 Giả sử để gửi thông điệp M cho ngƣời B. Ngƣời A thực hiện nhƣ sau:  Lấy khóa công khai của ngƣời nhận B: (e, N).  Biến đổi thông điệp M thành những số nguyên Mi tƣơng ứng sao cho Mi < N, (i = 1,…, k). Theo phép biến đổi sau: - Biến đổi các ký tự trong thông điệp M thành các số nguyên tƣơng ứng, thí dụ theo qui tắc: Dấu cách  00, A  01, B  02,..., Z  26. - Chia thông điệp vừa biến đổi thành k nhóm có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Mi  {0,…, N – 1} (với 1 ≤ i ≤ k).  Thực hiện mã hóa lần lƣợt cho từng số Mi  Ci bằng cách: Ci = Eke(Mi) = Mi e (mod N). Tập các số nguyên {C1, C2,...,Ck} là bản mã để gửi đến ngƣời nhận B. c) Giải mã: Ngƣời nhận B thực hiện các bƣớc sau:  Thực hiện giải mã lần lƣợt từng số nguyên Ci  Mi bằng cách: Mi = D(Ci) = Ci d (mod N) với 0 ≤ Mi < N, (d là khoá bí mật của B).  Thực hiện phép biến đổi ngƣợc lại từ các số Mi thành các chuỗi ký tự tƣơng ứng để khôi phục lại nội dung thông điệp M ban đầu. Bảng 2.2: Tóm tắt các bước tạo khoá, mã hoá, giải mã của Hệ RSA Tạo khoá: Tạo 2 số nguyên tố lớn p và q * Tính N = p * q và Tính φ(N) = (p-1) * (q-1). * Chọn 1< e < φ(N): gcd(φ(N), e) = 1. * Tính d = e-1 mod φ(N) (dùng thuật toán Euclid mở rộng). Khóa công khai: (e, N) Khóa riêng: (d, N) Mã hóa: Khối bản rõ M < N * Tính: C = Me mod N * Gửi khối bản mã (số nguyên) C đến ngƣời nhận Giải mã: Khối bản mã C < N * Tính: M = Cd mod N * Khôi phục lại khối bản rõ (số nguyên) M ban đầu Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 32 2.3.4 Tính đúng của quá trình giải mã Từ: ed 1mod φ(N) φ(N) | (ed – 1).  φ(pq)| (ed – 1)  φ(p) * φ(q) | (ed – 1) (do p, q là các số nguyên tố)  φ(p) | (ed – 1) (1) và φ(q) | (ed – 1) (2) Từ (1)   k  Z: ed -1= k φ(p) = k (p-1) (p là số nguyên tố) (3) Xét trƣờng hợp tổng quát với mọi số M  Zn , khi nâng lũy thừa ed ta có: M ed  M(ed –1) + 1 (mod p) ed (M(ed-1)) * M (mod p) (4) Từ (3) & (4) ed (Mk(p - 1)) * M (mod p) (5) Vì p là số nguyên tố, vậy bất kỳ số M  ZN có hai trƣờng hợp: M nguyên tố cùng nhau với p (nghĩa là gcd(M, p) = 1) hoặc M là bội số của p (nghĩa là gcd(M, p) = p).  Trường hợp 1: gcd (M, p) = 1 Vậy  M p-1  1 (mod p) (định lý Fermat) Từ: (5)  Med  (1)k M (mod p)  Med  M (mod p) (6)  Trường hợp 2: Nếu gcd(M, p) = p  M  0 (mod p). Đồng thời lũy thừa số M lên một số nguyên bất kỳ, thì cũng chia hết cho p. Nghĩa là Med  0 (mod p ). Vậy trƣờng hợp 2 cũng thỏa mãn phƣơng trình (6) Với cách tính tƣơng tự với q, từ (2)  Med  M (mod q) (7) Từ (6) & (7)  Med  M (mod pq) M (mod N). Ví dụ 2.1 : Minh họa của hệ mật mã RSA a) Tạo khóa: Chọn p và q là những số nguyên tố nhỏ với mục đích minh họa  Chọn hai số nguyên tố p = 41, q = 67;  Tính N = 47 * 61 = 2747 và φ(N) = (41- 1) * (67-1) = 2600 ;  Chọn e = 59 thỏa mãn gcd(e, φ(N)) = gcd(2600, 59) = 1; Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 33  Tìm phần tử nghịch đảo d = 179 (dùng thuật toán Euclid mở rộng) ;  Công bố khóa công khai là cặp số ( e = 49, N = 2747), còn số d = 179 đƣợc giữ làm khóa riêng. b) Mã hóa: Giả sử nội dung cần mã hoá là M = “MA HOA CONG KHAI ”  Biến đổi các ký tự của thông điệp thành các số tƣơng ứng nhƣ sau: M A  H O A  C O N G  K H A I 13 01 00 08 15 01 00 03 15 14 07 00 11 08 01 09  Chia thông điệp thành 8 khối, mỗi khối gồm 4 chữ số biểu diễn một số nguyên Mi < N, với Mi  {1301;0008;1501;0003;1514;0700;1108;0109}.  Mã hóa lần lƣợt từng số Mi : Ci = Mi 59 ( mod 2747) (8) Mã hóa số đầu tiên M1 = 1301 theo cách tính (8) ta có: C1 = M1 59 mod 2747  130159 mod 2747 = 2352. Tiếp tục tính các số C2 ,...,C8 từ các số M2 ,..., M8 theo (8). Ta có đƣợc kết quả ở cột Ci là bản mã để gửi đến ngƣời nhận: Khối 1 2 3 4 5 6 7 8 Mi 1301 0008 1501 0003 1514 0700 1108 0109 Ci=E(Mi) 2352 2537 1745 2733 1203 2651 0534 0454 c) Giải mã:  Thực hiện giải mã lần lƣợt từng số ở cột Ci (1≤ i ≤ 8) Mi = Dkd(Ci)  Ci 179 ( mod 2747) (9) Giải mã số đầu tiên C1 = 2352 theo cách tính (2.9) ta có: M1 = C1 179 mod 2747 = 2352 179 mod 2747 = 1301 Tiếp tục tính các số M2,..., M8 từ các số C2,...,C8 theo (9) ta có bảng minh họa các số Mi đƣợc giải mã từ các số Ci nhƣ sau: Khối 1 2 3 4 5 6 7 8 Ci=E(Mi) 2352 2537 1745 2733 1203 2651 0534 0454 Mi 1301 0008 1501 0003 1514 0700 1108 0109 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 34  Thực hiện phép biến đổi ngƣợc từ các số Mi thành các chuỗi ký tự tƣơng ứng để khôi phục lại thông điệp gốc ban đầu M = "MA HOA CONG KHAI". 2.2.4 Chi phí thực hiện trong quá trình mã hóa và giải mã  Chi phí cho quá trình mã hoá: Tính C = Me mod N, với số mũ e thƣờng đƣợc chọn có dạng e = 2x + 1 (với xmax = 16) để phép tính lũy thừa modulo đƣợc thực hiện nhanh. Vì biểu diễn nhị phân của những số dạng này chỉ có hai bít giá trị 1 ở đầu và cuối. Nhƣ vậy quá trình mã hóa có nhiều nhất là 16 phép tính bình phƣơng và 1 phép nhân, do đó tổng chi phí của quá trình mã hóa là: 17(2n2 + 2n) = 34(n2+n).  Chi phí cho quá trình giải mã: Quá trình giải mã của hệ RSA, chỉ thực hiện phép tính M = Cd mod N, với số mũ bí mật d thƣờng rất lớn (d  N) để đảm bảo độ an toàn cho dữ liệu. Vì vậy chi phí thực hiện giải mã của hệ RSA tƣơng đƣơng với chi phí để thực hiện phép tính lũy thừa nhanh là: 3n3 + n2. 2.2.5 Đánh giá hệ mật mã khóa công khai RSA 2.2.5.1 Độ an toàn Hệ RSA đƣợc thiết kế dựa trên độ khó giải bài toán phân tích ra thừa số nguyên tố. Hầu hết các phƣơng pháp thám mã hệ RSA nhƣ tìm các thừa số p và q, tìm φ(n), hay tìm khóa riêng d… đều khó nhƣ bài toán phân tích. Sau đây, ta có bảng chi phí thời gian cần thiết để phân tích những hệ mật mã RSA có kích cỡ số modulo N khác nhau, bằng những thuật toán phân tích tốt nhất hiện nay (Bảng 2.3). Ở đây chi phí tính toán đƣợc tính bằng đơn vị MIPS-Years (đó là số các phép tính đã hoàn thành bởi một máy trong thời gian một năm, với tốc độ khoảng 106 phép tính trên một giây, ta có 1MIPS-Years  245 phép tính). Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 35 Bảng 2.3: Bảng chi phí thời gian cần thiết để phân tích các số nguyên N Hệ RSA Số chữ số thập phân Số bits Thuật toán Năm Chi phí phân tích (MIPS-Years) RSA-129 129 426 MPQS 1994 5.000 RSA-130 130 430 GNFS 1996 1.000 RSA-140 140 465 GNFS 1999 2.000 RSA-155 155 512 GNFS 1999 8.000 RSA-576 174 576 GNFS 2003 13.000 Vào ngày 22/8/1999 một nhóm các nhà nghiên cứu đã hoàn thành việc phân tích số N dùng trong hệ RSA-155 có 155 chữ số thập phân (512-bits) bằng thuật toán General Number Field Sieve (GNFS). Sau một thời gian 7 tháng trên mạng máy tính có 300 workstation yêu cầu khoảng 8000 MIPS-Years. Việc phân tích số nguyên N thành các thừa số nguyên tố p, q nhằm mục đích bẻ gãy hệ mật mã RSA là điều khó có thể tính toán nổi, nếu nhƣ trong quá trình thiết kế hệ RSA ta chọn số nguyên N lớn. Tuy nhiên, độ dài của số nguyên N là lớn hay nhỏ còn phụ thuộc vào mối liên hệ giữa tốc độ giải mã và độ an toàn của hệ RSA. Số N sử dụng cho modulo RSA hiện nay phải có ít nhất khoảng 232 chữ số thập phân (768-bits) sẽ cho ta một độ an toàn đủ để chống lại những tấn công sử dụng các kỹ thuật phân tích hiện nay. Trong thực tế, nếu trong quá trình thiết kế sử dụng số N có kích cỡ khoảng 1024-bits là rất an toàn, có thể chống lại các kỹ thuật phân tích hiện tại và các kỹ thuật khác phát triển trong tƣơng lai. 2.2.5.2 Hiệu suất thực hiện và ứng dụng Tốc độ thực hiện của hệ RSA là một trong những điểm yếu so với các hệ mật mã khóa đối xứng. Vì các quá trình mã hóa và giải mã của hệ RSA đều thực hiện các phép tính có các toán hạng là những số nguyên cực lớn ( thông thƣờng các phép toán này đều đƣợc xây dựng hay ”giả lập” lại). Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 36 Theo ƣớc tính, thực hiện mã hóa và giải mã bằng hệ mật mã RSA chậm hơn 100 lần so với hệ mật mã khóa đối xứng DES (bằng phần mềm). Và chậm hơn 1000 lần so với DES (bằng phần cứng). Vì lý do đó mà trên thực tế hệ mã khoá công khai RSA ít đƣợc dùng vào mục đích mã hóa cho khối lƣợng dữ liệu lớn, mà chỉ thƣờng đƣợc ứng dụng để mã hóa khối dữ liệu nhỏ. Nhƣ vậy để khắc phục một phần nào đó cho công việc mã hóa và giải mã bằng hệ mật mã RSA đƣợc nhanh hơn thì chúng ta nghiên cứu thêm hệ mật mã RSA WITH CRT nhƣ sau : 2.3 HỆ MẬT MÃ RSA WITH CRT Ta thấy rằng, quá trình giải mã của hệ mật mã RSA có độ phức tạp (M = Cd mod N) phụ thuộc trực tiếp vào kích cỡ của các số nguyên d và N. Để có thể giảm đƣợc kích cỡ của hai số nguyên d và N và tăng tốc độ giải mã, chúng ta dựa vào định lý đồng dƣ Trung hoa (CRT-Chinese Remainder Theorem) sau: 2.3.1 Định lý đồng dƣ Trung Hoa Định lý đồng dƣ Trung Hoa (CRT) cho phép giảm số lần tính toán của quá trình giải mã ở hệ RSA, bằng cách thiết lập một ánh xạ giữa tập Z N và tích Đề-các   k 1i niZ , với N =   k 1i in và các số ni (1 i  k) nguyên tố cùng nhau. Cho phép thực hiện các phép tính lũy thừa modulo trên các trƣờng số Zni nhỏ hơn, thay vì phải tính trực tiếp trên trƣờng số Z N lớn nhƣ cách tính trong hệ RSA chuẩn. Định lý 2.2:(định lý đồng dƣ Trung Hoa) Giả sử p1, p2,...., pk là các số nguyên dƣơng nguyên tố cùng nhau từng đôi một (gcd(pi, pj) = 1, khi i  j) và cho x1, x2,..., xk là các số nguyên. Khi đó hệ phƣơng trình đồng dƣ sau đây: x  x1 (mod p1) x  x2 (mod p2) x  xk (mod pk) có duy nhất một nghiệm x  ZN, N = p1.p2....pk đƣợc xác định nhƣ sau: Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 37 x =    k 1i iii Nscx mod (10) Trong đó: i i p N c  và )p (mod i 1 ii cs  , i = 1, 2,…, k Vậy, theo định lý đồng dƣ Trung Hoa, với bất kỳ số nguyên dƣơng x < N đều có thể biểu diễn dƣới dạng một bộ gồm k phần tử duy nhất [x1, x2,…, xk] và ngƣợc lại, ở đây các xi là số dƣ của phép tính x mod pi (i = 1, 2…, k). Sự chuyển đổi số nguyên x thành các số dƣ đƣợc thực hiện bởi phép rút gọn xi = x mod pi. Còn sự chuyển ngƣợc lại khó hơn, đòi hỏi tính toán liên quan đến công thức (10). Hệ quả 2.1: Nếu số nguyên x không chia hết cho p, và n  m mod (p – 1) thì xn  x m mod p. Từ hệ quả trên, khi thực hiện phép toán lũy thừa với modulo là một số nguyên tố p thì số mũ có thể đƣợc rút gọn mod (p – 1). Điều này cho phép thực hiện quá trình giải mã của hệ RSA nhanh hơn, vì các số mũ có kích cỡ nhỏ hơn. Thuật toán 2.1: Định lý đồng dư Trung Hoa tổng quát Input [x1, x2,...., xk], [p1, p2,...., pk] Output x (với x mod pi = xi với i =1, 2,..., k) 1. x = 0; N = p1; 2. For (i = 2; i  k; i++) {N = N * pi;} /* N là tích các số pi */ 3. For (i = 1; i  k; i++) /* tính nghiệm x */ { ci = (N/pi); si = ci -1 mod pi; x = (x + si * ci * xi) mod N; } 4. Return x; Trƣờng hợp đặc biệt của định lý đồng dƣ Trung Hoa đƣợc áp dụng cho quá trình giải mã ở hệ RSA, khi modulo N là tích của hai số nguyên tố p và q (N = p * q). Do đó, mọi số nguyên M < N đều biểu diễn duy nhất qua một bộ gồm hai số Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 38 [Mp, Mq], thỏa mãn Mp = M mod p và Mq = M mod q. Cho nên ta có thể giải mã thông điệp, bằng cách tính trƣớc hai số Mp và Mq rồi kết hợp chúng với công thức (10). Trong đó Mp, Mq đƣợc tính nhờ vào hệ quả (2.1) nhƣ sau: Mp = M mod p = (C d mod N) mod p = C d mod p (vì N = p * q) = C d mod p – 1 mod p = C dp mod p (với dp = d mod (p – 1). Hơn nữa, dễ dàng thấy rằng bản mã C cũng có thể rút gọn bởi mod p, trƣớc khi tính Mp, Mq. Nhƣ vậy, kích cỡ các toán hạng Cp = C mod p, Cq = C mod q, và dp = d mod (p – 1), dq = d mod (q – 1), đều giảm đi một nữa. Vậy, ta có cách tính Mp = Cp dp mod p và Mq = Cq dq mod q. Thuật toán 2.2: Định lý đồng dư Trung Hoa với modulo N = p* q Input Mp, Mq, p, q, N Output M (sao cho M = Mp mod p và M = Mq mod q) 1. y = q-1 mod p; 2. M = y * q * Mp mod N; 3. y = p-1 mod q; 4. M = (M + y * p * Mq) mod N; 5. Return M; 2.3.2 Thuật toán Garner Thuật toán Garner là một cải tiến hơn nữa về tốc độ giải mã so với thuật toán CRT vừa xét. Ở đây các bƣớc tính phần tử nghịch đảo đã bị loại bỏ, thuật toán này cũng tìm số nguyên M từ các số Mp = M mod p và Mq = M mod q. Ngoài ra thuật toán còn có tham số đầu vào: p’ = p-1 mod q đƣợc tính toán trƣớc. Thuật toán 2.3: Thuật toán Garner Input Mp, Mq, p, q, (p’ = p -1 mod q), N Output M 1. V = (Mq – Mp) mod q; 2. V = V * p’ mod q; Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 39 3. M = V * p mod N; 4. M = M + Mp mod N; 5. Return M;  Phân tích chi phí thực hiện thuật toán Giả sử số N có kích cỡ n-bits, và các số nguyên tố p, q có kích cỡ n/2-bits. Thuật toán thực hiện một phép nhân của các số nguyên có kích cỡ n/2-bits để tính V tại (bƣớc 2) với chi phí 2(n/2)2+2(n/2)  n2/2 + o(n2), và một phép nhân của số nguyên có kích cỡ n-bits để tính M ở (bƣớc 3) với chi phí 2n2 +2n  2n2 + o(n2). Vậy chi phí của thuật toán là: 5n2/2 + o(n2). Ví dụ 2.3: Minh họa các bước thực hiện thuật toán Garner Cho hai số nguyên tố p = 47 và q = 61, các số dƣ Mp = 49 và Mq = 34, sử dụng thuật toán Garner, hãy tìm số nguyên M từ các số Mp và Mq. Tính trƣớc: N = p * q = 2747 và p’ = p -1 mod q = 47 -1 mod 61 = 13 b1: V = (Mq – Mp) mod q = (34 – 12) mod 61 = -12 mod 61 = 49 (vì 12+49  0 mod 61) b2: V = V * p’ mod q = 49 *13 mod 61 = 27 b3: M = V * p mod N = 27 * 47 mod 2747 = 1269 b4:  M = M + Mp mod N =1269 + 46 mod 2747 = 1315 2.3.3 Các quá trình tạo khoá, mã hoá và giải mã Hệ mật mã RSA With CRT có tốc độ thực hiện quá trình giải mã nhanh hơn hệ RSA chuẩn rất nhiều. Trong phần này chỉ trình bày các bƣớc tính toán thêm vào cho quá trình tạo khóa và quá trình giải mã nhờ vào định lý đồng dƣ Trung Hoa, còn quá trình mã hóa thì hoàn toàn giống với hệ RSA chuẩn. 2.3.3.1 Mô tả các quá trình tạo khoá và giải mã a) Tạo khoá: Quá trình tạo khóa cũng giống nhƣ hệ RSA chuẩn, nhƣng thêm các bƣớc sau: - Tính dp = d mod (p – 1) và dq = d mod (q – 1). - Tính phần tử nghịch đảo của p modulo q là: p’ = p-1 mod q. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 40 - Chọn (e, N) làm khoá công khai, còn (p, q, dp, dq, p’) làm khoá riêng. b) Giải Mã: - Tính các số Mp= Cp dp mod p và Mq= Cq dq mod q với: Cp = C mod p; Cq = C mod q - Giải mã C để tìm M từ các số Mp và Mq nhờ vào thuật toán Garner. Thuật toán 2.4 Input C, N, dp, dq, p, q, p’ = p -1 mod q Output M 1. Cp = C mod p; 2. Cq = C mod q; 3. Mp = Cp dp mod p; 4. Mq = Cq dq M mod q; 5. M = Garner(Mp, Mq, p, q, p’, N); 6. Return M; 2.3.3.2 Phân tích chi phí thuật toán giải mã RSA_CRT Giả sử số N sử dụng cho modulo RSA có kích cỡ n-bits, và các số nguyên tố p, q có kích cỡ n/2-bits. Thuật toán RSA_CRT thực hiện hai phép tính rút gọn modulo tại (b1) và (b2) với số nguyên có kích cỡ n-bits, và modulo có kích cỡ n/2- bits. Chi phí mỗi bƣớc là n2/2, tại (b3) và (b4) thực hiện hai phép tính lũy thừa modulo với số nguyên có kích cỡ n/2-bits, với mỗi bƣớc có chi phí 3n3/8 + n2/4. Tại (b5) thực hiện thuật toán Garner để tìm M từ hai số Mp và Mq với chi phí đã tính là 5n 2/2. Vậy tổng chi phí của thuật toán giải mã là: 3n3/4 + 7n2/2 + o(n2). 2.4 PHÂN TÍCH CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MÃ RSA 2.4.1 Phân tích quá trình tạo khóa:  Tạo hai số nguyên tố phân biệt p và q lớn, sao cho bài toán phân tích thật sự là khó giải  Tính N = p* q và φ(N) = (p – 1) * (q – 1). Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 41  Chọn một số nguyên ngẫu nhiên e sao cho 1 < e < φ(N) và gcd(e, φ(N)) = 1  Sử dụng thuật toán Euclid mở rộng, để tính số nguyên d duy nhất, sao cho 0 < d < φ(N) và e * d  1 mod φ(N) (d là nghịch đảo của e modulo N)  Hai số (e, N) làm khóa công khai, còn (d, N) đƣợc giữ bí mật làm khóa riêng. Các số nguyên tố p, q sẽ bị xóa khi kết thúc quá trình tạo khóa. Nhƣ vậy, mấu chốt để tăng tính an toàn của hệ mã RSA là ta cần thực hiện đƣợc quá trình mã hóa xuất phát từ các số nguyên tố p, q lớn. 2.4.2 Phân tích quá trình mã hóa: Giả sử để gửi thông điệp M cho ngƣời B. Ngƣời A thực hiện nhƣ sau:  Lấy khóa công khai của ngƣời nhận B: (e, N).  Biến đổi thông điệp M thành những số nguyên Mi tƣơng ứng sao cho Mi < N, (i = 1,…, k). Theo phép biến đổi sau: - Biến đổi các ký tự trong thông điệp M thành các số nguyên tƣơng ứng, thí dụ theo qui tắc: Dấu cách  00, A  01, B  02,..., Z  26. - Chia thông điệp vừa biến đổi thành k nhóm có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Mi  {0,…, N – 1} (với 1 ≤ i ≤ k).  Thực hiện mã hóa lần lƣợt cho từng số Mi  Ci bằng cách: Ci = Eke(Mi) = Mi e (mod N). Tập các số nguyên {C1, C2,...,Ck} là bản mã để gửi đến ngƣời nhận B. Ta thấy rằng quá trình mã hóa phải thực hiện liên tiếp việc mã hóa các số Mi theo công thức: Ci = Eke(Mi) = Mi e (mod N). Khi p và q lớn thì ta có N = p*q rất lớn. Trên lý thuyết, số e có thể chọn chỉ cần thỏa mãn gcd(e, φ(N)) = 1, tuy nhiên để tăng tính an toàn, số e thƣờng đƣợc sẽ là số lớn hơn Max(p,q) với Max(p,q) trả về số lớn nhất giữa p và q. Do đó, quá trình mã hóa sẽ thực hiện với các số rất lớn nhƣng vẫn phải đảm bảo thời gian thực hiện việc mã hóa là đủ tốt. Xuất phát từ các lí do trên, ta cần tác động vào quá trình mã hóa bằng các thuật toán tốt để có thể thỏa mãn các yêu cầu trên. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 42 2.4.3 Phân tích quá trình giải mã: Ngƣời nhận B thực hiện các bƣớc sau:  Thực hiện giải mã lần lƣợt từng số nguyên Ci  Mi bằng cách: Mi = D(Ci) = Ci d (mod N) với 0 ≤ Mi < N, (d là khoá bí mật của B).  Thực hiện phép biến đổi ngƣợc lại từ các số Mi thành các chuỗi ký tự tƣơng ứng để khôi phục lại nội dung thông điệp M ban đầu. Quá trình giải mã cũng phải thực hiện việc tính toán liên tiếp để tìm Mi theo công thức: Mi = D(Ci) = Ci d (mod N), quá trình này cũng thực hiện trên các số lớn vì ta có d là số lớn. Do đó, quá trình giải mã cũng cần có các tác động để đảm bảo thời gian giải mã là chấp nhận đƣợc. Điều này có ý nghĩa rất quan trọng vì hệ mã RSA có số lƣợng phép tính lớn, bên cạnh đó để có thể thực hiện với các bản rõ có nội dung lớn thì ta phải giải quyết đƣợc vấn đề này. Kết luận: Trong thực tế, tốc độ mã hóa và giải mã của RSA là rất chậm so với các hệ mã khác. Điều này dẫn đến việc RSA chủ yếu đƣợc dùng để mã hóa khóa bí mật hoặc các các bản rõ ngắn. Phần nội dung chính cần gửi sẽ đƣợc mã hóa bằng một phƣơng pháp mã hóa khác có tốc độ thực hiện nhanh hơn (Phƣơng pháp này thƣờng kém an toàn hơn so với RSA). Ngƣời nhận sẽ giải mã bằng RSA để lấy khóa bí mật rồi mới tiến hành giải mã nội dung cần nhận. Điều này đã dẫn đến những bất cập về ứng dụng RSA rộng rãi trong thực tế. Giải quyết đƣợc mâu thuẫn giữa việc tăng tính an toàn và tăng thời gian thực hiện mã hóa là vấn đề cần đƣợc nghiên cứu để giải quyết. 2.5 KHẢ NĂNG BỊ BẺ KHÓA CỦA HỆ MÃ CÔNG KHAI RSA 2.5.1 Một số phƣơng pháp tấn công hệ mã RSA. Bất cứ ai cũng có thể tạo ra một hệ thống thông tin mã hóa cho riêng mình. Nhƣng để có một hệ thống an toàn và hiệu quả đòi hỏi ngƣời thiết kế phải có kiến Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 43 thức toán học sâu sắc, có kinh nghiệm về bảo mật và am hiểu các phƣơng pháp tấn công. • Brute-force attack: phƣơng pháp tấn công bằng cách thử tất cả những chìa khóa có thể có. Đây là phƣơng pháp tấn công thô sơ nhất và cũng khó khăn nhất. Theo lý thuyết, tất cả các thuật toán mã hóa hiện đại đều có thể bị đánh bại bởi brute-force nhƣng trong thực tiễn việc này chỉ có thể thực hiện đƣợc trong thời gian hàng triệu, thậm chí hàng tỉ năm. Vì thế có thể coi một thuật toán mã hóa là an toàn nếu nhƣ không còn cách nào khác để tấn công nó dễ hơn là brute-force. • Frequency analysis: thống kê tần suất, chỉ có thể áp dụng đƣợc đối với các thuật toán cổ điển dùng phƣơng pháp thay thế, ví dụ phƣơng pháp Caesar. Để thực hiện phƣơng pháp này ta cần một lƣợng văn bản đã mã hóa đủ lớn để phép thống kê đƣợc chính xác. Ngoài ra còn phải biết ngôn ngữ sử dụng trong văn bản ban đầu, nếu văn bản ban đầu là tiếng Anh thì nhiều khả năng kí tự xuất hiện nhiều nhất trong văn bản đã mã hóa là do chữ e mã hóa thành. • Differential cryptanalysis: Phƣơng pháp này do Eli Biham và Adi Shamir tìm ra vào khoảng cuối những năm 1980, nó thƣờng đƣợc sử dụng để tấn công các thuật toán khối (block cipher). Phƣơng pháp này dựa trên việc phân tích những biến đổi của hai văn bản gốc có liên quan khi đƣợc mã hóa bởi cùng một chìa. • Tấn công dựa trên thời gian Năm 1995, Paul Kocher mô tả một dạng tấn công mới lên RSA: Khi kẻ tấn công nắm đủ thông tin về phần cứng thực hiện mã hóa và xác định đƣợc thời gian giải mã đối với một số bản mã lựa chọn thì có thể nhanh chóng tìm ra khóa d. Dạng tấn công này có thể áp dụng đối với hệ thống chữ ký điện tử sử dụng RSA. • Tấn công lựa chọn thích nghi bản mã Năm 1981, Daniel Bleichenbacher mô tả dạng tấn công lựa chọn thích nghi bản mã (adaptive chosen ciphertext attack) đầu tiên có thể thực hiện trên thực tế đối với một văn bản mã hóa bằng RSA. Văn bản này đƣợc mã hóa dựa trên tiêu chuẩn Public-Key Cryptography Standards #1 (PKCS #1), một tiêu chuẩn chuyển đổi bản rõ có khả năng kiểm tra tính hợp lệ của văn bản sau khi giải mã. Do những khiếm Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 44 khuyết của PKCS #1, Bleichenbacher có thể thực hiện một tấn công lên bản RSA dùng cho giao thức Secure Sockets Layer (tìm đƣợc khóa phiên). Do phát hiện này, các mô hình chuyển đổi an toàn hơn nhƣ chuyển đổi mã hóa bất đối xứng tối ƣu (Optimal Asymmetric Encryption Padding) đƣợc khuyến cáo sử dụng. Đồng thời phòng nghiên cứu của RSA cũng đƣa ra phiên bản mới của PKCS #1 có khả năng chống lại dạng tấn công nói trên. • Phƣơng pháp sử dụng (n) Giả sử ngƣời tấn công biết đƣợc giá trị (n). Khi đó việc xác định giá trị p, q đƣợc đƣa về việc giải hai phƣơng trình sau n = p  q Thay q = n/p, ta đƣợc phƣơng trình bậc hai p, q chính là hai nghiệm của phƣơng trình bậc hai này. Tuy nhiên vấn đề phát hiện đƣợc giá trị (n) còn khó hơn việc xác định hai thừa số nguyên tố của n. Ngoài ra còn một số phƣơng pháp tấn công khác đƣợc sử dụng để tấn công hệ mã RSA. Tuy nhiên, từ cơ sở toán học của RSA, hầu hết các phƣơng pháp tấn công đều chƣa thực sự hiệu quả. Các cố gắng bẻ khóa RSA thành công đƣợc công bố đều phải dựa trên sức mạnh kết hợp của nhiều máy tính thực và thực hiện trong khoảng thời gian dài. Tuy nhiên, để đảm bảo tính an toàn cao cho hệ mã RSA nói riêng và các hệ mã công khai nói chung. Việc áp dụng các cải tiến nhằm tăng tính an toàn là cấp thiết. 2.5.2 Độ an toàn của hệ mã RSA. Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA. Nếu 2 bài toán trên là khó (không tìm đƣợc thuật toán hiệu quả để giải chúng) thì không thể thực hiện     11  qpn    012  npnnp  Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 45 đƣợc việc phá mã toàn bộ đối với RSA. Phá mã một phần phải đƣợc ngăn chặn bằng các phƣơng pháp chuyển đổi bản rõ an toàn. Bài toán RSA: Cho số nguyên dƣơng N là tích của hai số nguyên tố phân biệt p và q (N = p * q), số nguyên e sao cho thỏa mãn gcd(e, (p – 1) * (q – 1)) = 1, và số nguyên c. Tìm một số nguyên m sao cho me  c (mod N). Hiện nay phƣơng pháp triển vọng nhất giải bài toán này là phân tích n ra thừa số nguyên tố. Khi thực hiện đƣợc điều này, kẻ tấn công sẽ tìm ra số mũ bí mật d từ khóa công khai và có thể giải mã theo đúng quy trình của thuật toán. Nếu kẻ tấn công tìm đƣợc 2 số nguyên tố p và q sao cho: n = p*q thì có thể dễ dàng tìm đƣợc giá trị (p-1)*(q-1) và qua đó xác định d từ e. Chƣa có một phƣơng pháp nào đƣợc tìm ra trên máy tính để giải bài toán này trong thời gian đa thức (polynomial-time). Tuy nhiên ngƣời ta cũng chƣa chứng minh đƣợc điều ngƣợc lại (sự không tồn tại của thuật toán). Tại thời điểm năm 2005, số lớn nhất có thể đƣợc phân tích ra thừa số nguyên tố có độ dài 663 bít với phƣơng pháp phân tán trong khi khóa của RSA có độ dài từ 1024 tới 2048 bít. Một số chuyên gia cho rằng khóa 1024 bít có thể sớm bị phá vỡ (cũng có nhiều ngƣời phản đối việc này). Với khóa 4096 bít thì hầu nhƣ không có khả năng bị phá vỡ trong tƣơng lai gần. Do đó, ngƣời ta thƣờng cho rằng RSA đảm bảo an toàn với điều kiện n đƣợc chọn đủ lớn. Nếu n có độ dài 256 bít hoặc ngắn hơn, nó có thể bị phân tích trong vài giờ với máy tính cá nhân dùng các phần mềm có sẵn. Nếu n có độ dài 512 bít, nó có thể bị phân tích bởi vài trăm máy tính tại thời điểm năm 1999. Năm 1993, Peter Shor công bố thuật toán Shor chỉ ra rằng: máy tính lƣợng tử (trên lý thuyết) có thể giải bài toán phân tích ra thừa số trong thời gian đa thức. Tuy nhiên, máy tính lƣợng tử vẫn chƣa thể phát triển đƣợc tới mức độ này trong nhiều năm nữa. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 46 Nhƣ vậy, tính an toàn của phƣơng pháp RSA dựa trên cơ sở các máy tính tại thời điểm hiện tại chƣa đủ khả năng giải quyết việc phân tích các số nguyên rất lớn ra thừa số nguyên tố. 2.6 HỆ MẬT MÃ KHÓA CÔNG KHAI ELGAMAL Vào năm 1985, Hệ mật mã khoá công khai ElGamal đƣợc giới thiệu bởi T. ElGamal. Độ an toàn của hệ này phụ thuộc vào độ khó giải bài toán logarithm rời rạc trong trƣờng số hữu hạn Zp. Vì vậy, số nguyên tố p cần phải đƣợc chọn sao cho bài toán logarithm là khó tính toán. Trƣờng hợp đặc biệt để ngăn ngừa sự tấn công, thì số nguyên tố p cần phải đƣợc chọn sao cho số (p - 1) có ít nhất một thừa số nguyên tố lớn q. 2.6.1 Bài toán logarithm rời rạc Định nghĩa 2.1: Một trƣờng hữu hạn là một trƣờng F chứa một số hữu hạn các phần tử. Bậc của nhóm F là số các phần tử tồn tại trong F . Hình xxx: Đồ thị so sánh chi phí tấn công khóa bí mật và khóa công khai 6 4 1 2 8 2 5 6 5 1 2 1 K 2 K 4 K Ñoä daøi maõ khoùa (bits) C h i p h í 1 2 1. Khóa bí mật 2. Khóa công khai Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 47 Định nghĩa 2.2: Cho Fq là một trƣờng hữu hạn, và một phần tử g  Fq, định nghĩa bậc (order) của g là số nguyên dƣơng m nhỏ nhất sao cho: gm  1(mod q), và ký hiệu là: Ordq(g) = m Định nghĩa 2.3: Một phần tử sinh g của trƣờng hữu hạn Fq, nếu g có bậc (q– 1); Phát biểu tương đương: g là phần tử sinh (chính), nếu lũy thừa của g có thể sinh ra tất cả các phần tử khác không của Fq *. Nghĩa là: {g x : 0 ≤ x ≤ q – 2} = Fq * Định lý 2.1: Mỗi trƣờng hữu hạn đều có phần tử sinh. Nếu g là một phần tử sinh của Fq * thì gj là phần tử sinh nếu và chỉ nếu gcd(j, q –1) = 1. Vậy có tổng cộng φ(q – 1) phần tử sinh khác nhau của Fq * . Định nghĩa 2.4: Cho G là một nhóm vòng (cyclic) hữu hạn có bậc n và g là phần tử sinh của G. Logarithm rời rạc của y cơ số g, kí hiệu loggy là một số nguyên duy nhất x, với 0  x  n – 1 sao cho: y = g x . Bài toán 2.1: Cho số nguyên tố p, một phần tử sinh g của Zp *, và một phần tử y  Zp *, tìm số nguyên x , 0  x  p – 2 sao cho: y = g x (mod p), (tìm x = loggy). 2.6.2 Định nghĩa các tập làm việc của hệ mật mã ElGamal  Tập các bản rõ M = Zp * = {1, 2,..., p-1}  Tập các bản mã C = Zp *  Zp *  Tập các khoá công khai Ke = {p}  P  Zp * ( với P là tập các phần tử sinh)  Tập các khóa riêng Kd = Zp - 1 = {1, 2,..., p – 2} 2.6.3 Quá trình tạo khoá, mã hoá, giải mã a) Tạo khoá:  Tạo số nguyên tố p lớn sao cho bài toán logarithm rời rạc trong Zp là khó giải và số p – 1 có ít nhất một thừa số nguyên tố q lớn. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 48  Chọn số g  Zp * là phần tử sinh. Các giá trị p và gthƣờng đƣợc sử dụng nhƣ những tham số chung trong nhóm.  Ngƣời sử dụng chọn ngẫu nhiên số x sao cho 0 < x < p – 2, và định nghĩa: K = {(p, g, x,y y = gx (mod p)}.  Công bố bộ ba số nguyên (p, g, y) làm khoá công khai, còn số nguyên x đƣợc giữ bí mật làm khóa riêng. b) Mã hoá: Mã hóa thông điệp M gửi cho B, thì ngƣời gửi A thực hiện các bƣớc nhƣ sau:  Dùng thuật toán để chia thông điệp M ra nhiều khối có chiều dài cố định và mỗi khối đƣợc biến đổi thành một số nguyên tƣơng ứng Mi < p, (i =1,.…, k). - Biến đổi các ký tự của thông điệp thành các số tƣơng ứng, thí dụ theo qui tắc: Dấu cách  00, A  01, B  02,..., Z  26. - Chia thông điệp số vừa biến đổi thành r nhóm số có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Mi < p với (1  i  r).  Lấy khóa công khai của ngƣời nhận B (p, g, y).  Chọn ngẫu nhiên một số nguyên k sao cho 0  k  (p – 2).  Mã hoá lần lƣợt từng số Mi với khóa công khai của ngƣời nhận, bằng cách tính: Ci = Eke(Mi) = (Ci1, Ci2), với Ci1 = g k mod p và Ci2 = Mi *y k mod p Tập số {C1, C2,...,Cr}, với Ci = (Ci1, Ci2), i = 1,…, r là bản mã gửi cho B. c) Giải mã: Để giải mã bản mã {C1, C2,...,Cr }, ngƣời nhận B thực hiện các bƣớc nhƣ sau:  Giải mã lần lƣợt các cặp số Ci = (Ci1, Ci2), với 1  i  r Tính: Mi = DKd(Ci1, Ci2) = Ci2 * (Ci1 x ) -1 mod p.  Kết quả thu đƣợc là tập các số nguyên lớn { M1, M2,..., Mr }. Biến đổi các số nguyên Mi trở lại các chuỗi ký tự tƣơng ứng và khôi phục lại thông điệp M. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 49 Bảng 2.1: Tóm tắt các bước tạo khoá, mã hoá, giải mã của Hệ ElGamal 2.6.4 Tính đúng của quá trình giải mã Ta có: y = gx (mod p) (định nghĩa) và C1 = g k mod p C2 = M *y k mod p  DKd(C1, C2) = C2 * (C1 x ) -1 mod p = M * y k * ([g k)-x mod p = M * g x ] k * ([g k)-x mod p = M * g kx * g -kx mod p = M mod p mà M < p, vậy DKd(C1, C2) = M mod p = M 2.6.5 Đánh giá độ an toàn và khả năng ứng dụng của hệ mật mã khóa công khai ElGamal 2.6.5.1 Độ an toàn Để đảm bảo độ an toàn cho hệ ElGamal ngƣời thiết kế phải tạo số nguyên tố Mã hoá: Mã hoá bản rõ M * Chọn số ngẫu nhiên k: 1  k  p – 2 * Tính C = Eke(M) = (C1, C2) với C1 = g k (mod p), C2 = M*y k (mod p) Giải mã: Giải mã bản mã C M = D(C) = Dkd(C1, C2) = C2 * (C1 x ) -1 mod p Tạo khoá: * Tạo số nguyên tố p lớn, sao cho bài toán logarithm rời rạc trong Zp * là khó thực hiện. * Chọn g Zp * là phần tử sinh. * Chọn ngẫu nhiên số 0 < x < p – 2. * Tính y = gx (mod p). Khoá công khai: (p, g, y) Khóa riêng: ( x ) Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 50 p lớn (khoảng 1024-bits), sao cho số p – 1 có ít nhất một thừa số nguyên tố q lớn nhằm ngăn ngừa sự tấn công của kỹ thuật Pohlig-Hellman. Ngoài ra số ngẫu nhiên k không đƣợc sử dụng để mã hóa nhiều hơn một thông địêp. Vì nếu sử dụng k để mã hoá cho hai thông điệp M và M’ với kết quả là (C1, C2) và (C1’, C2’) thì ta có C2(C2’)  M(M’) -1(mod p). Vậy nếu biết đƣợc M thì M’ có thể tính toán đƣợc dễ dàng. 2.6.5.2 Khả năng thực hiện và ứng dụng Phƣơng pháp tính toán của hệ mã ElGamal rất phức tạp, vì đòi hỏi nhiều phép tính lũy thừa modulo trong quá trình mã hóa và giải mã, nên có hiệu suất thực hiện kém. Do đó thƣờng không đƣợc ứng dụng trong những trƣờng hợp mã hóa khối lƣợng lớn dữ liệu. Tính chất không thể phủ nhận (non-repudiation) của hệ này là cơ sở của các lƣợc đồ chứng thực và chữ ký điện tử (phiên bản sửa đổi của lƣợc đồ chữ ký ElGamal là chữ ký DSA đƣợc dùng trong chuẩn chữ ký điện tử của NIST ở Mỹ và cả thế giới). Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 51 CHƢƠNG 3 : MỘT SỐ GIẢI THUẬT XỬ LÝ SỐ HỌC ÁP DỤNG ĐỂ TỐI ƢU HÓA QUÁ TRÌNH MÃ HÓA VÀ GIẢI MÃ CỦA HỆ MÃ RSA 3.1 PHÂN TÍCH CÁC PHÉP XỬ LÝ TOÁN HỌC TRONG HỆ MÃ RSA 3.1.1 Xử lý với số nguyên lớn. Trong quá trình tạo khóa ta cần phải tạo ra hai số nguyên tố phân biệt p và q lớn, sao cho bài toán phân tích thật sự là khó giải. Nhƣ vậy, để đảm bảo an toàn cho hệ mã RSA, giải thuật xử lý phải thực hiện đƣợc với các số lớn hàng trăm chữ số. 3.1.2 Xử lý các phép toán với số nguyên lớn. 3.1.2.1 Phép nhân với số nguyên lớn. Để thực hiện đƣợc các phép tính toán trong quá trình ta cần thực hiện đƣợc các phép toán đƣợc sử dụng. Trong quá trình tạo khóa, ta phải tính đƣợc N = p*q và φ(N) = (p–1)*(q–1). Do đó chƣơng trình cần xử lý đƣợc phép nhân hai số p và q với p và q là các số nguyên tố lớn. 3.1.2.2 Phép cộng – trừ số nguyên lớn. Sử dụng trong các quá trình tính toán, việc cài đặt tƣơng đối đơn giản khi đã tổ chức đƣợc dữ liệu lƣu trữ cho các số hạng. 3.1.2.3 Phép tính lũy thừa với số nguyên lớn. Quá trình giải mã của RSA cần tính M = Cd mod N, với số mũ bí mật d thƣờng rất lớn (d  N) để đảm bảo độ an toàn cho dữ liệu. Vì vậy chi phí thực hiện giải mã của hệ RSA tƣơng đƣơng với chi phí để thực hiện phép tính lũy thừa nhanh là: 3n3 + n2. Do đó chƣơng trình cần phải xử lý đƣợc các phép tính lũy thừa nhanh. Kết luận: Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 52 Về bản chất, phép lũy chính là phép nhân liên tiếp, sử dụng các tính chất đồng dƣ, ta có thể đƣa việc xử lý phép lũy thừa về phép nhân. Do đó, trong đề tài này đi sâu vào việc xử lý phép nhân nhanh số nguyên với các số hạng là các số lớn. Kết quả thực hiện sẽ được thử nghiệm với hai chương trình: Chƣơng trình 1: Xử lý các phép toán số học với số lớn Thực hiện các phép tính số học: Cộng, trừ, nhân, lũy thừa với số lớn. Đây là phần kết quả cơ bản của đề tài, về mặt lý thuyết, khi cài đặt thành công các phép xử lý toán học này ta hoàn toàn có thể áp dụng để xây dựng hệ mã RSA. Chƣơng trình 2: Hệ mã RSA thử nghiệm Áp dụng các kết quả đã có đƣợc trong việc xử lý các phép toán số học để bƣớc đầu xây dựng thử nghiệm một hệ mã RSA. Trong điều kiện có hạn của luận văn và sự phức tạp của hệ mã RSA, chƣơng trình chỉ dừng ở mức thực nghiệm. 3.2 ỨNG DỤNG GIẢI THUẬT FAST FOURIER TRANSFORM TRONG XỬ LÝ PHÉP NHÂN SỐ LỚN 3.2.1 Giới thiệu thuật toá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) 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 thức P(z) = n-1  j = 0 xj z j , Q(z) = n-1  j = 0 yjz j . 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. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 53 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 toá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ị. wk = exp    2ik 2n    = k,  = exp    2i 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 toá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: rk = 1 2n T   wk   , T(z) = 2n-1  j = 0 R(wj) z j , 3.2.2 Biến đổi Fourier 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) đƣợc thể hiện trong công thức sau: F 2n (F2n(R)) = 2n R, Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 54 F 2n (A) = (b0, b1, , b2n-1), bk = 2n-1  j = 0 aj  -jk . 3.2.3 Biến đổi Fourier nhanh Thuật toá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 . Nói cách khác, để tính toán các hệ số bk của F2n(A), ta thực hiện các bƣớc sau: Đị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 toá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 đây vẫn là phƣơng pháp nhân hai số lớn nhanh nhất. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 55 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: X = n-1  j = 0 xj B j , Y = n-1  j = 0 yj B j . Để 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* Z = (z0,z1,,z2n-1)  1 2n F 2n (Z * ).  Đa thức Z chính là kết quả cần tìm của tích XY Z = 2n-1  i = 0 zi B i 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 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 56 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 toá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: Thêm các số 0 [ a 0 , a 1 , a 2 ,..., a n -1 ] [ b 0 , b 1 , b 2 ,..., b n -1 ] DFT DFT [ a 0 , a 1 , a 2 ,..., a n -1 ,0,0,...,0] [ b 0 , b 1 , b 2 ,..., b n -1 ,0,0,...,0] [ y 0 , y 1 , y 2 ,..., y 2 n -1 ] [ z 0 , z 1 , z 2 ,..., z 2 n -1 ] Khối thực hiện nhân DFT ngƣợc [ y 0 z 0 , y 1 z 1 ,..., y 2 n -1 z 2 n -1 ] [ c 0 , c 1 , c 2 ,..., c 2 n -1 ] Thêm các số 0 Sơ đồ 3.1: Thực hiện giải thuật nhân nhanh sử dụng DFT Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 57 3.2.3.1 Cài đặt thuật toán FFT và DFT Mô phỏng thuật toá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 toá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); x2[i] += (x1[k] * cosarg - y1[k] * sinarg); Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 58 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 toá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]; Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 59 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) { for (i=0;i<n;i++) { Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 60 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 toá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 toá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 TOÁN VỚI SỐ LỚN Từ các kết quả phân tích, các thuật toá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 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 61 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 toán này luôn là O(n). Cài đặt thử nghiệm: Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 62 3.2.2 Xử 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 toán FFT. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 63 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ỆM Giao diện chƣơng trình: File văn bản rõ trƣớc khi mã hóa Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 64 Giao diện thực hiện mã hóa và giải mã file văn bản: (Hình 4.3 và 4.4) Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 65 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.1 Chƣơng trình xử lý các phép toán với số lớn: Minh họa các thuật toá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 toá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 trình thử nghiệm với các bộ số p, q lớn và cho kết quả chính xác. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 66 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 toán số học với số lớn trong các hệ mã công khai dựa trên cơ sở toán học và tính toán độ an toà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 toá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 hoà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 toà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ế. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên 67 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 toà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 Khoái (2003), Mã hóa thông tin Cơ sở toán học & ứng dụng, Viện toán học Hà Nội, Hà Nội. [4]. Bùi Doã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 toà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. ( [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. [12]. RSA Laboratories’ FAQ, RSA Security Inc.( [13]. Ph.D William. Stallings (1999), Cryptography And Internetwork Security – Principles And Practice, PRENTICE HALL. [14]. Message Authentication, Hash Function, Digital Signature schemes. [15].Tsuyoshi Takagi, Juniorprofessor (2003), Efficiency Comparison Of Several RSA Variants.

Các file đính kèm theo tài liệu này:

  • pdfdoc349.pdf
Tài liệu liên quan