Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG ĐIỆN – ĐIỆN TỬ

BÁO CÁO
LÝ THUYẾT MẬT MÃ
Đề tài:

HỆ MẬT BẤT ĐỐI XỨNG RSA

Giảng viên hướng dẫn: PGS.TS Hà Duyên Trung


Sinh viên thực hiện:
Họ và tên Mã sinh viên Mã lớp
Phạm Chính Hiệp 20192839 137309
Nguyễn Mạnh Tùng 20193182 137309
Nguyễn Danh Đức 20192779 137309
Tô Quang Sáng 20193077 137309

Hà Nội, 2/2023
MỤC LỤC

CHƯƠNG 1. CƠ SỞ LÝ THUYẾT ............................................................................6


1. Giới thiệu về hệ mật bất đối xứng ...................................................................6
1.1. Sơ lược về mã hoá đối xứng và bất đối xứng ...........................................6
1.2. Tại sao cần mã hoá bất đối xứng? ............................................................ 6
2. Cơ sở toán học ...................................................................................................7
2.1. Số nguyên tố ................................................................................................ 7
2.2. Thuật toán tìm ước chung lớn nhất ..........................................................7
2.3. Thuật toán Modulo ....................................................................................9
2.4. Thuật toán tìm nghịch đảo nhân ............................................................ 10
CHƯƠNG 2. HỆ MẬT RSA ......................................................................................12
1. Giới thiệu về hệ mật mã RSA.........................................................................12
1.1. Giới thiệu chung .......................................................................................12
1.2. Mô tả sơ lược ............................................................................................ 13
2. Quy trình tạo khóa .......................................................................................... 14
2.1. Thuật toán .................................................................................................14
2.2. Một số phương pháp tìm số nguyên tố p, q ...........................................15
2.3. Mã hóa và giải mã ....................................................................................16
3. Tính bảo mật ...................................................................................................18
4. Một số cách tấn công.......................................................................................19
4.1. Tấn công dựa trên thời gian .......................................................................19
4.2. Tấn công lựa chọn thích nghi bản mã ........................................................20
5. Chữ ký số .........................................................................................................20
5.1. Khái niệm về chữ ký số ............................................................................20
5.2. Quy trình tạo và xác minh chữ ký số .....................................................21

1
CHƯƠNG 3. MÔ PHỎNG HỆ MẬT RSA .............................................................. 24
1. Mô phỏng hệ mật RSA ...................................................................................24
2. Kết luận ............................................................................................................27
TÀI LIỆU THAM KHẢO ......................................................................................... 28

2
LỜI NÓI ĐẦU

Bảo mật là một ngành công nghiệp toàn cầu lớn và nó vô cùng đa dạng. Cho dù
đó là việc bảo vệ các thông tin cá nhân hay bảo vệ các cơ sở hạ tầng tiện ích, thì
“cảnh giới đe dọa” ngày càng phức tạp và đòi hỏi sự hội tụ của an ninh mạng và các
hình thức vật lý, truyền thống hơn để ngăn chặn hành vi trộm cắp và các hình thức
hoạt động tội phạm khác.
Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin, mạng máy tính
đã trở thành phương tiện hữu dụng phục vụ công tác điều hành, trao đổi thông tin
trong mọi lĩnh vực của xã hội. Song song với việc ứng dụng công nghệthông tin
trong cuộc sống, đặc biệt là việc sửdụng mạng internet như một môi trường giao tiếp
thì vấn đề an toàn thông tin dữliệu trong quá trình gửi và nhận thông qua mạng có
một vai trò hết sức quan trọng. Vì vậy, đề tài “Hệ mật bất đối xứng RSA”, đã nghiên
cứu phương pháp mã hóa/giải mã hóa với hệ mật RSA – một hệ mật mã được ứng
dụng rộng rãi trong nhiều lĩnh vực bảo mật hiện nay. Song đề tài cũng nêu ra một số
phương pháp tấn công hệ mật RSA và đưa ra phương án bảo mật, chống tấn công
bởi “tin tặc” đảm bảo an toàn, tin cậy cho người dùng,…
Do kiến thức và khả năng còn hạn chế, nên chúng em rất mong thầy đọc và đưa
ra nhận xét để chúng em những thiếu sót, sai sót còn tồn tại.
Chúng em xin trân thành cảm ơn!

3
DANH MỤC HÌNH ẢNH

Hình 0.1 Mô hình hệ mã hóa bất đối xứng .....................................................................7


