Top Banner
1 Mục lục: Lời nói đầu ………………………………………………………………….…….2 Phần 1: Mã hóa và các vấn đề liên quan ………………………………….….…3 1.1 Khái niệm mã hóa dữ liệu …………………………………………….……....3 1.2 Hàm băm ……………………………………………………………….…….4 1.2.1 Hàm băm và chữ ký…………………………………………………………4 1.2.2 MD5 ……………………………………………………………….……......6 1.3 Thuật toán mã hóa khóa công khai RSA ………………………………. ……13 1.3.1 Mô tả sơ lược ……………………………………………………………...13 1.3.2 Thuật toán RSA ………………………………………………….………...16 1.3.3 Tính bảo mật của giải thuật RSA ………………………………….……… 19 1.3.4 Các vấn đề đặt ra trong thực tế…………………………………. ………….20 Phần 2: Chữ ký điện tử và chương trình ứng dụng ………………………. ….23 2.1 Khái niệm Chữ ký điện tử …………………...………………………. ……...23 2.2 Cách thức hoạt động của chữ ký điện tử ………………... …………….…….26 2.2.1 Quá trình ký ………………………………………………………….…….28 2.2.2 Quá trình xác nhận chữ ký trên tài liệu ………………………….………...29 2.3 Chương trình ứng dụng ………………………….…………………….…….32 2.3.1 Giói thiệu chương trình ………………………………………….………...32
50

Mã hoá với chữ ký điện tử

Jul 24, 2015

Download

Documents

dinhthit39
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mã hoá với chữ ký điện tử

1

Mục lục:

Lời nói đầu ………………………………………………………………….…….2

Phần 1: Mã hóa và các vấn đề liên quan ………………………………….….…3

1.1 Khái niệm mã hóa dữ liệu …………………………………………….……....3

1.2 Hàm băm ……………………………………………………………….…….4

1.2.1 Hàm băm và chữ ký…………………………………………………………4

1.2.2 MD5 ……………………………………………………………….……......6

1.3 Thuật toán mã hóa khóa công khai RSA ……………………………….……13

1.3.1 Mô tả sơ lược ……………………………………………………………...13

1.3.2 Thuật toán RSA ………………………………………………….………...16

1.3.3 Tính bảo mật của giải thuật RSA ………………………………….………19

1.3.4 Các vấn đề đặt ra trong thực tế………………………………….………….20

Phần 2: Chữ ký điện tử và chương trình ứng dụng ……………………….….23

2.1 Khái niệm Chữ ký điện tử …………………...……………………….……...23

2.2 Cách thức hoạt động của chữ ký điện tử ………………...…………….…….26

2.2.1 Quá trình ký ………………………………………………………….…….28

2.2.2 Quá trình xác nhận chữ ký trên tài liệu ………………………….………...29

2.3 Chương trình ứng dụng ………………………….…………………….…….32

2.3.1 Giói thiệu chương trình ………………………………………….………...32

2.3.2 Một số hình ảnh của chương trình …………………………….…………..34

Kết luận …………………………………………………………………………36

Page 2: Mã hoá với chữ ký điện tử

2

Lời nói đầu:

Hiện nay, việc đảm bảo an toàn thông tin, tránh mọi nguy cơ bị thay đổi, sao chép hoặc mất mát dữ liệu trong các ứng dụng trên mạng luôn là vấn đề bức xúc, được nhiều người quan tâm. Trong bài báo này, em trình bày những vấn đề liên quan về mã hóa thông tin, thuật toán băm MD5, thuật toán mã hóa RSA và chữ ký điện tử. Từ đó, ứng dụng thuật toán MD5 và RSA để phân tích quá trình hoạt động của chữ ký điện tử. Trên cở sở đó, em đề ra giải pháp ứng dụng chữ ký điện tử trên cơ sở kết hợp giữa thuật toán băm MD5 và thuật toán mã hóa RSA trong quá trình gửi và nhận các tệp văn bản.

Trên thực tế, chữ ký điện tử (Digital Signature) đã được ứng dụng rộng rãi trong các ứng dụng trên mạng. Một trong những ứng dụng quan trọng của chữ ký điện tử là đảm bảo an toàn dữ liệu khi truyền trên mạng. Tuy nhiên, khi xây dựng một ứng dụng, các nhà phát triển thường chỉ tập trung xây dựng các chức năng của hệ thống, ít quan tâm đến vấn đề an toàn trong quá trình truyền tin.

Nhằm giải quyết vấn đề xử lý các giao dịch trao đổi văn bản trên mạng, đến nay đã có nhiều giải pháp liên quan đến vấn đề mã hóa văn bản, nhưng em chọn và đề xuất giải pháp ứng dụng chữ ký điện tử trên cơ sở kết hợp giữa thuật toán băm MD5 và thuật toán mã hóa RSA trong quá trình gửi và nhận tệp văn bản của hệ thống phần mềm quản lý.

Bảo mật thông tin là lĩnh vực rất rộng, nên đây chỉ là bước khởi đầu để em tiếp tục nghiên cứu và ứng dụng các thuật toán mã hóa trong việc xây dựng ứng dụng.

Trong bài báo này, em trình bày những n ội dung chính như sau: Đầu tiên em giới thiệu một số vấn đề liên quan trong lĩnh vực mã hóa dữ liệu. Tiếp theo em tập trung trình bày giải pháp ứng dụng chữ ký điện tử sử dụng MD5, RSA và đề ra cách thức vận dụng, triển khai trong quá trình gửi và nhận tệp văn bản.

Trong báo cáo này do em chưa có đủ thời gian nghiên cứu sâu hơn nên còn nhiều sai sót mong thày (cô) đóng góp ý kiến để chương trình của em được hoàn thiên hơn .

Thái Nguyên, tháng 11 năm 2010

Sinh viên thực hiện: Nguyễn Trọng Khiêm

Lớp : CNTT- K6B

Page 3: Mã hoá với chữ ký điện tử

3

Phần 1: MÃ HÓA VÀ CÁC VẤN ĐỀ LIÊN QUAN1.1 Khái niệm mã hóa dữ liệu

Mã hóa dữ liệu là sử dụng một phương pháp biến đổi dữ liệu từ dạng bình thường sang một dạng khác, mà một người không có thẩm quyền, không có phương tiện giải mã thì không thể đọc hiểu được. Giải mã dữ liệu là quá trình ngược lại, là sử dụng một phương pháp biến đổi dữ liệu đã được mã hóa về dạng thông tin ban đầu.

Hình 1:Quy trình mã hóa dữ liệu

Sau đây là một số khái niệm và kí hiệu liên quan về vấn đề mã hóa dữ liệu :

- Mã hóa (Encryption): Quá trình chuyển đổi dữ liệu gốc thành dữ liệu được mã hóa sao người khác không thể đọc hiểu được (kí hiệu E);

- Giải mã (Decryption): Quá trình ngược lại của mã hóa, biến đổi dữ liệu đã được mã

hóa thành dạng gốc ban đầu (kí hiệu D);

- Thông điệp (Message), bản gốc (Plaintext): Tệp dữ liệu chưa mã hóa (kí hiệu M).

- Bản mã (Ciphertext): Tệp dữ liệu đã được mã hóa (kí hiệu C).

Theo quy ước, khi mã hóa thì C = E(M) và khi giải mã thì M = D(C) = D(E(M))

Theo phương pháp truy ền thống, người ta thường dùng cùng một khóa để mã hóa và giải mã. Lúc đó, khóa phải được giữ bí mật tuyệt đối. Người ta gọi đây là hệ thống mã hóa cổ điển (hay còn gọi là mã hóa đối xứng, một khóa, khóa bí mật,...).

Một số phương pháp mã hóa theo hệ thống mã hóa cổ điển như :

- Mã dịch vòng- Mã thay thế- Mã Affine- Mã Vigenère- Mã Hill- Các hệ mã dòng

Page 4: Mã hoá với chữ ký điện tử

4

