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

Nghiên cứu hệ mật mã RSA và ứng dụng trong chữ kí điện tử (tt)

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 (982.26 KB, 23 trang )

1

PHẦN I: MỞ ĐẦU
1. Lý do chọn đề tài
Bảo mật thông tin và an toàn dữ liệu là vấn đề rất được quan tâm trong thời
kỳ có quá nhiều thông tin như hiện nay. Đây là một vấn đề rộng có liên quan đến
nhiều lĩnh vực trong đời sống xã hội như: quốc phòng, tài chính ngân hàng, thương
mại,… Ngày nay, ở các nước phát triển cũng như các nước đang phát triển, mạng
máy tính đang ngày càng đóng vai trò quan trọng, khi đó thì vấn đề bảo mật thông
tin trên mạng được đặt lên hàng đầu.
Với sự phát triển không ngừng của chính phủ điện tử cùng với trao đổi thông
tin, yêu cầu an toàn thông tin ngày càng có vai trò vô cùng quan trọng. Để đáp ứng
yêu cầu trao đổi và an toàn thông tin thì giải pháp “mã hóa thông tin” được xem là
phương án tốt nhất. Vì vậy, mỗi tổ chức, quốc gia đều có những cơ chế mã hóa
riêng để bảo mật hệ thống thông tin của mình. Cơ chế mã hóa thông dụng hiện nay
là hệ mật mã RSA.
Trong mật mã vấn đề bảo mật luôn đi đôi với vấn đề xác thực nguồn gốc
thông tin, đặc biệt trong hệ thống mật mã khóa công khai, vấn đề xác thực nguồn
gốc thông tin là rất quan trọng. Chữ ký số (chữ ký điện tử) ra đời với yêu cầu cần có
mã khóa phù hợp là điều tất yếu.
Với các lý do đã nêu trên, tôi chọn đề tài “Nghiên cứu hệ mật mã RSA và
Ứng dụng trong Chữ ký điện tử” làm nội dung nghiên cứu cho luận văn.

Tác giả
BÙI VĂN BÌNH


2

PHẦN II: NỘI DUNG
CHƯƠNG 1: GIỚI THIỆU MẬT MÃ VÀ HỆ MÃ HÓA CÔNG


KHAI RSA
1.1 Giới thiệu về mật mã và hệ mật mã
1.1.1 Khái quát về mật mã và hệ thống mã hóa
Một hệ mật mã (Cryptosystem) là một bộ năm (P, C, K, E, D) thỏa mãn các
điều kiện:
- P là một tập hữu hạn các bản rõ (chứa thông tin cần mã hóa).
- C là tập hữu hạn các bản mã (chứa thông tin đã được mã hóa từ bản rõ).
- K là tập hữu hạn các khóa.
- E và D lần lược là quá trình mã hóa và giải mã:
Với mỗi khóa k  K tồn tại luật mã hóa ek  E và luật giải mã dk  D tương
ứng. Luật mã hóa ek: P → C và luật giải mã ek: C → P là hai ánh xạ thỏa mãn
dk(ek(x)) = x ,  x  P.
Khóa bí mật

Bản tin rõ

Mã hoá

Kênh bí
mật
Bản mã

Bản tin rõ

Giải mã

Hình 1.1 Mô hình hệ mã khoá bí mật

1.1.2 Phân loại hệ mã hóa
- Mã theo chuỗi bit (Stream Cipher)

- Mã theo chữ
- Mã khối (Block Cipher)


3

1.1.3 Phân tích các ưu nhược điểm của các hệ mật mã
- Ưu điểm
Tốc độ thực hiện nhanh vì các quá trình mã hoá và giải mã sử dụng các
phép toán trên dãy bit nhị phân như: OR, AND, XOR, … là những phép toán gần
với lệnh máy.
- Nhược điểm
Hạn chế về khả năng quản lý khoá: Đối với mỗi người để liên lạc được với
nhau phải có một khoá riêng, do đó đối với hệ thống lớn có nhiều đối tác giao tiếp
với nhau thì mỗi người phải lưu giữ một số lượng khoá bí mật rất lớn dẫn đến vấn
đề khó khăn trong quản lý và bảo mật khoá.
* Ứng dụng của mã hoá khoá bí mật
Loại mật mã này thường được dùng trong quân sự, ngoại giao, tức là khi cần
trao đổi thông tin với nhau khá ít, hơn nữa cùng chung quyền lợi nên sẵn sàng bảo
vệ bí mật cho nhau. Do tốc độ mã hoá nhanh nên các hệ mã khóa bí mật thường
được dùng mã hoá khối lượng dữ liệu lớn (mã hóa các cơ sở dữ liệu).