Hình 0.2 Thuật toán tìm ước chung lớn nhất .................................................................8
Hình 0.3 Toán tử modulo ................................................................................................ 9
Hình 0.4 Tâp dư ..............................................................................................................9
Hình 0.5 Khái niệm về đồng dư ...................................................................................10
Hình 0.6 Thuậ toán tìm nghịch đảo nhân ..................................................................... 11
Hình 0.1 Hệ mật RSA...................................................................................................12
Hình 0.2 Clifford Cocks – người phát minh thuật toán RSA .......................................13
Hình 0.3 Mô tả mã hóa RSA ........................................................................................13
Hình 0.4 Thuật toán tạo khóa .......................................................................................14
Hình 0.5 Mã hóa và giải mã ......................................................................................... 17
Hình 0.6 Bảo mật hệ thống RSA ..................................................................................18
Hình 0.7 Chữ ký số .......................................................................................................20
Hình 0.8 Những xử lý trong mô hình chữ ký số .......................................................... 21
Hình 0.9 Tạo chữ ký số RSA........................................................................................22
Hình 0.10 Thẩm định chữ ký số RSA ..........................................................................23
Hình 0.1 Giao diện mô phỏng hệ mật RSA..................................................................24
Hình 0.2 Chươn trình mã hóa và giải mã .....................................................................25
Hình 0.3 Chương trình mô phỏng mã hóa và giải mã sau khi thay đổi bản rõ ............26

4
DANH MỤC BẢNG BIỂU

Bảng 0.1 Ví dụ tìm ước chung lớn nhất .........................................................................8


Bảng 0.2 Ví dụ tìm nghịch đảo nhân ............................................................................ 11

5
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1. Giới thiệu về hệ mật bất đối xứng
1.1. Sơ lược về mã hoá đối xứng và bất đối xứng
Khi tìm hiểu về an toàn thông tin ta biết đến hai loại mã hoá phổ biến là mã
hoá đối xứng (symmetric cryptography) và mã hoá bất đối xứng (asymmetric
cryptography). Về cơ bản thì:
❖ Mã hoá đối xứng (hay còn gọi là mã hoá bí mật): Nói đơn giản là
người ta dùng cùng một chìa khoá để khoá và mở thông tin cần được
giữ bí mật. Và cả hai bên gửi và nhận thông tin đều phải có chìa khoá
này.
❖ Mã hoá bất đối xứng (hay còn gọi là mã hoá công khai): Có thể hiểu
là người ta dùng hai chìa khoá khác nhau để khoá và mở khoá thông
tin bí mật. public key sẽ được công khai, và được gửi đi đến đối tượng
cần mã hoá thông tin, còn private key được giữ bí mật, và nó đóng vai
trò như chìa khoá vạn năng có thể mở được tất cả thông tin được khoá
bằng public key.

1.2. Tại sao cần mã hoá bất đối xứng?


Nói ngắn gọn thì hầu như các ứng dụng bạn dùng hàng ngày hiện nay như
Facebook, Gmail, Amazon, PayPal v.v đều sử dụng giao thức HTTPs. Có thể
hiểu là giao thức HTTPs an toàn hơn HTTP vì toàn bộ thông tin truyền đi
giữa client và server được bảo vệ bởi bộ mã hoá SSL/TSL. SSL/TSL này hoạt
động dựa trên cả hai loại mã hoá đối xứng và bất đối xứng. Nhờ nó mà chúng
ta có thể đảm bảo bí mật khi thực hiện những giao dịch có chứa thông tin
nhạy cảm trên Internet mà không bị đánh cắp thông tin trong suốt quá trình
truyền nhận dữ liệu. Có thể nói, nếu không có mật mã, đặc biệt là mã hoá bất
đối xứng thì không có thương mại điện tử.

Về cơ bản, HTTP truyền dữ liệu dưới dạng plain text, nghĩa là nếu ai đó nghe
lén dữ liệu bạn truyền và nhận với server thì có thể đọc và can thiệp được nội
dung (man-in-the-middle attack). Ngay cả khi dùng mã hoá đối xứng để
encrypt và decrypt thông tin truyền và nhận thì cũng có lỗ hổng là hai bên

6
phải trao đổi key mới mã hoá và giải mã được, như vậy attacker vẫn có thể
tóm được key và đọc được thông tin như thường.

Hình 0.1 Mô hình hệ mã hóa bất đối xứng

Điểm yếu của mã hoá đối xứng được khắc chế trong mã hoá bất đối xứng. Ý
tưởng là thay vì gửi chìa khoá cho phía client, thì server sẽ gửi ổ khoá, để
client khoá thông điệp bí mật trong một chiếc hộp, và chỉ có server có thể
giải mã được. Cho nên các client sẽ không đọc được thông điệp của nhau, và
chỉ có sever với private key mới mở khoá được những chiếc hộp này. (Trên
thực tế thì public key vừa dùng để mã hoá vừa dùng để giải mã thông tin nhận
và gửi lên server!)

