Tải bản đầy đủ (.docx) (29 trang)

Tiểu luận môn thương mại điện tử Chữ ký điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (624.14 KB, 29 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐỒNG NAI
KHOA TIN HỌC




THƯƠNG MẠI ĐIỆN TỬ
Đề tài
Đề tài
:
:
Chữ ký điện tử
Chữ ký điện tử
GVHD : Ths.Phạm Định Sắc
LỚP: 12DTH2LT4
SVTH: Nguyễn Hồng Khôi Nguyên MSSV: 1203125
Nguyễn Bá Linh MSSV: 1203124
Cao Thị Cảnh MSSV: 1202996

Biên Hòa , Ngày …. Tháng …. Năm 2013
Niên Khóa 2012 -2013
MỤC LỤC
Lời nói đầu ………………………………………………………………….…….
Phần 1: Mã hóa và các vấn đề liên quan ………………………………….….…
1.1 Khái niệm mã hóa dữ liệu …………………………………………….……
1.2 Hàm băm ……………………………………………………………….…….
1.2.1 Hàm băm và chữ ký…………………………………………………………
1.2.2 MD5 ……………………………………………………………….……
1.3 Thuật toán mã hóa khóa công khai RSA ……………………………….……
1.3.1 Mô tả sơ lược ……………………………………………………………
1.3.2 Thuật toán RSA ………………………………………………….………


1.3.3 Tính bảo mật của giải thuật RSA ………………………………….………
1.3.4 Các vấn đề đặt ra trong thực tế………………………………….………….
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ử ………………… ……………………….……
2.2 Cách thức hoạt động của chữ ký điện tử ……………… …………….…….
2.2.1 Quá trình ký ………………………………………………………….…….
2.2.2 Quá trình xác nhận chữ ký trên tài liệu ………………………….………
Kết luận …………………………………………………………………………
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 đóng góp ý kiến để chương trình của em được hoàn thiên hơn .
Mã hóa
Khóa mã hóa
Hệ thống Qlý khóa Khóa giải mã
Dữ liệu mã hóa
Giải mã
Dự liệu gốc
Dự liệu gốc
Phần 1: MÃ HÓA VÀ CÁC VẤN ĐỀ LIÊN QUAN
1.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
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.
Message MAC Value: A
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.

Message( Tin Nhắn)

MAC Value: A ( MAC giá trị )
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 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 value
Message Digest 5 (MD5) với —128-bit hash value
Message Digest 4 (MD4) với —128-bit hash value
Message 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.
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à f
F
, f
G
, f
H
,
f
I
, để 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).
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 + CLS
s
(a + g(b,c,d) + X[k] + T[i]).
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)

. CLS
s
: 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] = 2
32
* 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 2
32
Hình 4: Tác vụ của MD5: [abcd k s i]
Bảng T được xây dựng từ hàm sin
T
1
=
D76AA478
T
17
= F61E2562 T
33
= FFFA3942 T
49
= F4292244
T
2
= E8C7B756 T
18
= C040B340 T
34
= 8771F681 T
50

= 432AFF97
T
3
= 242070D8 T
19
= 265E5A51 T
35
= 69D96122 T
51
= AB9423A7
T
4
=
C1BDCEEE
T
20
=
E9B6C7AA
T
36
= FDE5380C T
52
= FC93A039
T
5
= F57C0FAF T
21
= D62F105D T
37
= A4BEEA44 T

53
= 655B59C3
T
6
= 4787C62A T
22
= 02441453 T
38
=
4BDECFA9
T
54
= 8F0CCC92
T
7
= A8304613 T
23
=
D8A1E681
T
39
= F6BB4B60 T
55
= FFEFF47D
T
8
= FD469501 T
24
= T
40

= BEBFBC70 T
56
= 85845DD1
E7D3FBC8
T
9
= 698098D8 T
25
=
21E1CDE6
T
41
= 289B7EC6 T
57
= 6FA87E4F
T
10
= 8B44F7AF T
26
= C33707D6 T
42
= EAA127FA T
58
= FE2CE6E0
T
11
= FFFF5BB1 T
27
= F4D50D87 T
43