1.2 Hệ mã hóa công khai RSA
1.2.1 Trình bày các khái niệm liên quan
Hệ mã khóa công khai RSA là hệ thống mật mã do các giáo sư Ronald
Rivest, Adi Sharmir và Leonard Adleman phát minh năm 1978 tại học viện Công
nghệ Massachusetts (MIT).
Thuật toán RSA là thuật toán đầu tiên phù hợp với việc tạo chữ ký điện tử
đồng thời với việc mã hóa và giải mã. 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 hệ mật mã khóa công khai.

Khóa công khai của B
khóa bí mật của B

User A

đoạn tin

Giải thuật
mã hóa

mật mã

Giải thuật
giải mã

đoạn tin User B


4

Hình 1.2: quá trình mã hóa khóa công khai

+ Mỗi hệ thống cuối trong mạng tạo ra một cặp khóa để dùng cho mã hóa và giải
mã đoạn tin mà nó sẽ nhận.
+ Mỗi hệ thống công bố rộng rãi khóa mã hóa bằng cách đặt khóa vào một
thanh ghi hay một file công khai. Đây là khóa công khai, khóa còn lại được giữ
riêng.
+ Nếu A muốn gửi một đoạn tin tới B thì A mã hóa đoạn tin bằng khóa
công khai của B.
+ Khi B nhận đoạn tin mã hóa, nó giải mã bằng khóa bí mật của mình.

Không một người nào khác có thể giải mã đoạn tin mã này bởi vì chỉ có mình B biết
khóa bí mật đó thôi.

1.2.2Thuật toán hệ mã hóa công khai
1.2.2.1. Thuật toán sinh khóa
Việc tạo ra khóa công khai và khóa bí mật thực hiện theo các bước sau:
(1) Sinh ra 2 số nguyên tố lớn p và q ngẫu nhiên (p ≠ q).
(2) Tính n = p*q.
φ(n) = (p-1)*(q-1).
(3) Chọn một số tự nhiên e sao cho 1 < e < φ(n) và là số nguyên tố cùng φ(n).
(4) Tính d sao cho: d*e ≡ 1 (mod φ(n)) với 1< d < φ(n).
(5) Khóa công khai (e, n), khóa bí mật (d, n).

1.2.2.2. Thuật toán mã hóa
Để gửi dữ liệu cần mã hóa thì người gửi thực hiện:
(1) Thu nhận khóa công khai của người nhận (e, n).
(2) Biến đổi thông điệp muốn gửi M thành những số nguyên m < n .
(3) Tính C = Me mod n.

1.2.2.3. Thuật toán giải mã
Để khôi phục lại nội dung dữ liệu M ban đầu, người nhận thực hiện các bước sau:
(1) Tính M = Cd mod n với 0 ≤ m ≤ n.


5

(2) Thực hiện phép biến đổi ngược từ số m thành chuỗi ký tự tương ứng chứa
thông tin M ban đầu.

1.2.2.4. 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 bản rõ
(chuyển từ M sang m) sao cho không có giá trị nào của M tạo ra bản mã không an
toàn. Nếu không có quá trình này, RSA sẽ gặp một số vấn đề như:
- 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.

1.2.2.5. Các ví dụ về khóa
1.2.3Một số cách thức tấn công hệ mật mã RSA
1.2.3.1. Tấn công lặp
1.2.3.2. Tấn công modulo n dùng chung
1.2.3.3. Tấn công khi khóa công khai e nhỏ
1.2.4 Phương pháp phòng tránh tấn công
Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân
tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA.
1.2.5 Chi phí và tốc độ thực hiện của thuật toán RSA

1.2.5.1 Chi phí thực hiện của thuật toán RSA
Để thực hiện thuật toán RSA phần lớn phải tốn chi phí thực hiện các phép
tính cơ bản như: tạo khóa, mã hoá, giải mã.

1.2.5.2 Tốc độ của hệ RSA
Tốc độ thực hiện là một trong những điễm yếu của RSA không được dùng để
mã hoá khối lượng dữ liệu lớn.
1.2.6 Ứng dụng của hệ mã RSA

1.2.6.1 Tạo vỏ bọc an toàn cho văn bản
1.2.6.2 Tạo chữ ký số cho văn bản


6