Do độ phức tạp của các hệ mã cổ điển thấp, không đảm bảo cho dữ liệu truyền đi trên internet được an toàn nên người ta nghiên cứu và phát triển một hệ thống mã hóa mới an toàn hơn và vẫn được sử dụng rộng rãi là hệ mã DES. Phương pháp mã hóa theo hệ thống mã hóa DES tới hiện nay vẫn được sử dụng rộng rãi trong các hệ thống lớn do có độ an toàn khá cao.

Phương pháp khác sử dụng khóa công khai ( còn gọi là phương pháp mã hóa bất đối xứng, hay hệ thống hai khóa) trong đó khóa để mã hóa và khóa để giải mã là khác nhau. Các khóa này tạo thành một cặp chuyển đổi ngược nhau và không khóa nào có thể suy ra được từ khóa kia. Phần tiếp theo của bài báo sẽ đề cập đến kỹ thuật mã hóa này.

1.2 Hàm băm

1.2.1 Hàm băm và chữ ký:

Để kiểm tra tính toàn vẹn của một khối data lớn, người ta sử dụng chữ ký số để đại diện cho khối data đó (giống như chữ ký trên văn bản) bằng cách dùng hàm băm: với input là một message bất kỳ, output là một chuỗi bít có chiều dài xác định trước, chuỗi bít này được gọi là message_digest.

1.2. Hashing – Hàm Băm

Hashing là một phương thức mật mã nhưng nó không phải là một thuật toán mã hoá. Đúng như vậy, hashing chỉ sử dụng một chứng chỉ số duy nhất được biết đến với tên như "hash value – giá trị hash", "hash – băm", Message Authentication Code (MAC), fingerprint – vân tay, hay một đoạn message. Dữ liệu đầu vào của bạn có thể là một file, một ổ đĩa một quá trình truyền thông tin trên mạng, hay một bức thư điện tử. Thông số hash value được sử dụng để phát hiện khi có sự thay đổi của tài nguyên. Nói cách khác, hashing sử dụng nó để phát hiện ra dữ liệu có toàn vẹn trong quá trình lưu trữ hay trong khi truyền hay không.

Ví dụ, thông số hash value được tính toán để so sánh với thông số hash value được tạo ra trước đó một tuần. Nếu hai thông số giống nhau thì dữ liệu chưa có sự thay đổi. Nếu hai thông số có sự khác nhau, thì dữ liệu đã bị thay đổi. Trong hình dưới đây thể hiện cơ bản về hash hay thông số MAC.

Thông số MAC value được tính toán bởi người gửi (sender) và người nhận (receive) với cùng một thuật toán.

Page 5: Mã hoá với chữ ký điện tử

5

Hình 1: Thể hiện cơ bản về hash hay thông số MAC

Không như các phương thức mật mã khác, chúng sẽ làm thay đổi dữ liệu thành một dạng mật mã, quá trình hashing sử dụng một thông số hash value và không thay đổi dữ liệu ban đầu. Bởi vì các tính năng đặc biệt, hashing có thể sử dụng để bảo vệ và kiểm tra tính toàn vẹn của dữ liệu. Nó cũng có khả năng sử dụng để kiểm tra khi có một tiến trình copy được thực hiện và đảm bảo tính chính xác của dữ liệu khi chúng được copy.

Ví dụ, khi một ổ cứng được tạo ra một bản copy, một quá trình hash được thực hiện trên ổ đĩa trước khi quá trình nhân đôi được thực hiện. Nếu hai thông số hash của ổ cứng mới được tạo ra và thông số hash của ổ đĩa ban đầu thì quá trình nhân đôi dữ liệu được thực hiện chính xác và đảm bảo dữ liệu không có sự thay đổi mất mát trong quá trình nhân bản. Việc hashing sử dụng để đảm bảo dữ liệu được nguyên bản giúp dữ liệu lưu ở dạng kỹ thuật số sẽ luôn dữ được nguyên bản sau vô số lần copy – và điều này không thể thực hiện khi lưu dữ liệu các dạng khác – ví như lưu thông tin âm thanh bằng băng từ sẽ bị biến dạng sau nhiều lần copy.

Ví dụ, Message Digest 5 (MD5) là một thuật toán hash với 128-bit hash. Điều này có nghĩa không có vấn đề với dữ liệu đầu vào và dữ liệu đầu ra sau quá trình hash bởi nó luôn luôn thêm vào 128 bits. Sức mạnh của quá trình hashing là nó được thực hiện một chiều và không thể có phương thức nào có thể thực hiện ngược lại được để converts thông số hash thành dữ liệu ban đầu. Nếu một vài người có được các thông số hash của ta, họ không thể lấy được dữ liệu ban đầu. Tuy nhiên đó không phải là phương thức mật

Page 6: Mã hoá với chữ ký điện tử

6

mã không thể tấn công. Hashing có thể bị tấn công bởi các phương thức đảo ngược hay birthday attack. Phương thức tấn công bình thường sử dụng đó là sử dụng các công cụ password-cracking. Hầu hết các hệ thống lưu trữ passwords trong dữ liệu accounts và được hashed (băm). Hashs không thể thực hiện ngược lại, bởi đó là một giải pháp bảo mật, có nghĩa không có công cụ nào có thể chuyển ngược lại một password được hash thành một password nguyên bản chưa được hash. Tuy nhiên một thuật toán nào cũng có những bất cập riêng, bằng việc sử dụng các phần mềm, password crackers chúng có thể phát hiện ra đoạn mã them vào dữ liệu ban đầu và chỉ cần xoá đoạn hash value đi là có thể truy cập bình thường. Dữ liệu Account thường không được mã hoá, và dữ liệu password thường được hash do đó hầu hết các công cụ crack password chỉ có thể xoá password đã được đặt cho user đó mà không thể view password đó.

Thuật toán hashing thường được sử dụng:

Secure Hash Algorithm (SHA-1) với - 160-bit hash valueMessage Digest 5 (MD5) với —128-bit hash valueMessage Digest 4 (MD4) với —128-bit hash valueMessage Digest 2 (MD2) với —128-bit hash value

- Các tính chất cơ bản của hàm băm:

+ Là hàm một chiều, không thể thực hiện phép biến đổi ngược như trong quá trình mã hóa và giải mã, nghĩa là với một message_digest cho trước, khó có thể tìm được một message nào mà có hàm băm bằng message_digest này.

+ Khó có thể tìm được hai message mà có cùng một message_digest.

Các giải thuật băm được sử dụng hiện nay là: MD2, MD4, MD5, SHS. Trong đó MD5 là giải thuật băm được sử dụng phổ biến và nó sẽ được trình bày trong phần dưới.

1.2.2 MD5- Giải thuật MD5 được phát triển bởi Ron Rivest ở MIT: nhận đầu vào là một khối data (message) có chiều dài bất kỳ, xử lý nó thành các khối 512 bít, tạo đầu ra là một message_digest 128 bít. Quá trình bao gồm các bước sau:

* Bước 1: message ban đầu được thêm (padding) một số bít (bắt đầu là bít 1, kế tiếp là các bít 0, số bít thêm vào từ 1 tới 512 bít) sao cho tổng số bít sau khi thêm vào cộng với 64 (chiềi dài của message ban đầu) là bội số của 512.

Page 7: Mã hoá với chữ ký điện tử

7

Hình 2: Tạo message_digest sử dụng MD5.

* Bước 2: khởi tạo bộ đệm MD. Bộ đệm 128 bít được dùng để chứa kết quả trung gian và cuối cùng của hàm băm. Có thể xem bộ đệm như là 4 thanh ghi 32 bít. Các thanh ghi này được khởi tạo (dạng số hex) như sau:

A = 01234567; B = 89abcdef; C = fedcba98; D = 76543210