2. Cơ sở toán học
2.1. Số nguyên tố
❖ Một số nguyên dương được gọi là số nguyên tố khi nó chỉ có hai ước là
1 và chính nó. Chẳng hạn: 2, 3, 5, 7, 11,…, 997,…
❖ Số nguyên tố cùng nhau là hai số có cùng chung ước duy nhất là 1.

2.2. Thuật toán tìm ước chung lớn nhất


Ước chung lớn nhất (Greatest Common Divisor - GCD) là một giá trị số tự
nhiên được sử dụng để định nghĩa là ước chung lớn nhất của hai hoặc nhiều
số tự nhiên. Ước lớn nhất của hai số tự nhiên là số lớn nhất mà cả hai số chia
hết. Trong toán học, giải thuật Euclid (hay thuật toán Euclid) là một giải thuật
để tính ước chung lớn nhất (ƯCLN) của hai số nguyên, là số lớn nhất có thể
chia được bởi hai số nguyên đó với số dư bằng không.

7
❖ Thuật toán Euclid cần đảm bảo:
➢ Dữ kiện 1: gcd(a, 0) = a
➢ Dữ kiện 2: gcd(a, b) = gcd(b, r), trong đó r là phần dư của phép
chia a cho b

Hình 0.2 Thuật toán tìm ước chung lớn nhất

❖ Ví dụ: Tìm ước chung lớn nhất của 2740 và1760


Bảng 0.1 Ví dụ tìm ước chung lớn nhất

q r1 r2 r

1 2740 1760 980

1 1760 980 780

1 980 780 200

3 780 200 180

1 200 180 20

9 180 20 0

20 0

8
❖ Như vậy: gcd(2740, 1760) = 20

2.3. Thuật toán Modulo


Phép toán modulo là phép toán tìm số dư của phép chia 2 số. Cho hai số
dương, a - số bị chia và n - số chia.
Phép a modulo n (viết tắt là a mod n) là số dư của phép chia có dư Euclid
của a cho n.

❖ Toán tử Modulo
Toán tử modulo được hiển thị dưới dạng mod. Đầu vào thứ hai (n) được gọi
là môđun. Đầu ra r được gọi là số dư.

Hình 0.3 Toán tử modulo

❖ Tập dư
Phép toán modulo tạo ra một tập hợp, trong số học môđun được gọi là tập
hợp có ít dư lượng nhất modulo n, hay còn gọi là Zn.

Hình 0.4 Tâp dư

❖ Tính đồng dư
Để chỉ ra hai số nguyên là đồng dư, chúng ta sử dụng toán tử đồng dư (≡).
Ví dụ: 2 ≡ 12 (mod 10) 13 ≡ 23 (mod 10)
3 ≡ 8 (mod 5) 8 ≡ 13 (mod 5)
9
Hình 0.5 Khái niệm về đồng dư

2.4. Thuật toán tìm nghịch đảo nhân


Khi chúng ta làm việc trong số học mô-đun, chúng ta thường cần tìm nghịch đảo
của một số liên quan đến một phép toán. Thông thường chúng ta đang tìm kiếm
một phép cộng nghịch đảo (liên quan đến phép toán cộng) hoặc phép nhân nghịch
đảo (liên quan đến phép nhân).

Thuật toán tìm nghịch đảo nhân (Modular Multiplicative Inverse) là một thuật
toán toán học có thể được sử dụng để tính nghịch đảo nhân của số được chỉ định bằng
một số nguyên dương m. Nghịch đảo nhân của một số là số nguyên dương b thỏa
mãn công thức sau:

𝑎 × 𝑏 ≡ 1 (𝑚𝑜𝑑 𝑛) (1)

Thuật toán Euclide mở rộng tìm các nghịch đảo nhân của b trong Zn khi n và b
cho trước và gcd(n, b) = 1. Nghịch đảo nhân của b là giá trị của t sau khi được
ánh xạ vào Zn

10
Hình 0.6 Thuậ toán tìm nghịch đảo nhân

❖ Ví dụ: Tìm nghịch đảo nhân của 8 trong Z10


➢ Không có phép nhân nghịch đảo vì gcd(10, 8) = 2 ≠ 1

❖ Ví dụ: Tìm nghịch đảo nhân của 23 trong Z100


➢ Ước chung lớn nhất: gcd(23, 100) = 1
Bảng 0.2 Ví dụ tìm nghịch đảo nhân

q r1 r2 r t1 t2 t
4 100 23 8 0 1 -4
2 23 8 7 1 -4 19
1 8 7 1 -4 9 -13
7 7 1 0 9 -13 100
1 0 -13 100

❖ Như vậy: Nghịch đảo nhân của 23 trong Z100 là -13 hoặc 87.