CHƯƠNG 2: ỨNG DỤNG THUẬT TOÁN TRONG HỆ MẬT MÃ
RSA ĐỂ XÂY DỰNG VÀ XÁC THỰC CHỮ KÝ ĐIỆN TỬ
2.1 Các khái niệm
2.1.1 Chữ ký điện tử
Chữ ký điện tử (electronic signature) 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 người chủ của dữ liệu đó.

2.1.2 Chữ ký số
Chữ ký số (Digital signature) là một dạng chữ ký điện tử (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 chính xác.

2.1.3 Phương tiện điện tử
Là phương tiện hoạt động dựa trên công nghệ điện, điện tử, kỹ thuật số, từ
tính, truyền dẫn không dây, quang học, điện tử hoặc công nghệ tương tự.
Phương tiện điện tử giúp hỗ trợ cho người dùng thực hiện các công việc được cải
thiện cũng như đạt kết quả tốt hơn.

2.1.4 Giao dịch điện tử
Giao dịch điện tử được hiểu một cách đơn giản là hình thức giao dịch mà đối
tượng không gặp gỡ trực tiếp với nhau.

2.1.5 Thông điệp điện tử
Thông điệp dữ liệu là thông tin được tạo ra, được gửi đi, được nhận và được lưu trữ
bằng phương tiện điện tử.

2.1.6 Chứng thực điện tử
Chứng thực điện tử là hoạt động chứng thực danh tính của những người tham
gia vào việc gửi và nhận thông tin qua mạng, đồng thời cung cấp cho họ những

công cụ, những dịch vụ cần thiết để thực hiện việc bảo mật thông tin, chứng thực
nguồn gốc và nội dung thông tin.


7

2.1.7 Lịch sử hình thành và phát triển của chữ ký điện tử
Trên thế giới
Tại Việt Nam

2.2 Trình bày các thuật toán, các hàm
2.2.1 Thuật toán Euclide - Tìm UCLN của hai số nguyên
Input: a, b  Z với a >b ≥ 1.
Output: gcd(a, b).
Thuật toán
While b > 0 do
r = a mod b
a=b
b=r
Return (a).

2.2.2 Thuật toán Euclide mở rộng
Giải thuật Euclide mở rộng kết hợp quá trình tìm gcd(a, b) để tìm cặp số x, y
thoả mãn phương trình ax + by = gcd(a, b) [9][10].
Input: a, b  Z, a > b, a ≠ 0.
Output: x, y sao cho ax + by = gcd(a, b).
Thuật toán
i=0
r-1 = a
r0 = b

x-1 = 1
y-1 = 0
x0 = 0
y0 = 1
While (ri = a.xi + b.yi ≠ 0) do
q = ri-1 div ri
xi + 1 = xi - 1 – q.xi


8

yi + 1 = yi - 1 – q.yi
i=i+1
Return (xi – 1, yi – 1).

2.2.3 Thuật toán tính a-1 mod n
Thuật toán này dùng để xác định phần tử nghịch đảo của a theo modulo n là
a-1 modulo n [9][10], được sử dụng trong quá trình tạo khoá và giải mã của hệ mã
khoá công khai.
Input: a, n  Zn, a > n.
Output: x= a-1 mod n nếu có tồn tại.
Thuật toán
(1). Dùng thuật toán Euclide mở rộng (1.3.4.2) tìm hai số nguyên x và y sao
cho ax + ny = d, trong đó d = gcd(a, n).
(2). Nếu d > 1 thì a-1 mod n không tồn tại, ngược lại x = a-1 mod n.

2.2.4 Thuật toán Rabin-Miller
Cho n ≥ 3 lẻ, thuật toán Rabin-Miler [3][9] xác định n có phải là số nguyên
tố không?.
Input: n ≥ 3

Output: n là số nguyên tố không?
Thuật toán
(1) Tính n – 1 = 2km, trong đó m là số lẻ.
(2) Chọn số nguyên a, 1 < a <= n-1.
(3) If (b = am mod n = 1) Then Return (n là số nguyên tố).
(4) For i = 1 To k - 1 do
i

If (b = a 2 .m mod n = n -1) Then Return (n là số nguyên tố).
(5) Return (n không là số nguyên tố).

2.2.5 Thuật toán tính Xp mod n
Cho x  Zn, và một số nguyên p, 0 ≤ p < n có thể biểu diễn nhị phân
t

p=

p2
i 1

i

i


9

Input: x  Zn
Output: y = xp mod n.
Thuật toán. (1) y = 1.

(2) For i = 1 to t do
(2.1) y = y*y mod n.
(2.2) Nếu pi = 1 thì y = y*x mod n.
(3) Return (y).

2.2.6 Định lý Ferma
Cho trước p là số nguyên tố và a là số nguyên và nguyên tố cùng nhau với p,
a p-1 ≡ 1 (mod p).

2.2.7 Định lý Euler
Giả sử n > 1 là số nguyên dương, với mọi số nguyên a nguyên tố cùng nhau
với n thì ta luôn có aφ(n) ≡ 1 (mod n).

2.2.8 Hàm Băm
Hàm băm mật mã là hàm toán học chuyển đổi một thông điệp có độ dài bất kỳ
(hữu hạn) thành một dãy bit có độ dài cố định (tùy thuộc vào thuật toán băm).

Hình 2.2: Hoạt động của một hàm băm

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


10

2.2.9 Hàm băm MD5
* Bước 1: message ban đầu được thêm (padding) một số bít sao cho tổng số

bít sau khi thêm vào cộng với 64 là bội số của 512.
* Bước 2: khởi tạo bộ đệm MD có kích thước 128 bít. Bộ đệm 128 bít này
được dùng để chứa kết quả trung gian và kết quả cuối cùng của hàm băm.
* 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.
* Bước 4: Xuất kết quả, 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.
04e9800998ecf8427e

2.2.10 Hàm băm SHA1
Bước 1: Mở rộng thông điệp
Bước 2: Khởi tạo bộ đệm
Bước 3: Xử lý các khối 512 bít
Bước 4: xuất kết quả
2.3 Lược đồ chữ ký điện tử RSA

2.3.1 Định nghĩa lược đồ chữ ký
Một lược đồ chữ ký số là một bộ (M, MS, K, S, V) trong đó[9][10]:
- M là tập hữu hạn các văn bản có thể.
- MS là tập hữu hạn các chữ ký có thể.
- K là tập hữu hạn các khóa.
- S là tập các thuật toán ký.
- V là tập hợp các thuật toán chứng thực chữ ký.

2.3.2 Phân loại các lược đồ chữ ký số
2.3.2.1 Lược đồ chữ ký số kèm theo bản rõ
Thuật toán sinh khóa cho các lược đồ chữ ký số kèm theo bản rõ.
Tóm lược: Mỗi cá thể tạo một khóa riêng để ký thông điệp và một khóa công khai
tương ứng để các cá thể khác trong hệ thống dùng trong quá trình xác thực chữ ký.



11

(1). Mỗi cá thể A chọn một khóa k = (k’, k’’)  K, Sigk’ là thuật toán ký
với khóa k (mỗi Sigk’ là một ánh xạ 1-1 từ Mh tới Ms).
(2). Thuật toán Verk’’ tương ứng là một ánh xạ từ MhxMs đến tập hợp
{True, False} sao cho:
True, nếu Sigk’(m) = s
Verk’’(m; s) =

False, nếu Sigk’(m) # s

False, nếu Sig (m) <>
Với m  Mh, s  Ms: ở đây m = h(P) với Pk’ M. Verk’’ được gọi là thuật toán
s
kiểm thử để chứng thực chữ ký, h là hàm một chiều từ M đến Mh (Mh là tập hợp các
giá trị băm).
(3). Với khóa k = (k’, k’’), khóa công khai của A là k’’; khóa bí mật của A là k’.
 Thuật toán sinh chữ ký và chứng thực chữ ký
Sinh chữ ký, cá thể A thực hiện:
(a) Chọn một khóa k = (k’; k’’)  K
(b) Tính m = h(P) và s = Sigk’(m).
(c) Chữ ký của A cho thông điệp P là s, P và s được gửi đến B.
Để chứng thực chữ ký B thực hiện các bước sau:
(a) Xác thực đúng khóa công khai của A là k’’.
(b) Tính m = h(P) và u = Verk’’(m; s).
(c) Chấp nhận chữ ký của A nếu u = True.
Các thuộc tính sau là yêu cầu cần thiết cho thuật ký và chứng thực chữ ký:
(i) Với mỗi khóa k = (k’; k’’)  K, Sigk’ được tính toán hiệu quả.

(ii) Verk’’ cần tính toán một cách hiệu quả.
(iii) Không một cá thể nào khác ngoài A có thể tìm được bản rõ P  M và
s  Ms sao cho Verk’’(m; s) = True, ở đây m = h(P).

M
P●

h

Mh m

Sigk’



(a) Quá trình ký.

Ms
●s


12

Verk’
Mh x Ms

●True
●False

(b) Quá trình chứng thực.

Hình 2.6: Mô hình tổng quát lược đồ chữ ký có kèm bản rõ

2.3.2.2 Lược đồ chữ ký số tự khôi phục bản rõ
Thuật toán sinh khóa
Mỗi cá thể A chọn một khóa k = (k’, k’’)  K. Sigk’ là thuật toán ký với khóa
k (mỗi Sigk là một ánh xạ 1-1 từ Mh tới Ms).
R là một hàm sao cho R(M) = MR và có nghịch đảo là R-1
Thuật toán Verk’’ tương ứng là một ánh xạ từ Ms đến MR sao cho:
Verk’’ Sigk’ là một ánh xạ trên MR,  k  K. Verk’’ là thuật toán chứng thực
chữ ký.
Cặp khóa k = (k’, k’’), trong đó khóa công khai của A là k’’; khóa bí mật của
A là k’.
 Thuật toán sinh chữ ký
Tóm lược: Cá thể A ký một thông điệp P  M với chữ ký s. Một cá thể B bất
kỳ có thể xác thực chữ ký và phục hồi thông điệp P từ chữ ký đó.
(a) Chọn khóa k = (k’, k’’)  K
(b) Tính m = R(P) và s = Sigk’(m). (R, R-1 là các hàm được công khai)
(c) Chữ ký của A lên thông điệp P là s, và sau đó A gửi s cho B.
 Thuật toán xác thực chữ ký
B thực hiện các bước sau:
(a) Xác thực đúng khóa công khai của A là k’’.
(b) Tính m = Verk’’(s).
(c) Xác thực m = MR (nếu m  MR thì từ chối chữ ký).
(d) Phục hồi thông điệp P từ m bằng cách tính R-1(m).


13

(i) Với mỗi khóa k = (k’; k’’)  K, Sigk’ được tính toán hiệu quả.
(ii) Verk’’ cần tính toán một cách hiệu quả.

(iii) Không một cá thể nào khác ngoài A có thể tìm được s  Ms sao cho
Verk’’(s)  MR.
Sig

R
M

k’

MR

P●

Ms



●s

m
Hình 2.7: Lược đồ chữ ký số tự khôi phục bản rõ
R

h
M
P●

Mh m



MR
●R(m)

Sigk’

Ms
●s

Hình 2.8: Lược đồ chữ ký số kèm theo bản rõ thu được

2.3.3 Lược đồ chữ ký RSA
2.3.3.1 Thuật toán sinh khóa cho lược đồ chữ ký RSA
Mỗi cá thể trong hệ thống thực hiện các bước sau:
(1) Sinh ngẫu nhiên hai số nguyên tố lớn p và q.
(2) Tính n = p*q và φ(n) = (p-1)*(q-1)
(3) 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).
(4) Dùng thuật toán Euclide mở rộng tính d sao cho: d*e ≡ 1 (mod φ(n))
với 1< d < φ(n).
(5) Khóa công khai (e, n), khóa bí mật (d, n).