* Bước 3: xử lý message thành từng khối 512 bít (16 từ 32 bít). Quá trình tính toán được chia thành từng giai đoạn, số giai đoạn bằng số chiều dài (tính theo bít) của message sau khi đã padding chia cho 512. Mỗi giai đoạn nhận đầu vào là khối 512 bít của message đã được padding và message_digest của giai đoạn trước, cho ra kết quả là message_digest mới (xem hình 1). Mỗi giai đoạn thực hiện trong 4 bước (vòng), bốn vòng có cấu trúc giống nhau nhưng mỗi vòng sử dụng một hàm luận lý khác nhau, được đặc tả là F, G, H, I. Trong hình 2, bốn vòng được đặt nhãn là fF , fG , fH , fI , để chỉ rằng mỗi vòng có cấu trúc hàm tổng quát như nhau nhưng tùy thuộc vào sự khác nhau của hàm thao tác (F, G, H, I).

Page 8: Mã hoá với chữ ký điện tử

8

Hình 3: Xử lý MD5 của khối đơn 512 bít (HDMD5).

Mỗi vòng được thực hiện 16 bước tuần tự trên các data A, B, C, D (hình 3). Biểu thức tính toán được sử dụng trong mỗi vòng có dạng:

a = b + CLSs(a + g(b,c,d) + X[k] + T[i]).

Page 9: Mã hoá với chữ ký điện tử

9

Trong đó:

. a, b, c, d: là 4 word A, B, C, D theo thứ tự nào đó.

. g: là một trong các hàm F, G, H, I.

F(b,c,d) = (b & c) | (~b & d)

G(b,c,d) = (b & d) | (c & ~d)

H(b,c,d) = b ^ c ^ d

I(b,c,d) = c ^ (b & ~d)

. CLSs: dịch vòng bên trái s bít.

. X[k] = M[q*16 + k] : từ 32 bít thứ k của khối 512 bít thứ q của message.

. T[i] = 232 * abs(sin(i)) : từ 32 bít thứ i (i tính theo radian) (xem bảng).

. Phép toán cộng (+) tính cho modulo 232

Hình 4: Tác vụ của MD5: [abcd k s i]

Page 10: Mã hoá với chữ ký điện tử

10

Bảng T được xây dựng từ hàm sin

T1 = D76AA478 T17 = F61E2562 T33 = FFFA3942 T49 = F4292244

T2 = E8C7B756 T18 = C040B340 T34 = 8771F681 T50 = 432AFF97

T3 = 242070D8 T19 = 265E5A51 T35 = 69D96122 T51 = AB9423A7

T4 = C1BDCEEE T20 = E9B6C7AA T36 = FDE5380C T52 = FC93A039

T5 = F57C0FAF T21 = D62F105D T37 = A4BEEA44 T53 = 655B59C3

T6 = 4787C62A T22 = 02441453 T38 = 4BDECFA9 T54 = 8F0CCC92

T7 = A8304613 T23 = D8A1E681 T39 = F6BB4B60 T55 = FFEFF47D

T8 = FD469501 T24 = E7D3FBC8 T40 = BEBFBC70 T56 = 85845DD1

T9 = 698098D8 T25 = 21E1CDE6 T41 = 289B7EC6 T57 = 6FA87E4F

T10 = 8B44F7AF T26 = C33707D6 T42 = EAA127FA T58 = FE2CE6E0

T11 = FFFF5BB1 T27 = F4D50D87 T43 = D4EF3085 T59 = A3014314

T12 = 895CD7BE T28 = 455A14ED T44 = 04881D05 T60 = 4E0811A1

T13 = 6B901122 T29 = A9E3E905 T45 = D9D4D039 T61 = F7537E82

T14 = FD987193 T30 = FCEFA3F8 T46 = E6DB99E5 T62 = BD3AF235

T15 = A679438E T31 = 676F02D9 T47 = 1FA27CF8 T63 = 2AD7D2BB

T16 = 49B40281 T32 = 8D2A4C8A T48 = C4AC5665 T64 = EB86D391

Page 11: Mã hoá với chữ ký điện tử

11

- Các tác vụ [abcd k s i] trong mỗi vòng là:

ABCD 0 7 1 1 5 17 5 4 33 0 6 49

DABC 1 12 2 6 9 18 8 11 34 7 10 50

CDAB 2 17 3 11 14 19 11 16 35 14 15 51

BCDA 3 22 4 0 20 20 14 23 36 5 21 52

ABCD 4 7 5 5 5 21 1 4 37 12 6 53

DABC 5 12 6 10 9 22 4 11 38 3 10 54

CDAB 6 17 7 15 14 23 7 16 39 10 15 55

BCDA 7 22 8 4 20 24 10 23 40 1 21 56

ABCD 8 7 9 9 5 25 13 4 41 8 6 57

DABC 9 12 10 14 9 26 0 11 42 15 10 58

CDAB 10 17 11 3 14 27 3 16 43 6 15 59

BCDA 11 22 12 8 20 28 6 23 44 13 21 60

ABCD 12 7 13 13 5 29 9 4 45 4 6 61

DABC 13 12 14 2 9 30 12 11 46 11 10 62

CDAB 14 17 15 7 14 31 15 16 47 2 15 63

BCDA 15 22 16 12 20 32 2 23 48 9 21 64

- Các phép toán dùng trong giải thuật MD5 gồm có:

Vòng 1 Vòng 2 Vòng 3 Vòng 4

Page 12: Mã hoá với chữ ký điện tử

12

+ Phép toán đối (~): bù bít.

+ Phép toán and (&): and các bít của hai toán hạng 32 bít với nhau.

+ Phép toán or (|): or các bít của hai toán hạng 32 bít với nhau.

+ Phép toán xor (^): xor các bít của hai toán hạng 32 bít với nhau.

+ Phép toán cộng (+): cộng modulo 232 hai toán hạng 32 bít với nhau.

+ Phép toán dịch trái vòng (w << s): dịch trái vòng w (32 bít) với s bít.

* Bước 4: xuất (output). Tất cả khối 512 bít L đã được xử lý thì đầu ra ở giai đoạn thứ L là message_digest 128 bít.

Có thể tóm tắt hoạt động của MD5 như sau:

MD0 = IV

MDq+1 = MDq + fI(Yq , fH(Yq , fG(Yq ,fF(Yq ,MDq))))

MD = MDL-1

Trong đó:

+ IV: giá trị khởi tạo của bộ đệm ABCD được xác định trong bước 2.

+ Yq: khối message 512 bít thứ q.

+ L: số khối message (đã được padding).

+ MD: giá trị message_digest cuối cùng.

// Mã hóa bằng thuật toán MD5

byte[] hash;

byte[] plainBytes = Encoding.Unicode.GetBytes(document);

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

hash = md5.ComputeHash(plainBytes);

md5.Clear();

//Kết thúc mã hóa MD5

Page 13: Mã hoá với chữ ký điện tử

13

1.3 Thuật toán mã hóa khóa công khai RSA:

Trong mật mã học, RSA là một thuật toán mã hóa khóa công cộng. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn.

1.3.1 Mô tả sơ luợc:

Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân). Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã. Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa. Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng. Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân mới có thể giải mã được.

Một ví dụ trực quan: Bob muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc được. Để làm được điều này, Alice gửi cho Bob một chiếc hộp có khóa đã mở và giữ lại chìa khóa. Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khóa lại (lúc này ngay cả Bob cũng không thể đọc lại hay sửa thông tin trong thư được nữa). Sau đó Bob gửi chiếc hộp lại cho Alice. Alice mở hộp với chìa khóa của mình và đọc thông tin trong thư. Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.

Lịch sử cuộc cách mạng toán học mã RSA và chính phủ điện tử:

Khi phương pháp mã khóa công khai chưa ra đời, người ta sử dụng hầu như cùng một 'chìa khóa' để mã hóa cũng như giải mã chung cho cả người gửi và người nhận thông tin (hệ mã đối xứng). Với hệ mã này, một trong những khó khăn lớn của ngành an ninh và mã hóa  lúc đó là làm sao gửi an toàn chìa khóa bí mật trên các kênh truyền tin công khai có nhiều người tham gia.

Page 14: Mã hoá với chữ ký điện tử

14

Hình: Ba nhà khoa học Shamir, Rivest và Adleman

