Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 62 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
62
Dung lượng
873 KB
Nội dung
MỤC LỤC DANH MỤC CÁC HÌNH MỞ ĐẦU .4 CHƯƠNG TỔNG QUAN VỀ CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG KHAI Khởi tạo Diffie Hellman 15 Trao đổi khoá Diffie Hellman 15 CHƯƠNG 2: HÀM BĂM VÀ CHỮ KÝ ĐIỆN TỬ 21 2.1 Hàm băm 21 2.1.1 Tổng quan hàm băm 21 Giới thiệu hàm băm 21 .21 Các yêu cầu hàm băm 21 2.1.2 Một số hàm băm sử dụng phổ biến 26 2.1.2.1 Họ hàm băm SHA (Secure Hash Algorithm) 26 Hàm băm SHA-1 26 2.1.2.2 Họ hàm băm MD (Message-Digest algorithm) 29 Hàm băm MD4 29 Hàm băm MD5 32 2.2 CHỮ KÝ ĐIỆN TỬ .36 Đặc điểm chữ ký điện tử .40 Chức 40 2.3 Những vấn đề trao đổi cặp khóa đặt thực tế 41 2.3.1 Sự tương tự với bưu 41 Phân phối khoá 44 KẾT LUẬN 55 GIẢI THÍCH MỘT SỐ THUẬT NGỮ 56 TÀI LIỆU THAM KHẢO 57 DANH MỤC CÁC CHỮ TIẾNG ANH VIẾT TẮT NIST National Institute of Standards and Technology RSA R Rivest, A Shamir, L Adleman MITM Man-In-The-Middle attack MD Message-Digest algorithm SHA Secure Hash Algorithm MAC Message Authentication Code PKCS Public Key Cryptography Standards DANH MỤC CÁC HÌNH STT TÊN HÌNH TRANG Hình 1.1: Kênh liên lạc Hình 2.1: Hoạt động hàm băm tiêu biểu 21 Hình 2.2: Mô hình ký gửi thông điệp sử dụng hàm băm 25 Hình 2.3: Mô hình xác minh chữ ký, kiểm tra tính toàn vẹn thông điệp 26 Hình 2.4: Mô hình chữ ký điện tử 40 Hình 3.1: Sơ đồ hệ thống ứng dụng 53 Hình 3.2: Giao diện chương trình 55 Hình 3.3: Giao diện tao cặp khóa 56 Hình 3.4: Giao diện lựa chọn văn cần ký 56 10 11 Hình 3.5: Giao diện ký văn lựa chọn khóa bí mật Hình 3.6: Giao diện giải mã văn ký khóa công khai 57 57 MỞ ĐẦU Lý nghiên cứu đề tài Bảo mật thông tin nhu cầu cần thiết lĩnh vực tình báo, quân sự, ngoại giao, thông tin thương mại Bảo mật thông tin vấn đề nghiên cứu từ xưa đến Bảo mật thông tin trì tính bảo mật, tính toàn vẹn, tính sẵn sàng Tính bảo mật đảm bảo thông tin tiếp cận người cấp quyền trao đổi thông tin Tính toàn vẹn thông tin bảo vệ xác, hoàn chỉnh thông tin thông tin thay đổi người cấp quyền Tính sẵn sàng thông tin người quyền sử dụng truy xuất thông tin họ cần Để đảm bảo yêu cầu thông tin nhiều người nước giới tập trung nghiên cứu tìm giải pháp để đảm bảo an toàn, an ninh cho giao dịch điện tử máy tính Giao dịch điện tử Việt Nam quan tâm Những giao dịch điện tử xuất với phổ dụng máy tính mạng Internet Đã có luật, văn luật cho lĩnh vực an toàn thông tin giao dịch điện tử như: Quốc hội thông qua luật thương mại, luật giao dịch điện tử Thủ tướng Chính phủ ban hành Quyết định số 1073/QĐ-TTg ngày 12/7/2010 phê duyệt kế hoạch tổng thể phát triển thương mại điện tử giai đoạn 2010 – 2015 Cùng với xu chung đất nước, yêu cầu đặt với công việc mình, học viên chọn đề tài an toàn thông tin, mà cụ thể áp dụng thuật toán mã hóa khóa công khai, hàm băm, chữ ký điện tử, làm mục tiêu nghiên cứu Mong muốn tìm tòi xây dựng ứng dụng phục vụ cho quan, đơn vị nơi học viên công tác Hướng nghiên cứu đề tài − Nghiên cứu giải thuật mã hóa khóa công khai − Nghiên cứu chữ ký điện tử, tìm hiểu hàm băm giải thuật hàm băm − Cài đặt thử nghiệm giải thuật sinh chữ ký điện tử Đối tượng nghiên cứu − Một số thuật toán sinh khóa công khai, khóa bí mật; − Một số hàm băm thường sử dụng nay; − Chữ ký điện tử Phương pháp nghiên cứu đề tài − Tìm hiểu dựa sở lý thuyết, thuật toán hay sinh khóa công khai, khóa bí mật có từ trước So sánh để thấy ưu điểm, hạn chế thuật toán − Từ sở cải tiến, triển khai ứng dụng cài đặt giải thuật tối ưu vào thực tiễn − Trong trình triển khai ứng dụng nêu lên hạn chế đề tài khó khăn thực đề tài − Đề xuất hướng phát triển đề tài thời gian tới Cấu trúc luận văn Ngoài phần mở đầu kết luận đề tài có cấu gồm chương: Chương : Tổng quan thuật toán mã hóa khóa công khai Chương 2: Hàm băm chữ ký điện tử Chương 3: Xây dựng ứng dụng CHƯƠNG TỔNG QUAN VỀ CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG KHAI 1.1 Khái niệm mã hóa khóa công khai 1.1.1 Mật mã hóa khóa đối xứng Trong mật mã học, thuật toán khóa đối xứng (symmetric key algorithms) lớp thuật toán mật mã hóa khóa dùng cho việc mật mã hóa giải mã có quan hệ rõ ràng với (có thể dễ dàng tìm khóa biết khóa kia) Khóa dùng để mã hóa có liên hệ cách rõ ràng với khóa dùng để giải mã có nghĩa chúng hoàn toàn giống nhau, khác nhờ biến đổi đơn giản hai khóa Trên thực tế, khóa đại diện cho bí mật phân hưởng hai bên nhiều sử dụng để giữ gìn bí mật kênh truyền thông tin Thuật toán đối xứng chia làm hai thể loại, mật mã luồng (stream ciphers) mật mã khối (block ciphers) Mật mã luồng mã hóa bit thông điệp mật mã khối gộp số bit lại mật mã hóa chúng đơn vị Cỡ khối dùng thường khối 64 bit Những thuật toán mã hóa khóa đối xứng tiếng DES AES Các thuật toán đối xứng thường không sử dụng độc lập Trong thiết kế hệ thống mật mã đại, hai kiểu mật hóa khóa đối xứng khóa bất đối xứng thường sử dụng phối hợp để tận dụng ưu điểm chúng 1.1.2 Mật mã hóa khóa công khai Là dạng mật mã hóa cho phép người sử dụng trao đổi thông tin mật mà không cần phải trao đổi khóa chung bí mật trước Điều thực cách sử dụng cặp khóa có quan hệ toán học với khóa công khai khóa cá nhân (hay khóa bí mật) Thuật ngữ "mật mã hóa khóa bất đối xứng" thường dùng đồng nghĩa với "mật mã hóa khóa công khai" hai khái niệm không hoàn toàn tương đương Có thuật toán mật mã khóa bất đối xứng tính chất khóa công khai bí mật đề cập mà hai khóa (cho mã hóa giải mã) cần phải giữ bí mật Trong mật mã hóa khóa công khai, khóa cá nhân phải giữ bí mật khóa công khai phổ biến công khai Trong khóa, dùng để mã hóa khóa lại dùng để giải mã Điều quan trọng hệ thống tìm khóa bí mật biết khóa công khai Hệ thống mật mã hóa khóa công khai sử dụng với mục đích: − Mã hóa: giữ bí mật thông tin có người có khóa bí mật giải mã − Tạo chữ ký số: cho phép kiểm tra văn có phải tạo với khóa bí mật hay không − Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin mật bên Thông thường, kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều kỹ thuật mã hóa khóa đối xứng lợi điểm mà chúng mang lại khiến cho chúng áp dụng nhiều ứng dụng Có thể hình dung hệ mật tương tự sau A đặt vật vào hộp kim loại khoá lại khoá số B để lại Chỉ có B người mở hộp có người biết tổ hợp mã khoá số Thuật toán mã hóa công khai thuật toán thiết kế cho khóa mã hóa khác so với khóa giải mã Mà khóa giải mã hóa tính toán từ khóa mã hóa Khóa mã hóa gọi khóa công khai (public key), khóa giải mã gọi khóa riêng (private key) Hình 1.1: Kênh liên lạc Oscar A Bộ mã hóa Bộ giải mã B Khóa hóahệ mã hóa công Khóakhai giải mãcả khóa công khai Đặc trưng bậtmã (public key) tin mã hóa (ciphertext) gửi kênh thông tin không an toàn Trong hầu hết lịch sử mật mã học, khóa dùng trình mã hóa giải mã phải giữ bí mật cần trao đổi phương pháp an toàn khác (không dùng mật mã) gặp trực tiếp hay thông qua người đưa thư tin cậy Vì trình phân phối khóa thực tế gặp nhiều khó khăn, đặc biệt số lượng người sử dụng lớn Mật mã hóa khóa công khai giải vấn đề cho phép người dùng gửi thông tin mật đường truyền không an toàn mà không cần thỏa thuận khóa từ trước Năm 1874, William Stanley Jevons xuất sách mô tả mối quan hệ hàm chiều với mật mã học đồng thời sâu vào toán phân tích thừa số nguyên tố (sử dụng thuật toán RSA) Tháng năm 1996, nhà nghiên cứu bình luận sách sau: Trong The Principles of Science: A Treatise on Logic and Scientific Method xuất năm 1890, William S Jevons phát nhiều phép toán dễ thực theo chiều khó theo chiều ngược lại Một ví dụ chứng tỏ mã hóa dễ dàng giải mã không Vẫn phần nói chương (Giới thiệu phép tính ngược) tác giả đề cập đến nguyên lý: ta dễ dàng nhân số tự nhiên phân tích kết thừa số nguyên tố không đơn giản Đây nguyên tắc thuật toán mật mã hóa khóa công khai RSA tác giả người phát minh mật mã hóa khóa công khai Thuật toán mật mã hóa khóa công khai thiết kế James H Ellis, Clifford Cocks, Malcolm Williamson GCHQ (Anh) vào đầu thập kỷ 1970 Thuật toán sau phát triển biết đến tên Diffie-Hellman, trường hợp đặc biệt RSA Tuy nhiên thông tin tiết lộ vào năm 1997 Năm 1976, Whitfield Diffie Martin Hellman công bố hệ thống mật mã hóa khóa bất đối xứng nêu phương pháp trao đổi khóa công khai Công trình chịu ảnh hưởng từ xuất trước Ralph Merkle phân phối khóa công khai Trao đổi khóa Diffie-Hellman phương pháp áp dụng thực tế để phân phối khóa bí mật thông qua kênh thông tin không an toàn Kỹ thuật thỏa thuận khóa Merkle có tên hệ thống câu đố Merkle Thuật toán Rivest, Shamir Adleman tìm vào năm 1977 MIT Công trình công bố vào năm 1978 thuật toán đặt tên RSA RSA sử dụng phép toán tính hàm mũ môđun (môđun tính tích số số nguyên tố lớn) để mã hóa giải mã tạo chữ ký số An toàn thuật toán đảm bảo với điều kiện không tồn kỹ thuật hiệu để phân tích số lớn thành thừa số nguyên tố Kể từ thập kỷ 1970, có nhiều thuật toán mã hóa, tạo chữ ký số, thỏa thuận khóa phát triển Các thuật toán ElGamal (mật mã) Netscape phát triển hay DSA NSA NIST dựa toán lôgarit rời rạc tương tự RSA Vào thập kỷ 1980, Neal Koblitz bắt đầu cho dòng thuật toán mới: mật mã đường cong elliptic tạo nhiều thuật toán tương tự Mặc dù sở toán học dòng thuật toán phức tạp lại giúp làm giảm khối lượng tính toán đặc biệt khóa có độ dài lớn Vấn đề độ an toàn thuật toán mật mã hóa khóa công khai Về khía cạnh an toàn, thuật toán mật mã hóa khóa bất đối xứng không khác nhiều với thuật toán mã hóa khóa đối xứng Có thuật toán dùng rộng rãi, có thuật toán chủ yếu lý thuyết; có thuật toán xem an toàn, có thuật toán bị phá vỡ Cũng cần lưu ý thuật toán dùng rộng rãi lúc đảm bảo an toàn Một số thuật toán có chứng minh độ an toàn với tiêu chuẩn khác Nhiều chứng minh gắn việc phá vỡ thuật toán với toán tiếng cho lời giải thời gian đa thức (Xem thêm: Lý thuyết độ phức tạp tính toán) Nhìn chung, chưa có thuật toán chứng minh an toàn tuyệt đối (như hệ thống mật mã sử dụng lần) Vì vậy, giống tất thuật toán mật mã nói chung, thuật toán mã hóa khóa công khai cần phải sử dụng cách thận trọng 1.2 Các thuật toán mật mã hóa khóa công khai 1.2.1 Thuật toán RSA Thuật toán Ron Rivest, Adi Shamir Len Adleman mô tả lần vào năm 1977 Học viện Công nghệ Massachusetts (MIT) Tên thuật toán lấy từ chữ đầu tên tác giả Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) khóa bí mật (hay khóa cá nhân) Mỗi khóa số cố định sử dụng trình mã hóa giải mã Khóa công khai công bố rộng rãi cho người dùng để mã hóa Những thông tin mã hóa khóa công khai giải mã khóa bí mật tương ứng Nói cách khác, người mã hóa có người biết khóa cá nhân (bí mật) giải mã Ta mô trực quan hệ mật mã hóa khoá công khai sau: giả sử B muốn gửi cho A thông tin mật mà B muốn A đọc Để làm điều này, A gửi cho B hộp có khóa mở sẵn giữ lại chìa khóa B nhận hộp, cho vào tờ giấy viết thư bình thường khóa lại (như loại khoá thông thường cần sập chốt lại, 10 Trong hệ thống, người có thẩm quyền tạo khóa trùng với người có thẩm quyền thu hồi khóa không bắt buộc Nếu xét phương diện an ninh ý tưởng tốt Vấn đề nảy sinh cần giảm khoảng thời gian thời điểm thu hồi khóa thời điểm tạo khóa tới mức tối thiểu Để làm tốt việc lại đòi hỏi nơi/một thực thể có đủ thẩm quyền nêu Vấn đề phải cân yêu cầu an ninh yêu cầu tính sẵn sàng hệ thống Các biện pháp tiến hành lộ khóa Hầu hết trường hợp thu hồi khóa xảy có kiện chứng tỏ khóa bí mật bị lộ Ta gọi thời điểm xảy kiện T Điều dẫn tới hệ quả: Các văn mã hóa với khóa công khai sau thời điểm T không xem bí mật; chữ ký số thực với khóa bí mật sau thời điểm T không xem thật tìm hiểu kỹ lưỡng kiện để tìm nơi thực chữ ký Nếu nguyên nhân việc lộ bí mật lỗi hệ thống cần tiến hành chiến lược phục hồi Chiến lược xác định người có quyền thu hồi khóa, cách thức truyền thông tin tới người dùng, cách thức xử lý văn mã hóa với khóa bị lộ sau thời điểm T Quy trình phục hồi phức tạp lúc tiến hành hệ thống dễ bị công từ chối dịch vụ (DoS) 48 CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG 3.1 Phát triển ứng dụng 3.1.1 Sơ đồ hệ thống chức ứng dụng 3.1.1.1 Sơ đồ hệ thống Như trình bày chương trước luận văn tìm hiểu hệ mật mã khóa công khai, chữ ký điện tử, hàm băm học viên định lựa chọn giải thuật chữ ký số RSA cho phần cài đặt thử nghiệm ứng dụng Trong luận văn này, học viên xin không sâu trình bày, diễn giải phân tích hệ thống mà nói việc hình thành cặp khóa, việc ứng dụng hàm băm, cặp khóa để ký, giải mã thành công thông điệp Các ký hiệu mô hình hệ thống M : văn đầu vào mã hóa Encode : mã hóa Decipher : giải mã dA : khóa bí mật người A (người gửi) eA : khóa công khai A H : hàm băm MD5 H(M) : văn M băm thuật toán MD5 E(H(M) : văn mã hóa sau băm 49 H M H(M) E(H(M)׀׀dA) dA H(M) E(H(M)׀׀eA) eA Hình 3.1: Sơ đồ hệ thống ứng dụng Trên mô hình hệ thống kết cuối hàm mã hóa H(M) (2); chương trình so sánh hai kết H(M)) (vị trí (1) (2) hình 3.1) thông báo tính thống văn M mà người gửi muốn gửi cho người nhận 3.1.1.2 Chức ứng dụng i Tạo khóa công khai khóa bí mật: Chọn độ dài khóa, sau khóa công khai khóa bí mật tạo người gửi gửi khóa công khai cho người nhận người nhận dùng khóa để giải mã văn so sánh xem có phải văn thống hay không ii Ký file: Cho phép người sử dụng nhập liệu thông điệp lựa chon file để ký trước gửi cho người nhận iii Xác nhận file ký Sử dụng khóa công khai người gửi, người nhận dùng ứng dụng xác nhận chữ ký văn mà người gửi gửi hay không Nếu văn có sai lệch dùng hàm băm MD5 băm lần văn M kết cho không khớp với thông tin giải mã trước 50 3.1.2 Phân tích ứng dụng 3.1.2.1 Tạo khóa công khai bí mật thuật toán RSA Produce Tạo khóa thuật toán sinh khóa RSA RSACryptoServiceProvider RSAProvider = new RSACryptoServiceProvider(currentBitStrength); Lưu cặp khóa thành hai file *.kez (saveFile("Lưu khóa công khai", "Tập tin khóa công khai (*.kez)| *.kez", publicAndPrivateKeys)) Return; 3.1.2.2 Băm liệu hàm băm MD5 Produce Khởi tạo hàm băm MD5; Gọi thuật toán MD5 MD5 md5 = MD5.Create(); Băm văn bản; Return; 3.1.3.3 Mã hóa giá trị băm khóa bí mật Produce Lấy giá trị băm; Chọn tập tin khóa bí mật; Mã hóa giá trị băm khóa bí mật; Return; 3.1.4.4 Giải mã khóa công khai kiểm tra tính toàn vẹn văn Produce Lấy giá trị mã hóa; Chọn tập tin khóa công khai; Giải mã giá trị mã hóa khóa công khai; // Xác thực văn Băm lai văn thuật toán MD5; 51 So sánh kết băm với kết bước 3.1.2.2 ; Báo thành công kết giống nhau; Return; 3.2 Cài đặt ứng dụng 3.2.1 Giới thiệu chương trình Chương trình mô chữ ký số giải vấn đề: - Chọn độ dài khóa: số có độ dài có định 512, 1024, … - Sinh cặp khóa công khai, bí mật - Đưa vào thông điệp băm thuật toán MD5 - Ký văn - Giải mã văn - Xác thực chữ ký 3.2.2 Một số giao diện chương trình 3.2.2.1 Giao diện chương trình Hình 3.3: Giao diện 52 3.2.2.2 Tạo file khóa công khai bí mật, lưu file khóa Hình 3.2: Giao diện tao cặp khóa 3.2.2.3 Lựa chọn văn Hình 3.4: Giao diện lựa chọn văn cần ký 53 3.2.2.4 Ký văn Hình 3.5: Giao diện ký văn lựa chọn khóa bí mật 3.2.2.5 Giải mã chữ ký Hình 3.6: Giao diện giải mã văn ký khóa công khai 54 KẾT LUẬN * Kết đạt Trình bày thuật toán sinh khóa công khai, đặc điểm thuật toán Trình bày mật mã học, hàm băm, chữ ký số Xây dựng mô việc tạo khóa công khai, khóa bí mật, kiểm tra tính toàn vẹn, xác thực chữ ký * Những khó khăn, tính hạn chế đề tài Khó khăn: Vấn đề chữ ký số vấn đề không nay, phát triển mạnh mẽ nước ta song áp dụng chữ ký số cho đơn vị có nhiều vấn đề cần giải để đạt hiệu cao với người dùng chữ ký số Hạn chế: ứng dụng xây dựng chưa mã hóa nhiều định dạng khác * Hướng phát triển tới đề tài Tiếp tục hoàn thiện chương trình, phát triển đề tài để áp mạnh mẽ vào thực tế công việc 55 GIẢI THÍCH MỘT SỐ THUẬT NGỮ Văn (Plaintext) thông báo gốc cần chuyển, ghi hình ảnh, âm thanh, chữ số, chữ viết thông thường Về sau đưa ví dụ, ta thường xem văn viết tiếng Việt, chữ số Hệ mã (Cryptosystem) phương pháp biến văn sang dạng khác Việc dùng hệ mã để biến đổi văn gọi mã hoá văn Văn mật (Ciphertext) văn mã hoá Giải mã (Decrypt) tức chuyển văn mật thành văn ban đầu với điều kiện biết hệ mã dùng trình mã hoá văn Như vậy, giải mã công việc người nhận văn mật (khi văn mật gửi đến địa chỉ) Thám mã (Cryptanalysis) việc tìm văn ban đầu từ văn mật trình mã hoá Đây việc làm người muốn khám phá bí mật người khác, tức phá hệ mã Công nghệ mã hoá (Cryptology) từ dùng để việc nghiên cứu, tạo ứng dụng hệ mã, phương pháp thám mã 56 TÀI LIỆU THAM KHẢO Tài liệu tham khảo tiếng Việt [1] Hà Huy Khoái - Phạm Văn Điển, Số học thuật toán, NXB Đại học quốc gia Hà Nội (2003) [2] Hà Huy Khoái, Nhập môn số học thuật toán, Nhà xuất khoa học 1997 [3] Phan Đình Diệu, Lý thuyết mật mã An toàn thông tin, Đại học quốc gia Hà Nội Tài liệu tham khảo tiếng Anh [1] RFC1320 - The MD4 Message-Digest Algorithm [2] RFC1321 - The MD5 Message-Digest Algorithm [3] Handbook of Applied Cryptography, A.Menezes, P.van Oorschot, S.Vanstone, CRC Press, 1996 [4] R.I Rivest, A Shamir, L M Adleman A method for obtaining digital signatures and public-key cryptosystems, Communication of the ACM, 21 (1978), 120-126 Trang Web tham khảo [1] http://www.scribd.com [2] http://www.slideshare.net [3] http://vi.scribd.com [4] http://antoanthongtin.vn/ 57 PHỤ LỤC Danh sách hàm băm mật mã học Thuật toán HAVAL MD2 MD4 MD5 PANAMA RIPEMD RIPEMD-128/256 RIPEMD-160/320 SHA-0 SHA-1 SHA-256/224 SHA-512/384 Tiger(2)192/160/128 VEST-4/8 (hash mode) VEST-16/32 (hash mode) WHIRLPOOL Kích thước đầu (output size) 256/224/192/160/128 128 128 128 256 128 128/256 160/320 160 160 256/224 512/384 Kích thước trạng thái Kích thước khối Độ dài Kích thước Xung đột (Internal state size) (Block size) (Length size) word (Word size) (Collision) 256 1024 64 32 Có 384 128 Không khả lớn 128 512 64 32 Có 128 512 64 32 Có 8736 256 No 32 Có lỗi 128 512 64 32 Có 128/256 512 64 32 Không 160/320 512 64 32 Không 160 512 64 32 Không 160 512 64 32 Có lỗi 256 512 64 32 Không 512 1024 128 64 Không 192/160/128 192 512 64 64 Không 160/256 256/384 80/128 Không 320/512 512/768 160/256 Không 512 512 512 256 Không PHỤ LỤC Giải thuật chương trình ứng dụng using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; using System.Collections; using System.IO; using System.Threading; namespace Luan_Van_Truong_Manh_Cuong { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //Sinh khóa công khai khóa bí mật private void butSinhKhoaCK_Click(object sender, EventArgs e) { int currentBitStrength = int.Parse(txtDoDaiKhoa.Text); RSACryptoServiceProvider RSAProvider = new RSACryptoServiceProvider(currentBitStrength); string publicAndPrivateKeys = "" + currentBitStrength.ToString() + "" + RSAProvider.ToXmlString(true); string justPublicKey = "" + currentBitStrength.ToString() + "" + RSAProvider.ToXmlString(false); if (saveFile("Lưu khóa công khai", "Tập tin khóa công khai( *.kez )|*.kez", publicAndPrivateKeys)) { while (!saveFile("Lưu khóa bí mật", "Tập tin khóa bí mật( *.pke )|*.pke", justPublicKey)) { ; } } txtKhoaCongKhai.Text = publicAndPrivateKeys; txtKhoaBiMat.Text = justPublicKey; } false); private SaveFileDialog saveFileDialog; private bool saveFile(string title, string filterString, string outputString) { saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = title; saveFileDialog.Filter = filterString; saveFileDialog.FileName = ""; if (saveFileDialog.ShowDialog() == DialogResult.OK) { StreamWriter streamWriter = new StreamWriter(saveFileDialog.FileName, if (outputString != null) { streamWriter.Write(outputString); } streamWriter.Close(); return true; } return false; } //Hàm băm MD5 private string CreateMD5Hash(string input) { MD5 md5 = MD5.Create(); byte[] inputBytes = Encoding.ASCII.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("X2")); } return sb.ToString(); //Băm văn private void butHamBam_Click(object sender, EventArgs e) { string iVanBanDaBam = CreateMD5Hash(txtVanBanCanKy.Text); txtVanBanDaBam.Text = iVanBanDaBam; } public delegate void FinishedProcessDelegate(); public delegate void UpdateTextDelegate(string inputText); private void FinishedProcess() { Application.DoEvents(); } private void UpdateTextChuKy(string inputText) { txtChuKy.Text = inputText; } private void UpdateTextGiaiMaChuKy(string inputText) { txtGiaiMaChuKy.Text = inputText; } //Ký văn bản: mã hóa giá trị băm khóa bí mật private void butKyVB_Click(object sender, EventArgs e) { openFileDialog = new OpenFileDialog(); openFileDialog.FileName = ""; openFileDialog.Title = "Chọn tập tin khóa bí mật"; openFileDialog.Filter = "Tập tin khóa bí mật( *.pke )|*.pke"; string fileString = null; if (openFileDialog.ShowDialog() == DialogResult.OK) { if (File.Exists(openFileDialog.FileName)) { StreamReader streamReader = new StreamReader(openFileDialog.FileName, true); fileString = streamReader.ReadToEnd(); streamReader.Close(); } } if (fileString != null) { FinishedProcessDelegate finishedProcessDelegate = new FinishedProcessDelegate(FinishedProcess); UpdateTextDelegate updateTextDelegate = new UpdateTextDelegate(UpdateTextChuKy); string bitStrengthString = fileString.Substring(0, fileString.IndexOf("") + 14); fileString = fileString.Replace(bitStrengthString, ""); int bitStrength = Convert.ToInt32(bitStrengthString.Replace("", "").Replace("", "")); this.Refresh(); if (fileString != null) { EncryptionThread encryptionThread = new EncryptionThread(); Thread encryptThread = new Thread(encryptionThread.Encrypt); encryptThread.IsBackground = true; encryptThread.Start(new Object[] { this, finishedProcessDelegate, updateTextDelegate, txtVanBanDaBam.Text, bitStrength, fileString }); } } } //Giải mã chữ ký: giải mã chữ ký khóa công khai private void butGiaiMaChuKy_Click(object sender, EventArgs e) { try { openFileDialog = new OpenFileDialog(); openFileDialog.FileName = ""; openFileDialog.Title = "Mở tập tin khóa công khai"; openFileDialog.Filter = "Tập tin khóa công khai( *.kez )|*.kez"; string fileString = null; if (openFileDialog.ShowDialog() == DialogResult.OK) { if (File.Exists(openFileDialog.FileName)) { StreamReader streamReader = new StreamReader(openFileDialog.FileName, true); fileString = streamReader.ReadToEnd(); streamReader.Close(); } } if (File.Exists(openFileDialog.FileName)) { string bitStrengthString = fileString.Substring(0, fileString.IndexOf("") + 14); fileString = fileString.Replace(bitStrengthString, ""); int bitStrength = Convert.ToInt32(bitStrengthString.Replace("", "").Replace("", "")); this.Refresh(); if (fileString != null) { FinishedProcessDelegate finishedProcessDelegate = new FinishedProcessDelegate(FinishedProcess); UpdateTextDelegate updateTextDelegate = new UpdateTextDelegate(UpdateTextGiaiMaChuKy); EncryptionThread decryptionThread = new EncryptionThread(); Thread decryptThread = new Thread(decryptionThread.Decrypt); decryptThread.IsBackground = true; decryptThread.Start(new Object[] { this, finishedProcessDelegate, updateTextDelegate, txtChuKy.Text, bitStrength, fileString }); } } } catch { MessageBox.Show("Giải mã không thành công!"); } } //Xác thực chữ ký: Băm lại văn Giải mã chữ ký khóa công khai //Nếu hai kết trùng Xác thực chữ ký thành công private void butXacThucChuKy_Click(object sender, EventArgs e) { string iVanBanDaBam = CreateMD5Hash(txtVanBanCanKy.Text); txtVanBanDaBam.Text = iVanBanDaBam; if (txtGiaiMaChuKy.Text==txtVanBanDaBam.Text) { MessageBox.Show("Xác thực thành công"); } else { MessageBox.Show("Xác thực không thành công"); } } //Chọn văn cần ký private void button1_Click(object sender, EventArgs e) { string fileString = openFile("Chọn văn cần ký", "Văn cần ký( *.txt )| *.txt"); if (fileString != null) { SetText(fileString); } } private void SetText(string text) { txtVanBanCanKy.Text = text; } private OpenFileDialog openFileDialog; private string openFile(string title, string filterString) { openFileDialog = new OpenFileDialog(); openFileDialog.FileName = ""; openFileDialog.Title = title; openFileDialog.Filter = filterString; if (openFileDialog.ShowDialog() == DialogResult.OK) { if (File.Exists(openFileDialog.FileName)) { StreamReader streamReader = new StreamReader(openFileDialog.FileName, true); string fileString = streamReader.ReadToEnd(); streamReader.Close(); return fileString; } } } return null; private void Form1_Load(object sender, EventArgs e) { } ... mã khoá số Thuật toán mã hóa công khai thuật toán thiết kế cho khóa mã hóa khác so với khóa giải mã Mà khóa giải mã hóa tính toán từ khóa mã hóa Khóa mã hóa gọi khóa công khai (public key), khóa. .. quan thuật toán mã hóa khóa công khai Chương 2: Hàm băm chữ ký điện tử Chương 3: Xây dựng ứng dụng CHƯƠNG TỔNG QUAN VỀ CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG KHAI 1.1 Khái niệm mã hóa khóa công khai. .. thuật toán mật mã hóa khóa công khai Về khía cạnh an toàn, thuật toán mật mã hóa khóa bất đối xứng không khác nhiều với thuật toán mã hóa khóa đối xứng Có thuật toán dùng rộng rãi, có thuật toán