0
Tải bản đầy đủ (.pdf) (76 trang)

Chức năng trình ký

Một phần của tài liệu SƠ ĐỒ ĐỊNH DANH MẬT VÀ CHỮ KÝ SỐ ỨNG DỤNG TRONG THƯƠNG MẠI ĐIỆN TỬ (Trang 64 -76 )

4. Tổng quan luận văn

3.3.2.3. Chức năng trình ký

Khi chọn chức năng trình ký hệ thống chuyển sang giao diện TA cấp chứng chỉ

Hình 3.3: Giao diện chương trình mô phỏng cơ quan ủy thác xác nhận dấu cho Andy

Thủ tục cấp chứng chỉ cho Andy được thực hiện như sau:

- TA xác lập thông tin về danh tính của Andy như họ và tên…dưới dạng một dãy ký tự mà ta ký hiệu IA hay ID(A).

- Andy chọn số bí mật ngẫu nhiên , tính và chuyển số v cho TA.

- TA tạo chữ ký s = sigTA(IA, v) và cấp cho Andy chứng chỉ C(A) = (ID(A), v, s). Vậy chứng chỉ mà TA cấp cho Andy gồm (IA, v) và chữ ký của TA trên thông tin (Ia, v).

/*Chương trình xác nhận dấu cho Andy*/

private void button2_Click(object sender, EventArgs e)

{

ca.publicKey = dsa.ToXmlString(false);

byte []b = Encoding.ASCII.GetBytes(ca.id +

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 ca.s = Convert.ToBase64String(dsa.SignData(b)); txtSignature.Text = ca.s; } 3.3.2.4. Chức năng gửi

Andy gửi cho Tommy các thông tin chứng chỉ C(A) và để xác nhận danh tính (Hình 3.4).

Hình 3.4: Giao diện chương trình Andy thực hiện gửi thông tin cho Tommy /*Chương trình gửi thông tin cho Tommy*/

private void button3_Click(object sender, EventArgs e)

{

txtId2.Text = txtId.Text; txtV2.Text = txtV.Text;

txtSign2.Text = txtSign.Text; }

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

3.3.2.5. Chức năng Verify

Tommy kiểm thử chữ ký của TA trong chứng chỉ C(A) bởi hệ thức

verTA(ID(Andy),v, s) = true. Kiểm thử xong Tommy chọn một số ngẫu nhiên r và gửi r cho Andy. Andy tính y = k+ar mod q và gửi y cho Tommy. Tommy thử điều kiện và nếu điều kiện đó được thỏa mãn thì xác nhận danh tính của Andy.(Hình 3.5)

Hình 3.5: Giao diện chương trình thực hiện xác nhận thông tin của Andy /*Chương trình xác nhận thông tin của Andy*/

private void button4_Click(object sender, EventArgs e)

{ try { proverify.Value = 0; progressBar1.Value = 0; //kiem tra chư ký btcheckSign.Text = "Checking"; bool ok = false; dsa.FromXmlString(publicKey); byte[] b =

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 byte[] sg = Convert.FromBase64String(txtSign2.Text); ok = dsa.VerifyData(b, sg); progressBar1.Value = 0; while (progressBar1.Maximum > progressBar1.Value) { progressBar1.Value++; Thread.Sleep(10); } if (ok) btcheckSign.Text = "OK"; else { btcheckSign.Text = "Wrong"; return; } this.Refresh();

sobimat = Convert.ToInt32(txta.Text);

//tinh y

double tt = Math.Pow(2,t);

int ttt = Convert.ToInt32(tt);

//MessageBox.Show(tt.ToString() + " : " +

ttt.ToString());

r = rand.Next(1, Convert.ToInt32(Math.Pow(2,

t))); txtR.Text = r.ToString(); y = k + (sobimat * r) % q; txtY2.Text = y.ToString(); txtY.Text = y.ToString(); // kiem tra proverify.Value = 0; btVerify.Text = "Verifying";

while (proverify.Maximum > proverify.Value)

{

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 Thread.Sleep(10); } long t1, t2; t1 = gama % p; t2 = (mod(ap, y, p) * mod(v, r, p)) % p; //MessageBox.Show(ap.ToString() + " : " + y.ToString() + " : " + // MessageBox.Show(gama.ToString() + " : " + t1.ToString() + " : " + t2.ToString());

if (gama % p == (mod(ap, y, p) * mod(v, r,

p)) % p)

btVerify.Text = "OK";

else

btVerify.Text = "Not OK";

this.Refresh();

}

catch (Exception ex)

{

MessageBox.Show("Lỗi môi trường!\r\n" +

ex.ToString()); } }

3.3.3. Thử nghiệm

