GIAO DIỆN MỘT SỐ CHỨC NĂNG CHÍNH CỦA CHƢƠNG TRÌN H.

Một phần của tài liệu Nghiên cứu giải pháp xây dựng và phát triển chữ ký số dùng trong các cơ quan tỉnh Thái Nguyên (Trang 48 - 69)

* Màn hình giao diện gồm 2 menu:

- Menu tạo khóa Tạo khóa gồm: Số nguyên tố 1(Chọn số nguyên tố

thứ nhất), Số nguyên tố 2 (Chọn số ngun tố thứ hai), Khóa cơng khai (tạo khóa cơng khai), Khóa bí mật (tạo khóa bí mật), Thêm khóa cơng khai, Thêm khóa bí mật.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn Giao điện màn hình với menu Tạo khóa

- Menu Tác vụ bao gồm: Kí tên (ký và mã hóa file đƣợc chọn), Gửi

tệp (Gửi file đã đƣợc ký và mã hóa), Giải khóa (Giả mã và xác thực chữ ký

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn Giao diện màn hình với menu Tác vụ

*Các chức năng

* Tạo khóa:

- Chọn file chứa số nguyên tố:

Ngƣời sử dụng chọn lần lƣợt Số nguyên tố 1, Số nguyên tố 2 để chọn file chứa số nguyên tố

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn Giao diện màn hình chọn số nguyên tố

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Sau khi chọn 2 số nguyên tố, ngƣời sử dụng chọn Khóa cơng khai và

Khóa bí mật để tạo khóa cơng khai và khóa bí mật, đặt tên cho 2 cặp khóa

này, chƣơng trình mặc định lƣu khóa dƣới dạng file txt . Ngƣời sử dụng cơng bố khóa cơng khai và lƣu giữ khóa bí mật vừa tạo đƣợc.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn Giao diện Màn hình tạo khóa cơng khai, khóa bí mật

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

*Tạo chữ ký cho file tài liệu:

Ngƣời sử dụng chọn khóa bí mật của mình để thực hiện ký và chọn khóa cơng khai của ngƣời nhận để thực hiện mã hóa, sau đó chọn Kí tên, kết quả thu đƣợc file dữ liệu đã đƣợc ký và mã hóa.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

*Gửi văn bản (Gửi tệp):

Thực hiện gửi văn bản bằng cách: file dữ liệu đã đƣợc ký và mã hóa có tên là filesing.sig trong thƣ mục ...\pc2\bin\debug, chọn send, chƣơng trình sẽ mặc gửi đến địa chỉ đã đƣợc mặc định trƣớc.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

*Gải mã (Giải khóa): Tiến hành giải mã và xác thực chữ ký số

Ngƣời sử dụng chọn khóa cơng khai của ngƣời gửi để xác minh chữ ký và chọn khóa bí mật của mình để giải mã file dữ liệu nhận đƣợc, chọn Giải khóa, chọn file dữ liệu cần giải mã và xác minh chữ ký, chƣơng trình sẽ

thông báo kết quả sau khi thực hiện.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

KẾT LUẬN

Ngày nay sự phát triển không ngừng của công nghệ số dẫn đến việc giao dịch điện tử ngày càng trở nên phổ biến. Chữ ký số đƣợc sử dụng để đảm bảo tính pháp lý của các tài liệu trong mơi trƣờng điện tử, làm cho nó cũng có giá trị nhƣ chữ ký trên các giấy tờ, văn bản. Trong tƣơng lai chữ ký số còn đƣợc sử dụng với các ứng dụng liên quan tới chính phủ điện tử, để có thể làm việc giữa các cơ quan nhà nƣớc thơng qua mạng máy tính. Đối với luận văn này, đã có những đóng góp khiêm tốn vào q trình sử dụng chữ ký số của cơ quan đơn vị.

Kết quả đạt đƣợc của luận văn (adsbygoogle = window.adsbygoogle || []).push({});

Luận văn đã đề cập một cách hệ thống các kiến thức cơ bản nhƣ các khái niệm về mật mã với khóa cơng khai, đại diện là hệ mật mã RSA và hệ mật mã Elgamal. Ứng dụng 2 hệ mã này trong việc xây dựng lƣợc đồ chữ ký số, trong đó lƣợc đồ chữ ký RSA đƣợc lựa chọn trong cài đặt ứng dụng vì có nhiều ƣu điểm và đang đƣợc ứng dụng rộng rãi hiện nay. Khái niệm về hàm băm và thuật toán băm MD5 cũng đã đƣợc đề cập và đi sâu phân tích rõ thuật tốn này trong việc ứng dụng để tạo ra chữ ký số.

Trên cơ sở tìm hiểu và tập hợp một cách có hệ thống cơ sở lý thuyết liên quan, từ đó làm cơ sở cho việc xây dựng chƣơng trình ứng dụng mang tính chất thử nghiệm, nhằm minh họa cho việc ký và xác thực chữ ký số ứng dụng trong trao đổi văn bản tại các cơ quan hành chính.

Chƣơng trình phần mền đã thực hiện đƣợc các chức năng: tạo cặp khố cơng khai và khóa bí mật, mã hóa và ký vào file dữ liệu, gửi file dữ liệu đến một địa chỉ khác trong mạng, internet…, chƣơng trình cũng cho phép xác thực chữ ký trong file dữ liệu nhận đƣợc thông qua ngƣời gửi đã biết trƣớc.

Về cơ bản, các hệ thống ứng dụng đã đƣợc thử nghiệm và cho thấy khả năng có thể sử dụng đáp dứng nhu cầu thực tế của các cá nhân, cơ quan, đơn vị trong việc trao đổi văn bản an tồn với giải pháp mã hóa và ký.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

Hƣớng phát triển

Do điều kiện khách quan, nên việc thử nghiệm trong thực tế còn hạn chế, việc thử nghiệm chƣa nhiều, chƣa thử nghiệm đƣợc độ an toàn của văn bản trƣớc các tấn cơng có thể trong q trình trao đổi. Vì vậy, cần tiếp tục

nghiên cứu, thử nghiệm các tình huống có thể xảy ra, nhất là độ an tồn của thơng tin trƣớc các tấn cơng trong quá trình trao đổi.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

DANH MỤC TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Phan Đình Diệu, Lý thuyết mật mã và an tồn thơng tin, Nxb Đại học Quốc gia Hà Nội, 2002.

[2] Phạm Huy Điển, Hà Huy Khoái, Mã hố thơng tin – cơ sở tốn học và

ứng dụng, Nxb Đại học Quốc gia Hà Nội, 2004.

[3] Bùi Dỗn Khanh, Nguyễn Đình Thúc (2004), mã hóa thơng tin Lý thuyết

và ứng dụng, NXB Lao động.

[4] Thái Hồng Nhị, Phạm Minh Việt, An tồn thơng tin mạng máy tính, truyền

tin số và truyền số liệu, Nxb Khoa học và Kỹ thuật, 2004.

[5] Hồ Thuần (2000), Giáo trình Lý thuyết mật mã và an toàn dữ liệu, Trƣờng Đại học Bách Khoa Hà Nội.

[6] Ngọc Anh Thƣ, Nguyễn Tiến, Nguyễn Văn Hồi (2002), Giáo trình Thuật

tốn – Lý thuyết và bài tập, Nxb Thống kê.

Một số thông tin trên Website

[7] http:// www.ietf.org/rfc/rfc1321 [8] http:// www.md5.net

[9] http:// www.chukyso.net/

Tiếng Anh

[10] R. Rivest, A, sharmir, L. Adleman, Amethod for obtaining digital signatres and public-key cryptosystems, Communication of theo ACM 21 (1978), 120 – 126. [11] E. Biham, A. Shamir, Differential Cryptanalysis of the Data Encryption Standard, Springer- Verlag, 1993.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

PHỤ LỤC

Mã nguồn một số mơđun trong chƣơng trình (adsbygoogle = window.adsbygoogle || []).push({});

Chọn số nguyên tố

OpenFileDialog openFileDialog1;

openFileDialog1 = new OpenFileDialog(); openFileDialog1.Title = "Chose File Image"; openFileDialog1.Filter = "All files (*.*)|*.*";

if (openFileDialog1.ShowDialog() == DialogResult.OK) {

string str = openFileDialog1.FileName; byte[] va = ObjRWFile.ReadBinaryData(str); string st = "";

for (int i = 0; i < va.Length; ++i) st += ((char)va[i]).ToString(); this.primes1.Text = st;

// thông báo nội dung thực hiện

Program.moi.contentMessage.Text += ("Load content :

Primes 1 load from '" + str + "' to complete.\r\n");

}

Tạo public key

if ((this.primes1.Text != "") && (this.primes2.Text != "")) {

ObjRSA moo = new ObjRSA(this.primes1.Text,

this.primes2.Text); //moo.ToString();

SaveFileDialog save = new SaveFileDialog(); save.Title = "Path save file public key";

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

save.Filter = "All files (*.*)|*.*";

if (save.ShowDialog() == DialogResult.OK) { string str = save.FileName; try { ObjRWFile.WritePrivateKey(moo, str); MessageBox.Show("Save Complete"); Program.moi.contentMessage.Text += ("Save file : Private key save complete from '" + str + "'

.\r\n");

}

catch (Exception) { MessageBox.Show("Error"); }

} }

else Program.moi.contentMessage.Text += ("Create key :

Please load primes key .\r\n");

Gửi dữ liệu qua mạng

class ObjServer {

private const int BUFFER_SIZE = 1024*4; private const int PORT_NUMBER = 9999;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

// khoi tao 1 server dong nghia voi viec khoi tao khong dut cac sever cho (adsbygoogle = window.adsbygoogle || []).push({});

doi client

public ObjServer() {

Thread t1 = new Thread(Run);

t1.Start(new ThamSo() { Buffer_size = BUFFER_SIZE});

}

public void Run(object obj) { try { ThamSo ts = (ThamSo)obj;

IPAddress address = IPAddress.Parse(Program .moi .richTextBox2.Text);

TcpListener listener = new TcpListener(address, PORT_NUMBER);

// 1. listen

listener.Start();

Socket socket = listener.AcceptSocket(); // 2. receive

byte[] data = new byte[ts.Buffer_size]; socket.Receive(data);

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

// lay 100 byte dau tien xem co phai lenh thay doi buffer

khong

byte[] code = new byte["ChangeLengthBuffer:".Length]; for (int i = 0; i < "ChangeLengthBuffer:".Length; ++i) code[i] = data[i];

string lenh = encoding.GetString(code); byte []dataBuffer;

string newLength="1024";

if (lenh == "ChangeLengthBuffer:") {

dataBuffer = new byte[data.Length - code.Length];

for (int i = "ChangeLengthBuffer:".Length, j = 0; i < data.Length; ++i, ++j) dataBuffer[j] = data[i]; newLength = encoding.GetString(dataBuffer); } socket.Close(); listener.Stop(); if (lenh == "ChangeLengthBuffer:") { int dai=Convert.ToInt32(newLength); Program.moi.contentMessage.Text = " Processing: -----------------

Getting a new file-----------------------\r\n";

byte[] fullData = new byte[dai];

Program.moi.contentMessage.Text = " Processing: File getting

have size " + fullData.Length.ToString() + "byte\r\n";

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

bool die = false; while (true) {

// MessageBox.Show("nhan lan " + doan.ToString());

try { (adsbygoogle = window.adsbygoogle || []).push({});

++doan;

Program.moi.contentMessage.Text += " Processing:

Received part "+doan .ToString () +" with "+BUFFER_SIZE.ToString ()+ "byte\r\n";

// address = IPAddress.Parse("127.0.0.2"); address = IPAddress.Parse(Program .moi .richTextBox2.Text);

listener = new TcpListener(address, PORT_NUMBER); listener.Start();

socket = listener.AcceptSocket();

if ((dai - (doan - 1) * BUFFER_SIZE) > BUFFER_SIZE) data = new byte[BUFFER_SIZE];

else data = new byte[dai - (doan - 1) * BUFFER_SIZE]; socket.Receive(data);

socket.Close(); listener.Stop();

for (int i = 0; i < data.Length; ++i)

fullData[(doan - 1) * BUFFER_SIZE + i] = data[i]; if (doan * BUFFER_SIZE >= dai) break;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

catch (Exception e) { e.ToString();

Program.moi.contentMessage.Text += " Processing: Part " + doan.ToString()

+ " error please try again\r\n"; die = true; } if (die) break;

}

if (!die) {

Program.moi.contentMessage.Text += " Processing: Received

"+ doan.ToString ()+ " part \r\n";

Program.moi.contentMessage.Text += " Processing: Received

one file :" + fullData.Length.ToString() + "Byte \r\n";

// fullData.ToString(); try { Obj.ObjRWFile.Write(Program.moi.richTextBox8.Text + "\\", fullData);

Program.moi.contentMessage.Text += " Processing: Save

one file :" + fullData.Length.ToString() + "Byte from '" +

Program.moi.richTextBox8.Text + "'\r\n";

}

catch (Exception es) { es.ToString();

Program.moi.contentMessage.Text += " Processing: Save error please try

again\r\n"; }

} (adsbygoogle = window.adsbygoogle || []).push({});

Thread t2 = new Thread(Run);

t2.Start(new ThamSo() { Buffer_size =

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

}

// tiep tuc chay mot server khac lang nghe else

{

Thread t2 = new Thread(Run);

t2.Start(new ThamSo() { Buffer_size =

Convert.ToInt32(BUFFER_SIZE) });

}

}

catch (Exception ex) { ex.ToString();} } } class ObjClient {

private const int BUFFER_SIZE = 1024*4; private const int PORT_NUMBER = 9998;

static ASCIIEncoding encoding = new ASCIIEncoding(); byte[] data;

public ObjClient (string str) {

try {

TcpClient client = new TcpClient(); // 1. connect

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

client.Connect(Program .moi .richTextBox3.Text, PORT_NUMBER);

// client.Connect("127.0.0.1", PORT_NUMBER); Stream stream = client.GetStream(); // 2. send

byte[] data = encoding.GetBytes(str); stream.Write(data, 0, data.Length); // 3. receive

data = new byte[BUFFER_SIZE];

stream.Read(data, 0, BUFFER_SIZE); // 4. Close stream.Close(); client.Close(); }

catch (Exception ex){ex.ToString(); } }

public ObjClient(byte[] da) {

data = da;

ThreadStart ts1 = new ThreadStart(Run); Thread tA = new Thread(ts1);

tA.Start();

}

public void Run() { (adsbygoogle = window.adsbygoogle || []).push({});

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

{

int dai = data.Length; int doan = 0;

Program.moi.contentMessage.Text += " Processing: Sending one

file :" + data.Length.ToString() + "Byte \r\n";

bool die = false; while (true) {

try {

++doan;

//MessageBox.Show("gui lan " + (doan *

BUFFER_SIZE).ToString());

Program.moi.contentMessage.Text += " Processing: Sending

part :" +doan.ToString ()+" with "+ BUFFER_SIZE.ToString()+ " byte \r\n";

TcpClient client = new TcpClient();

client.Connect(Program .moi .richTextBox3 .Text , PORT_NUMBER);

// client.Connect("127.0.0.1", PORT_NUMBER); Stream stream = client.GetStream();

if (doan * BUFFER_SIZE < dai)

stream.Write(data, (doan - 1) * BUFFER_SIZE, BUFFER_SIZE);

else stream.Write(data, (doan - 1) * BUFFER_SIZE, dai-(doan - 1) * BUFFER_SIZE);

stream.Close(); client.Close();

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

}

catch (Exception et) { et.ToString();

Program.moi.contentMessage.Text += " Processing: Send file have error ,

please try again....\r\n"; die = true; }

if (die) break; }

Program.moi.contentMessage.Text += " Processing: Sending all

part :" + doan.ToString() + " path with " + (doan*BUFFER_SIZE).ToString()

+ " byte \r\n"; }

catch (Exception ex) { ex.ToString(); } }

} (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Nghiên cứu giải pháp xây dựng và phát triển chữ ký số dùng trong các cơ quan tỉnh Thái Nguyên (Trang 48 - 69)