= D4EF3085 T
59
= A3014314
T
12
= 895CD7BE T
28
=
455A14ED
T
44
= 04881D05 T
60
= 4E0811A1
T
13
= 6B901122 T
29
= A9E3E905 T
45
= D9D4D039 T
61
= F7537E82
T
14
= FD987193 T
30
=
FCEFA3F8
T

46
= E6DB99E5 T
62
= BD3AF235
T
15
= A679438E T
31
= 676F02D9 T
47
= 1FA27CF8 T
63
=
2AD7D2BB
T
16
= 49B40281 T
32
=
8D2A4C8A
T
48
= C4AC5665 T
64
= EB86D391
- 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
Vòng 4Vòng 3Vòng 1 Vòng 2
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ó:
+ 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 2
32
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:
MD
0
= IV
MD
q+1

= MD
q
+ f
I
(Y
q
, f
H
(Y
q
, f
G
(Y
q
,f
F
(Y
q
,MD
q
))))
MD = MD
L-1
Trong đó:
+ IV: giá trị khởi tạo của bộ đệm ABCD

được xác định trong bước 2.
+ Y
q
: 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
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ơ lượ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.
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 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.
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=
n,1
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. 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=m
e
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 = c
d
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ó

c
d
≡ (m
e
)
d
≡ m
ed
(mod N)
Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:
(m
ed
≡ m (mod p) và m
ed
≡ 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ó:
(m
ed
≡ m (mod p*q)
hay:
c
d
≡ 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
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 = M
e
mod n
Giải mã
Đoạn tin mã: C
Giải mã : M = C
d
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(k
2
)

+ 2 k bít mod n : 0(k
2
)
+ x
c
mod n : 0(k
3
)
Để tính x
c
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)
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) = m
e
mod N = m
17
mod 3233
với m là văn bản rõ. Hàm giải mã là:
decrypt(c) = c

d
mod N = c
2753
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) = 123
17
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) = 855
2753
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)
Thay q=n/p ta được phương trình bậc hai:
p
2
– (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 RSA
e. Tấn công dựa trên thời gian
f. 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)
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 < n
1/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ừ
).
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).
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ị m
e
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à 255
3
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 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:
S = (P, A, K, S, V)
Trong đó P = A = Z
n
, 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
*
n
Z
thỏa mãn a.b ≡ 1 (mod φ (n)). Các
hàm sig
K’
và ver
K”
được xác định như sau :
sig
K’
(x) = x
a
mod n
ver
K’
(x,y) = đúng ⇔ x ≡ y
b

(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;
ver
K”
(x,y) = đúng ⇔ y ≡ sig
K’
(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ý sig
K’
(x), tức là A gửi cho B
(x, sig
K’
(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ã e
K”
(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 S
1
và hệ xác nhận bằng chữ ký S
2
. Giả sử B có bộ khóa mật
mã K = (K’, K”) với K’ = n, e) và K” = d trong hệ S
1
, và A có bộ khóa chữ ký K

x
= (K’
s
, K”
s
) với
K”
x
= a và K”
s
= (n,b) trong hệ S
2
. 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 e
K’
((x,
)x(sig
'
s
K
). Nhận được văn bản mật mã đó B sẽ
dùng thuật toán giải mã d
K”
của mình để thu được (x,
)x(sig
'
s
K
), sau đó dùng thuật toán kiểm thử

chữ ký công khai
'
s
K
ver
của A để xác nhận chữ ký
'
s
K
sig
(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.
+ P = A = Z
n
, K = {(n, b, a) : a ∈
mod1,
*

baz
n
φ(n)} ;
+ Khoá bí mật k’ = a; khoá công khai k’’ = (n,b);
+ Ký: x ∈ P, y = Sig
k’
(x) = x
a
mod n.
+ Kiểm tra chữ ký: Ver

k’’
(x, y) = true ⇔ x ≡ y
b
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 = 56
411

=235.
Kiểm tra: 56 ≡ 235
3
(=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ử
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ảimã 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
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á 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.
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
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

×