Giả sử p=88667, q=1031, t=10. Phần tử =70322 có bậc q thuộc Zp. Giả sử số mũ mật của Andy a=755. Khi đó:

v mod p

03221031-744 mod 88667 = 13136

Giả sử Andy chọn k=543, sau đó cô tính: mod p

= 70322543 mod 88667 = 84109

Và gửi cho Tommy. Giả thiết Tommy đưa ra yêu cầu r=1000. Khi đó Andy tính:

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

y=k+ar mod q

=543+755 1000 mod 1031 =851 Và gửi y cho Tommy. Sau đó xác minh xem

84109= 70322851131361000 (mod 88667)

Nếu đúng, Tommy sẽ tin rằng anh ta đang liên lạc với Andy

3.4. Chƣơng trình sơ đồ chữ ký Schnorr

Sơ đồ chữ ký Schnorr sử dụng một hàm băm h một phía dựa trên bài toán khó tính logarit rời rạc và thay cho việc cấp chứng chỉ C(A) cho người tham gia A, TA sẽ cấp cho A danh tính ID(A) cùng một số u được tính bởi công thức: u = (h(ID(A))-1

)a modn

(a là một số mũ bí mật của TA). Số u đước A giữ riêng cho mình.

3.4.1. Thuật toán của chƣơng trình

Bước 1: Chọn số nguyên tố lớn p 512 bit, một số nguyên tố q 160bit chia hết cho p-1.

Bước 2: Chọn a Zp

Bước 3: Chọn giá trị p,q,α và v còn a mật.

Bước 4: Chọn một hàm băm h: Lấy và A = để ký thông báo x.

Bước 5: Chọn số ngẫu nhiên k mật Zp Bước 6: Tính Sigk(x,k) = (y,k)

Trong đó:

= akmodq

Và y = k + ah(x,y)modq Với x, ZP và y Zq, định nghĩa Bước 6: ver(x,y, ) = true  ayvh(x,y)(modp)

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

3.4.2. Giao diện chƣơng trình của sơ đồ chữ ký Schnorr

Khi người dùng chọn Menu sơ đồ chữ ký Schnorr hệ thống sẽ chuyển đến giao diện mô phỏng sơ đồ chữ ký Schnorr

Hình 3.6: Giao diện chương trình sơ đồ chữ ký Schnorr

3.4.2.1. Chức năng tạo mới

Mỗi người khi gửi thông tin và cần xác nhận danh tính cần tạo cho mình cặp khóa K = (K’, K”) bằng cách chọn một số nguyên tố lớn p, một số nguyên tố q là ước số của p-1, phần tử và một số a. K’ = a là khóa bí mật, và công bố công khai K” = (p, q, , v ) trong đó v =

/*Chương trình tạo mới p , q, anpha*/

private void button1_Click(object sender, EventArgs e)