2.3.3.2. Thuật toán sinh chữ ký RSA
Tóm lược: Cá thể A ký một thông điệp P và một cá thể B bất kỳ có thể chứng
thực chữ ký có đúng là của A hay không. Đồng thời khôi phục lại thông điệp từ chữ
ký. Cá thể A thực hiện:
(a) Số hóa thông điệp P thành số nguyên m  [0, n-1]; m = R(P).
(b) Tính s = md mod n.
(c) Chữ ký của A lên thông điệp P là s, gửi s cho B.



14

2.3.3.3. Thuật toán chứng thực chữ ký RSA
Để xác thực chữ ký s có phải là của A và khôi phục thông điệp P thì B thực
hiện như sau:
(a) Nhận khóa công khai của A là (e, n).
(b) Tính m = se mod n.
(c) Xác nhận chữ ký nếu m  MR, ngược lại chối bỏ chữ ký của A.
(d) Khôi phục lại P = R-1(m).
* Chứng minh quá trình chúng thực chữ ký
Nếu s là chữ ký cho thông điệp P thì:
s = md mod n, với m = R(P).
Từ e*d ≡ 1 (mod φ(n)), se = me*d mod n = m mod n.
Cuối cùng ta có: R-1(m) = R-1(R(P)) = P.
Quá trình sinh khóa:
Cá thể A thực hiên các bước sau:
1. Chọn hai số nguyên tố p = 7927, q = 6997.
2. Tính: n = p*q = 7927*6997 = 55465219
φ(n) = 7926*6996 = 55450296
3. Chọn e = 5, 1< e < 55450296.
4. Tính d:
Từ e*d = 1 mod 55450296, tìm được d = 44360237.
Khóa công khai là (e, n) = (5, 55450296);
Khóa bí mật (d, n) = (44360237, 55450296).
Quá trình sinh chữ ký:
Giả sử M = Zn và hàm R: M  Zn xác định R(P) = P với mọi P  M.
P = 31229978 khi đó A thực hiện:
(a) Số hóa thông điệp P: Tính m = R(P) = 31229978,
(b) Tính chữ ký s = md mod n
= 3122997844360237 mod 55465219 = 30729435.