Đầu năm 1969, James Ellis, một chuyên gia thám mã lỗi lạc của  Cơ Quan Truyền Thông Chính Phủ Anh Quốc (GCHQ) đã nảy ra ý tưởng đặc sắc  rằng, nếu người nhận tin đưa một nhiễu nào đó lên đường truyền công khai mà chỉ riêng anh ta biết cách khử nhiễu, thì mọi thông tin mật gửi đến cho anh ta đều có thể đưa lên kênh truyền tin công khai đó. Những người khác, dù bắt được tín hiệu cũng không thể nào giải mã được tin mật.

Cuối năm 1969, James Ellis nhận ra ý tưởng trên có thể đạt được bằng  'hàm một chiều' (xem phụ lục) Theo đó, chỉ có thể tìm hàm ngược nếu biết thông tin nào đó, giống như khôi phục tín hiệu khi biết cái nhiễu do mình tạo ra. Nhưng ông không thực hiện được điều này, do không biết liệu hàm một chiều có tồn tại hay không.

Bốn năm sau Clifford Cocks- một nhân viên mới của GCHQ- được Patterson, thầy hướng dẫn, kể cho nghe ý tưởng độc đáo của James Ellis và ông đã tìm ra hàm một chiều cần thiết chỉ trong vòng nửa giờ: đó chính là phép nhân! Nhân hai số nguyên tố lớn bao nhiêu cũng được là điều hết sức dễ dàng, nhưng khi biết tích của chúng, để tìm lại các thừa số thì ta cần phân tích số đã cho ra thừa số nguyên tố. Điều này hầu như không thể làm được với các số đủ lớn. hật vậy, để phân tích n (=p*q) ra thừa số nguyên tố, cần chia lần lượt n cho các số nguyên tố nhỏ hơn. Theo một định lý nổi tiếng trong số học, có khoảng (n/log n) số nguyên tố bé hơn n. Nếu n có khoảng 300 chữ số thì sẽ phải làm khoảng 10150/300 phép chia. (Nếu dùng máy tính tốc độ 1 tỷ phép tính/giây, ta sẽ mất chừng...tỷ tỷ tỷ năm để phân tích số n!) Như vậy, hàm số thiết lập sự tương ứng giữa hai số p, q với tích n=pq chính là hàm một chiều. Giải pháp thật đơn giản và Cocks cũng không tự cảm nhận được đầy đủ ý nghĩa của kết

Page 15: Mã hoá với chữ ký điện tử

15

quả đạt được. Kết quả của Cocks được giữ tuyệt mật. Nó có sức thuyết phục lớn trong nội bộ GCHQ. Nhưng phương tiện tính toán thời đó không cho phép triển khai thuật toán. Năm 1978, kết quả của Cocks được Rivest, Shamir và Adleman phát minh lại! Đó chính là cuộc cách mạng trong lĩnh vực mật mã, cuộc cách mạng mang tên RSA (ghép chữ đầu tên của ba nhà khoa học trên).

RSA, cuộc cách mạng của các nhà toán học.

Hệ mã RSA đã đưa đến một cuộc cách mạng thực sự. Giờ đây, với hệ mã RSA, không cần phải gửi chìa khóa giải mã cho người nhận thông tin nữa. Hệ mã RSA sử dụng 2 khóa. Khóa lập mã của tôi được công khai với người ta (để người ta có thể gửi thông tin mã hóa cho tôi), còn khóa giải mã của tôi là khóa riêng tôi giữ, do đó chỉ tôi mới có thể đọc được thông tin mã hóa người đó gửi, còn người khác không thể tìm ra khoá giải mã  trong một thời gian chấp nhận được.

Từ khi RSA ra đời đến nay, có nhiều người đưa ra nhiều hệ mã với các hàm một chiều khác nhau. Tuy nhiên, chỉ có RSA và hệ mã gần với nó, hệ mã đường cong elliptic, là được sử dụng rộng rãi, vì người ta có thể tin hàm được dùng đúng là hàm một chiều.

RSA và chính phủ điện tử

Trong chính phủ điện tử, có hai điều quan trọng. Một là, làm thế nào để bảo đảm các văn bản trao đổi qua mạng không bị thay đổi nội dung (đảm bảo tính toàn vẹn của văn bản).  Hai là, làm thế nào để xác minh người gửi văn bản đó (xác nhận chủ thể). RSA cũng như các hệ mã khóa công khai khác đã giải quyết trọn vẹn 2 vấn đề đặt ra.  Tuy nhiên, tốc độ mã hóa của RSA rất chậm (gấp chừng 1000 lần so với các hệ mã đối xứng), nên với các văn bản lớn, việc mã hoá bằng RSA là không khả thi. Do vậy, RSA được ứng dụng để giải quyết các vấn đề trên theo một số phương thức độc đáo riêng. Thí dụ: xác nhận 'giá trị băm'- một đặc trưng thu gọn, giống như 'vân tay' của văn bản - thay vì xác nhận văn bản, dùng kết hợp mã đối xứng, như  DES, IDEA ( để mã hoá văn bản) và RSA (để mã hóa chìa khóa )...

Ngày nay, các hệ mã khóa công khai và các tiện ích đi kèm đã được thương mại hóa. Bạn có thể mua trên thị trường hoặc tải từ Internet về để dùng (như một số người, một số công ty đã làm). Tuy nhiên, cần nhớ rằng, độ an toàn của các sản phẩm như vậy không cao. Như đã phân tích trên đây, chốt của vấn đề là phải có những số

Page 16: Mã hoá với chữ ký điện tử

16

nguyên tố lớn để lập khóa. Không ai cho ta biết rằng, trong hệ mã mà ta mua về, các số nguyên tố được dùng đã sinh ra như thế nào. Chúng ngẫu nhiên đến mức nào, hay là đã có sẵn trong một kho của người làm khóa. Và nếu cần, người bán cho ta có thể tìm ra khóa giải mã của bằng cách duyệt toàn bộ cái kho mà anh ta đã biết rõ. Điều này hoàn toàn tương tự như khi ta mượn khóa của hàng xóm về khóa cửa nhà mình, mà không biết họ còn chìa dự trữ nào khác không. Dĩ nhiên vẫn có thể làm như vậy, khi người hàng xóm này đủ tin cậy, và nhất là khi mà nhà chúng ta không có cái gì quý đến mức người ta phải lấy bằng mọi giá. Nhưng nếu là một chủ ngân hàng thì hãy thận trọng! Cũng như vậy, với các hệ thống đòi hỏi độ an toàn cao, như chính phủ điện tử trong tương lai của Việt Nam chẳng hạn, thì không thể dùng những bộ khóa mua trên thị trường như vậy được. Cho nên, phải tự làm lấy. Công việc như thế hiện đang được tiến hành ở một số cơ quan của Việt Nam, trong đó có Viện Toán Học (Viện Khoa Học và Công Nghệ Việt Nam).

Cho đến nay, người ta vẫn tin rằng RSA, hệ mã đường cong elliptic, là không thể phá được. Điều này không còn chính xác nữa, vì đã có một số phương pháp tấn công RSA đã được công bố mặc dù vẫn chưa đưa ra chương trình hoàn chỉnh.

1.3.2 Thuật toán RSA

Tạo khóa RSA:

Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không an toàn (ví dụ như Internet). Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:

1. Chọn 2 số nguyên tố lớn p và q với p≠q, lựa chọn ngẫu nhiên và độc lập.

2. Tính: N=p*q.

3. Tính: Ф(N) = (p-1)(q-1).

4. Chọn một số tự nhiên e sao cho 1 < e <Ф(N) và là số nguyên tố cùng nhau với Ф(N)

5. Tính: d sao cho de ≡ 1 (mod Ф(N)) (hay d= (1 + i * Phi_N) / E) với i=1 , n

Khóa công khai: Ku = {e,N}

Khóa bí mật: Kprl = {d,p,q}

Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình. Ở đây, p và q giữ vai trò rất quan trọng. Chúng là các phân tố của n và cho phép tính d khi biết e.

Page 17: Mã hoá với chữ ký điện tử

17

Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p và q sẽ được xóa ngay sau khi thực hiện xong quá trình tạo khóa.

Mã hóa:

