4. Nội dung luận văn
3.3.3 Phân tích ưu nhược điểm của ứng dụng thực tế
3.3.3.1 Quá trình tạo khóa
Việc tìm ra 2 số nguyên tố đủ lớn p và q thường được thực hiện bằng cách thử xác suất các số ngẫu nhiên có độ lớn phù hợp (dùng phép kiểm tra nguyên tố cho phép loại bỏ hầu hết các hợp số). p và q còn cần được chọn không quá gần nhau để phòng trường hợp phân tích n bằng phương pháp phân tích Fermat. Ngoài ra, nếu p-1 hoặc q-1 có thừa số nguyên tố nhỏ thì n cũng có thể dễ dàng bị phân tích và vì thế p và q cũng cần được thử để tránh khả năng này.
Bên cạnh đó, cần tránh sử dụng các phương pháp tìm số ngẫu nhiên mà kẻ tấn công có thể lợi dụng để biết thêm thông tin về việc lựa chọn (cần dùng các bộ tạo số ngẫu nhiên tốt). Yêu cầu ở đây là các số được lựa chọn cần đồng thời ngẫu nhiên và không dự đoán được. Đây là các yêu cầu khác nhau: một số có thể được lựa chọn ngẫu nhiên (không có kiểu mẫu trong kết quả) nhưng nếu có thể dự đoán được dù chỉ một phần thì an ninh của thuật toán cũng không được đảm bảo. Một ví dụ là bảng các số ngẫu nhiên do tập đoàn Rand xuất bản vào những năm 1950 có thể rất thực sự ngẫu nhiên nhưng kẻ tấn công cũng có bảng này. Nếu kẻ tấn công đoán được một nửa chữ số của p hay q thì chúng có thể dễ dàng tìm ra nửa còn lại (theo nghiên cứu của Donald Coppersmith vào năm 1997)
Một điểm nữa cần nhấn mạnh là khóa bí mật d phải đủ lớn. Năm 1990, Wiener chỉ ra rằng nếu giá trị của p nằm trong khoảng q và 2q (khá phổ biến) và d < n1/4/3 thì có thể tìm ra được d từ n và e.
Mặc dù e đã từng có giá trị là 3 nhưng hiện nay các số mũ nhỏ không còn được sử dụng do có thể tạo nên những lỗ hổng (đã đề cập ở phần chuyển đổi văn bản rõ). Giá trị thường dùng hiện nay là 65537 vì được xem là đủ lớn và cũng không quá lớn ảnh hưởng tới việc thực hiện hàm mũ.
3.3.3.2 Tốc độ thực hiện RSA
RSA có tốc độ thực hiện chậm hơn đáng kể so với DES và các thuật toán mã hóa đối xứng khác. Trên thực tế, Bob sử dụng một thuật toán mã hóa đối xứng nào
đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để giải mã (thông thường khóa ngắn hơn nhiều so với văn bản).
Phương thức này cũng tạo ra những vấn đề an ninh mới. Một ví dụ là cần phải tạo ra khóa đối xứng thật sự ngẫu nhiên. Nếu không, kẻ tấn công (thường ký hiệu là Eve) sẽ bỏ qua RSA và tập trung vào việc đoán khóa đối xứng.
3.3.3.3 Phân phối khóa
Cũng giống như các thuật toán mã hóa khác, cách thức phân phối khóa công khai là một trong những yếu tố quyết định đối với độ an toàn của RSA. Quá trình phân phối khóa cần chống lại được tấn công đứng giữa (man-in-the-middle attack). Giả sử Eve có thể gửi cho Bob một khóa bất kỳ và khiến Bob tin rằng đó là khóa (công khai) của Alice. Đồng thời Eve có khả năng đọc được thông tin trao đổi giữa Bob và Alice. Khi đó, Eve sẽ gửi cho Bob khóa công khai của chính mình (mà Bob nghĩ rằng đó là khóa của Alice). Sau đó, Eve đọc tất cả văn bản mã hóa do Bob gửi, giải mã với khóa bí mật của mình, giữ 1 bản copy đồng thời mã hóa bằng khóa công khai của Alice và gửi cho Alice. Về nguyên tắc, cả Bob và Alice đều không phát hiện ra sự can thiệp của người thứ ba. Các phương pháp chống lại dạng tấn công này thường dựa trên các chứng thực khóa công khai (digital certificate) hoặc các thành phần của hạ tầng khóa công khai (public key infrastructure - PKI).
Kết luận chƣơng 3
Tác giả đã xây dựng được chương trình thử nghiệm ứng dụng hệ mật mã RSA thực hiện các công việc: mã hóa – giải mã, ký – xác thực chữ ký. Qua quá trình thử nghiệm, tác giả đã nêu lên ưu nhược điểm của chương trình thử nghiệm, do đó tác giả cũng đánh giá thử nghiêm có thể áp dụng vào thực tiễn ở mức yêu cầu đơn giản như mã hóa file văn bản, tạo chữ ký lên file văn bản.
PHẦN III: KẾT LUẬN
Luận văn nghiên cứu về hệ mật mã khóa công khai, trong đó hệ mã RSA được tập trung tìm hiểu, từ đó xây dựng chương trình “Hệ mã RSA – Ứng dụng trong chữ ký điện tử” để tạo ra chữ ký điện tử, xác định được chủ nhân của tài liệu điện tử cũng như đảm bảo sự toàn vẹn của nội dung tài liệu.
Luận văn đạt đƣợc một số kết quả:
Tìm hiểu về mật mã, mật mã khóa bí mật và hệ mật mã khóa công khai. Trình bày chi tiết các thuật toán mã hoá, giải mã của hệ mật mã khoá công khai RSA và một số phương pháp tấn công hệ mã RSA
Nghiên cứu về hàm băm và trình bày hai thuật toán băm được dùng phổ biến là MD5 và SHA1. Phân loại các lược đồ chữ ký số, trình bày chi tiết và nêu các ví dụ minh họa lược đồ chữ ký như: RSA, ELGamal, DSA.
Xây dựng chương trình thử nghiệm “Hệ mã RSA – ứng dụng trong chữ ký điện tử” trong đó làm rõ các quá trình như: tạo khóa, mã hóa – giải mã, ký – xác thực chữ ký.
Chương trình ứng dụng thực hiện tốt các thuật toán RSA nhưng chỉ dùng lại ở ứng dụng trên các máy riêng lẻ chưa được ứng dụng trên một hệ thống mạng.
Giao diện thiết kế còn đơn giản, chương trình sinh khóa ngẫu nhiên dựa trên hệ mã RSA (1024 bit), mô hình còn nhỏ, tính an toàn còn hạn chế.
Mô hình tìm hiểu còn nhỏ, hệ thống chưa được cập nhật theo kịp với xu hướng.
Hƣớng phát triển
Với một số kết quả đạt được như trên, tác giả sẽ tiếp tục nghiên cứu để xây dựng được một cổng thông tin để trao đổi thông tin giữa Sở giáo dục và các đơn vị trường phổ thông có ứng dụng hệ mật mã công khai RSA trên mạng.
ứng dụng demo vào công việc hiện tại, thử nghiệm trên các mô hình giao tiếp nhỏ để ghi nhận và thu thập thêm thông tin cũng như đánh giá chi tiết hơn.
MÃ NGUỒN CHƯƠNG TRÌNH THỬ NGHIỆM
private void btnTaokhoa_Click(object sender, EventArgs e) { rsaRecipientCompleteKeyString = rsaRecipient.ToXmlString(true); rsaRecipientPublicKeyString = rsaRecipient.ToXmlString(false); txtprivate.Text = rsaRecipientCompleteKeyString; txtpublic.Text = rsaRecipientPublicKeyString; rsaRecipient.Clear(); }
private void btnmahoa_Click(object sender, EventArgs e) {
string secret = txtnoidung.Text; byte[] btSecret;
byte[] btEncryptedSecret;
UTF8Encoding AE = new UTF8Encoding(); btSecret = Encoding.UTF8.GetBytes(secret); //btSecret = Encoding.ASCII.GetBytes(secret);
btEncryptedSecret = cRSAWrap.EncryptBuffer(txtpublic.Text, btSecret); string s = "";
for (int i = 0; i < btEncryptedSecret.Length; i++) {
s += btEncryptedSecret[i].ToString() + " "; }
txtbanma.Text = s.Trim(); }
private void btngiaima_Click(object sender, EventArgs e) {
{
string secret = txtbanma.Text.Trim(); int intLength = secret.Length;
byte[] btSecret = new byte[256]; byte[] btDecryptedSecret;
UTF8Encoding AE = new UTF8Encoding(); int i = 0;
foreach (string word in secret.Split(' ')) {
btSecret[i++] = Convert.ToByte(word); }
btDecryptedSecret = cRSAWrap.DecryptBuffer(txtprivate.Text , btSecret); string s = "";
for (i = 0; i < btDecryptedSecret.Length; i++) s += ((char)btDecryptedSecret[i]).ToString(); txtgiaima.Text = s;
}
catch (Exception ex) {
MessageBox.Show("Quá trình giải mã không thực hiện được\nCó sự thay đổi về tài liệu hoặc khóa", "Thông báo", MessageBoxButtons.OK,
MessageBoxIcon.Hand); }
}
private void btnsign_Click(object sender, EventArgs e) {
this.Refresh();
if (txtduongdan1.Text != String.Empty) {
// Đối với người gửi byte[] btSentHash;
byte[] btEncryptedSentHash; string payload;
payload = txtnoidung1.Text;
byte[] btpayload = Encoding.ASCII.GetBytes(payload); // Tạo ra giá trị băm từ thông điệp dữ liệu ban đầu SHA1Managed SHhash1 = new SHA1Managed();
btSentHash = SHhash1.ComputeHash(btpayload, 0, btpayload.Length); txtgtbam.AppendText(System.Convert.ToBase64String(btSentHash)); btEncryptedSentHash = cRSAWrap.EncryptBuffer(txtpublic1.Text,
btSentHash); string s = "";
for (int i = 0; i < btEncryptedSentHash.Length; i++) {
s += btEncryptedSentHash[i].ToString() + " "; }
txtchuky.AppendText(s);
txtnoidung1.AppendText("#" + s);
DialogResult a = MessageBox.Show("Bạn có muốn lưu lại File không?", " Thông báo ", MessageBoxButtons.YesNo);
if (Convert.ToString(a) == "Yes") { saveFile1(); } } }
private void btnver_Click(object sender, EventArgs e) {
int j = 0; try { rsaRecipientCompleteKeyString = txtprivate1.Text; rsaRecipientPublicKeyString = txtpublic1.Text; txtnoidung1.Text = txtnoidung1.Text.TrimEnd(' '); bool bCorrupt = false;
byte[] btHash2;
byte[] btDecryptedHash; string payload;
payload = txtnoidung1.Text;
string[] arr = txtnoidung1.Text.Split('#');
MessageBox.Show("Nội dung văn bản :" + arr[0]); MessageBox.Show("Chữ ký :" + arr[1]);
byte[] btpayload = Encoding.ASCII.GetBytes(arr[0]); SHA1Managed SHhash2 = new SHA1Managed(); btHash2 = SHhash2.ComputeHash(btpayload); int intLength = arr[1].Length;
byte[] result = new byte[128]; arr[1].Trim();
int i = 0; int dem = 0;
string[] tam = arr[1].Split(' '); for (j = 0; j < tam.Length; j++) {
result[j] = Convert.ToByte(tam[j]); }
// So sánh hai giá trị băm btHash2 và btDecryptedHash để xác thực thông điệp dữ liệu if (Convert.ToBase64String(btHash2) != Convert.ToBase64String(btDecryptedHash)) { bCorrupt = true; } if (bCorrupt == true) {
MessageBox.Show("Dữ liệu đã bị thay đổi"); }
else {
MessageBox.Show("Dữ liệu không bị thay đổi"); }
}
catch (Exception er) {
MessageBox.Show("Khóa không hợp lệ, chữ ký không đúng với khóa"); }
DANH MỤC TÀI LIỆU THAM KHẢO
Tiếng Việt
[1] Nguyễn Đình Thúc, Bùi Doãn Khanh “Giáo trình mã hóa thông tin – Lý thuyết và ứng dụng”, Nhà xuất bản lao động xã hội, 2011.
[2] TS Trần Văn Dũng “Giáo trình an toàn và bảo mật thông tin”, Đại học giao thông vận tải, 2007.
[3] Nguyễn Đình Thúc, Bùi Doãn Khanh “Mã hóa – Mật mã ” Nhà xuất bản lao động xã hội, 2006.
[4] PGS TS Thái Hồng Nhị, TS Phạm Minh Việt, “An toàn thông tin – Mạng máy tính, truyền tin số và truyền dữ liệu”, Nhà xuất bản Khoa học và Kỹ thuật, 2004.
[5] TS Dương Anh Đức, Trần Minh Triết, “Giáo trình Mã hóa và Ứng dụng”, Đại học quốc gia TP.HCM, 2009.
[6] Nguyễn Ngọc Bình Phương, Thái Thanh Phong, “Các giải pháp lập trình C#”, Nhà xuất bản giao thông vận tải, 2011.
[7] Dương Quang Thiện, “C# và .NET Framework ”, toàn tập. Nhà xuất bản tổng hợp TP.HCM, 2005.
Tiếng Anh
[8] WHITFIELD DIFFIE AND MARTIN E. HELLMAN, “New Directions in Cryptography”, Invited Paper, November 1976.
[9] A.MENEZES, P.VAN OORSHOOT, S.VANSTONE, “Handbook of Applied Cryptography”, CRC Press, 2007.
http://www.cacr.math.uwaterloo.ca/hac/
[10]Rolf Oppliger “Contemporary Cryptography”,ARTECH HOUSE, 2012. [12] Neal R. Wagner, “The Laws of Cryptography:Rabin's Version of RSA”,
http://www14.in.tum.de/konferenzen/Jass05/
[13] Song Y. Yan, “Cryptanalytic Attacks on RSA” Massachusetts Institute of
Technology, USA, 2007.
[14] Dan Boneh, “Twenty Years of Attacks on the RSA Cryptosystem”, Report, Stanford University, 2007.
[15] R.L. Rivest, A. Shamir, and L. Adleman, “A Method for Obtaining Digital Signatures and Public-Key Cryptosystems”.
http://people.csail.mit.edu/rivest/Rsapaper.pdf
[16] Raymond G. Kammer, “Federal Information Processing Standards Publication”, U.S. DEPARTMENT OF COMMERCE,2000 January 27. [17] ALAN G.KONHEIM, DAVID KAHN “Computer Security and Cryptography”, Long Island, New York, 2006.
[18] Steve Burnett and Stephen Paine, “RSA Security’s Official Guide to Cryptography”, Copyright © 2001 by The McGraw-Hill Companies. [19] Arto Saloma, “Public-Key Cryptography”, Springer. Turku, September 1996. [20] JOHN TALBOT, DOMINIC WELSH, “Complexity and Cryptography”, Cambridge University Press, 2006.
[21] Adi Shamir and EranTrome, “ Factoring large Numbers with the twirl Device”, Report, The Wiezman Institute Relation Locator, Isreal, 2012.