Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 90 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
90
Dung lượng
1,08 MB
Nội dung
i ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THƠNG TIN&TRUYỀN THƠNG VÕ TÁ HỒNG NGHIÊN CỨU XÂY DỰNG THUẬT TỐN TẤN CƠNG HỆ MẬT RSA LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Thái Nguyên – 2020 ii LỜI CAM ĐOAN Học viên xin cam đoan luận văn cơng trình nghiên cứu thực thân, hướng dẫn khoa học TS Hồ Văn Canh Các số liệu, kết luận văn trung thực chưa công bố hình thức Tất nội dung tham khảo, kế thừa tác giả khác trích dẫn đầy đủ Em xin chịu trách nhiệm nghiên cứu Người cam đoan Võ Tá Hoàng iii LỜI CẢM ƠN Học viên trân trọng cảm ơn quan tâm, tạo điều kiện động viên Lãnh đạo Trường Đại học Thái Nguyên, thầy cô Khoa Đào tạo sau đại học, khoa đào tạo quý phòng ban Học viện suốt thời gian qua Học viên xin bày tỏ biết ơn sâu sắc tới TS Hồ Văn Canhđã nhiệt tình định hướng, bồi dưỡng, hướng dẫn học viên thực nội dung khoa học suốt trình nghiên cứu, thực luận văn Xin chân thành cảm ơn động viên, giúp đỡ to lớn từ phía Cơ quan đơn vị, đồng nghiệp gia đình hỗ trợ học viên suốt trình triển khai nội dung nghiên cứu Mặc dù học viên cố gắng, nhiên, luận văn không tránh khỏi thiếu sót Học viên kính mong nhận đóng góp từ phía Cơ sở đào tạo, q thầy cơ, nhà khoa học để tiếp tục hoàn thiện tạo sở cho nghiên cứu Xin trân trọng cảm ơn! Hà Nội, tháng năm 2020 Học viên Võ Tá Hoàng iv MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN iii MỤC LỤC iv DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT vii DANH MỤC HÌNH VẼ, BẢNG BIỂU viii MỞ ĐẦU CHƯƠNG 1: TÌM HIỂU VỀ HỆ MẬT RSA 1.1 Hệ mật mã hóa RSA 1.1.1 Mô tả hệ mật RSA 1.1.2 Thực thi hệ mật RSA 1.1.3 Vấn đề an toàn hệ mật RSA 1.2 Tính an tồn hệ mật mã RSA 1.2.1 An tồn vơ điều kiện 1.2.2 An toàn chứng minh 1.2.3 An tồn tính tốn 1.3 Các kiểu thám mã 1.3.1 Bài toán thám mã biết mã 1.3.2 Bài toán thám mã cặp rõ/ mã biết 1.3.3 Bài toán thám mã với rõ lựa chọn 1.3.4 Bài toán thám mã với mã lựa chọn 1.4 Tấn công hệ mật RSA lợi dụng lỗ hổng chúng 1.4.1 Biết (n) tìm p, q 10 1.4.2 Biết số mũ bí mật RSA 10 1.4.3 Giao thức công chứng 12 1.4.4 Giao thức module n chung 14 1.4.5 Giao thức số mũ công khai nhỏ 20 1.4.6 Giao thức số mũ bí mật nhỏ 21 v 1.4.7 Trường hợp tham số p-1 q-1 có ước nguyên tố nhỏ 24 Kết luận Chương 26 CHƯƠNG 2: NGHIÊN CỨU MỘT SỐ THUẬT TỐN TẤN CƠNG HỆ MẬT RSA 27 2.1 Kiểm tra tính nguyên tố số 27 2.1.1 Đặt toán 27 2.1.2 Các thuật tốn kiểm tra tính nguyên tố theo xác suất 28 2.1.2.1 Thuật toán Fermat 29 2.1.2.2 Thuật toán Solovay-Strassen 29 2.1.2.3 Thuật toán Miller-Rabin 30 2.1.2.4 So sánh thuật toán Fermat, Solovay-Strassen Miller - Rabin 31 2.1.2.5 Kiểm tra tính nguyên tố số nguyên tố Mersenne 32 2.1.2.6 Một số thuật tốn kiểm tra tính ngun tố khác 32 2.2 Các thuật toán phân tích thừa số 34 2.2.1 Thuật tốn tìm nhân tử lớn thứ 34 2.2.2 Thuật tốn phân tích thứ hai 37 2.2.3 Thuật toán phân tích thứ ba 38 Kết luận Chương 42 CHƯƠNG 3: ĐỀ XUẤT THUẬT TỐN TẤN CƠNG RSA KHƠNG CẦN PHÂN TÍCH NHÂN TỬ 43 3.1 Mở đầu 43 3.2 Cơ sở toán học thuật toán 44 3.2.1 Một số mệnh đề 44 3.2.2 Xác định hàm ф(n) 45 3.3 Đề xuất thuật toán 46 3.3.1 Lưu đồ giải thuật 46 3.3.2 Xây dựng chương trình 47 3.3.3 Một số ví dụ 51 Kết luận Chương 53 vi KẾT LUẬN 54 DANH MỤC TÀI LIỆU THAM KHẢO 55 PHỤ LỤC 57 Phụ lục Mã nguồn Chương trình 57 Phụ lục Thư viện tính toán số lớn 71 Biểu diễn số lớn 72 Các phép toán với số lớn 73 vii DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT Ký hiệu, Ý nghĩa viết tắt RSA Rivest - Shamir - Adlemal Hệ mật mã RSA RCT Chinese Remainder Theorem Định lý đồng dư Trung Hoa GCD Greatest Common Divisor Ước chung lớn GF (P) Trường số thực GF (2) Trường nhị phân K Tập hợp khóa mã E Thuật tốn mã hóa D Thuật tốn giải mã P Tập hợp rõ C Tập hợp mã n Hàm Phi_Ơle p, q Cặp số nguyên tố p q n Số nguyên dương x Văn rõ thuộc P y Bản mã thuộc C k' Thành phần khóa cơng khai k '' Thành phần khóa bí mật s Số ngun tố Mersenne r Số nguyên lẻ viii DANH MỤC HÌNH VẼ, BẢNG BIỂU Hình 3.1: Lưu đồ thuật tốn 47 Hình 3.2: Giao diện chương trình 48 Hình 3.3: Kiểm tra tính chẵn số cần phân tích 49 Hình 3.4: Kiểm tra tính ngun tố số cần phân tích 49 Hình 3.5: Chức phân tích 50 Hình 3.6: Chức dừng q trình phân tích 50 Hình 3.7: Chức hiển thị kết 51 MỞ ĐẦU Đặt vấn đề Hệ mật RSA phát minh Ron Rivest, Adi Shamir, Len Adleman, công bố lần đầu vào tháng năm 1977 tạp chí khoa học Mỹ, sử dụng lĩnh vựcbảo mật cung cấp chế xác thực liệu số [3],[17] Ngày nay, RSA phát triển ứng dụng rộng rãi tất lĩnh vực đời sống, kinh tế xã hội, an ninh quốc phòng, đặc biệt thương mại điện tử Theo [4],[6] RSA sử dụng nhiều để trao đổi khóa bí mật xác thực hệ mật mã đối xứng; sử dụng web servers browsers nhằm đảm bảo an ninh đường truyền, đặc biệt RSA coi hạt nhân hệ thống toán điện tử Bởi vậy, nghiên cứu phân tích hệ mật RSA ln thu hút quan tâm nhiều quốc gia, tổ chức, tập đồn, cơng ty nhà khoa học đầu tư nghiên cứu [7],[9] Ở nước ta nay, hầu hết quan, tổ chức hoạt động lĩnh vực bảo mật trung tâm nghiên cứu, trường đại học khối kỹ thuật có kết nghiên cứu, phân tích hệ số an tồn tham số hệ mật, từ rõ mối nguy hiểm tiềm ẩn cần cải thiện hệ mật RSA sử dụng [5],[10] Vấn đề thám mã hệ mật RSA nhà nghiên cứu tập trung khai thác dựa sơ hở RSA như: công vào số mũ công khai số mũ bí mật thấp, cơng vào tham số nguyên tố p, q bé cách xa lớn, họ tập trung vào việc phân tích nhân tử số n (modul RSA) Trường hợp số lớn, từ n 1024 trở lên phương pháp không phát huy hiệu chạy chậm không cho mong muốn [3] Mặt khác mặt toán học chứng minh hiệu việc công hệ mật RSA phụ thuộc vào cách thu hẹp khoảng cách dị tìm số ngun tố p hệ mật RSA Do cần có nghiên cứu cơng RSA mà khơng cần phân tích nhân tử [4] Xuất phát từ thực tế đó, luận văn “Nghiên cứu xây dựng thuật tốn cơng hệ mật RSA” mang tính cấp thiết, thực có ý nghĩa khoa học thực tiễn Đối tượng phạm vi nghiên cứu - Nghiên cứu phương pháp công hệ mật RSA đề xuất phương pháp cơng RSA - Sử dụng ngơn ngữ lập trình C để xây dựng chương trình phần mềm đề xuất Hướng nghiên cứu luận văn Nghiên cứu tổng quan vấn đề an toàn hệ mật RSA, phương pháp công RSA phổ biến Từ sâu nghiên cứu đề xuất phương pháp cơng RSA mới, khơng dựa tốn phân tích nhân tử Nghiên cứu xây dựng phần mềm giải pháp thực nghiệm, đánh giá Những nội dung nghiên cứu Chương 1: Tổng quan hệ mật RSA Nghiên cứu mô tả, thực thi hệ mật RSA, vấn đề an toàn kiểu, phương pháp công hệ mật RSA phổ biến Chương 2: Nghiên cứu số thuật tốn cơng RSA Tập trung nghiên cứu, phân tích số thuật tốn cơng RSA phổ biến sử dụng chung phương pháp phân tích nhân tử Nội dung chương trình bày kết nghiên cứu thuật toán kiểm tra số nguyên tố thuật tốn phân tích số ngun thành tích thừa số nguyên tố Chương 3: Nghiên cứu đề xuất thuật tốn cơng RSA Dựa sở lý thuyết toán học, nội dung Chương nghiên cứu, tìm hiểu xây dựng chương trình thuật tốn cơng hệ mật RSA khơng cần phân tích nhân tử Việc tính tốn, phân tích số ngun n để xác định số nguyên tố p, q thực thơng qua tính tốn hàm n Đồng thời phân tích, tính tốn thực nghiệm để đưa số kết luận 68 { this.Invoke(new Action(AppendTextBox), new object[] { Value }); return; } richTextBox1.AppendText(Value); //richTextBox1.ScrollToCaret(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { try { if (validate(textBox1.Text)==1) { AppendTextBox("Số nhập vào không hợp lệ \n"); } else if (validate(textBox1.Text)==2) { AppendTextBox("Số nhập vào số chẵn, không hợp lệ \n"); } else if (validate(textBox1.Text) == 3) { AppendTextBox("Số nhập vào số ngun tố, khơng phân tích \n"); } else { Int64 N=Int64.Parse(textBox1.Text); Int64 nPhay = tinhN(N); //In N' AppendTextBox("Bước 1: Tính n'=(n+1)/2: "+nPhay.ToString()+"\n"); Int64 B = tinhB(nPhay,tinhCanN(N)); AppendTextBox("Bước 2: Tính b'=n'-[sqrt(n)]: " + B.ToString() + "\n"); AppendTextBox("Bước 3: Tính tốn tiếp theo: \n"); 69 for (long i = B; i >= 0; i=i-2) { if (this.backgroundWorker1.CancellationPending) { e.Cancel = true; return; } long percentage = (B - i) * 100 / (B - 1); if (percentage>100) { percentage = 100; } backgroundWorker1.ReportProgress((int.Parse(percentage.ToString()))); Int64 deltaPhay = (nPhay - i) * (nPhay - i) - N; if (kiemTraSoChinhPhuong(deltaPhay)) { Int64 deltaCP = (Int64)Math.Sqrt(deltaPhay); Int64 p = nPhay - i - deltaCP; Int64 q = nPhay - i + deltaCP; String tmp = String.Format("Bước 3.{3} Delta' = ({4}-{5})^2-{6}={0} số phương;\n \t\t\t\t KẾT QUẢ: p={1} q={2} \n", deltaPhay, p, q,(Bi)/2+1,nPhay,i,N); AppendTextBox(tmp); return; } else { String tmp = String.Format("Bước 3.{1} Delta' = ({2}-{3})^2-{4}={0} không số phương, tiếp tục tính \n", deltaPhay, (B - i)/2 +1, nPhay, i, N); AppendTextBox(tmp); } //Thread.Sleep(100); } 70 } } catch (Exception e1) { MessageBox.Show(e1.Message); } } private void btnAnalysis_Click(object sender, EventArgs e) { btnAnalysis.Enabled = false; button1.Enabled = true; richTextBox1.Clear(); //backgroundWorker1.CancelAsync(); //progressBar1.Show(); backgroundWorker1.RunWorkerAsync(); } private void Form1_Load(object sender, EventArgs e) { } private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar); } private void button1_Click(object sender, EventArgs e) { backgroundWorker1.CancelAsync(); //backgroundWorker1.Dispose(); //backgroundWorker1 = null; //GC.Collect(); btnAnalysis.Enabled = true; MessageBox.Show("Dừng tính tốn"); button1.Enabled = false; 71 } } } Phụ lụcThư viện tính tốn số lớn 72 Trước xây dựng giải pháp công RSA, nghiên cứu cách biểu diễn số nguyên lớn thuật toán số học làm việc với số lớn máy tính Biểu diễn số lớn Có nhiều cách để biểu diễn lưu trữ số lớn Cách thông thường biểu diễn xâu ký tự Cho số lớn có n 1chữ số thập phân biểu diễn hệ số b , có dạng a an1an2 a0 b ta sử dụng xâu ký tự s có độ dài n ký tự để biểu diễn a theo cách: Chữ số a0 lưu vào phần tử s0 Chữ số a1 lưu vào phần tử s1 …………………………………… Chữ số an1 lưu vào phần tử sn 1 Dấu số lớn đặt biến trạng thái “dau” + Nếu dau = a số dương; + Nếu dau =-1 a số âm; Ta quy ước nói đến số lớn a a xâu ký tự, phần tử xâu phần tử số lớn biểu diễn hệ số b cách tương ứng Giả sử ta biểu diễn số lớn hệ số c ta muốn chuyển số lớn sang biểu diễn hệ số b thơng qua thuật tốn sau: Input: số ngun dương a , số nguyên dương b : b 256 Output: biểu diễn hệ số b a an1an2 a0 b , n , an Thuật toán: x (1) i 0; x A; q ; x qb ; b (2) while q 0 x i i ; x q; q ; x qp b 73 (3) return ai , a0 Các phép toán với số lớn Ta quy ước số lớn biểu diễn hệ số b 10 2.1 So sánh hai số Input: Số hai số lớn x xn1 x0 , y ym1 y0 có độ dài n, m Output: - Nếu x y retum l - Nếu x y retum - Nếu x y return Algorithm: If ( x dương, y âm) return 1; If ( x âm, y dương) return 0; 3: If n m &&( x âm) return 0; // x y if n m && ( y âm) return 1;// x y If n m && ( x dương) return 1; // x y If n m && ( y dương) return 0; // x y If n m l If ( x dương) For i n 1; i 0; i If xi yi return 1; // x y Else return 0; 7.2 Else if ( x âm) For i n 1; i 0; i If xi yi return 0; // x y Else if xi bi return 1; // x y return 2; 74 2.2 Cộng hai số lớn dương Cho x, y hai số lớn có độ dài n m Nếu số nhỏ chèn thêm vào bên trái số cho độ dài hai số nhau.Cộng phần từ hai xâu lưu trữ hai số Input: Số hai số lớn x xn1 x0 , y ym1 y0 có độ dài n, m Output: z x y Algorithm: temp , nho ; // nho: biến lưu giá trị nhớ phép cộng If n m temp n ; Else temp m ; For i 0; i temp, i zi xi yi nho ; If zi 9 zi zi 10 ; nho 1; Else nho ; Return a ; 2.3 Trừ hai số lớn dương Cho x, y hai số lớn có độ dài n m Nếu số nhỏ chèn thêm vào cho độ dài hai số ta tiến hành trừ Ta tiến trừ phần tử hai xâu lưu trữ hai số lớn Input: Số hai số lớn x xn1 x0 , y ym1 y0 có độ dài n, m Output: z x y Algorithm: nho ; // nho: biến lưu giá trị nhớ phép trừ For i 0;i n; i 75 If i m yi ;//chèn vào x có độ dải nhỏ y If xi yy nho zi xi 10 yi nho ; nho 1; Else zi xi yi10 ; nho nho ; Xét dấu cho z ; 2.4 Phép nhân hai số lớn 2.4.1 Nhân số lớn với số nguyên Input: Số lớn x xn1 x0 số nguyên k Output: z z.k , z có độ dải tối thiểu n Algorithm: l nho ; temp ; for pi 0; i n; i p temp xi.k nho ; zi temp%10 ; nho temp zi/10 ; Độ dài z 1à n ; if nho! 0 while nho! 0 n n 1; //Tăng độ dài z , 10 zi nho%10 ; 11 nho nho zi/10 ; 12 i ; 13.retum z ; 76 2.4.2 Nhân hai số lớn Cho hai số lớn x xn1 x0 , y ym1 y0 có cần tính z x y có độ dài n m Để nhân hai số lớn ta tiến hành sau: - Lấy phần tử số thứ hai nhân với tất phần tử số thứ hay nóicách khác lấy phần tử y nhân với toàn x cộng thêm phần tử nhớ, kết đem chia cho hệ số, lấy số dư làm kết hàng tương ứng, thương số số nhớ số - Dịch trái số bước phù hợp - Cộng tất kết nhân lại Cụ thể thuật toán nhân hai số lớn sau: Input: Hai số lớn x xn1 x0 , y ym1 y0 có độ dài n m Output: z x y Algorithm: i, temp, nho ; BigNum b ; for i 0; i m; i temp yi ; b x.temp ; // Nhân số lớn với số nguyên Dichtrai b, i ; // dịch trái b, i vị trí; z z b ; Retum z ; 2.5 Phép chia hai số lớn dương Hai số lớn x xn1 x0 , y ym1 y0 có độ dài n m Xét trường hợp phép chia hai số lớn có thương nhỏ Input: Hai số lớn x xn1 x0 , y ym1 y0 có độ dài n m Output: x x y ; z có độ dài k n m ; 77 Algorithm: 1.For i to i 10 BigNum c ; c b.i ; // Nhân số lớn với số nguyên If (Sosanh c, a ==1) return i 1; // c a Else If (Sosanh c, a ==2) retum i; c a Thuật toán chia hai số lớn dựa ý tưởng phép chia thông thường Input: Hai số lớn x, y có độ dài n, m Output: z x y Algorithm: BigNum b, z, c1 ; If ( y0 & &m 1) cout