{

try

{

sobimat = Convert.ToInt64(txta.Text);

}

catch (Exception ere)

{

MessageBox.Show("Nhập lại số bí mật 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 } q = prime[rand.Next(prime.Length - 1)]; // lay so q while (true) { int t = rand.Next(10000); if (kiemTraNguyenTo(t * q + 1)) { p = t * q + 1; break; } } txtP.Text = p.ToString(); txtQ.Text = q.ToString(); ap = findap();//rand.Next(); txtanpha.Text = ap.ToString(); docso(); v = mod(ap, q - sobimat, p); txtV.Text = v.ToString(); btkygui.Enabled = true; } 3.4.2.2. Chức năng trình ký

Chọn một hàm băm h để ký trên một thông báo, chọn thêm một số ngẫu nhiên k và Tính Sigk(x,k) = (y,k)

Trong đó:

= akmodq

Và y = k + ah(x,y)modq

34.2.3. Chức năng gử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

3.4.2.4. Chức năng Sign

Để kiểm tra xem có đúng là chữ ký của Andy trên x hay không, dùng khóa công khai K”=(p, q, , v) để tính ver(x,y, ) = true 

ayvh(x,y)(modp

Hình 3.7: Giao diện chương trình thực hiện xác nhận thông tin của sơ đồ chữ ký Schnorr

/*Chương trình kiểm tra chữ ký*/

private void btcheckSign_Click(object sender, EventArgs e)

{

progressBar1.Value = 0;

while (progressBar1.Maximum > progressBar1.Value)

{

progressBar1.Value++;

Thread.Sleep(10);

}

int ha = hash(txtM2.Text + txtGama2.Text);

long temp = (mod(ap, y, p) * mod(v, ha, p)) % p;

// MessageBox.Show(txtM2.Text + txtGama2.Text +

" : " + ha.ToString());

// MessageBox.Show(temp.ToString() + " : " +

gama.ToString() + " : " + ha.ToString());

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

btcheckSign.Text = "OK";

else

btcheckSign.Text = "NOT OK";

} 3.4.3. Thử nghiệm - Chọn p = 945799, q = 3217, anpha = 1096, v = 613544 a(mật) = 12 - k = 1096 - Chọn hàm băm ha

- Thực hiện ký Sigk(x,k) = (y,k)

- = akmodq = 439722

3.5. Kết luận chƣơng 3

Sử dụng ngôn ngữ lập trình C# xây dựng sơ đồ định danh Schnorr và sơ đồ chữ ký để xác nhận danh tính. Quan trọng hơn cả là khi sử dụng sơ đồ chữ ký

Schnorr để A xưng danh với B là A chỉ cần biết giá trị u là một giá trị được tính bởi TA ( và chỉ TA tính được giá trị đó).

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 1. Những kết quả đạt đƣợc

Luận văn đã giới thiệu tổng quát về mật mã, hệ thống mật mã và chữ ký số, các hướng tiếp cận với các sơ đồ định danh mật. Ngoài ra Luận văn còn đề cập đến một phương pháp tiếp cận là sơ đồ chữ ký Schnorr. Luận văn đã sử dụng ngôn ngữ lập trình C Sharp thiết kế chương trình để mô phỏng quá trình xác nhận danh tính trên sơ đồ định danh Schnorr và trên sơ đồ chữ ký Schnorr.

Trên cơ sở tìm hiểu các hệ mật mã và các sơ đồ định danh mật, luận văn đã tập trung vào việc chuyển sơ đồ định danh thành sơ đồ chữ ký số với ý tưởng thay thế người xác minh bằng một hàm băm công khai khi đó thông báo sẽ không bị chặt ra trước khi ký và quá trình băm được tích hợp thành thuật toán ký.

Bằng ngôn ngữ lập trình C Sharp luận văn đã tiến hành xây dựng được chương trình mô phỏng quá trình xưng danh và xác nhận danh tính của Andy với Tommy bằng sơ đồ định danh Schnorr, và xác nhận danh tính bằng sơ đồ chữ ký Schnorr có ý nghĩa trong ngăn chặn sự tấn công thông qua việc tìm kiếm các va chạm trong hàm băm.

2. Hƣớng phát triển

 Xây dựng ứng dụng các sơ đồ định danh đầy đủ

 Phát triển ứng dụng thử nghiệm thành một ứng dụng thực tế: Để rút tiền từ một máy ATM tự động, người sử dụng cần xưng danh bằng cách dùng một thẻ rút tiền cùng với số PIN (số xưng danh của mình)

 Đánh giá đồ an toàn của sơ đồ chữ ký Schnorr với các sơ đồ chữ ký RSA hay Sơ đồ chữ ký số Elgaman

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ÀI LIỆU THAM KHẢO A. Tài liệu tiếng Việt

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

[2] D.R Stinson, Mật mã - Lý thuyết và thực hành, do Nguyễn Bình dịch - Học viện kỹ thuật mật mã, 1995.

[3] Lê Mỹ Tú, Trần Duy La, Chứng thực điện tử, Học viện Kỹ thuật Mật mã, 2011.

[4] TS. Nguyễn Đại Thọ, An Toàn Mạng, Trường Đại học Công nghệ - ĐHQGHN, 2010

B. Tài liệu tiếng Anh

[5] Douglas R. Stinson. Cryptography. Theory and Practice, CRC ress, 1995.

[6] A.J. Menezes, P.C. van Oorschot, S.A. Vanstone. Handbook of Applied cryptography, CRC Press, 1997.

[7] Bruce Schneier. Applied Cryptography. Protocols, Algorithms and Source Code in C. John Wiley &Son,Inc, 1996.

[8] S. Goldwasser, M. Bellare. Lecture Notes on Cryptography. MIT Laboratory of Computer Science, 2001.

[9] J.Seberry, J. Pieprzyk. Cryptography. An introduction to Computer Security. Prentice Hall, 1989.

[10] Vitor Shoup. A computational Introduction to Number Theory and Algebra, New York University, 2003.

[11] William Stallings. Cryptography and Network Security : Principles and Practice, Fourth Edition. Prentice Hall, 2005.

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

C. Internet

[12] SSH Communications Security - http://www.ssh.com/company [13] RSA Security Inc - http://www.rsasecurity.com

[14] Factor World - http://www.crypto-world.com [15] http://williamstallings.com

Một phần của tài liệu SƠ ĐỒ ĐỊNH DANH MẬT VÀ CHỮ KÝ SỐ ỨNG DỤNG TRONG THƯƠNG MẠI ĐIỆN TỬ (Trang 64 -76 )

×