Giả sử Bob muốn gửi đoạn thông tin M cho Alice. Đầu tiên Bob chuyển M thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thỏa thuận trước.

M m

Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã hóa của m theo công thức:

C=me mod N

Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (môđun) bằng phương pháp bình phương (exponentiation by squaring). Cuối cùng Bob gửi c cho Alice.

Giải mã:

Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìm được m từ c theo công thức sau:

m = cd mod N

Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải mã hoạt động vì ta có

cd ≡ (me)d ≡ med (mod N)

Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:

(med ≡ m (mod p) và med ≡ m (mod q)

Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung quốc, ta có:

(med ≡ m (mod p*q)

hay:

cd ≡ m (mod N)

Có thể tóm tắt giải thuật RSA như bảng sau:

Tạo khóa Độ phức tạp

Page 18: Mã hoá với chữ ký điện tử

18

Tạo 2 số nguyên tố lớn p và q Tính n = p*q, 0(n) = (p-1)*(q-1) Chọn 1 số ngẫu nhiên 1<e<0(n): gcd(0(n), e) = 1 Tính d: d = e-1 mod 0(n) (giải thuật Extended

Euclidean) Khóa công khai KU = [e, n] Khóa bí mật KR = [d, n]

0((logn)2)0((log(0(n))2)0((logn)3)

Bảng 1: Mô tả độ phức tạp của giải thuật RSA

Mã hóa Đoạn tin : M < n Mã hóa : C = Me mod n

Giải mã Đoạn tin mã: C Giải mã : M = Cd mod n

Bảng 2: Mã hóa và giải mã trong RSA

- Độ phức tạp:

+ Cộng 2 số k bít: 0(k)

+ Nhân 2 số k bít: 0(k2)

+ 2 k bít mod n : 0(k2)

+ xc mod n : 0(k3)

Để tính xc mod n cần c-1 phép nhân modulus không hiệu quả (do c lớn) sử dụng giải thuật square_multiply để giảm số phép nhân mod nhiều nhất 2l (l là số bít nhị phân của c, l<=k với k là số bít nhị phân của x)

Ví dụ

Sau đây là một ví dụ với những số cụ thể. Ở đây chúng ta sử dụng những số nhỏ để tiện tính toán còn trong thực tế phải dùng các số có giá trị đủ lớn.

p = 61 — Số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi tạo khóa)

Page 19: Mã hoá với chữ ký điện tử

19

q = 53 — Số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo khóa)

N = pq = 3233 — Môđun (công bố công khai)

e = 17 — Số mũ công khai

d = 2753 — Số mũ bí mật

Bảng 3: Ví dụ cụ thể RSA

Khóa công khai là cặp (e, N). Khóa bí mật là d. Hàm mã hóa là:

encrypt(m) = me mod N = m17 mod 3233

với m là văn bản rõ. Hàm giải mã là:

decrypt(c) = cd mod N = c2753 mod 3233

với c là văn bản mã.

Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính:

encrypt(123) = 12317 mod 3233 = 855

Để giải mã văn bản có giá trị 855, ta thực hiện phép tính:

decrypt(855) = 8552753 mod 3233 = 123

Cả hai phép tính trên đều có thể được thực hiện hiệu quả với phương pháp tính hàm mũ (môđun) bằng phương pháp bình phương.

1.3.3 Tính bảo mật của giải thuật RSA:

Vì khóa là công khai, nên người giải mã thường dựa vào cặp khóa này để tìm cặp khóa bí mật. Điều quan trọng là dựa vào n để tính hai thừa số p, q của n từ đó tính được d. Có nhiều giải thuật như thế, đầu tiên ta xét trường hợp đơn giản nhất là người giải mã biết được (n) . Khi đó tính p, q đưa về việc giải hai phương trình sau:

n = p.q

(n) = (p-1)(q-1)

Page 20: Mã hoá với chữ ký điện tử

20

Thay q=n/p ta được phương trình bậc hai:

p2 – (n - (n) + 1)p + n = 0

Hai nghiệm của phương trình bậc hai này sẽ là p, q. Tuy nhiên vấn đề có được (n) còn khó hơn tính hai thừa số của n nhiều.

Một số phương pháp tấn công mã hóa RSA : (xem phụ lục)

a. Phương pháp p-1:b. Bẻ khóa khi biết được số mũ d của hàm giải mã:c. Bẻ khóa dựa trên các attack lặp lại:d. Sự che dấu thông tin trong hệ thống RSAe. Tấn công dựa trên thời gianf. Tấn công lựa chọn thích nghi bản mã

1.3.4 Các vấn đề đặt ra trong thực tế

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ũngcầ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à người 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 người tấn công cũng có bảng này. Nếu người 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)

Page 21: Mã hoá với chữ ký điện tử

21

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ũ.

Kích thước và tốc độ mã hóa khóa trong RSA- Kích thước khóa trong RSA: Tùy thuộc vào tính bảo mật cần thiết của mỗi người và thời gian sống của khóa

mà khóa có chiều dài thích hợp: + Loại Export : 512 bít + Loại Personnal : 768 bít + Loại Commercial: 1024 bít + Loại Militery : 2048 bít - Chu kỳ sống của khóa phụ thuộc:

+ Việc đăng ký và tạo khóa. + Việc phân bố khóa. + Việc kích hoạt hoặc không kích hoạt khóa. + Việc thay thế hoặc cập nhập khóa. + Việc hủy bỏ khóa. + Việc kết thúc khóa bao gồm sự phá hoại hoặc sự lưu trữ.

Tốc độ và hiệu quả của nhiều phần mềm thương mại có sẵn và công cụ phần cứng của RSA đang gia tăng 1 cách nhanh chóng. Với pentium 90Mhz, bộ toolkit BSAFE 3.0 của cơ quan bảo mật dữ liệu RSA đạt tốc độ tính khóa bí mật là 21,6Kbps với khóa 512 bít và 7,4Kbps với khóa 1024 bít. Phần cứng RSA nhanh nhất đạt hơn 300 Kbps với khóa 512 bít, nếu được xử lý song song thì đạt 600 Kbps với khóa 512 bít và 185Kbps với khóa 970 bít. Người ta mong đợi rằng tốc độ RSA sẽ đạt 1Mbps vào cuối năm1999. So sánh với giải thuật DES và các giải thuật mã khối khác thì RSA chậm hơn: về phần mềm DES nhanh hơn RSA 100 lần, về phần cứng DES nhanh hơn RSA từ 1000 tới 10000 lần tùy thuộc công cụ (implementation) sử dụng (thông tin này được lấy từ http://www.rsa.com).

Nhận xét : 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).

Page 22: Mã hoá với chữ ký điện tử

22

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, người 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.

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).

Chuyển đổi văn bản rõ:

Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi văn bản rõ (chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ra văn bản mã không an toàn. Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề sau:

Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương ứng

Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ, giá trị me

cũng nhận giá trị nhỏ (so với n). Như vậy phép môđun không có tác dụng và có thể dễ dàng tìm được m bằng cách khai căn bậc e của c (bỏ qua môđun).

RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên) nên người tấn công có thể thực hiện tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra giữa bản rõ và bản mã. Khi gặp một bản mã, người tấn công sử dụng bảng tra để tìm ra bản rõ tương ứng.

Trên thực tế, ta thường gặp 2 vấn đề đầu khi gửi các bản tin ASCII ngắn với m là nhóm vài ký tự ASCII. Một đoạn tin chỉ có 1 ký tự NULL sẽ được gán giá trị m = 0 và cho ra bản mã là 0 bất kể giá trị của e và N. Tương tự, một ký tự ASCII khác, SOH, có giá trị 1 sẽ luôn cho ra bản mã là 1. Với các hệ thống dùng giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và 2553

nhỏ hơn giá trị n chấp nhận được. Những bản mã này sẽ dễ dàng bị phá mã.

Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường bao gồm một hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa. Quá trình chuyển đổi này phải đảm bảo rằng m không rơi vào các giá trị không an toàn. Sau khi chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho ra một trong số khả năng trong tập hợp bản mã. Điều này làm giảm tính