(c) Gửi s cho B.


15

Quá trình chứng thực chữ ký:
B thực hiện các bước sau:
(a) Nhận khóa công khai của A là (5, 55465219)
(b) Tính m = se mod n
= 307294355 mod 55465219 = 31229978
(c) Kiểm tra m = 31229978  [0, 55465219]. Xác nhận chữ ký s là của A.
(d) Khôi phục P = R-1(m) = 31229978.

2.3.4. Một số lược đồ chữ ký khác (DSA, EL Gamal)
2.3.4.1 Lược đồ chữ ký ELGamal
 Thuật toán sinh khóa cho lược đồ chữ ký ELGamal
Mỗi cá thể trong hệ thống tạo một khóa công khai và một khóa riêng tương
ứng. Mỗi cá thể A thực hiện các bước sau:
(a) Tạo số nguyên tố lớn p và chọn α  Zp.
(b) Chọn số nguyên a, 1≤ a ≤ p – 2.
(c) Tính y = αa mod p.
Khóa công khai (p, α, y).
Khóa bí mật là a.
 Thuật toán sinh chữ ký
Cá thể A ký lên thông điệp m, A thực hiện:
(a) Chọn số nguyên k, 1≤ k ≤ p – 2, với gcd (k, p-1) = 1.
(b) Tính r = αk mod p.
(c) Tính k-1 mod (p - 1).
(d) Tính s = k-1{h(m) – a*r} mod (p - 1).
(e) Chữ ký của A lên thông điệp m là (r, s).

 Thuật toán chứng thực chữ ký