11
CHƯƠNG 2. HỆ MẬT RSA
1. Giới thiệu về hệ mật mã RSA
1.1. Giới thiệu chung
Trong mật mã học, RSA là một thuật toán mật mã hóa công khai. Đâ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.

Hình 0.1 Hệ mật RSA

Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên
vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT). Tên của thuật toán
lấy từ 3 chữ cái đầu tiên của tên 3 tác giả.
Trước đó, vào năm 1973, Clifford Cocks, một nhà toán học người Anh làm việc
tại GCHQ, đã mô tả một thuật toán tương tự. Với khả năng tính toán tại thời điểm
đó thì thuật toán này không khả thi và chưa bao giờ được thực nghiệm. Tuy nhiên,
phát minh này chỉ được công bố vào năm 1977 vì được xếp vào loại tuyệt mật.
Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983.
Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy nhiên, do thuật
toán đã được công bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như không
có giá trị bên ngoài Hoa Kỳ. Ngoài ra, nếu như công trình của Clifford Cocks đã
được công bố trước đó thì bằng sáng chế RSA đã không thể được đăng ký.

12
Hình 0.2 Clifford Cocks – người phát minh thuật toán RSA

1.2. 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 (bí
mật) mới có thể giải mã được.

Hình 0.3 Mô tả mã hóa RSA

13
2. Quy trình tạo khóa
2.1. Thuật toán
Giả sử A và B 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, đầu tiên A 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:
❖ Bước 1: Chọn 2 số nguyên tố lớn p và q với 𝑝 ≠ 𝑞, được lựa chọn
ngẫu nhiên và độc lập.
❖ Bước 2: Tính: 𝑛 = 𝑝𝑞.
❖ Bước 3: Tính giá trị hàm số Euler 𝜙(𝑛) = (𝑝 − 1)(𝑞 − 1).
❖ Bước 4: Chọn một số tự nhiên 𝑒 sao cho 1 < 𝑒 < 𝜙(𝑛) và là số
nguyên tố cùng nhau với 𝜙(𝑛).
❖ Bước 5: Tính: 𝑑 sao cho 𝑑𝑒 ≡ 1 (𝑚𝑜𝑑 𝜙(𝑛)).

Hình 0.4 Thuật toán tạo khóa

Một số lưu ý:
❖ Các số nguyên tố thường được chọn bằng phương pháp thử xác suất.
❖ Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng
❖ Bước 5 có thể viết cách khác: Tìm số tự nhiên 𝑥 sao cho:
𝑥(𝑝 − 1)(𝑞 − 1) + 1 (2)
𝑑 =
𝑒
❖ Bước 3 ta có thể sử dụng 𝜆 = 𝐿𝐶𝑀(𝑝 − 1, 𝑞 − 1) thay cho
𝜙 = (𝑝 − 1)(𝑞 − 1).

14
2.2. Một số phương pháp tìm số nguyên tố p, q
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. Phép kiểm tra số nguyên tố được
thực hiện như sau:
❖ Phương pháp thô sơ:
Phương pháp đơn giản nhất để kiểm tra một số 𝑛 có là số nguyên tố không là
kiểm tra xem nó có chia hết cho các số 𝑚 từ 2 đến 𝑛 − 1 hay không. Nếu 𝑛 chia
hết cho một số 𝑚 nào đó thì 𝑛 là hợp số, ngược lại 𝑛 là số nguyên tố.

❖ Kiểm tra theo xác suất:


Các phép kiểm tra tính nguyên tố hay dùng nhất là các thuật toán ngẫu nhiên. Giả
sử có một mệnh đề Q(p, a) nào đó đúng với mọi số nguyên tố 𝑝 và một số tự
nhiên 𝑎 ≤ 𝑝. Nếu 𝑛 là một số tự nhiên lẻ và mệnh đề Q(n,a) đúng với một 𝑎 ≤ 𝑛
được lấy ngẫu nhiên, khi đó có khả năng là một số nguyên tố. Ta đưa ra một
thuật toán, kết luận rằng 𝑛 là số nguyên tố. Nó là một thuật toán ngẫu nhiên hay
thuật toán xác suất. Trong các thuật toán loại này, dùng một kiểm tra ngẫu nhiên
không bao giờ kết luận một số nguyên tố là hợp số nhưng có thể kết luận một hợp
số là số nguyên tố. Xác suất sai của phép kiểm tra có thể giảm xuống nhờ việc
chọn một dãy độc lập các số 𝑎; nếu với mỗi số 𝑎 xác suất để thuật toán kết luận
một hợp số là số nguyên tố là nhỏ hơn một nửa thì sau k lần thử độc lập, xác suất
sai là nhỏ hơn 2−𝑘 , độ tin cậy của thuật toán sẽ tăng lên theo 𝑘.
o Cấu trúc cơ bản của một phép kiểm tra ngẫu nhiên là:
• Chọn một số ngẫu nhiên 𝑎.
• Kiểm tra một hệ thức nào đó giữa số 𝑎 và số 𝑛 đã cho. Nếu hệ thức sai
thì chắc chắn 𝑛 là một hợp số (số 𝑎 là "bằng chứng" chứng tỏ 𝑛 là hợp
số) và dừng thuật toán.
• Lặp lại bước 1 cho đến khi đạt được số lần đã định hoặc gặp bước 2.
o Sau một loạt lần kiểm tra, nếu không tìm được bằng chứng chứng tỏ 𝑛 là
hợp số thì ta kết luận 𝑛 là số nguyên tố.

