1
MỞ ĐẦU
1. Lý do chọn đề tài
Trong sự phát triển không ngừng của ngành Công nghệ thông tin kéo theo là
rất nhiều ứng dụng của nó vào đời sống của con người, tạo cho chúng ta sự thoái
mái trong việc giao tiếp, trao đổi thông tin, tất cả những sự việc đều được cập nhật
một cách nhanh chóng trên các phương tiện truyền thông. Mọi thông tin của cá
nhân, tập thể, doanh nghiệp, hay thậm chí của các bộ, ban ngành các cấp đều có thể
được đưa lên mạng Internet. Làm thế nào để có thể khẳng định những thông tin đó
là của ai? Để giải quyết vấn đề này không thể sử dụng con dấu hay chữ ký thông
thường điều này dẫn đến sự ra đời của chữ ký số.
Mặt khác sự bùng nổ phương thức truyền thông tin thông qua Internet và các
phương tiện truyền thông khác đã đưa chúng ta đến việc cần phải đối mặt với việc
bảo mật những thông tin cá nhân, thông tin riêng tư, các thông tin cá nhân riêng tư
có thể bị thay đổi khi đưa lên Internet.
Vấn đề an toàn, an ninh mạng không mới nhưng càng ngày càng trở nên
quan trọng cùng với sự phát triển theo chiều rộng và chiều sâu của xã hội thông tin.
Ví dụ đơn giản như gần đây rất nhiều trang web, các hệ thống mạng ở Việt nam bị
hacker tấn công gây hậu quả đặc biệt nghiêm trọng. Việc xây dựng một số thuật
toán tối ưu hóa nhằm tăng hiệu quả của chương trình bảo mật thông tin và ứng dụng
vào chữ ký số là cơ sở nội dung trong đề tài luận văn này.
2. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu:
Nghiên cứu các giải pháp mã hóa để bảo mật thông tin và những phương
pháp, kỹ thuật tạo chữ kí số trên các tài liệu, văn bản điện tử để xác thực nguồn gốc
tài liệu hay văn bản của người gửi.
Các hệ mật mã khóa công khai, trong đó hệ mật mã RSA được sử dụng làm
đối tượng nghiên cứu chính của đề tài nhằm phát hiện các phép xử lý toán học cần
tối ưu. Từ các kết quả thu được bước đầu đề tài đưa ra một cách xây dựng thử
nghiệm vào chữ ký số áp dụng được các kết quả tối ưu hóa.
2
Luận văn sẽ tập trung nghiên cứu và làm rõ hơn về ý tưởng, cơ sở toán học,
thuật toán và độ phức tạp của mã hóa nói chung và của mã hóa công khai nói riêng.
Phạm vi nghiên cứu:
Đề tài thực hiện tối ưu hóa với một số phép tính toán với số nguyên lớn. Ứng
dụng thử nghiệm trong một hệ mã nhằm so sánh hiệu năng xử lý của hệ mã trước và
sau khi tối ưu.
Nghiên cứu các tài liệu về mã hóa, mật mã của các tác giả trong và ngoài
nước, các bài báo, thông tin trên Internet, ...
Nghiên cứu ngôn ngữ lập trình hướng đối tượng Visual basic 6, Visual C #
2008 để viết một ứng dụng nhỏ về chữ ký số.
3. Những nội dung chính nghiên cứu chính.
Luận văn sẽ được chia thành 3 chương, phần kết quả và hướng phát triển.
CHƯƠNG 1: CƠ SỞ TOÁN HỌC CỦA HỆ MẬT MÃ
1.1 Cơ sở toán học
1.2 Hệ mã hóa
1.3 Một số hệ mã hóa khóa công khai
1.4 Kết luận chương
CHƯƠNG 2: CHỮ KÝ SỐ
2.1 Giới thiệu
2.2 Các ứng dụng của chữ ký số
2.3 Hàm băm
2.4 Thuật toán chữ ký số
2.5 Chứng thực khóa công khai
2.6 Kết luận chương
CHƯƠNG 3: BẢO MẬT TRANG THÔNG TIN ĐIỆN TỬ
3.1 Giới thiệu trang thông tin điện tử
3.2 Bảo mật, an toàn thông tin
3.3 Bảo đảm hệ thống khỏi sự xâm nhập phá hoại từ bên ngoài
3.4 Giao thức bảo mật ứng dụng chữ ký số cho các văn bản pháp quy trên
trang thông tin
3
3.5 Cài đặt thực nghiệm và đánh giá
3.6 Kết luận chương
4. Các kí hiệu dùng trong luận văn
P
Là tập hữu hạn các văn bản có thể.
A
Là tập hữu hạn các chữ ký có thể.
K
Là tập hữu hạn các khoá có thể.
S
Là tập các thuật toán ký.
V
Là tập các thuật toán kiểm thử.
C
Là tập hữu hạn các bản mã có thể;
E
Là tập hợp các hàm mã hóa có thể;
D
Là tập các hàm giải mã có thể;
ek
Thuật toán mã hoá
dk
Thuật toán giải mã
gcd
Ước chung lớn nhất
lcm
Bội chung nhỏ nhất
Sig k
Thuật toán ký
Ver k
Thuật toán kiểm tra chữ ký
4
CHƯƠNG 1: CƠ SỞ TOÁN HỌC CỦA HỆ MẬT MÃ
Trong chương này tôi xin trình bày một số cơ sở toán học, các khái niệm hệ
mã hóa dữ liệu, phân loại hệ mã hóa các ưu nhược điểm của hệ mã hóa, một số hệ
mã hóa khóa công khai, để xác định tính toàn vẹn an toàn dữ liệu là cơ sở hình
thành và xây dựng các thuật toán mã hóa.
1.1 Cơ sở toán học
1.1.1 Ước chung lớn nhất, bội chung nhỏ nhất
Số nguyên d được gọi là ước chung của các số nguyên a 1, a2, …, an , nếu nó
là ước của tất cả các số đó.
Một ước chung d > 0 của các số nguyên a 1, a2, …, an, trong đó mọi ước
chung của a1, a2, …, an đều là ước của d, thì d được gọi là ước chung lớn nhất
(UCLN) của a1, a2, …, an . Ký hiệu d = gcd (a1, a2, …, an) hay d = UCLN(a1, a2, …,
an). Nếu gcd (a1, a2, …, an) = 1, thì các số a1, a2, …, an được gọi là nguyên tố cùng
nhau.
Số nguyên m được gọi là bội chung của các số nguyên a 1, a2, …, an , nếu nó
là bội của tất cả các số đó.
Một bội chung m > 0 của các số nguyên a1, a2, …, an, trong đó mọi bội chung
của a1, a2, …, an đều là bội của m, thì m được gọi là bội chung nhỏ nhất (BCNN)
của a1, a2, …, an. Ký hiệu m = lcm (a1, a2, …, an) hay m = BCNN (a1, a2, …, an).
Ví dụ: Cho a =20, b =25, gcd (20, 25) = 5, lcm (20, 25) = 100.
Hai số 20 và 13 là số nguyên tố cùng nhau, vì gcd (20, 13) = 1
Thuật toán Euclide tìm ước chung lớn nhất
INPUT: Hai số nguyên không âm a và b, với a = b.
OUTPUT: Ước số chung lớn nhất của a và b.
1. Trong khi còn b > 0, thực hiện:
đặt r ← a mod b, a ←b , b ← r.
2. Cho ra kết quả (a).
Ví dụ: Tìm gcd (528, 234) bằng thuật toán Euclide
Ta có bảng mô phỏng kết quả sau:
5
a
528
234
60
54
€6
b
234
60
54
6
0
r
60
54
6
0
Kết luận gcd (528, 234) = 6.
Ta biết rằng nếu gcd (a,b) = d, thì phương trình bất định: a*x + b*y = d
có nghiệm nguyên (x,y), và một nghiệm nguyên (x,y) như vậy có thể tìm được bởi
thuật toán Euclide mở rộng như sau:
Thuật toán Euclide mở rộng:
INPUT: Hai số nguyên không âm a và b với a = b.
OUTPUT: d = gcd (a,b) và hai số x,y sao cho a*x + b*y = d.
1. Nếu b = 0 thì đặt d ← a , x ←1, y ← 0, và cho ra (d, x, y).
2. Đặt x2 = 1, x1 = 0 , y2 = 0 , y1 = 1.
3. Trong khi còn b > 0, thực hiện:
3.1. q←a div b, r ← a mod b , x ← x2 - q*x1 , y ← y2 - q*y1.
3.2. a ←b, b ←r , x2 ← x1 , x1← x , y2← y1 và y1←y.
4. Đặt d ← a, x←x2 , y← y2 , và cho ra kết quả (d, x, y).
Ví dụ: Dùng thuật toán Euclide mở rộng tính gcd (528, 234)
Ta có bảng mô phỏng sau:
a
528
234
60
54
6
b
q
r
x
y
x1
y2
y1
y2
234
0
1
1
0
60
2
60
1
-2
1
0
-2
1
54
3
54
-3
7
-3
1
7
-2
6
1
6
4
-9
4
-3
-9
7
0
9
0
-39
88
-39
4
88
-9
Ta có thể kiểm chứng lại rằng sau mỗi lần thực hiện chu trình gồm hai lệnh
3.1 và 3.2, các giá trị x, y, r thu được luôn thoả mãn 532*x + 234*y = r.
Khi kết thúc các vòng lặp (ứng với giá trị b = 0), thực hiện tiếp lệnh 4 ta
được kết quả d = 6, x = 4 và y = -9, cặp số (4, -9) thoả mãn: 528*4 + 234*(-9) = 6.
1.1.2 Số nguyên tố
Số nguyên tố là số tự nhiên lớn hơn 1 và chỉ có hai ước là 1 và chính nó.
6
Số nguyên tố có vai trò và ý nghĩa to lớn trong số học và lý thuyết mật mã.
Bài toán kiểm tra tính nguyên tố của một số nguyên dương n và phân tích số n
thành thừa số nguyên tố là các bài toán rất được quan tâm. “Phương pháp kiểm tra
tính nguyên tố” Phương pháp ‘cổ điển’ và phương pháp ‘xác suất’.
1.1.3 Quan hệ đồng dư [3,4]
Cho các số nguyên a, b, m (n > 0). Ta nói rằng a và b “đồng dư” với nhau
theo modulo m, nếu chia a và b cho m nhận được cùng một số dư (hoặc a – b chia
hết cho m). Ký hiệu: a ≡ b (mod m).
Ví dụ:
23 ≡ 11 (mod 4) vì chia 23 và 11 cho 4, được cùng số dư là 3.
Phương trình đồng dư tuyến tính
Phương trình đồng dư tuyến tính có dạng: a*x = b (mod m )
(1)
Trong đó a, b, n là các số nguyên, m > 0, x là ẩn số. Phương trình (1) có nghiệm khi
và chỉ khi d = gcd (a,m ) / b, và khi đó nó có đúng d nghiệm theo modulo m.
Bây giờ ta xét hệ thống các phương trình đồng dư tuyến tính.
x ≡ a1 ( mod m1 )
x ≡ a ( mod m )
2
2
...
x ≡ an ( mod mn )
Ta ký hiệu: m = m1*m2*...*mk , Mi = m / mi . Ta có định lý sau đây:
Định lý Số dư Trung Hoa
Định lý số dư Trung Hoa là tên gọi do người phương Tây đặt cho định lý này.
Người Trung Hoa gọi nó là bài toán Hàn Tín điểm binh. Sử ký Tư Mã Thiên viết
rằng khi Hàn Tín điểm quân số, ông cho quân lính xếp hàng 3, hàng 5, hàng 7 rồi
báo cáo số dư. Từ đó ông tính chính xác quân số đến từng người.
Định lý: Giả sử n > 1 là số nguyên dương và m1, m2, ..., mn là n số nguyên lớn
hơn 1 đôi một nguyên tố cùng nhau. Đặt M = m 1*m2*...*mn. Cho trước các số
nguyên a1, a2, ..., an khi đó tồn tại duy nhất một số nguyên x (0≤x
phương trình đồng dư sau đây:
7
x ≡ a1 ( mod m1 )
x ≡ a ( mod m )
2
2
...
x ≡ an ( mod mn )
Bản chất của bài toán Hàn Tín điểm binh là việc giải hệ phương trình đồng dư
bậc nhất:
x ≡ a1 ( mod m1 )
x ≡ a ( mod m )
2
2
...
x ≡ an ( mod mn )
Hệ phương trình đồng dư nói trên có nghiệm duy nhất theo modun
M = m1*m2*...*mk, trong đó m1, m2, ..., mn đôi một nguyên tố cùng nhau. Trong bài
toán Hàn Tín n = 3 và m1 = 3, m2 = 5, m3 = 7.
Ta xét phương trình đồng dư bậc hai có dạng đơn giản sau:
x2 ≡ a (mod m)
Trong đó m là một số nguyên dương, a là số nguyên với gcd (a,m) =1, và x
là ẩn số. Phương trình đó không phải bao giờ cũng có nghiệm, khi nó có nghiệm thì
ta nói a là một thặng dư bậc hai mod m:
Bây giờ ta xét việc giải phương trình đồng dư bậc hai: x 2 ≡ a (mod m) (2)
trong một trường hợp đặc biệt khi m = p là số nguyên tố có dạng p = 4*n +3, tức p
đồng dư với 3 theo mod 4, và a là một số nguyên nguyên tố với p. Theo tiêu chuẩn
Euler ta biết phương trình (2) có nghiệm khi và chỉ khi a(p-1)/2 ≡ 1 (mod p). Khi đó ta
có:
a(p-1)/2 ≡ a (mod p)
a2(n+1) ≡ a (mod p)
Do đó x = ±an +1 (mod p) là hai nghiệm của phương trình
(2)
8
1.2 Hệ mã hóa
1.2.1 Khái niệm hệ mã hóa dữ liệu
Mã hoá dữ liệu là mã hóa với mục đích làm cho dữ liệu không thể đọc được
bởi bất cứ ai, ngoại trừ những ai được phép đọc. Mã hóa sử dụng thuật toán và
khóa để biến đổi dữ liệu từ hình thức đơn giản rõ ràng (plain hay cleartext) sang
hình thức mật mã vô nghĩa (code hay ciphertext). Chỉ có những ai có thông tin giải
mã thì mới giải mã và đọc được dữ liệu.
1.2.2 Phân loại hệ mã hóa [4]
1.2.2.1 Hệ mã hóa khóa đối xứng
Hệ mã hoá khóa đối xứng là Hệ mã hóa mà biết được khóa mã hoá thì có thể
“dễ” tính được khóa giải mã và ngược lại.
Trong hệ thống mã hoá đối xứng, trước khi truyền dữ liệu, 2 bên gửi và nhận
phải thoả thuận về khoá dùng chung cho quá trình mã hoá và giải mã. Sau đó, bên
gửi sẽ mã hoá bản rõ (Plaintext) bằng cách sử dụng khoá bí mật này và gửi thông
điệp đã mã hoá cho bên nhận. Bên nhận sau khi nhận được thông điệp đã mã hoá sẽ
sử dụng chính khoá bí mật mà hai bên thoả thuận để giải mã và lấy lại bản rõ
(Plaintext).
Gửi
Nhận
Hình 1.1 Quá trình thực hiện cơ chế mã hóa
Mã hoá đối xứng có thể được phân thành hai loại:
Loại thứ nhất tác động trên bản rõ theo từng nhóm bits. Từng nhóm bits này
được gọi với một cái tên khác là khối (Block) và thuật toán được áp dụng gọi là mã
9
hoá khối (Block Cipher). Theo đó, từng khối dữ liệu trong văn bản ban đầu được
thay thế bằng một khối dữ liệu khác có cùng độ dài. Đối với các thuật toán ngày nay
thì kích thước chung của một khối là 64 bits.
Loại thứ hai tác động lên bản rõ theo từng bit một. Các thuật toán áp dụng
được gọi là mã hoá dòng (Stream Cipher). Dữ liệu của văn bản được mã hoá từng
bit một. Các thuật toán mã hoá dòng này có tốc độ nhanh hơn các thuật toán mã hoá
khối và nó thường được áp dụng khi lượng dữ liệu cần mã hoá chưa biết trước.
Một số thuật toán nổi tiếng trong mã hoá đối xứng là: DES, Triple DES
(3DES), RC4, AES… [1,2]
DES: viết tắt của Data Encryption Standard. Với DES, bản rõ (Plaintext)
được mã hoá theo từng khối 64 bits và sử dụng một khoá là 64 bits, nhưng thực tế
thì chỉ có 56 bits là thực sự được dùng để tạo khoá, 8 bits còn lại dùng để kiểm tra
tính chẵn, lẻ. DES là một thuật toán được sử dụng rộng rãi nhất trên thế giới. Hiện
tại DES không còn được đánh giá cao do kích thước của khoá quá nhỏ 56 bits, và dễ
dàng bị phá vỡ.
Triple DES (3DES): 3DES cải thiện độ mạnh của DES bằng việc sử dụng
một quá trình mã hoá và giải mã sử dụng 3 khoá. Khối 64-bits của bản rõ đầu tiên
sẽ được mã hoá sử dụng khoá thứ nhất. Sau đó, dữ liệu bị mã hóa được giải mã
bằng việc sử dụng một khoá thứ hai. Cuối cùng, sử dụng khoá thứ ba và kết quả của
quá trình mã hoá trên để mã hoá.
C = EK3(DK2(EK1(P)))
P = DK1(EK2(DK3(C)))
AES: Viết tắt của Advanced Encryption Standard, được sử dụng để thay thế
cho DES. Nó hỗ trợ độ dài của khoá từ 128 bits cho đến 256 bits.
Do đó hệ mã hoá khoá đối xứng có ưu điểm và nhược điểm sau:
a. Ưu điểm
Giải mã và mã hoá “nhanh” hơn hệ mã hoá khoá công khai
b. Nhược điểm
Hệ mã hoá khoá đối xứng “không an toàn” so với hệ mã hoá khoá công
khai bởi lý do sau:
10
Người mã hoá và người giải mã phải có “chung” một khoá. Khóa phải được
giữ bí mật tuyệt đối, vì biết khoá này “dễ” xác định được khoá kia và ngược lại.
Vấn đề thỏa thuận khoá và quản lý khóa chung là khó khăn và phức tạp.
Người gửi và người nhận phải luôn thống nhất với nhau về khoá. Việc thay đổi
khoá là rất khó và dễ bị lộ. Khóa chung phải được gửi cho nhau trên kênh an toàn.
1.2.2.2 Hệ mã hóa khóa công khai
Hệ mã hoá khoá công khai là hệ mã hoá có khoá lập mã và khoá giải mã
khác nhau, biết được khoá này “khó” tính được khoá kia.
Hệ mã hoá này được gọi là hệ mã hoá khoá công khai vì khoá lập mã được
công khai (gọi là khoá công khai – Public key), Khoá giải mã giữ bí mật (gọi là
khoá riêng – Private key). Điều quan trọng đối với hệ thống là không thể tìm ra
khóa bí mật nếu chỉ biết khóa công khai.
Nhận khóa công
khai
Gửi
Nhận khóa riêng
Nhận
Hình 1.2 Quá trình thực hiện mã hóa khóa công khai
Quá trình truyền và sử dụng mã hoá khoá công khai được thực hiện như sau:
Bên gửi yêu cầu cung cấp hoặc tự tìm khoá công khai của bên nhận trên một
server chịu trách nhiệm quản lý khoá.
Sau đó hai bên thống nhất thuật toán dùng để mã hoá dữ liệu, bên gửi sử
dụng khoá công khai của bên nhận cùng với thuật toán đã thống nhất để mã hoá
thông tin được gửi đi
Khi nhận được thông tin đã mã hoá, bên nhận sử dụng khoá bí mật của mình
để giải mã và lấy ra thông tin ban đầu.
Vậy là với sự ra đời của Mã hoá công khai thì khoá được quản lý một cách
linh hoạt và hiệu quả hơn. Người sử dụng chỉ cần bảo vệ khoá bí mật.
11
Một số hệ mã hóa khóa công khai phổ biến như RSA, Rabin, Elgaml, ...
Do đó hệ mã hoá khoá công khai có ưu điểm và nhược điểm sau:
a. Ưu điểm
Đơn giản trong việc lưu chuyển khóa: Chỉ cần đăng ký một khóa công khai
và mọi người sẽ lấy khóa này về để trao đổi thông tin với người đăng ký. Vì vậy
không cần kênh bí mật để truyền khóa.
Mỗi người chỉ cần một cặp khóa công khai – khóa bí mật là có thể trao đổi
thông tin với tất cả mọi người. Là tiền đề cho sự ra đời của chữ ký điện tử và các
phương pháp chứng thực điện tử.
b. Nhược điểm
Mã hóa và giải mã chậm hơn hệ mã hóa khóa đối xứng.
1.2.2.3 Hệ mã hóa khối (Modern Block Ciphers)
Trong mã hóa khối hiện đại, một trong những thuật toán được sử dụng rộng
rãi nhằm cung cấp các dịch vụ bảo mật hay xác thực.
Tiến trình mã hóa khối truyền thông điệp đến các khối, mỗi khối sẽ thực hiện
En/Decrypted sau khi nhận thông điệp. Như mã hóa thay thế, nó sử dụng một block
rất lớn 64 bit hay hơn.
Tiến trình mã hóa dòng truyền thông điệp thành dòng từng bit hay byte ở
một thời điểm khi En/Decryting.
Hiện có rất nhiều thuật toán mã hóa khối được sử dụng như DES, MD4,
MD5, SH1, SH2...
a. Ưu điểm
Chỉ cần biết một cặp khối bản rõ và bản mã người ta có thể dễ dàng suy ra
được khóa và dùng khóa để giải các khối bản mã khác.
12
b. Nhược điểm
Khi kích thước khối lớn thì số dòng của bảng khóa cũng lớn và gây trở ngại
cho việc lưu trữ cũng như trao đổi khóa giữa người gửi và nhận.
1.3 Một số hệ mã hóa khóa công khai
1.3.1 Hệ mã hóa khóa công khai RABIN
Sơ đồ
Hệ mã hóa là bộ gồm 5 thành phần: {P, C, K, E, D}, trong đó:
+ P (Plaintext): là tập hữu hạn các bản rõ có thể.
+ C (CipherText): là tập hữu hạn các bản mã có thể.
+ K (Key): là tập hữu hạn các khóa có thể.
+ E (Encyption): là tập hợp các hàm mã hóa có thể.
+ D (Decyption): là tập các hàm giải mã có thể.
Với mỗi k ∈ K, ta định nghĩa ek: P → C; dk: C → P là hai hàm cho bởi:
∀x ∈ P : y = ek(x); ∀y ∈ C : dk(y) = x. (vì: dk(ek(x)) = x).
Tạo khóa
Hệ mã hóa là bộ gồm 5 thành phần {P, C, K, E, D}, trong đó:
+ P = C = Zn, trong đó n là một số nguyên Blum, tính n = p*q;
+ Chọn khóa công khai là n và b (0 ≤ b ≤ n-1); chọn khóa bí mật là p và q;
+ Chọn p và q là hai số nguyên tố lớn khác nhau có tính chất sau: p ≡ 3 (mod 4);
q ≡ (3mod 4) (tức là: p = 3 + 4*t, q = 3 + 4*m).
Mã hóa
Với bản rõ x ∈ P, định nghĩa bản mã là: y = ek (x) = x* (x + b) (mod n).
Giải mã
Với bản mã y ∈ C, bản rõ là: x = dk (y) =
b2 b
y+
−
(mod n).
4 2
+ Đặt z = x + b/2, ta có:
z2 = x 2 + b2/4 + 2x * b/2 = x2 + b2/4 + x*b = b2/4 + x*(x + b) (mod n).
Tức là z 2 = b2/4 + y (mod n).
+ Đặt T = b 2/4 + y, ta có phương trình z 2 ≡ T (mod n), n = p*q
Phương trình (1) tương đương với hệ phương trình (2):
(1)
13
z 2 ≡ T (mod p)
2
z ≡ T (mod q)
(2)
+ Vì p, q là các số nguyên tố, nên ta có: T(p -1)/2 ≡ 1 (mod p), T(q -1)/2 ≡ 1 (mod q).
+ Nhân 2 vế với T ta được: T(p +1)/2 ≡ T (mod p), T(q +1)/2 ≡ T (mod q) hay ta có:
( ± T (p+1)/4 )2 ≡ T mod p
(p+1)/4 2
) ≡ T mod q
( ± T
(3)
+ Từ (2), (3) ta có hệ phương trình:
( ± T (p+1)/4 )2 ≡ z 2
(p+1)/4 2
) ≡ z2
( ± T
(4)
+ Hệ phương trình (2) và do phương trình (1) có 4 nghiệm theo mod n nên tương
ứng với 4 hệ phương trình sau:
(p +1) / 4
mod p
z ≡ T
(q +1) / 4
mod q
z ≡ T
(p +1) / 4
mod p
z ≡ T
(q +1) / 4
mod q
z ≡ −T
z ≡ −T (p +1) / 4 mod p
(q +1) / 4
mod q
z ≡ T
z ≡ − T (p +1) / 4 mod p
(q +1) / 4
mod q
z ≡ − T
Việc chọn giá trị nào trong 4 giá trị tìm được làm bản rõ là tùy thuộc vào những đặc
trưng khác của bản rõ mà người giải mã nhận biết.
1.3.2 Hệ mã hóa khóa công khai ELGAMAL
Sơ đồ
Hệ mã hóa là bộ gồm 5 thành phần: {P, C, K, E, D}, trong đó:
+ P (Plaintext): là tập hữu hạn các bản rõ có thể.
+ C (CipherText): là tập hữu hạn các bản mã có thể.
+ K (Key): là tập hữu hạn các khóa có thể.
+ E (Encyption): là tập hợp các hàm mã hóa có thể.
+ D (Decyption): là tập các hàm giải mã có thể.
Với mỗi k ∈ K, ta định nghĩa ek: P → C; dk: C → P là hai hàm cho bởi:
∀x ∈ P : y = ek(x); ∀y ∈ C : dk(y) = x. (vì: dk(ek(x)) = x).
*Tạo cặp khóa (bí mật, công khai) (a, h) :
14
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Zp là “khó” giải.
Chọn phần tử nguyên thuỷ g ∈ Zp*. Đặt P = Z p*, C = Z p* × Z p*.
Chọn khóa bí mật là a ∈ Zp*. Tính khóa công khai h ≡ g a mod p.
Định nghĩa tập khóa:
κ = {(p, g, a, h):
h ≡ g a mod p}. Các giá trị p, g, h
được công khai, phải giữ bí mật a.
Với Bản rõ x∈ P và Bản mã y ∈ C, với khóa k ∈
κ định nghĩa:
* Lập mã:
Chọn ngẫu nhiên bí mật r ∈ Zp-1, bản mã là y = ek (x, r) = (y1, y2).
Trong đó y1= gr mod p và y2 = x * h r mod p
* Giải mã:
dk (y1, y2) = y2 * (y1 a) -1 mod p.
1.3.3 Hệ mã hóa khóa công khai RSA [4]
Hệ mã hóa khóa công khai được đề xuất bởi Ron Rivest, Adi Shamir và Len
Adleman (MIT) vào năm 1977.
Hệ mã hóa sử dụng phương pháp mã hóa khối với mỗi khối là một số
nguyên < n: Thông thường kích cỡ n là 1024 bit ≈ 309 chữ số thập phân.
Sơ đồ
Giả sử khối bản gốc của người gửi là M và khối bản mã của người nhận là
C, quá trình mã hóa và giải mã RSA là: C = Me mod n và M = Cd mod n
Cả người gửi và người nhận phải biết giá trị n. Người gửi biết giá trị e và chỉ
người nhận biết giá trị d. Đây là một thuật toán mã hóa khóa công khai với khóa
công khai KU = {e,n} và khóa riêng KR = {d,n}. Ta có sơ đồ biểu diễn thuật toán
như sau:
15
Hình 1.3. Sơ đồ biểu diễn thuật toán mã hóa
1.4 Kết luận chương
Ngày nay vấn đề an toàn thông tin được xem là một trong những quan tâm
hàng đầu của xã hội, có ảnh hưởng rất nhiều đến hầu hết các ngành, lĩnh vực, bao
trùm toàn bộ các đối tượng tham gia giao dịch điện tử từ cá nhân, doanh nghiệp, tổ
chức kinh tế, tổ chức chính trị - xã hội... An toàn thông tin có mục đích là phải tổ
chức việc xử lý, ghi nhớ và trao đổi thông tin đảm bảo tính bí mật, toàn vẹn, sẵn
sàng và đáng tin cậy.
Các giải pháp bảo mật an toàn thông tin phổ biến được biết đến hiện nay là
che, giấu, bảo đảm toàn vẹn, xác thực thông tin; kiểm soát lối vào ra của thông tin;
Phát hiện, xử lý các lỗ hổng và phối hợp các giải pháp. Một trong những kỹ thuật
phổ biến trong các phương pháp bảo mật an toàn thông tin là “che” thông tin hay
còn gọi là mã hoá thông tin. Mã hoá thông tin có mục đích ngoại trừ những người
được phép thì không ai có thể đọc được dữ liệu. Các hệ mã hoá dữ liệu gồm: Hệ mã
hóa khóa đối xứng và Hệ mã hóa khóa phi đối xứng. Một số hệ mã hoá phi đối
xứng (mã hoá khoá công khai) phổ biến đang áp dụng hiện nay là Hệ mã hoá khoá
công khai RABIN, ELGAMAL, RSA,... Trong đó, thuật toán RSA có đặc tính hấp
16
dẫn: một cặp khoá có thể cùng sử dụng cho cả hai mục đích đó là mã hoá (ví dụ sử
dụng khi truyền một khoá đối xứng) và chữ ký số.
Trong chương 1 đã trình bày những vấn đề mang tính cơ sở khoa học, nền
tảng cho việc sử dụng chữ ký số vào việc bảo mật và xác thực thông tin. Khái niệm
chữ ký số, cách phân loại, thuật toán chữ ký số một số sơ đồ chữ ký hiện đang được
sử dụng phổ biến sẽ được trình bày trong nội dung của chương 2.
17
CHƯƠNG 2: CHỮ KÝ SỐ
Các cơ sở toán học, các hệ mã hóa khóa bí mật, khóa công khai, một số hệ
mã hóa khóa công khai đã trình bày trong chương 1 là nền tảng cho việc sử dụng
chữ ký số vào việc bảo mật và xác thực thông tin.
Chương 2 trình bày các khái niệm như chữ ký số, chữ ký điện tử, dấu điện
tử, chữ ký sinh trắc học; cách phân loại chữ ký số, quy trình tạo và kiểm tra chữ ký
số, các ưu điểm của chữ ký số và thuật toán chữ ký số cùng một số sơ đồ chữ ký
hiện đang được sử dụng phổ biến hiện nay và một số ứng dụng của chữ kí số cũng
được giới thiệu trong chương này.
2.1 Giới thiệu
Một trong những ứng dụng của kỹ thuật mã hoá khóa công khai là chữ ký số.
Chữ ký số được phát triển và ứng dụng rộng rãi hiện nay dựa trên một số thuật toán
như RSA, DSA, ElGamal, SHA... là cơ sở quan trọng để hình thành hạ tầng khóa
công khai cho phép người sử dụng của một mạng công cộng không bảo mật như
Internet trao đổi dữ liệu và tiền một cách an toàn, thông qua việc sử dụng một cặp
khóa công khai và bí mật được cấp phát.
Các khái niệm, quá trình thực hiện chữ ký số và thuật toán sử dụng trong
chữ ký số sẽ được giới thiệu chi tiết tại phần tiếp theo.
2.1.1 Khái niệm
Chữ ký số là mô hình sử dụng các kỹ thuật mật mã để gắn với mỗi người sử
dụng một cặp khóa công khai - bí mật và qua đó có thể ký các văn bản điện tử cũng
như trao đổi các thông tin mật. Khóa công khai thường được phân phối thông qua
chứng thực khóa công khai. Quá trình sử dụng chữ ký số bao gồm 2 quá trình: tạo
chữ ký và kiểm tra chữ ký.
Chữ ký số là một dạng chữ ký điện tử (Electronic Signature) là dạng thông
tin đi kèm dữ liệu (văn bản, hình ảnh, video,...) nhằm mục đích xác định người chủ
của dữ liệu đó.
Chữ ký số chỉ là một tập con của chữ ký điện tử, là một dạng chữ ký điện tử
dựa trên công nghệ mã hoá. Để sử dụng chữ ký số thì người dùng phải có một cặp
khoá gồm khoá công khai (public key) và khoá bí mật (private key). Khoá bí mật
18
dùng để tạo chữ ký số, khoá công khai dùng để thẩm định chữ ký số hay xác thực
người tạo ra chữ ký số đó.
2.1.2 Phân loại chữ ký số
Hai nhóm chính của Electronic Signature (Chữ ký điện tử) đã được phát
triển dựa trên 2 công nghệ cơ bản: Digital Signatures (Chữ ký số) và E-SIGN (Dấu
điện tử).
Electronic
Signature
Digital
Signature
E-SIGN
Chữ ký điện tử
Chữ ký số
Dấu điện tử
2.1.2.1 Digital Signatures (Chữ ký số)
Chữ ký số là một dạng chữ ký điện tử, độ an toàn cao và được sử dụng rộng
rãi, được phát triển dựa trên lý thuyết mật mã và thuật toán mã hóa bất đối xứng.
Thuật toán mã hóa dựa vào cặp khóa bí mật (Private Key) và khóa công khai
(Public Key). Được sử dụng thông qua nhà cung cấp chính thức ( CA – Certificate
Authority).
Chữ ký số giúp người nhận thông điệp có thể tin tưởng ở nội dụng văn bản
mình nhận được là của người quen biết. Người gửi cũng không thể chối bỏ trách
nhiệm là chính mình đã gửi văn bản đó đi, văn bản đã được số hóa là một chuỗi bit
(vd email, contracts,... được gửi thông qua những giao thức mã hóa).
2.1.2.2 E-SIGN (Dấu điện tử)
Dấu điện tử là một dạng chữ ký thông thường không sử dụng hạ tầng khóa
công khai PKI ( Public Key Infrastructure). Chủ yếu quản lý dựa vào danh tính và
nhận dạng Logs (Log – in).
Dấu điện tử có tính bảo mật không cao nên chỉ hợp cho các hệ thống đóng.
2.1.2.3 Biometric Signatures (Chữ ký sinh trắc học)
Đôi khi ta cũng có thể sử dụng những dấu vân tay hoặc hình ảnh tròng đen
của mắt như một kiểu chữ ký sinh trắc.
19
Để xác nhận dạng chữ ký này đòi hỏi công nghệ cao và tốn kém đồng thời
cũng có những lỗ hổng trong bảo mật (sao chép vân tay,...).
2.1.3 Cách tạo chữ ký
2.1.3.1 Chữ ký số (digital signature) [5]
Là mô hình sử dụng các kỹ thuật mật mã để gắn với mỗi người sử dụng một
cặp khóa công khai - bí mật và qua đó có thể ký các văn bản điện tử cũng như trao
đổi các thông tin mật. Khóa công khai thường được phân phối thông qua chứng
thực khóa công khai.
Quá trình sử dụng chữ ký số bao gồm 2 quy trình: tạo và kiểm tra chữ ký.
Quy trình tạo chữ ký số
Dùng giải thuật băm để thay đổi thông điệp cần truyền đi, kết quả ta được
một MD (message digest), dùng giải thuật MD5 ta được digest dài 128 bit, dùng
giải thuật SHA () ta có chiều dài 160 bit.
Sử dụng khóa private key của người để mã hóa message digest thu được ở
trên, thông thường ta dùng giải thuật RSA thu được kết quả.
Sơ đồ
Hình 2.1 Quy trình tạo chữ ký số
20
Quy trình kiểm tra chữ ký số
Dùng public key của người gửi để giải mã chữ ký số của thông điệp.
Dùng giải thuật MD5 hoặc SHA băm thông điệp đính kèm.
So sánh kết quả thu được ở trên, nếu thấy trùng nhau ta kết luận thông điệp
này không bị thay đổi trong quá trình truyền và thông điệp này là của người gửi.
Sơ đồ
Hình 2.2 Quy trình kiểm tra chữ ký số
Chữ ký số (digital signature) là một dạng chữ ký điện tử (là tập con của chữ
ký điện tử) được tạo ra bằng sự biến đổi một thông điệp dữ liệu sử dụng hệ thống
mật mã công khai, theo đó người có thông điệp dữ liệu ban đầu và khóa công khai
của người ký có thể xác định được.
2.1.3.2 Chữ ký điện tử (electronic signature) [13]
Là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, âm thanh,…) nhằm mục
đích xác định chủ nhân của dữ liệu đó.
Chữ ký điện tử được tạo lập dưới dạng từ, chữ, số, ký hiệu, âm thanh hoặc
các hình thức khác bằng phương tiện số, gắn liền hoặc kết hợp một cách logic với
thông điệp số, có khả năng xác nhận người ký thông điệp dữ liệu và xác nhận sự
chấp thuận của người đó đối với nội dung thông điệp đã ký.
21
2.1.4 Sơ đồ chữ ký số
Sơ đồ chữ ký là bộ năm (P, A, K, S, V ), trong đó:
P là tập hữu hạn các văn bản có thể.
A là tập hữu hạn các chữ ký có thể.
K là tập hữu hạn các khoá có thể.
S là tập các thuật toán ký.
V là tập các thuật toán kiểm thử.
Với mỗi khóa k ∈ K, có thuật toán ký Sig k ∈ S, Sig k : P→ A, có thuật
toán kiểm tra chữ ký Ver k ∈ V, Ver k : P × A→ {đúng, sai}, thoả mãn điều kiện
sau: Với mọi
x ∈ P, y ∈ A:
Đúng, nếu y = Sig k (x)
Ver k (x, y) =
Sai, nếu y ≠ Sig k (x)
2.1.5 Các ưu điểm của chữ ký số
• Khả năng xác định được nguồn gốc
Các hệ thống mật mã hóa khóa công khai cho phép mật mã hóa văn bản với
khóa bí mật mà chỉ có người chủ của khóa biết. Để sử dụng chữ ký số thì văn bản
cần phải được mã hóa bằng hàm băm. Sau đó dùng khóa bí mật của người chủ khóa
để mã hóa, khi đó ta được chữ ký số. Khi cần kiểm tra, bên nhận giải mã để lấy lại
chuỗi gốc (được sinh ra qua hàm băm ban đầu) và kiểm tra với hàm băm của văn
bản nhận được. Nếu 2 giá trị này khớp nhau thì bên nhận có thể tin tưởng rằng văn
bản xuất phát từ người sở hữu khóa bí mật.
Tất nhiên là chúng ta không thể đảm bảo 100% là văn bản không bị giả mạo
vì hệ thống vẫn có thể bị phá vỡ. Vấn đề xác thực đặc biệt quan trọng đối với
các giao dịch tài chính.
• Tính toàn vẹn
Cả hai bên tham gia vào quá trình thông tin đều có thể tin tưởng là văn bản
không bị sửa đổi trong khi truyền vì nếu văn bản bị thay đổi thì hàm băm cũng sẽ
thay đổi và lập tức bị phát hiện.
22
Quá trình mã hóa sẽ ẩn nội dung của gói tin đối với bên thứ 3 nhưng không
ngăn cản được việc thay đổi nội dung của nó.
• Tính không thể phủ nhận
Trong giao dịch, một bên có thể từ chối nhận một văn bản nào đó là do mình
gửi. Để ngăn ngừa khả năng này, bên nhận có thể yêu cầu bên gửi phải gửi kèm chữ
ký số với văn bản. Khi có tranh chấp, bên nhận sẽ dùng chữ ký này như một chứng
cứ để bên thứ ba giải quyết.
Tuy nhiên, khóa bí mật vẫn có thể bị lộ và tính không thể phủ nhận cũng
không thể đạt được hoàn toàn không ngăn cản được việc thay đổi nội dung của nó.
2.1.6 Quá trình thực hiện chữ ký số khóa công khai
Chữ ký số dựa trên nền tảng mật mã hóa khóa công khai. Để có thể trao đổi
thông tin trong môi trường này, mỗi người sử dụng có một cặp khóa: một công
khai và một bí mật.
Khóa công khai được công bố rộng rãi còn khóa bí mật phải được giữ kín và
khó có thể tìm được khóa bí mật trong thời gian chấp nhận được.
Toàn bộ quá trình gồm 3 thuật toán:
Thuật toán tạo khóa bí mật, khoá công khai
Thuật toán tạo chữ ký số bằng khoá bí mật
Thuật toán kiểm tra chữ ký số bằng khóa công khai
Hình 2.3 Sơ đồ mô tả quá trình ký và gửi các tệp văn bản
23
Hình 2.4 Sơ đồ mô tả quá trình nhận các tệp văn bản
2.2 Các ứng dụng của chữ ký số
2.2.1 Ứng dụng trong giao dịch điện tử
Chữ ký số sử dụng trong các giao dịch để mua bán hàng trực tuyến, đầu tư
chứng khoán trực tuyến, chuyển tiền ngân hàng, thanh toán trực tuyến.
Ngoài ra, Bộ tài chính cũng áp dụng chữ ký số vào kê khai, nộp thuế trực
tuyến qua mạng Internet và các thủ tục hải quan điện tử như khai báo hải quan và
thông quan trực tuyến mà không phải in các tờ khai, đóng dấu đỏ của công ty và
đến cơ quan thuế chờ nộp tờ khai.
2.2.2 Ứng dụng trong bỏ phiếu điện tử
Mỗi lá phiếu phải có thông tin định danh. Nó có thể là một con số x nào đó
và phải khác nhau. Trên mỗi lá phiếu phải có chữ ký trên số định danh x, thì là
phiếu mới có giá trị để bầu cử. Nếu cử tri chuyển ngay số định danh x cho ban kiểm
phiếu ký thì họ đã xác định mối liên hệ giữa cử tri và x.
24
Trong bỏ phiếu điện tử để tránh gian lận thông đồng với ban kiểm phiếu với
cử tri. Hệ thống dùng “Đa chữ ký mù” để bảo đảm sự nhất trí cao khi cấp quyền bỏ
phiếu cho cử tri.
2.2.3 Ứng dụng trong ngân hàng
Một số giao dịch trong ngân hàng, chứng khoán hiện nay đang được dùng
OTP (One Time Password). Chữ ký số là một loại chữ ký điện tử dựa trên hệ thống
mật mã không đối xứng, chưa thông tin định danh người chủ sở hữu chữ ký đó.
Các thông tin này có thể lưu trữ băng nhiều hình thức khác nhau dưới dạng
file và lưu trữ trên máy tính; trên các thiết bị đặc biệt (USB token) trên thẻ (Smart
card) hay trên sim điện thoại (SIM base CA). Tùy nhu cầu mà mỗi khách hàng chọn
những hình thức lưu trữ khác nhau, tuy nhiên SIM base CA được đánh giá cao ở
tính di động thuận tiện do gắn liền với điện thoại di động.
2.2.4 Ứng dụng trong hệ thống tiền điện tử
Một đồng tiền điện tử C có hai thông tin quan trong là số Seri và giá trị của
đồng tiền. Hệ thống phải bảo đảm các yêu cầu là Ngân hàng phát hành đồng tiền C
khó nhận biết đồng tiền này của người mua hàng đã rút ra từ tài khoản của họ. Ngân
hàng thu nạp đồng tiền C cũng khó biết đồng tiền C đã được nhận từ người bán.
Mặt khác người bán khó biết C được rút từ tài khoản nào. Để thực hiện yêu cầu
trên, chúng ta dùng “Chữ ký mù” để ký lên đồng tiền C.
Như vậy tiền điện tử C không lưu lại dấu vết của những ai đã tiêu nó. Thực
tế đồng tiền C không do một ngân hàng phát hành, nó có thể là đồng tiền chung của
nhiều ngân hàng. Vì vậy nó phải mang dấu anns của các ngân hàng liên quan. Nên
tổ chức ngân hàng sẽ thống nhất một “Đa chữ ký mù” để ký lên đồng tiền C.
2.2.5 Ứng dụng trong doanh nghiệp
Đối với doanh nghiệp, chữ ký số có thể được ứng dụng vào trong hầu hết các
hoạt động của công ty như đăng nhập thẻ thông minh (smart card), windows
security logon, trao đổi các tài liệu nhạy cảm, trao đổi email, truy cập từ xa VPN,...
việc triển khai một hệ thống PKI đối với các doanh nghiệp nhỏ là rất đơn giản, và
lợi ích mà hệ thống đem lại rất lớn so với chi phí đầu tư ban đầu.
25
2.3 Hàm băm
Ta có thể thấy rằng các sơ đồ chữ ký nói chung chỉ cho phép ký các bức điện
nhỏ. Thông thường khi sử dụng, chữ ký được sinh ra có độ dài lớn hơn so với văn
bản ký, do vậy kích thước văn bản sau khi ký sẽ tăng lên.
Một cách đơn giản để giải bài toán này là chia các bức điện dài thành nhiều
đoạn, sau đó ký lên các đoạn đó độc lập nhau. Điều này cũng tương tự như mã hóa
một chuỗi dài bản rõ bằng cách mã hoá mỗi ký tự bản rõ độc lập nhau sử dụng cùng
một bản khoá.
Biện pháp này có một số vấn đề trong việc tạo ra các chữ ký số. Trước hết
với một bức điện dài, ta kết thúc bằng một chữ ký rất lớn.
2.3.1 Khái niệm
Hàm băm là thuật toán không dùng khóa để mã hóa (ở đây dùng thuật ngữ
“băm” thay cho “mã hóa”), nó có nhiệm vụ băm tài liệu và cho kết quả là một giá
trị “băm” có kích thước cố định.
Văn bản cần
băm
( độ dài bất kỳ)
Băm
(Sử dụng hàm
băm)
Văn bản đã
băm
(độ dài cố
định)
Hình 2.5 Minh họa hàm băm
Đặc tính quan trọng của hàm băm
Hàm băm h là hàm một chiều (one – way hash ) với các đặc tính sau:
Với thông điệp đầu vào x thu được bản băm z = h(x) là duy nhất.
Nếu dữ liệu trong thông điệp x thay đổi hay bị xóa để thành thông điệp x’ thì
h(x’) ≠ h(x). Cho dù chỉ có một sự thay đổi nhỏ hay chỉ là xóa đi một bit dữ liệu
của thông điệp thì giá trị băm cũng vẫn thay đổi. Điều này có nghĩa là: hai thông
điệp hoàn toàn khác nhau thì giá trị hàm băm cũng hoàn toàn khác nhau. Nội dung
của thông điệp gốc không thể bị suy ra từ giá trị hàm băm. Nghĩa là với thông điệp
x thì dễ dàng tính được z = h(x), nhưng lại không thể tính (thực chất là khó) suy
ngược lại được x nếu chỉ biết hàm băm h(x).