Cá thể B thực hiện các bước sau để chứng thực chữ ký (r, s) lên m có phải là
của A không.
(a) Xác nhận khóa công khai của A là (p, α, β).
(b) Kiểm tra r, 1≤ r ≤ p – 1, nếu không đúng thì từ chối chữ ký của A.


16

(c) Tính v1 = yr.rs mod p.
(d) Tính h(m) và v2 = αh(m) mod p.
(e) Nếu v1 = v2 thì chấp nhận chữ ký là của A.

2.3.4.2. Lược đồ chữ ký DSA
 Thuật toán sinh khóa cho lược đồ chữ ký DSA
Mỗi cá thể trong hệ thống tạo một khóa công khai và một khóa riêng.
(1) Chọn số nguyên tố p, 2L – 1< p < 2L với 512 < L < 1024.
(2) Chọn số nguyên tố q, 2159 ≤ q ≤ 2160 sao cho q là ước nguyên tố của (p - 1),
nghĩa là q có độ dài 160 bit.
(3) Chọn phần tử g với g  Zp, tính α = g(p – 1)/q mod p.
(4) Chọn ngẫu nhiên số nguyên a sao cho 1 ≤ a ≤ q – 1.
(5) Tính y = αa mod p.
Khóa công khoá của A là (p, q, a, y), khóa riêng là a.
 Thuật toán sinh chữ ký DSA
Cá thể A ký lên thông điệp m. Bất kỳ cá thể B nào cũng có thể kiểm tra chữ
ký này bằng khóa công khai của A. A thực hiện các bước sau:
(1) Chọn số nguyên k, 0 < k < q.
(2) Tính r = (αk mod p) mod q.
(3) Tính k-1 mod q.
(4) Tính s = k-1{h(m) – a*r} mod q.

(5) Chữ ký của A lên thông điệp m là (r, s).
 Thuật toán chứng thực chữ ký DSA