❖ Phép kiểm tra tất định:


Vào năm 2002, Manindra Agrawal, Nitin Saxena và Neeraj Kayal đề xuất một
giải thuật tất định kiểm tra tính nguyên tố, là kiểm tra AKS, có khả năng chạy
trong 𝑂((log 𝑛)12 ). Trên thực tế thuật toán này chạy chậm hơn các phương pháp
xác suất.
15
❖ Phương pháp lý thuyết số:
Có một vài phương pháp khác trong lý thuyết số để kiểm tra tính nguyên tố như
kiểm tra Lucas-Lehmer và kiểm tra Proth. Chúng thường dựa vào việc phân tích
𝑛 + 1, 𝑛 − 1, hoặc những số khác. Tuy nhiên các phương pháp này không dừng
cho các số tự nhiên 𝑛 bất kỳ mã chỉ cho các số có một dạng đặc biệt nào đó. Kiểm
tra Lucas-Lehmer dựa trên tính chất: bậc (multiplicative order) của một số 𝑎
modulo 𝑛 là 𝑛 − 1 với 𝑛 là số nguyên tố và 𝑎 là căn nguyên thuỷ (primitive root)
modulo 𝑛. Nếu ta có thể biểu diễn 𝑎 chỉ theo 𝑛, ta có thể thấy 𝑛 là nguyên tố. 𝑝
và 𝑞 còn cần được chọn không quá gần nhau để phòng trường hợp phân tích 𝑛
bằng phương pháp phân tích Fermat. Ngoài ra, nếu 𝑝 − 1 ℎ𝑜ặ𝑐 𝑞 − 1 có thừa số
nguyên tố nhỏ thì 𝑛 cũng có thể dễ dàng bị phân tích và vì thế 𝑝 𝑣à 𝑞 cũng cầ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à kẻ 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 kẻ tấn công cũng có bảng này. Nếu kẻ
tấn công đoán được một nửa chữ số của 𝑝 hay 𝑞 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 𝑑 phải đủ lớn. Năm 1990, Wiener chỉ ra rằng
𝑛1/4
nếu giá trị của 𝑝 nằm trong khoảng 𝑞 và 2𝑞 và 𝑑 < thì có thể tìm ra được 𝑑
3
từ 𝑛 và 𝑒.

2.3. Mã hóa và giải mã


2.3.1. Mã hóa
Giả sử B muốn gửi đoạn thông tin bản mã M cho A. Đầu tiên B chuyển bản
mã M thành một số 𝑚 < 𝑛 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. Lúc này B có 𝑚 và biết 𝑛 cũng như 𝑒 do A
gửi, B sẽ tính 𝑐 là bản mã hóa của 𝑚 theo công thức:
𝑐 = 𝑚𝑒 𝑚𝑜𝑑 𝑛 (3)
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo môđun)
bằng thuật toán bình phương và nhân. Cuối cùng B gửi 𝑐 cho A.

16
2.3.2. Giải mã
A nhận 𝑐 từ B và biết khóa bí mật 𝑑. A có thể tìm được 𝑚 từ 𝑐 theo công thức
sau:
𝑐 = 𝑚𝑒 𝑚𝑜𝑑 𝑛 (4)

Biết 𝑚, A 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ó:
𝑐 𝑑 ≡ (𝑚𝑒 )𝑑 ≡ 𝑚𝑒𝑑 (𝑚𝑜𝑑 𝑛) (5)

Do 𝑒𝑑 ≡ 1 (𝑚𝑜𝑑 𝑝 − 1) 𝑣à 𝑒𝑑 ≡ 1 (𝑚𝑜𝑑 𝑞 − 1), (theo định lý Fermat nhỏ)


nên:
𝑚𝑒𝑑 ≡ 𝑚 (𝑚𝑜𝑑 𝑝) (6)
𝑚𝑒𝑑 ≡ 𝑚 (𝑚𝑜𝑑 𝑞) (7)

Do 𝑝 𝑣à 𝑞 là hai số nguyên tố cùng nhau, áp dụng định lý Số dư Trung Quốc, ta