Page 23: Mã hoá với chữ ký điện tử

23

khả thi của phương pháp tấn công lựa chọn bản rõ (một bản rõ sẽ có thể tương ứng với nhiều bản mã tuỳ thuộc vào cách chuyển đổi).

Một số tiêu chuẩn, chẳng hạn như PKCS, đã được thiết kế để chuyển đổi bản rõ trước khi mã hóa bằng RSA. Các phương pháp chuyển đổi này bổ sung thêm bít vào M. Các phương pháp chuyển đổi cần được thiết kế cẩn thận để tránh những dạng tấn công phức tạp tận dụng khả năng biết trước được cấu trúc của bản rõ. Phiên bản ban đầu của PKCS dùng một phương pháp đặc ứng (ad-hoc) mà về sau được biết là không an toàn trước tấn công lựa chọn bản rõ thích ứng (adaptive chosen ciphertext attack). Các phương pháp chuyển đổi hiện đại sử dụng các kỹ thuật như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric Encryption Padding - OAEP) để chống lại tấn công dạng này. Tiêu chuẩn PKCS còn được bổ sung các tính năng khác để đảm bảo an toàn cho chữ ký RSA (Probabilistic Signature Scheme for RSA - RSA-PSS).

Tạo chữ ký vào văn bản:

Thuật toán RSA còn được dùng để tạo chữ ký điện tử cho văn bản. Giả sử Alice muốn gửi cho Bob một văn bản có chữ ký của mình. Để làm việc này, Alice tạo ra một giá trị băm (hash value) của văn bản cần ký và tính giá trị mũ d mod N của nó (giống như khi Alice thực hiện giải mã). Giá trị cuối cùng chính là chữ ký điện tử của văn bản đang xét. Khi Bob nhận được văn bản cùng với chữ ký điện tử, anh ta tính giá trị mũ 3 mod n của chữ ký đồng thời với việc tính giá trị băm của văn bản. Nếu 2 giá trị này như nhau thì Bob biết rằng người tạo ra chữ ký biết khóa bí mật của Alice và văn bản đã không bị thay đổi sau khi ký.

Cần chú ý rằng các phương pháp chuyển đổi bản rõ (như RSA-PSS) giữ vai trò quan trọng đối với quá trình mã hóa cũng như chữ ký điện tử và không được dùng khóa chung cho đồng thời cho cả hai mục đích trên.

Phần 2: CHỮ KÝ ĐIỆN TỬ VÀ CHƯƠNG TRÌNH ỨNG DỤNG

2.1 Khái niệm Chữ ký điện tử

Chữ ký điện tử (Digital Signature) dựa trên kỹ thuật sử dụng mã hóa khóa công khai. Trong đó, cả người gửi và người nhận, mỗi người có một cặp khóa là khóa bí mật, hay riêng tư (Private Key) và khóa công khai (Public Key).

Chữ ký điện tử hoạt động khi một người gửi một thông điệp, người đó dùng khóa riêng của mình để mã hóa thông điệp sang một dạng khó nhận dạng. Người nhận dùng khóa công khai của ngườ i gửi để mã hóa thông điệp. Tuy nhiên, để an toàn thật sự phải có các bước bổ sung. Do đó, thuật toán băm MD5 và thuật toán mã hóa RSA có thể

được áp dụng để xây dựng ứng dụng chữ ký điện tử.

Sơ đồ chữ ký RSA được cho bởi bộ năm:

Page 24: Mã hoá với chữ ký điện tử

24

S = (P, A, K, S, V)

Trong đó P = A = Zn, với n = p.q là tích của hai số nguyên tố lớn p,q, K là tập các

cặp khóa K = (K’, K”), với K’ = a và K” = (n,b), a và b là hai số thuộc Zn¿

thỏa mãn a.b 1 (mod (n)). Các hàm sigK’ và verK” được xác định như sau :

sigK’ (x) = xa mod n

verK’ (x,y) = đúng x yb (mod n).

Dễ chứng minh được rằng sơ đồ được định nghĩa như vậy là hợp thức, tức là với mọi x P với mọi chữ ký y A;

verK” (x,y) = đúng y sigK’ (x).

Chú ý rằng tuy hai vấn đề xác nhận và bảo mật theo sơ đồ RSA là có bề ngoài giống nhau, nhưng nội dung của chúng là hoàn toàn khác nhau : Khi a gửi thông báo x cho B, để B có căn cứ xác nhận đó đúng thực là thông báo do A gửi, A phải gửi kèm theo chữ ký sigK’ (x), tức là A gửi cho B (x, sigK’ (x)), trong các thông tin gửi đi đó, thông báo x hoàn toàn không được giữ bí mật. cũng tương tự như vậy, nếu dùng sơ đồ mật mã RSA, khi một chủ đề A nhận được một bản mật mã eK” (x) từ B thì A chi tiết rằng thông báo x được bảo mật, chứ không có gì để xác nhận x là .....B.

Nếu ta muốn hệ truyền tin của ta vừa có tính bảo mật vừa có tính xác nhận, thì ta phải sử dụng đồng thời cả hai hệ mật mã và xác nhận (bằng chữ ký). Giả sử trên mạng truyền tin công cộng, ta có cả hai hệ mật mã khóa công khai S1 và hệ xác nhận bằng chữ ký S2. Giả sử B có bộ khóa mật mã K = (K’, K”) với K’ = n, e) và K” = d trong hệ S1, và A có bộ khóa chữ ký Kx = (K’s , K”s) với K”x = a và K”s = (n,b) trong hệ S2. A có thể gửi đến B một thông báo vừa bảo mật vừa có chữ ký để xác nhận như sau : A ký trên thông báo x trước, rồi thay cho việc gửi đến B văn bản đó được lập theo khóa công khai của B,