(1) Xác nhận khóa công khai của A là (p, q, α, y).
(2) Nếu 0 < r < q và 0 < s < q; không đúng thì chối bỏ chữ ký A.
(3) Tính w = s-1 mod q và h(m).
(4) Tính u1 = w.h(m) mod q và
u2 = r.w mod q.
(5) Tính v = (  u . y u mod p) mod q.
1

2

Chấp nhận chữ ký nếu v = r.


17

2.4 Quá trình ký và xác thực chữ ký điện tử
2.4.1 Ký văn bản điện tử
Khi một người muốn gửi cho ai đó một văn bản quan trọng, đòi hỏi văn bản
phải được ký xác nhận chính danh người gửi văn bản; người gửi văn bản sẽ thực
hiện quá trình ký chữ ký điện tử. Quá trình ký chữ ký điện tử sử dụng khoá bí mật
của người ký mô tả, các bước thực hiện như sau:

Hình 2.9: Sơ đồ quá trình ký văn bản điện tử

Bước 1: 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 bản tóm lược (Message Digest). Dùng giải thuật MD5 ta được bản mã có
chiều dài 128-bit. nếu dùng giải thuật SHA-1 ta có chiều dài 160-bit.
Bước 2: Sử dụng khóa bí mật của người gửi và dùng thuật toán mã hóa RSA

để mã hóa Message Digest thu được ở bước 1. Kết quả thu được gọi là chữ ký điện
tử của thông điệp ban đầu
Bước 3: Gộp chữ ký điện tử vào bản tin điện tử ban đầu. Việc này gọi là “ký
xác nhận” vào thông điệp. Sau khi đã ký xác nhận vào thông điệp, mọi sự thay đổi
trên thông điệp dù nhỏ nhất sẽ bị phát hiện trong quá trình xác thực chữ ký. Việc ký
xác nhận này đảm bảo người nhận tin tưởng thông điệp xuất phát từ người gửi.


18

2.4.2 Xác thực chữ ký điện tử
Quá trình giải mã và kiểm tra, các bước thực hiện như sau:

Hình 2.10: Sơ đồ quá trình xác thực chữ ký điện tử

Bước 1: Bản tin điện tử có đính kèm chữ ký của người gửi, sau khi nhận sẽ
được tách riêng phần chữ ký và phần văn bản. Sử dụng khóa công khai của người
gửi (khóa này được thông báo đến mọi người) để giải mã chữ ký điện tử của thông
điệp, kết quả là bản tóm lược 2.
Bước 2: Dùng giải thuật băm MD5 (hoặc SHA-1) để băm văn bản đã tách
phần chữ ký điện tử, kết quả thu được là bản tóm lược 2.
Bước 3: So sánh bản tóm lược 1 và bản tóm lược 2 thu được ở bước 1 và 2.
Nếu 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
tin và xác nhận thông điệp này đúng là của người gửi.


19

CHƯƠNG 3: XÂY DỰNG VÀ THỬ NGHIỆM ỨNG DỤNG
CHỮ KÝ ĐIỆN TỬ

3.1 Các yêu cầu của thử nghiệm
3.1.1 Giới thiệu về thử nghiệm
3.1.2 Các yêu cầu cần thiết
- Tạo ra cặp khóa, khóa công khai và khóa riêng bằng hệ mã công khai RSA.
- Dùng khóa công khai để thực hiện quá trình mã hóa thông điệp.
- Dùng khóa riêng để thực hiện quá trình giải mã thông điệp.
- Thực hiện ký chữ ký điện tử lên thông điệp dùng khóa riêng của người ký.
- Thực hiện việc chứng thực chữ ký điện tử bằng cách dùng khóa công khai
của người đã ký lên thông điệp.

3.2 Hệ thống tạo lập chữ ký
3.2.1 Môi trường xây dựng
- Sử dung thuật toán băm SHA1 để băm thông điệp trước khi thực hiện ký
chữ ký điện tử.
- Sử dụng hệ mật mã công khai RSA để thực hiện sinh khóa cho hệ thống.
- Dùng ngôn ngữ lập trình C# với thư viện mã hóa Security.Cryptography để
viết mã cho chương trình. (mã nguồn của chương trình sẽ được trình bày ở phần
phụ lục cuối luận văn).
- Hệ điều hành Microsoft Window 10.
- Nền (Platform): .Net FrameWork 4.0.
3.2.2 Quá trình xây dựng

3.2.2.1 Tạo khóa
3.2.2.2 Mã hóa
3.2.2.3 Giải mã
3.2.2.4 Ký vào văn bản
3.2.2.5. Chứng thực chữ ký.