có:
𝑚𝑒𝑑 ≡ 𝑚 (𝑚𝑜𝑑 𝑝𝑞) ℎ𝑎𝑦 𝑐 𝑑 ≡ 𝑚 (𝑚𝑜𝑑 𝑛) (8)

Hình 0.5 Mã hóa và giải mã

17
3. Tính bảo mật
Độ 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. Nếu 2 bài toán trên là
khó (không tìm được thuật toán hiệu quả để giải chúng) thì không thể thực hiện
được việc phá mã toàn bộ đối với RSA. Phá mã một phần phải được ngăn chặn
bằng các phương pháp chuyển đổi bản rõ an toàn.

Hình 0.6 Bảo mật hệ thống RSA

Bài toán RSA là bài toán tính căn bậc 𝑒 môđun n (với n là hợp số): tìm số m sao
cho 𝑚𝑒 = 𝑐 𝑚𝑜𝑑 𝑛, trong đó (𝑒, 𝑛) chính là khóa công khai và 𝑐 là bản mã. Hiện
nay phương pháp triển vọng nhất giải bài toán này là phân tích 𝑛 ra thừa số
nguyên tố. Khi thực hiện được điều này, kẻ tấn công sẽ tìm ra số mũ bí mật 𝑑 từ
khóa công khai và có thể giải mã theo đúng quy trình của thuật toán. Nếu kẻ tấn
công tìm được 2 số nguyên tố 𝑝 và 𝑞 sao cho: 𝑛 = 𝑝𝑞 thì có thể dễ dàng tìm
được giá trị (𝑝 − 1)(𝑞 − 1) và qua đó xác định 𝑑 từ 𝑒. Chưa có một phương pháp
nào được tìm ra trên máy tính để giải bài toán này trong thời gian đa
thức (polynomial-time). Tuy nhiên người ta cũng chưa chứng minh được điều
ngược lại (sự không tồn tại của thuật toán). Xem thêm phân tích ra thừa số nguyên
tố về vấn đề này.
Tại thời điểm năm 2005, số lớn nhất có thể được phân tích ra thừa số nguyên tố
có độ dài 663 bít với phương pháp phân tán trong khi khóa của RSA có độ dài từ
1024 tới 2048 bít. Một số chuyên gia cho rằng khóa 1024 bít có thể sớm bị phá
vỡ (cũng có nhiều người phản đối việc này). Với khóa 4096 bít thì hầu như không
có khả năng bị phá vỡ trong tương lai gần. Do đó, người ta thường cho rằng RSA
đảm bảo an toàn với điều kiện 𝑛 được chọn đủ lớn. Nếu 𝑛 có độ dài 256 bít hoặc
ngắn hơn, nó có thể bị phân tích trong vài giờ với máy tính cá nhân dùng các
phần mềm có sẵn. Nếu n có độ dài 512 bít, nó có thể bị phân tích bởi vài trăm
18
máy tính tại thời điểm năm 1999. Một thiết bị lý thuyết có tên là TWIRL do
Shamir và Tromer mô tả năm 2003 đã đặt ra câu hỏi về độ an toàn của khóa 1024
bít. Vì vậy hiện nay người ta khuyến cáo sử dụng khóa có độ dài tối thiểu 2048
bít.
Năm 1993, Peter Shor công bố thuật toán Shor chỉ ra rằng: máy tính lượng
tử (trên lý thuyết) có thể giải bài toán phân tích ra thừa số trong thời gian đa thức.
Tuy nhiên, máy tính lượng tử vẫn chưa thể phát triển được tới mức độ này trong
nhiều năm nữa.
Năm 2010, các nhà khoa học thuộc Đại học Michigan đã công bố phát hiện một
kẽ hở trong hệ thống mật mã hoá RSA. Cách phá vỡ hệ thống, lấy khoá bí mật
RSA 1024-bit chỉ trong vài ngày thay vì vài năm nếu tấn công theo cách thông
thường - tấn công bằng brute force (dò tìm lần lượt). Các nhà khoa học tạo một
điện thế lớn để gây lỗi hệ thống, từ đó giúp tìm ra khoá bí mật. Việc tấn công
được thực hiện trên một FPGA. Báo cáo được trình bày tại hội nghị DATE 2010
diễn ra tại Dresden, Đức tháng 3 năm 2010.

4. Một số cách tấn công


4.1. Tấn công dựa trên thời gian