tức là gửi cho B eK’ ((x, sig

K s' ( x )

). Nhận được văn bản mật mã đó B sẽ dùng thuật toán

giải mã dK” của mình để thu được (x, sig

K s' ( x )

), sau đó dùng thuật toán kiểm thử chữ ký

công khai ver

Ks'của A để xác nhận chữ ký

sigK s

'(x) đúng là của A trên x.

Ví dụ về chữ ký điện tử RSA.

Mô tả sơ đồ chữ ký RSA :

Giả sử n = p * q ; trong đó p, q là các số nguyên tố lớn.

Page 25: Mã hoá với chữ ký điện tử

25

P = A = Zn, K = (n, b, a) : a zn¿ , a b≡1mod

(n) ;

Khoá bí mật k’ = a; khoá công khai k’’ = (n,b);

Ký: x P, y = Sigk’ (x) = xa mod n.

Kiểm tra chữ ký: Verk’’ (x, y) = true x yb mod n ;

Ví dụ:

Chọn p =23, q = 29 ; ta tính được n = 23 * 29 = 667 ; (n) = 22 * 28 = 616;

chọn b = 3, a = 411 (411 * 3 = 1233 1 mod 616 )

ký x = 56; y = 56411 =235.

Kiểm tra: 56 2353 (=12977875)mod 667 nên chữ ký là đúng;

Mô hình chữ ký điện tử sử dụng khóa công khai:

Hình 5: Mô hình chữ ký điện tử

Page 26: Mã hoá với chữ ký điện tử

26

Chữ ký điện tử (digital signature) là đoạn dữ liệu ngắn đính kèm với văn bản gốc để chứng thực tác giả của văn bản và giúp người nhận kiểm tra tính toàn vẹn của nội dung văn bản gốc.

Chữ ký điện tử được tạo ra bằng cách áp dụng thuật toán băm một chiều trên văn bản gốc để tạo ra bản phân tích văn bản (message digest) hay còn gọi là fingerprint, sau đó mã hóa bằng private key tạo ra chữ ký số đính kèm với văn bản gốc để gửi đi. Khi nhận, văn bản được tách làm 2 phần, phần văn bản gốc được tính lại fingerprint để so sánh với fingerprint cũ cũng được phục hồi từ việc giải mã chữ ký số (xem hình 3).

Chữ ký điện tử và chứng chỉ điện tử

Chữ ký điện tử hoạt động dựa trên hệ thống mã hóa khóa công khai. Hệ thống mã hóa này gồm hai khóa, khóa bí mật và khóa công khai (khác với hệ thống mã hóa khóa đối xứng, chỉ gồm một khóa cho cả quá trình mã hóa và giải mã). Mỗi chủ thể có một cặp khóa như vậy, chủ thể đó sẽ giữ khóa bí mật, còn khóa công khai của chủ thể sẽ được đưa ra công cộng để bất kỳ ai cũng có thể biết. Nguyên tắc của hệ thống mã hóa khóa công khai đó là, nếu ta mã hóa bằng khóa bí mật thì chỉ khóa công khai mới giải mã thông tin được, và ngược lại, nếu ta mã hóa bằng khóa công khai, thì chỉ có khóa bí mật mới giải mã được.

Gửi :

Sau khi đăng ký một chứng chỉ số (với nhà cung cấp chứng chỉ số), ta được cấp một khóa riêng (khóa bí mật) lưu ở một chỗ 'kín' (ẩn) trên PC của chúng ta.

Trước khi gửi văn bản, chúng ta áp dụng một thuật toán phần mềm để nhận giá trị băm của văn bản gốc.

Chúng ta mã hóa giá trị băm đó bằng khóa riêng (hay gọi là 'ký' lên giá trị băm), và thu được cái gọi là chữ ký điện tử.

Sau đó văn bản gốc được gửi đi cùng với chữ ký điện tử và khóa công khai của chúng ta.

Nhận:

Khi nhận được thư, người nhận sử dụng khóa công khai của người gửi giải mã chữ ký điện tử để biết được người gửi có đúng là ta không, và đồng thời thu được giá trị băm của văn bản gốc.

Người nhận cũng dùng thuật toán băm để thu được giá trị băm của văn bản nhận được.

Nếu 2 giá trị băm bằng nhau thì văn bản được khẳng định là toàn vẹn (không bị thay đổi từ sau khi người gửi ký).

Page 27: Mã hoá với chữ ký điện tử

27

Kiểm tra xác nhận trên tài liệu đã kýGiả sử B muốn xác nhận tài liệu TL là của A, với chữ ký là bản mã TL. B sẽ dùng

khóa công khai của A để giải mã bản mã TL của A. Sau khi giải mã, B thu được một bản giải mã TL, anh ta so sánh bản giải mã TL này mới tài liệu TL. Nếu bản giải mã TL giống với tài liệu TL thì chữ ký là đúng của A.

Một số trường hợp xảy ra với chữ ký điện tử, cũng giống như các trường hợp xảy ra với chữ ký truyền thống. Ví dụ, khi tài liệu TL của A bị thay đổi (dù chỉ một ký tự, một dấu chấm, hay một ký hiệu bất kỳ), khi B xác nhận, anh ta sẽ thấy bản giải mã TL khác với tài liệu TL của A. B sẽ kết luận rằng tài liệu đó đã bị thay đổi, không phải là tài liệu A đã ký.

Trường hợp khác, nếu A để lộ khóa bí mật, nghĩa là văn bản tài liệu của anh có thể ký bởi người khác có khóa bí mật của A. Khi một ai đó xác nhận tài liệu được cho là của A ký, chữ ký vẫn là hợp lệ, mặc dù không phải chính A ký. Như vậy, chữ ký của A sẽ không còn giá trị pháp lý nữa. Do đó, việc giữ khóa bí mật là tuyệt đối quan trọng trong hệ thống chữ ký điện tử.

2.2 Cách làm việc của Chữ ký điện tử

Digital Signature được tạo ra và kiểm tra bằng mật mã, đó là một phương pháp thuộc lĩnh vực toán học, nó chuyển toàn bộ message thành một dạng khó có thể nhận dạng và có thể được giải mã. Digital signature sử dụng hai khóa thông dụng, một khóa để tạo ra digital signature hoặc chuyển message thành dạng khó nhận dạng, một khóa dùng để kiểm tra digital signature hoặc để chuyển message đã mã hóa về dạng nguyên thủy của nó.

Digital signature là cách cơ bản để bảo mật cho một tài liệu điện tử (e-mail, spreaDigital Signatureheet_bảng tính, text file,..) đáng tin cậy. Đáng tin nghĩa là ta biết ai đã tạo ra tài liệu và ta biết nó không bị thay đổi trong bất cứ cách nào từ người tạo ra nó.

Digital signature dựa vào thuật toán mã hoá để bảo đảm độ tin cậy. Mã hoá là quá trình mang tất cả dữ liệu từ một máy tính gửi sang máy tính khác và mã hóa nó thành một dạng mà chỉ có máy tính được gửi mới có thể giải mã. Độ tin cậy là quá trình kiểm tra xác nhận được thông tin đến từ một nguồn tin cậy. Hai quá trình này liên quan chặt chẽ đến digital signature.

Một Digital Signature có thể được xem như một giá trị số, được biểu diễn như một dãy các ký tự, và được sử dụng trong tin học như một biểu thức toán học. Biểu thức phụ thuộc vào hai đầu vào: dãy các ký tự biểu diễn dòng dữ liệu điện tử được ký và số bảo mật được tham chiếu đến như một signature public key, điều này có nghĩa là với mỗi chữ ký thì chỉ duy nhất người đã ký mới có thể truy xuất đến public key. Public key là khoá

Page 28: Mã hoá với chữ ký điện tử

28

công khai cho tất cả mọi người, nó giống như số điện thoại trong danh bạ điện thoại, cho phép việc kiểm tra chữ ký. Kết quả cho thấy việc biểu diễn chữ ký số gắn vào dữ liệu điện tử giống như sử dụng chữ ký tay trên giấy trong tài liệu văn bản.

Digital signature làm việc dựa trên hai khoá là public key và private key và thực hiện qua hai giai đoạn là việc hình thành chữ ký trên tài liệu ở phía người gửi và việc xác nhận tài liệu nhận được chính xác và nguyên vẹn hay không ở phía người nhận.

Vấn đề bảo mật ở digital signature không giống với các phương pháp mã hoá cổ điển là chỉ dùng một khoá cho cả việc mã hoá ở người gửi và giải mã ở người nhận mà sử dụng hai khoá: private key để mã hoá và public key để giải mã kiểm tra.

2.2.1 Quá trình ký trong Message

Bước một:

“Băm” tài liệu gửi thành các hash-value hay còn được gọi là Message Digest, các Message Digest này sẽ được tính toán để đưa vào quá trình mã hoá chữ ký.

Bước hai: Tính Message Digest

Trong bước hai của tiến trình, một hash-value (giá trị băm) của một message thường được gọi là Message Digest được tính toán bằng cách áp dụng các thuật toán băm mã hoá cryptographic hashing arthgorithm như MD2, MD4, MD5, SHA1,…Một hash-value đã tính của message là một dãy bit liên tục, có độ dài cố định, được trích rút từ message theo cách nào đó.

Tất cả các thuật toán chính xác cho việc tính toán message digest được cung cấp như một phép biến đổi toán học, trong đó cứ một bit đơn từ input message được biến đổi thì một digest khác được gửi đến. Với cách làm việc như vậy các thuật toán là rất bảo đảm độ tin cậy trước các cuộc tấn công.

Bước ba: Tính Digital Signature

Trong bước hai của việc ký message, thông tin nhận được trong bước băm message (Message Digest) đã mã hoá với khoá private key của người ký vào message, vì thế một giá trị băm giải mã cũng được gọi là Digital Signature được gửi đến. Vì mục đích này, các thuật toán mã hoá cho việc tính chữ ký số từ message digest được dùng. Thuật toán thường được sử dụng là RSA, DIGITAL SIGNATUREA, ECDIGITAL SIGNATUREA. Thông thường, chữ ký số gắn vào message trong định dạng đặc biệt để kiểm tra khi cần thiết.

Page 29: Mã hoá với chữ ký điện tử

29

Hình 6: Quá trình ký trong message

2.2.2 Quá trình kiểm tra xác nhận chữ ký trên tài liệu.

Kỹ thuật Digital Signature cho phép người nhận message có kèm chữ ký kiểm tra tính xác thực và tính toàn vẹn của nó. Quá trình kiểm tra chữ ký số - digital signature verification nhằm mục đích xác định một message gửi đi đã được ký bằng khoá private key đúng với khóa public key gửi đi hay không. Digital signature verification không thể xác nhận có hay không một message đã được ký bởi người gửi. Nếu chúng ta muốn kiểm tra có hay không vài người đã ký trong một message gửi đi, chúng ta cần nhận được public key theo cách nào đó. Điều này thực hiện hoặc bằng cách lấy public key trong cách an toàn (ví dụ như floppy disk hoặc CD) hoặc với sự trợ giúp của Public Key Intrasfication theo một giấy chứng nhận số. Nếu không có một cách an toàn để nhận khoá public key thực sự từ người gửi, chúng ta không có khả năng kiểm tra message được gửi là có phải xác thực của người này hay không.

Như vậy, việc kiểm tra một Digital Signature được thực hiện trong 3 bước:

Bước một: Tính Current Hash-Value

Trong bước một, một hash-value của message đã ký được tính. Với việc tính này thì vẫn sử dụng thuật toán băm như đã dùng trong suốt quá trình ký. Hash-value nhận được được gọi là current hash-value bởi vì nó được tính từ trạng thái hiện thời của message.

Bước hai: Tính Original Hash-Value

Trong bước hai của quá trình kiểm tra digital signature, digital signature được giải mã với cũng với thuật toán mã hoá đã được sử dụng trong suốt quá trình ký. Việc giải mã được thực hiện bằng khoá public key tương ứng với khoá private key được dùng trong suốt quá trình ký của message. Kết quả là, chúng ta nhận được original hash-value mà đã đựơc tính từ message gốc trong suốt bước một của quá trình ký (original message digest)

Bước ba: So sánh Current hash-value với Original hash-value

Page 30: Mã hoá với chữ ký điện tử

30

Trong bước ba, chúng ta đối chiếu current hash-value nhận được trong bước một với original hash-value nhận được trong bước hai. Nếu hai giá trị này giống hệt nhau thì việc kiểm tra sẽ thành công nếu chứng minh được message đã được ký với khoá private key đúng với khoá public key đã được dùng trong quá trình kiểm tra. Nếu hai giá trị này khác nhau thì nghĩa là digital signature là sai và việc kiểm tra là thất bại.

Hình 7: Quá trình kiểm tra xác nhận chữ ký trên tài liệu

Như vây quá trình hoạt động của một digital signature được minh hoạ như hình sau:

Encrypt Private Key

Page 31: Mã hoá với chữ ký điện tử

31

Hình 8: Quá trình làm việc của một Digital Signature

Nguyên nhân của việc sai chữ ký: có 3 lý do của việc nhận một digital signature sai

Nếu digital signature là giả mạo và được giải mã với khoá public key, giá trị nguyên thuỷ nhận được sẽ không phải là original hash-value của message gốc tuy một vài giá trị khác có giống.

Nếu message đã bị đổi sau khi ký, current hash-value được tính từ message giả mạo này sẽ khác với original hash-value bởi vì hai message khác nhau thì hash-value khác nhau.

Decrypt Public Key

Page 32: Mã hoá với chữ ký điện tử

32

Nếu public key không tương ứng với private key được dùng trong khi ký, original hash-value nhận được bởi sự giải mã chữ ký với một khoá không đúng sẽ không phải là giá trị đúng.

2.3 chương trình ứng dụng

2.3.1 Giới thiệu chương trìnhChương trình em xây dựng gồm 3 modul chính:

# Form giới thiệu chương trình ứng dụng

# Form chương trình ký lên văn bản (*.txt)

# Form thông tin liên quan và sơ đồ hướng dẫn sử dụng

Cách sử dụng chương trình :

Ký lên văn bản : người gửi cần làm các bước sau để ký lên văn bản

Bước 1: Mở chương trình lên ta nhìn thấy là form thông tin chương trình ứng dụng gồm các thông tin về đề bài, tên giáo viên, tên người thực hiện và ngày tháng năm xây dựng chương trình .

Bước 2: Chuyển sang tab chương trình chính “ ký và xác nhận” để ký lên van bản ta làm một số thao tác sau :

- Load file văn bản (*.txt ) cần ký bằng cách nhấn vào nút “Browse”. Nội dung văn bản được hiển thị trong textbox “Nội dung file”.

- Nhấn nut tạo khóa hoặc load key từ file có sẵn trong máy tính

- Nhấn botton “Ký nhận” để tạo chữ ký điện tử, chữ ký này được gắn vào cuối nội dung văn bản. Lưu lại văn bản này để gửi đi.

Bước 3: Gửi đi văn bản đã ký nhận và public key cho người nhận

Xác thực chữ ký: Người nhận sau khi nhận được văn bản đã ký, để xác thực cần làm các bước sau:

Bước 1: Mở chương trình và Load file văn bản đã ký nhận lên bằng nhấn botton “Browse”.

Bước 2: Load public key mà đã nhận được từ người gửi.

Page 33: Mã hoá với chữ ký điện tử

33

Bước 3: Xác thực bằng cách nhấn botton “Kiểm tra”. Nếu văn bản và chữ ký đúng của người gửi thì sẽ hiện thông báo nội dung văn bản không bị thay đổi và chữ ký chính xác là của người gửi.

2.3.2 Một số hình ảnh của chương trình :

Hình 5: Giao diện giới thiệu chương trình chữ ký điện tử

Page 34: Mã hoá với chữ ký điện tử

34

Hình 6: Giao diện chương trình ký lên văn bản

Page 35: Mã hoá với chữ ký điện tử

35

Hình 7 : Trình tự các thông báo xuất hiện khi xác nhận chữ ký

Page 36: Mã hoá với chữ ký điện tử

36

Kết luận

Trong suốt quá trình tìm hiểu và hoàn thành đề tài của mình giúp cho tôi nắm bắt và hiểu được các khái niệm, cách thức tạo chữ ký điện tử cũng như các giải pháp xác thực chữ ký và ứng dụng của nó. Hơn nữa, còn hiểu được các cơ chế hoạt động của các hệ mã hóa bí mật, hệ mã công khai thông dụng như CAESAR, RSA. Tìm hiểu phương pháp sử lý với số lớn để xây dựng khóa . Bên cạnh đó, đã vận dụng được cách thức hoạt động của hệ mã RSA và giải thuật băm xây dựng được chương trình mã hóa và giải mã dữ liệu, và tạo ra chữ ký điện tử nhằm tăng tính năng an toàn và xác thực dữ liệu.

Tuy nhiên, trước những kết quả đạt được vẫn còn tồn tại nhiều hạn chế. Chẳn hạn như chương trình cài đặt chưa tổng quát, vẫn còn bám sát lý thuyết và tính ứng dụng thực tiễn chưa cao, chương trình chỉ ở phạm vi tạo chữ ký và kiểm tra tính toàn vẹn của dữ liệu mà chưa xác thực được người dùng. Ngoài ra, dữ liệu mã hóa chỉ có thể là những khối dữ liệu nhỏ.

Để khắc phục những hạn chế đó, cần có những hướng phát triển phù hợp như là mở rộng khả năng mã hóa và giải mã của các hệ mã hóa tăng tính an toàn và bảo mật cho những khối dữ liệu lớn trong quá trình truyền tin. Chương trình cần thêm tính năng quản lý thông tin cá nhân của người sử dụng, để xác thực người dùng và gán tính trách nhiệm cho họ đối với các thông điệp dữ liệu; nhằm giúp hoàn thiện chương trình mang tính thực tế, có ứng dụng thực tiễn đối với các tổ chức hay cá nhân có yêu cầu cao về tính bảo mật của thông điệp dữ liệu.

Em xin trân thành cảm ơn!

Sinh viên:

Nguyễn Trọng Khiêm