20


3.3 Cài đặt và thiết lập
3.3.1 Chạy thử demo và ghi nhận kết quả đạt được
Mã hóa
(1) Kích chọn

khi đó chương trình sinh ngẫu nhiên cặp khóa,

khóa công khai và khóa riêng (hoặc có thể Load cặp khóa đã được tạo trước đó),
dùng khóa công khai để mã hóa.
(2) Chọn file cần mã hóa sau đó chọn

để mã hóa tập tin.

Hình 3.1: Giao diện chính của chương trình

Giải mã
(1) Dùng khóa riêng để giải mã, (hoặc có thể Load khóa riêng đã được tạo
cùng với khóa công khai trước đó).
(2) Chọn file cần giải mã sau đó chọn

để giải mã tập tin.


21

Hình 3.2: Quá trình giải mã.

3.3.2. Demo ký – xác thực chữ ký
3.3.2.1 Quá trình Ký

Để cá thể A thực hiện Ký chữ ký số lên tài liệu điện tử, sau đó gửi đến cá thể
B thì A thực hiện các bước sau:
(1) Chọn tài liệu cần ký.
(2) Dùng khóa riêng của A, sau đó kích chọn

thì chương trình sẽ

tạo ra chữ ký điện tử từ giá trị băm của tài liệu cần ký và chữ ký số, khi đó chương
trình thông báo “Chữ ký đã được gắn vào văn bản dữ liệu”.

3.3.2.2 Xác thực chữ ký
Khi cá thể B nhận được chữ ký từ A thì B thực hiện các bước sau để xác thực
xem chữ ký đó có phải là của A không:


22

(1) Chọn file chứa chữ ký mà A đã gửi đến.
(2) Dùng khóa công khai của A, chọn

chương trình sẽ kiểm ra

Hình 3.3: Quá trình mã hoá

3.3.3 Phân tích ưu nhược điểm của ứng dụng thực tế
3.3.3.1 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ũng cần được thử để tránh khả năng này.

3.3.3.2 Tốc độ thực hiện RSA
3.3.3.3 Phân phối khóa


23

PHẦN III: KẾT LUẬN
Luận văn nghiên cứu về hệ mật mã khóa công khai, trong đó hệ mã RSA được
tập trung tìm hiểu, từ đó xây dựng chương trình “Hệ mã RSA – Ứng dụng trong chữ
ký điện tử” để tạo ra chữ ký điện tử, xác định được chủ nhân của tài liệu điện tử
cũng như đảm bảo sự toàn vẹn của nội dung tài liệu.
Luận văn đạt được một số kết quả:
Tìm hiểu về mật mã, mật mã khóa bí mật và hệ mật mã khóa công khai.
Trình bày chi tiết các thuật toán mã hoá, giải mã của hệ mật mã khoá công khai
RSA và một số phương pháp tấn công hệ mã RSA
 Nghiên cứu về hàm băm và trình bày hai thuật toán băm được dùng phổ biến
là MD5 và SHA1. Phân loại các lược đồ chữ ký số, trình bày chi tiết và nêu các ví
dụ minh họa lược đồ chữ ký như: RSA, ELGamal, DSA.
 Xây dựng chương trình thử nghiệm “Hệ mã RSA – ứng dụng trong chữ ký
điện tử” trong đó làm rõ các quá trình như: tạo khóa, mã hóa – giải mã, ký – xác
thực chữ ký.
Chương trình ứng dụng thực hiện tốt các thuật toán RSA nhưng chỉ dùng lại
ở ứng dụng trên các máy riêng lẻ chưa được ứng dụng trên một hệ thống mạng.
Giao diện thiết kế còn đơn giản, chương trình sinh khóa ngẫu nhiên dựa trên
hệ mã RSA (1024 bit), mô hình còn nhỏ, tính an toàn còn hạn chế.
Mô hình tìm hiểu còn nhỏ, hệ thống chưa được cập nhật theo kịp với xu
hướng.

Hướng phát triển
Với một số kết quả đạt được như trên, tác giả sẽ tiếp tục nghiên cứu để xây
dựng được một cổng thông tin để trao đổi thông tin giữa Sở giáo dục và các đơn vị
trường phổ thông có ứng dụng hệ mật mã công khai RSA trên mạng.
ứng dụng demo vào công việc hiện tại, thử nghiệm trên các mô hình giao tiếp
nhỏ để ghi nhận và thu thập thêm thông tin cũng như đánh giá chi tiết hơn.



×