Vào năm 1995, Paul Kocher mô tả một dạng tấn công mới lên RSA: nếu kẻ tấn
công nắm đủ thông tin về phần cứng thực hiện mã hóa và xác định được thời gian
giải mã đối với một số bản mã lựa chọn thì có thể nhanh chóng tìm ra khóa 𝑑.
Dạng tấn công này có thể áp dụng đối với hệ thống chữ ký điện tử sử dụng RSA.
Năm 2003, Dan Boneh và David Brumley chứng minh một dạng tấn công thực
tế hơn: phân tích thừa số RSA dùng mạng máy tính (Máy chủ web dùng SSL).
Tấn công đã khai thác thông tin rò rỉ của việc tối ưu hóa định lý số dư Trung
quốc mà nhiều ứng dụng đã thực hiện.
Để chống lại tấn công dựa trên thời gian là đảm bảo quá trình giải mã luôn diễn
ra trong thời gian không đổi bất kể văn bản mã. Tuy nhiên, cách này có thể làm
giảm hiệu suất tính toán. Thay vào đó, hầu hết các ứng dụng RSA sử dụng một
kỹ thuật gọi là che mắt. Kỹ thuật này dựa trên tính nhân của RSA: thay vì
tính 𝑐 𝑑 𝑚𝑜𝑑 𝑛, A đầu tiên chọn một số ngẫu nhiên r và tính (𝑟 𝑒 𝑐)𝑑 𝑚𝑜𝑑 𝑛. Kết
quả của phép tính này là 𝑟𝑚 𝑚𝑜𝑑 𝑛 và tác động của r sẽ được loại bỏ bằng cách
nhân kết quả với nghịch đảo của r. Đối với mỗi văn bản mã, người ta chọn một
giá trị của r. Vì vậy, thời gian giải mã sẽ không còn phụ thuộc vào giá trị của văn
bản mã.

19
4.2. Tấn công lựa chọn thích nghi bản mã

Năm 1981, Daniel Bleichenbacher mô tả dạng tấn công lựa chọn thích nghi bản
mã (adaptive chosen ciphertext attack) đầu tiên có thể thực hiện trên thực tế đối
với một văn bản mã hóa bằng RSA. Văn bản này được mã hóa dựa trên tiêu chuẩn
PKCS #1 v1, một tiêu chuẩn chuyển đổi bản rõ có khả năng kiểm tra tính hợp lệ
của văn bản sau khi giải mã. Do những khiếm khuyết của PKCS #1,
Bleichenbacher có thể thực hiện một tấn công lên bản RSA dùng cho giao
thức SSL (tìm được khóa phiên). Do phát hiện này, các mô hình chuyển đổi an
toàn hơn như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric
Encryption Padding) được khuyến cáo sử dụng. Đồng thời phòng nghiên cứu của
RSA cũng đưa ra phiên bản mới của PKCS #1 có khả năng chống lại dạng tấn
công nói trên.

5. Chữ ký số
5.1. Khái niệm về chữ ký số
Chữ ký điện số là thông tin đi kèm theo dữ liệu (văn bản, âm thanh,hình ảnh,
video...) nhằm mục đích xác định người chủ của dữ liệu đó. Chữ ký điện số là
chuỗi thông tin cho phép xác định nguồn gốc, xuất xứ, thực thể đã tạo ra 1 thông
điệp.
Chữ ký số khóa công khai 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, 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.

Hình 0.7 Chữ ký số

20
5.2. Quy trình tạo và xác minh chữ ký số

Hình 0.8 Những xử lý trong mô hình chữ ký số

5.2.1. Quá trình ký (bên gửi)

Tính toán chuỗi đại diện (message digest/ hash value) của thông điệp sử dụng
một giải thuật băm (Hashing algorithm) SHA-1. Chuỗi đại diện được ký sử dụng
khóa riêng (Priavte key) của người gửi và giải thuật tạo chữ ký (Signature/
Encryption algorithm) RSA.
Kết quả chữ ký số (Digital signature) của thông điệp hay còn gọi là chuỗi đại diện
được mã hóa bởi giải thuật RSA (Encryted message digest). Thông điệp ban đầu
(message) được ghép với chữ ký số (Digital signature) tạo thành thông điệp đã
được ký (Signed message). Thông điệp đã được ký (Signed message) được gửi
cho người nhận.

21
Hình 0.9 Tạo chữ ký số RSA

5.2.2. Quá trình kiểm tra chữ ký (bên nhận)

Tách chữ ký số RSA và thông điệp gốc khỏi thông điệp đã ký để xử lý riêng. Tính
toán chuỗi đại diện MD1 (message digest) của thông điệp gốc sử dụng giải thuật
băm (là giải thuật sử dụng trong quá trình ký là SHA-1). Sử dụng khóa công khai
(Public key) của người gửi để giải mã chữ ký số RSA => chuỗi đại diện thông
điệp MD2.
So sánh MD1 và MD2:
• Nếu MD1 = MD2 => chữ ký kiểm tra thành công. Thông điệp đảm bảo
tính toàn vẹn và thực sự xuất phát từ người gửi (do khóa công khai được
chứng thực).
• Nếu MD1 ≠ MD2 => chữ ký không hợp lệ. Thông điệp có thể đã bị sửa
đổi hoặc không thực sự xuất phát từ người gửi.

