Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 39 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
39
Dung lượng
457,53 KB
Nội dung
Mã cổ điển, mã RSA và Định lý Ơle định lý Fecma trong bảo mật LỜI NÓI ĐẦU Lý thuyết mật mã và an toàn thông tin đã và đang chiếm lĩnh sự quan tâm của nhiều người, điều đó xuất phát từ nhu cầu đảm bảo an toàn thông tin trong thời đại bùng nổ công nghệ và sự giao lưu thông tin ngày càng phát triển mạnh mẽ như hiện nay. Lý thuyết này đã ra đời từ rất lâu trong lịch sử loài người, tuy nhiên nó chỉ thực sự được nghiên cứu và đưa vào ứng dụng trong nhiều lĩnh vực của đời sống xã hội chỉ trong vài chục năm gần đây. Phần trình bày trong tài liệu này tập trung vào một số vấn đề như: mã cổ điển Burrows Wheeler, Thuật toán mã hoá công khai RSA và ứng dụng vào chữ ký điện tử, ngoài ra trong tài liệu cũng trình bày một khía cạnh toán học nhỏ liên quan đến vấn đề bảo mật dữ liệu, mà cụ thể là một số kiến thức rất cơ bản có liên quan đến định lý Ơle và Fecma. Do nội dung trình bày chỉ trong phạm vi của một tài liệu tham khảo môn học, nên một số vấn đề lý thuyết toán học không liên quan trực tiếp đến nội dung của môn học sẽ không được trình bày, hoặc chỉ phát biểu kết quả mà không chứng minh chi tiết. Phần phụ lục minh họa cài đặt các thuật toán bằng ngôn ngữ lập trình pascal giúp bạn đọc hiểu rõ hơn các thuật toán. Chắc chắn tập tài liệu không thể không có một vài thiếu sót, rất mong bạn đọc lượng thứ. Trang 1 PHẦN I MÃ HOÁ CỔ ĐIỂN BURROWS WHEELER Burrows Wheeler đề xuất phương pháp mã hoá thông tin như sau: ví dụ ta cần mã hoá từ BANANA, các bước tiến hành là: Bước 1: Từ cần mã hoá được dịch chuyển vòng tròn và tạo thành một ma trận L*L ký tự, trong đó L là độ dài của từ. Ta có: BANANA ANANAB NANABA ANABAN NABANA ABANAN Bước 2: Sắp xếp lại các dòng của ma trận theo thứ tự từ điển: ABANAN ANABAN ANANAB BANANA NABANA NANABA Bước 3: Trích xâu từ các ký tự cuối ở mỗi dòng, thông báo xâu này và cho biết từ gốc là từ thứ mấy trong ma trận nhận được ở bước 2. Ta có (NNBAAA,4) Yêu cầu: Hãy viết chương trình mã hoá và giải mã. Dữ liệu: Vào từ file CODE.INP, dòng đầu là một số 0 hoặc 1: - Nếu là số 0 thì ta phải thực hiện thao tác mã hoá; và tiếp theo là một hoặc nhiều nhóm dòng, mỗi dòng là một xâu ký tự cần mã hóa. Dữ liệu ra bao gồm một hoặc nhiều nhóm hai dòng, dòng đầu là xâu ký tự đã mã hoá, dòng tiếp theo là số nguyên dương cho biết vị trí từ gốc. - Nếu là số 1 thì ta phải thực hiện thao tác giải mã; và tiếp theo là một hoặc Trang 2 nhiều nhóm hai dòng, dòng đầu là xâu ký tự đã mã hoá, dòng tiếp theo là số nguyên dương cho biết vị trí từ gốc. Dữ liệu ra bao gồm một hoặc nhiều nhóm dòng, mỗi dòng là một xâu ký tự đã giải mã. Ví dụ 1: CODE.INP 0 BANANA COGUMELO RONALDO CODE.OUT NNBAAA 4 OMOEULCG 1 NLAORDO 7 Ví dụ 2: CODE.INP 1 NNBAAA 4 OMOEULCG 1 NLAORDO 7 CODE.OUT BANANA COGUMELO RONALDO Trang 3 Cho biết các xâu có thể có độ dài tới 1000 ký tự (L1000). Dễ thấy rằng, với bài toán này chúng ta cần tìm ra một thuật giải và cấu trúc dữ liệu phù hợp nếu không sẽ không thể giải được với dữ liệu đầu bài cho khá lớn như vậy. Chẳng hạn, ta không thể khai báo một mảng A:array[1 1000,1 1000] để chứa mảng ký tự do hạn chế về miền nhớ dành cho biến tĩnh của ngôn ngữ lập trình Pascal. Chúng ta sẽ cùng phân tích để tìm lời giải tối ưu cho bài toán. Để có thể mã hoá, ta cần phải biết được các ký tự cuối của các từ (và đương nhiên là phải biết vị trí từ gốc); vì các từ được dịch chuyển vòng tròn nên nếu ta có thể có một "mảng vòng tròn" để lưu các xâu và một mảng chỉ số để lưu vị trí bắt đầu của các xâu thì sẽ tiết kiệm đáng kể chi phí về miền nhớ. Để tạo ra mảng vòng tròn như vậy, ta coi một mảng một chiều như là mảng vòng tròn với lưu ý là phần tử ở cuối mảng được coi như đi trước phần tử đầu tiên. Với ví dụ đầu bài ta có mảng chứa xâu và mảng chỉ số của các xâu được chuyển vòng tròn là: B A N A N A 1 2 3 4 5 6 Dựa vào hai mảng này ta dễ dàng xác định được các xâu sau khi dịch chuyển với lưu ý là ký tự ở vị trí cuối cùng đi trước ký tự đầu tiên. Ví dụ: xâu thứ 2 (bắt đầu từ vị trí thứ hai trong mảng chỉ số) là: ANANAB, xâu thứ 5 (bắt đầu từ vị trí thứ 5 trong mảng chỉ số) là: NABANA Việc sắp xếp các xâu thực chất ta chỉ làm việc trên hai mảng này. Sau khi sắp xếp các xâu theo thứ tự từ điển, mảng chỉ số có dạng: 6 4 2 1 5 3 Mảng này cho ta biết vị trí các xâu sau khi sắp xếp, xâu thứ nhất (xâu BANANA) ở vị 4, xâu xâu thứ 2 (xâu ANANAB) ở vị trí 3…Từ đó, chúng ta dễ dàng suy ra xâu mã hoá bằng cách trích ra các ký tự ở vị trí ngay trước của xâu tương ứng. Cụ thể như sau: Lấy ký tự trước vị trí đầu tiên của xâu 6: do xâu 6 bắt đầu từ vị trí 6 nên ta lấy ký tự ở vị trí 5 của mảng ban đầu, là ký tự N. Lấy ký tự trước vị trí đầu tiên của xâu 4: do xâu 4 bắt đầu từ vị trí 4 nên ta lấy ký tự ở vị trí 3 của mảng ban đầu, là ký tự N. Cứ như vậy, ta thu được xâu kết quả là: NNBAAA. Trang 4 Công việc còn lại là đi tìm thuật toán để giải mã hiệu quả. Để có thể giải mã, ta cần biết xâu mã hoá s và vị trí n của xâu gốc. Thuật toán được đưa ra như sau: - Sắp xếp các từ trong s theo thứ tự từ điển để thu được xâu s', phải đảm bảo giữ nguyên thứ tự của các từ giống nhau trong xâu s (nên dùng phương pháp sắp xếp nổi bọt). Ví dụ với s=NNBAAA thì s'=AAABNN. -Bắt đầu từ vị trí thứ n trong xâu s' và tiến hành duyệt lần lượt trên hai xâu để thu được kết quả. Cụ thể: ký tự đầu tiên ở vị trí n=4 của s', là B; tiếp theo vì B ở vị trí thứ 3 trong s nên ký tự thứ hai ở vị trí 3 trong s', là A; tiếp theo vì A ở vị trí thứ 6 trong s nên ký tự thứ ba ở vị trí 6 trong s', là N…cứ như vậy ta thu được kết quả là BANANA. Lưu ý: nếu phương pháp sắp xếp không đảm bảo giữ nguyên thứ tự của các từ trong xâu gốc thì có thể dẫn đến một số test bị sai. Chẳng hạn, bạn đọc có thể tự kiểm tra khẳng định này để thấy rằng nếu giải mã xâu (NPMAAA, 6) thì có thể sẽ cho PAMANA nhưng đáp án đúng phải là PANAMA. Trong ví dụ minh hoạ ở trên, các ký tự A tại vị trí 4, 5 và 6 của xâu s=NNBAAA phải tương ứng với các ký tự A tại các vị trí 1, 2 và 3. PHẦN II THUẬT TOÁN MÃ HOÁ CÔNG KHAI RSA VÀ ỨNG DỤNG VÀO CHỮ KÝ ĐIỆN TỬ Phần tiếp theo giới thiệu một số nét cơ bản về thuật toán mã hoá công khai RSA và ứng dụng của nó trong chữ ký điện tử (chữ ký số). Mật mã được dùng để bảo vệ bí mật thông tin khi thông tin được truyền trên các kênh không bảo mật như thư tín, điện thoại, mạng truyền thông máy tính Giả sử có hai người muốn trao đổi thông tin với nhau là A và B. Khi đó, chẳng hạn A muốn gửi thông tin là một văn bản nào đó, gọi là bản rõ cho B, muốn được bảo mật thì A phải lập mã cho bản rõ đó, được bản mã, và gửi cho B. Như vậy, giữa A và B phải có sự thoả thuận nào đó về việc dùng khoá để A có thể mã hoá thông tin để được bản mã và B giải mã thông tin từ bản mã nhằm thu được bản rõ. Khi đó, một người nào đó không có khoá thì dù họ có lấy được bản mã trên đường truyền thì Trang 5 cũng không thể dịch ngược thành bản rõ. Tuy nhiên họ vẫn có thể làm mất tính toàn vẹn của của bản mã khi thêm bớt các đoạn mã, nhưng điều này có thể được phát hiện khi B giải mã bản mã nhận được và kiểm tra sự hợp lý trong nội dung của nó. Người ta chia các hệ mã làm hai loại chính là hệ mã cổ điển và hệ mã hiện đại (hay mã công khai: public-key cryptosystem). Các hệ mã cổ điển thực hiện việc bảo mật đều dựa trên cơ sở là có một khoá để dùng chung cho việc lập mã và giải mã. Các hệ mã hoá công khai được nghiên cứu và phát triển từ những năm 1970. Ý tưởng cơ bản của các hệ mã này là xây dựng những hệ thống sao cho mỗi người tham gia vào quá trình truyền tin (người nhận tin và người gửi tin) sẽ có hai khoá khác nhau: một khoá công khai (public key) dùng để lập mã và một khoá mật (private key) dùng để giải mã. Khoá công khai được công khai hoá cho mọi người, còn khoá mật của mỗi người được giữ bí mật. Cho dù biết khoá công khai và thuật toán mã hoá thì cũng rất khó tìm được cách giải mã bởi độ bảo mật được đảm bảo bằng độ phức tạp tính toán rất lớn. Nội dung phần này tập trung trình bày đôi nét về một trong những hệ mã công khai nổi tiếng- hệ mã RSA và ứng dụng của nó trong chữ ký điện tử. Hệ mã công khai RSA của ba tác giả là Rivest, Shamir và Adleman phát minh vào năm 1978 là một trong những hệ mã hiện đại được nhiều người biết đến. Thuật toán này có nhiều ứng dụng trong bảo mã hoá và mật dữ liệu do tính năng vượt trội của nó về mã hoá bảo mật dữ liệu so với nhiều thuật toán khác. Tính bảo mật của thuật toán dựa trên độ phức tạp của bài toán phân tích một số ra thừa số nguyên tố. Các bước của thuật toán được mô tả như sau: 1. Chọn hai số nguyên tố p, q lớn (khoảng trên một trăm chữ số). 2. Tính n=p.q 3. Tính hàm Ơle (n) =(q-1).(p-1) 4. Tìm số d thoả mãn điều kiện UCLN(d, (n)) = 1 (d và (n) nguyên tố cùng nhau). Thông thường, chọn d [max(p,q)+1, n-1] và thoả biểu thức trên. Trang 6 5. Tính e thoả mãn biểu thức: ed % (n) =1 (ký hiệu % là phép chia theo môđun, trong Pascal nó được thực hiện bởi phép toán MOD). Khi đó: khoá công khai là cặp số (e,n) và khoá mật là cặp số (d,n). Cách thức mã hoá và giải mã như sau: Gọi Seg n =[0, ,n-1] là miền mã; C và D lần lượt là các hàm mã hoá và hàm giải mã. +Thao tác mã hoá(Encoding): với x Seg n tìm c = E(x) = x e % n. +Thao tác giải mã (Decoding): với c, tìm D(c) = c d % n. Ví dụ minh hoạ với các số nhỏ: p = 53, q = 61, n = 3233, =3120, d =791 và e =71. Khi đó x[0 3232] ta có E(x) = x 71 % 3233 và D(x) = x 791 % 3233. Tính chất của RSA: ED(x) = DE(x) = x, với x Seg n . Hay nói cách khác là (x e % n) d % n = (x d % n) e % n = x, với x Seg n . Thuật toán RSA thoả mãn 5 yêu cầu của một hệ mã hiện đại: 1. Độ mật cao (nghĩa là để giải mã được mà không biết khoá mật thì phải tốn hàng triệu năm). 2. Thao tác nhanh (thao tác mã hoá và giải mã phải tốn ít thời gian). 3. Dùng chung được. 4. Có ứng dụng rộng rãi. 5. Có thể dùng để xác định chủ nhân (dùng làm chữ ký điện tử). Việc chứng minh tính đúng của thuật toán RSA rất dễ dàng, cuj: Phần dưới đây trình bày chi tiết về phần cài đặt của thuật toán. Bước 1. Tạo khoá 1. Chọn hai số nguyên tố p, q lớn (khoảng một trăm chữ số). 2. Tính n=p.q Trang 7 3. Tính hàm Ơle (n) =(q-1).(p-1) 4. Tìm số d [max(p,q)+1, n-1] thoả mãn biểu thức: UCLN(d, (n)) = 1 theo thuật toán Ơclit. Thuật toán Ơclit: Cho r 0 = a và r 1 = b là các số nguyên thoả mãn a b> 0. Thực hiện phép chia liên tiếp để thu được các kết quả r j = r j + 1 q j + 1 + r j + 2 với 0 < r j+2 < r j+1 (j = 0, 1,…,n-2) và r n+1 là phần dư cuối cùng bằng 0 thì (a,b) =r n . 5. Tính e thoả mãn biểu thức: ed % (n) =1 (ký hiệu % là phép chia theo môđun) theo thuật toán Ơclit mở rộng. Thuật toán Ơclit mở rộng: Cho a và b là các số nguyên dương. Khi đó (a,b) = s n a + t n b, với n = 0,1,2, , trong đó s n và t n là số hạng thứ n của dãy đệ quy định nghĩa bởi s 0 = 1, t 0 = 0, s 1 = 0, t 1 = 1, và s j = s j - 2 – q j -1 s j –1 , t j = t j – 2 – q j – 1 t j – 1 với j = 2,3, ,n; các q j là các thương số trong các phép chia của thuật toán Ơclit khi nó được sử dụng để tìm (a,b). (Định lý này có thể chứng minh bằng phương pháp quy nạp toán học). Áp dụng thuật toán này với hai tham số vào là ad và một biến b lấy giá trị của hàm . Khi đó ta sẽ tìm được s và t thoả (a,b) = sa + tb =1 => (as +tb) % b =1 =>as%b =1 hay s chính là giá trị e cần tìm (nếu s âm, để e đạt giá trị dương thì ta chỉ cần cộng thêm một bội lần b vào s). Bước 2. Mã hoá file văn bản Trang 8 - Giả sử file văn bản cần mã hoá là VANBAN.TXT. Ta chuyển đổi từ dạng ký tự sang dạng số (có thể tuỳ chọn cách chuyển đổi, chẳng hạn, có thể lấy mã tương ứng của ký tự trong bảng mã ASCII). - Tách thành các số m: 0≤ n ≤ n-1. - Tính m’= m e % n và lưu m’ vào file, chẳng hạn m’ được lưu vào file MATMA.TXT. Bước 3. Giải mã - Mở file MATMA.TXT, lần lượt đọc các giá trị ra biến m’. - Tính m = m’ d % n. - Chuyển đổi ngược lại m thành dạng ký tự và ghi vào file GIAIMA.TXT Bạn nào có nhu cầu thì có thể liên hệ với toà soạn để có chương trình nguồn (chương trình được viết bằng ngôn ngữ Pascal). Một số lưu ý trong chương trình minh hoạ: mới chỉ thao tác với các số nhỏ (trong phạm vi longint, bạn có thể tự cài đặt lại với các số lớn), các số nguyên tố được sinh ra ngẫu nhiên mỗi khi chạy chương trình và ghi vào file PRIME.TXT (trong thực tế các số phải lớn hàng trăm chữ số và khoá mật phải được giữ kín). Khả năng bị tấn công của hệ mã RSA: Một hệ mật mã bị tấn công (hay bị thám mã) nếu như một người khác không tham gia vào quá trình truyền tin (không biết khoá mật) có thể giải mã bản mã để thu được bản rõ. Trong hệ mã RSA, nếu biết khoá công khai (e,n) thì rất khó tìm được khoá mật (d,n) vì để tìm d (là số nghịch đảo của e theo môđun (n)) thì trước tiên cần phải tìm hàm (n) = (pq) = (p-1)(q-1). Nhưng để tìm (n) thì ta phải phân tích n thành dạng tích, mà công việc này phải tốn hàng triệu năm nếu như p và q là các số có khoảng 100 chữ số (tức là n có khoảng 200 chữ số). Nếu tìm được (n) thì ta có hệ pq=n (p-1)(q-1) = (n) Trang 9 pq=n p + q = n - (n) +1 Do đó p và q là nghiệm của phương trình bậc hai: x 2 -(n- (n) +1)x + n =0. Ví dụ: nếu biết n = 84773093 và biết (n) = 84754668 thì sau khi giải phương trình tương ứng ta sẽ được nghiệm p = 9539 và q = 8887. Không thể chứng minh được rằng: không thể giải mã những thông tin đã được mã hoá bằng thuật toán mã hoá RSA nếu không phân tích n thành dạng tích. Thế nhưng từ trước tới nay, các thuật toán đưa ra nói chung đều tương đương với việc phân tích n thành dạng tích. Nếu không có phương pháp giải mã nào hiệu quả hơn cho thuật toán mã hoá RSA ngoài phương pháp phân tích thành tích thì độ bảo mật của thuật toán được đảm bảo (theo nghĩa để có thể giải mã được thì phải tốn kém rất nhiều về thời gian), nếu có sự cải tiến nào đó trong phương pháp phân tích và khả năng của máy tính cũng tăng nên thì cần phải tăng kích thước của n. Tuy nhiên, nếu việc phân tích trở nên khả thi hơn thì đồng nghĩa với thời gian thông tin mã hoá được bảo mật sẽ giảm xuống. Cần có chú ý khi lựa chọn các số nguyên tố p và q để tăng độ bảo mật của thông tin được mã hoá. Chẳng hạn, p - 1 và q - 1 đều có những ước nguyên tố lớn; (p - 1, q - 1) nhỏ; p và q có số chữ số chênh lệch nhau nhiều. Các kỹ thuật này giúp cản trở việc phân tích của những phương pháp phân tích đặc thù nào đó. Bởi vì, chẳng hạn như kỹ thuật phân tích của Ferma đặc biệt hiệu quả khi phân tích một số nguyên dương thành tích hai số khi hai hệ số đó có độ lớn tương đương. Một số tác giả hiện nay đã đề xuất nhiều kỹ thuật để cải tiến thuật toán mã hoá RSA. Chi tiết về một số kỹ thuật cải tiến và phân tích số có thể tìm thấy trong các tài liệu [3], [4]. Ngoài ra, còn một số khả năng khác cũng dẫn tới việc hệ mã RSA bị tấn công. Tuy nhiên, nội dung tài liệu này không có điều kiện đề cập đến. Chi tiết về một số khả năng tấn công khác có thể tìm thấy trong tài liệu [2]. [...]... m II Định lý Ơle và định lý Fecma 1 .Định nghĩa (Hàm Ơle ) Gọi n là một số nguyên dương, hàm Ơle (n) được định nghĩa là số các số nguyên dương không vượt quá n mà nguyên tố cùng nhau với n Ví dụ: Xét (n) với n = 1, 2, , 10, Hàm sẽ có giá trị như sau: (1) = 0 (6) = 2 (2) = 1 (7) = 6 (3) = 2 (8) = 4 (4) = 2 (9) = 6 (5) = 4 (10) = 4 2 Định lý 2.1 (Định lý Fecma) Nếu p là số nguyên tố và a... đắn của RSA: Nhắc lại các bước của thuật toán: 1 Chọn hai số nguyên tố p, q lớn 2 Tính n=p.q 3 Tính hàm Ơle (n)=(q-1).(p-1) 4 Tìm số d thoả mãn biểu thức: (d, (n))=1 5 Tính e thoả mãn biểu thức: ed % (n) =1 Khi đó: khoá công khai là cặp số (e,n) và khoá mật là cặp số (d,n) Cách thức mã hoá và giải mã như sau: Gọi Segn =[0, ,n-1] là miền mã; C và D lần lượt là các hàm mã hoá và giải mã +Mã hoá(Encoding):... 1(mod 5) Từ định lý này ta suy ra hai hệ quả sau: Hệ quả 1 Nếu p là số nguyên tố và a là một số nguyên dương thì ap a (mod p) Hệ quả 2 Nếu p là số nguyên tố và a là một số nguyên dương, p a thì ap-2 là nghịch đảo của a theo môđun p Định lý này có tên gọi chính xác là định lý nhỏ của Fecma để phân biệt với giả thuyết nổi tiếng của ông có tên gọi là Định lý cuối cùng của Fecma 3 Định lý 2.2 Nếu r1,... ĐỀ BẢO MẬT DỮ LIỆU LIÊN QUAN ĐẾN ĐỊNH LÝ ƠLE VÀ FECMA I Cơ sở lý thuyết liên quan Trang 11 1 Định lý 1.1 (Phương pháp quy nạp toán học) a Nguyên lý 1 Một tập các số nguyên dương có chứa số 1 và với mỗi một số nguyên dương n đều có tính chất là nếu n thuộc tập đó thì n +1 cũng thuộc tập đó, khi đó tập đã cho là tập của tất cả các số nguyên dương b Nguyên lý 2 Một tập các số nguyên dương có chứa số 1 và. .. 5 Định lý 1.3 (Định lý Lamé) Số các phép chia cần thiết để tìm ước số chung lớn nhất của hai số nguyên dương sử dụng thuật toán Ơclit không lớn hơn năm lần số các chữ số thập phân của số nhỏ hơn trong hai số đó 6 Định lý 1.4 Cho a và b là các số nguyên dương Khi đó (a,b) = sna + tnb, với n = 0,1,2, , trong đó sn và tn là số hạng thứ n của dãy đệ quy định nghĩa bởi s0 = 1, t0 = 0, s1 = 0, t1 = 1, và. .. điện tử Giả sử trong hệ mã công khai, A gửi cho B một văn bản rõ m Để B có thể nhận biết được rằng văn bản đó là do chính A gửi thì trong văn bản phải có chữ ký của A Thực chất thao tác “ký vào văn bản” là mã hoá văn bản đó với khoá công khai của A Gọi EX và DX lần lượt là hàm mã hoá và hàm giải mã của người X Khi đó, sơ đồ chữ ký điện tử dùng mã công khai bao gồm bốn bước sau: Bước 1 A ký vào văn bản:... (m % n)( mk(n) % n) % n = (m % n)( m(n) % n)k % n định lý Ơle, m 0, d = (c,m), và ac bc(mod m), thì a b(mod m/d) 3.7 Nếu a, b, c, d, và m là các số nguyên sao cho m > 0 , (c,m) = 1, và ac bc(mod m), thì a b(mod m) 3.8 (Định lý phép chia với dư của vành số nguyên Z) Cho a, b Z, b 0 Khi đó tồn tại duy nhất cặp . Mã cổ điển, mã RSA và Định lý Ơle định lý Fecma trong bảo mật LỜI NÓI ĐẦU Lý thuyết mật mã và an toàn thông tin đã và đang chiếm lĩnh sự quan tâm của. mã cổ điển và hệ mã hiện đại (hay mã công khai: public-key cryptosystem). Các hệ mã cổ điển thực hiện việc bảo mật đều dựa trên cơ sở là có một khoá để dùng chung cho việc lập mã và giải mã. . một trong những hệ mã công khai nổi tiếng- hệ mã RSA và ứng dụng của nó trong chữ ký điện tử. Hệ mã công khai RSA của ba tác giả là Rivest, Shamir và Adleman phát minh vào năm 1978 là một trong