22
Hình 0.10 Thẩm định chữ ký số RSA

23
CHƯƠNG 3. MÔ PHỎNG HỆ MẬT RSA
1. Mô phỏng hệ mật RSA
❖ Mã nguồn chương trình mô phỏng hệ mật RSA được viết bằng ngôn ngữ
Python.
❖ Giao diện chương trình mô phỏng

Hình 0.1 Giao diện mô phỏng hệ mật RSA

❖ Nhập thông tin bản rõ “ly thuyet mat ma dhbkhn” và ô “Enter


Message”
❖ Nhấn “Gen Key” để tạo các tham số cần thiết:
• Hai số nguyên tố: p, q (sử dụng hàm random() trong Python)
• Khóa công khai: e, n
• Khóa bí mật: d
❖ Nhấn “Enc” để thực hiện quá trình mã hóa
❖ Nhấn “Dec” để thực hiện giải mã

24
Hình 0.2 Chươn trình mã hóa và giải mã

❖ Bản mã sau khi thực hiện mã hóa:


6835075151206937521 353173454722244586 1822384774389041157
7032571511709907263 9121046401278050212 9969588286705482999
353173454722244586 757178522238958203 7032571511709907263
1822384774389041157 1561269554773310270 4873325037343359016
7032571511709907263 1822384774389041157 1561269554773310270
4873325037343359016 1822384774389041157 9578560193633770693
9121046401278050212 5165561980808395122 4377625732182987375
9121046401278050212 154376261080069448

❖ Bản mã sau khi thực hiện giải mã: “ly thuyet mat ma dhbkhn”

Nhận xét: Kết quả sau khi giải mã trùng khớp với bản rõ nhập vào. Như vậy, văn bản
đã được mã hóa chính xác với các khóa công khai và khóa bí mật.

25
❖ Thực hiện thay đổi một số ký tự bản rõ: “ly thuyet mat ma bkhn”

Hình 0.3 Chương trình mô phỏng mã hóa và giải mã sau khi thay đổi bản rõ

❖ Thực hiện mã hóa, cho ra bản mã không khác nhiều so với bản mã
trước khi thay đổi.
6835075151206937521 353173454722244586 1822384774389041157
7032571511709907263 9121046401278050212 9969588286705482999
353173454722244586 757178522238958203 7032571511709907263
1822384774389041157 1561269554773310270 4873325037343359016
7032571511709907263 1822384774389041157 1561269554773310270
4873325037343359016 1822384774389041157 5165561980808395122
4377625732182987375 9121046401278050212 154376261080069448

26
2. Kết luận

Hệ mật RSA là một trong những hệ mật mã khóa công khai phổ biến nhất và
được sử dụng rộng rãi trong nhiều ứng dụng bảo mật. Bên cạnh đó, hệ mật RSA
vẫn tồn tại một số ưu, nhược điểm.

❖ Ưu điểm
• Hệ mật RSA có tính bảo mật cao và khó bị xâm nhập nếu được sử dụng
đúng cách.
• Việc mã hóa và giải mã thông điệp sử dụng hai khoá khác nhau, làm cho hệ
mật RSA an toàn hơn so với các hệ mật khóa đối xứng.
• Việc sử dụng số nguyên tố lớn để tạo khoá RSA làm cho việc giải mã trở nên
khó khăn đối với các kẻ tấn công, ngay cả khi họ có sử dụng phương pháp
tấn công brute - force.

❖ Hạn chế
• Hệ mật RSA cần một khối lượng tính toán lớn, đặc biệt là trong quá trình tạo
khoá công khai và khoá riêng. Điều này có thể gây ra hiệu suất chậm và tăng
chi phí tính toán cho các hệ thống có nhiều lưu lượng dữ liệu.
• Một số tấn công như tấn công side-channel có thể tấn công vào hệ mật RSA
và giảm bảo mật của nó.
• Kích thước khóa cần phải đủ lớn để đảm bảo tính an toàn của hệ thống, điều
này đôi khi có thể gây khó khăn trong việc quản lý và truyền tải khoá giữa
các bên.

27
TÀI LIỆU THAM KHẢO
1. RSA (mã hóa) https://vi.wikipedia.org/
2. Slide lý thuyết mật mã (PGS.TS Hà Duyên Trung)
3. RSA (CryptSystem) https://brilliant.org/wiki/rsa-encryption/
4. Chữ ký số https://tenten.vn/tin-tuc/chu-ky-so-rsa/

28

You might also like