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

Tiểu luận môn toán học cho khoa học máy tính TÌM HIỂU THUẬT TOÁN RSA VÀ ỨNG DỤNG

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 (656.73 KB, 34 trang )

PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Mục lục
MỞ ĐẦU
Hiện nay, tiềm năng của mạng Internet là rất lớn. Như ta đã biết các giao tiếp, trao đổi
thông tin qua Internet đều sử dụng giao thức TCP/IP. Các gói tin truyền từ điểm nguồn tới
điểm đích sẽ đi qua rất nhiều máy tính trung gian, vì vậy độ an toàn thấp, nó rất dễ bị xâm
phạm, theo dõi và giả mạo trên đường truyền. Vấn đề không an toàn cho thông tin trên đường
truyền khiến nhiều người đắn đo trong việc sử dụng mạng Internet cho những ứng dụng về tài
1 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

ĐỒ ÁN MÔN HỌC
TOÁN HỌC CHO KHOA HỌC MÁY TÍNH
ĐỀ TÀI:
TÌM HIỂU THUẬT TOÁN
RSA VÀ ỨNG DỤNG
Giảng viên hướng dẫn:
PGS.TS. ĐỖ VĂN NHƠN
Học viên thực hiện:
Nguyễn Hữu Lộc - CH1301023
Thành phố Hồ Chí Minh, 12/2013
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
chính, giao dịch ngân hàng, hoạt động mua bán và khi truyền các thông tin kinh tế, chính trị
vv…
Những biện pháp đảm bảo an toàn thông tin đưa ra đều nhằm đáp ứng 3 yêu cầu: bảo mật
thông tin, xác thực thông tin và toàn vẹn thông tin trên đường truyền. Các hệ mã hóa thông
tin bảo đảm tính bí mật nội dung thông tin, các sơ đồ chữ ký số bảo đảm xác thực thông tin
trên đường truyền.
Trong mật mã học, RSA là một thuật toán mật mã hóa khó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.
MỤC LỤC
2 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
BẢNG TỪ VIẾT TẮT
Từ hoặc cụm từ Từ viết tắt
Ước chung lớn nhất
UCLN
Chinese Remainder Theorem CRT
Ron Rivest, Adi Shamir, Len Adleman
RSA
3 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
CHƯƠNG I.CƠ SỞ TOÁN HỌC VỀ SỐ NGUYÊN VÀ CÁC
THUẬT TOÁN
1.1. Ước số - Bội số
Định nghĩa : Ước số của a và b là c nếu c|a và c|b
Ước số chung lớn nhất : Là số lớn nhất mà a và b chia hết
Ký hiệu : c = gcd (a,b) ; (great common divisor)
Bội số chung nhỏ nhất : d là BCNN của a và b nếu

c mà a|c , b|c → d|c
Ký hiệu : d = lcm (a,b) ; (least common multiple)
Tính chất: lcm (a,b) = a.b/gcd(a,b)
1.2. Số nguyên tố
Định nghĩa : Số nguyên tố là số chỉ chia hết cho 1 và chính nó, ngoài ra không còn
số nào nó có thể chia hết nữa. Hệ mật thường sử dụng số nguyên tố lớn cỡ 512bits và
thậm chí còn lớn hơn nữa.

Hai số m và n gọi là hai số nguyên tố cùng nhau khi ước số chung lớn nhất của
chúng bằng 1. Chúng ta có thể viết như sau:
UCLN(m,n)=1
1.3. Các thuật toán trong Z
Cho a và b là các số nguyên không âm và nhỏ hơn hoặc bằng n. Cần chú ý rằng số
các bit trong biểu diễn nhị phân của n là [lgn] + 1 và số này xấp xỉ bằng lg n. Số các
phép toán bit đối với bốn phép toán cơ bản trên các số là cộng , trừ, nhân và chia sử
dụng các thuật toán kinh điển được tóm lược trên bảng sau. Các kỹ thuật tinh tế hơn
đối với các phép toán nhân và chia sẽ có độ phức tạp nhỏ hơn.
Phép toán Độ phức tạp bit
4 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Cộng a + b
Trừ a – b
Nhân a * b
Chia a = qb + r
0(lg a + lg b) = 0 (lg n)
0(lg a + lg b) = 0 (lg n)
0
( )
b) (lg*a) (lg
= 0
( )
n)2 (lg
0
( )
b) (lg*a) (lg
= 0
( )
n)2 (lg

1.4. Thuật toán Euclide : Tính UCLN của 2 số nguyên
VÀO : Hai số nguyên không âm a và b với a > b
RA : UCLN của a và b
(1). while b ≠ 0 do
R ← a mod b, a ← b, b ← r
(2). Return (a)
1.5. Thuật toán Euclide mở rộng
VÀO : Hai số nguyên không âm a và b với a > b
RA : d = UCLN (a, b) và các số nguyên x và y thỏa mãn ax + by = d
(1) Nếu b = 0 thì đặt d ← a, x ← l, y ← 0 và return (d, x, y)
(2) Đặt x
2
← l, x
1
← 0, y
2
← 0, y
1
← l
(3) while b > 0 do
1. q ← [a/b], r ← a – qb, x ← x
2
– qx
1
, y ← y
2
– qy
1
2. a ← b, b ← r, x
2

← x
1
, x
1
← x, y
2
← y
1
, y
1
← y
(4) Đặt d ← a, x ← x
2
, y ← y
2
và return (d, x, y)
1.6. Định nghĩa hàm Φ Euler
Định nghĩa : Với n≥1 chúng ta gọi
φ
(n) là tập các số nguyên tố cùng nhauvới n
nằm trong khoảng [1,n].
Tính chất :
 Nếu p là số nguyên tố →
φ
(p) = p-1
 Nếu p=m.n , gcd(m,n)=1

φ
(p)=
φ

(m).
φ
(n)
 Nếu n =
k
e
k
eee
pppp
3
21
321
là thừa số nguyên tố của n thì

φ
(n)=n




























k
ppp
1
1
1
1
1
1
21
1.7. Đồng dư thức
Định nghĩa : Cho a và b là hai số nguyên tố, a được gọi là đồng dư với b theo
modulo n, ký hiệu là a ≡ b(mod n) nếu a, b chia cho n có cùng số dư.
Ví dụ : 24 ≡ 9 mod 5 vì 24 - 9 = 3 * 5
-11 ≡ 17 mod 7 vì -11 - 17 = -4 * 7
5 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Tính chất :

Đối với a, a
1
, b, b
1
, c ∈ Z ta có :
 a ≡ a (mod n)
 a ≡ b (mod n) ↔ b ≡ a (mod n)
 a ≡ b (mod n) , b ≡ c (mod n) → a ≡ c (mod n)
 a ≡ a
1
(mod n) , b ≡ b
1
(mod n)
a+b≡ a
1
+b
1
(mod n)
a.b ≡ a
1
.b
1
(mod n)
1.8. Số nghịch đảo
Định nghĩa : Cho a ∈ Z
n
. Một số nguyên x ∈ Z
n
gọi là nghịch đảo của a theo modn
nếu a.x ≡ 1mod n

Nếu có số x như vậy thì nó là duy nhất và ta nói a là khả nghịch. Ký hiệu là a
-1
. Có
thể suy ra rằng a khả nghịch theo mod n khi và chỉ khi gcd (a,n)=1.
1.9. Nhóm nhân Z*n
Định nghĩa : Nhóm nhân của Z
n
ký hiệu là Z
*
n
là tập hợp các phần tử sao cho gcd
(a,n)=1. Đặc biệt với n là số nguyên tố thì Z
*
n
={ a ∈ Z
n
| 1≤a≤n-1}
Định nghĩa : Cho a ∈Z
*
n
khi đó bậc của a kí hiệu là ord (a) là một số nguyên
dương t nhỏ nhất sao cho a
t

1(mod n).
1.10. Định nghĩa thặng dư bậc 2
Định nghĩa : Cho a ∈ Z
*
n
gọi a là thặng dư bậc 2 theo modulo n nếu tồn tại x sao

cho x
2
≡ a (mod n) . Nếu không tồn tại thì gọi a là bất thặng dư bậc 2. Tập tất cả các
thặng dư bậc hai modulo n được kí hiệu là
n
Q
, còn tập tất cả các thặng dư không bậc
hai được kí hiệu là
n
Q
.
1.11. Phần dư China CRT ( Chinese Remainder Theorem)
Nếu các số nguyên n
1
, n
2
, …, n
k
là nguyên tố cùng nhau từng thì hệ các phương
trình đồng dư:
x ≡ a
1
(mod n
1
)
x ≡ a
2
(mod n
2
)

………………
x ≡ a
k
(mod n
k
)
sẽ có nghiệm duy nhất theo modulo n (n = n
1
, n
2
, …, n
k
)
x =

=
k
i 1
a
i
N
i
M
i
mod n
Trong đó N
i
= n / n
i
và M

i
= N
1−
i
mod n
i
Các tính toán này có thể được thực hiện bởi 0
( )
)2n (lg
các phép toán trên bit.
Ví dụ : Cặp phương trình đồng dư
6 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
x ≡ 5 (mod 9)
x ≡ 19 (mod 23) có nghiệm duy nhất x ≡ 203 (mod 207)
Tính chất
Nếu (n
1
, n
2
) = 1 thì cặp phương trình đồng dư
x ≡ a (mod n
1
), x ≡ a (mod n
2
)
có một nghiệm duy nhất x ≡ a (mod n
1
,n
2

)
7 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
CHƯƠNG II: TÌM HIỂU VỀ MẬT MÃ
Mật mã học là khoa học nghiên cứu sự an toàn, toàn vẹn của dữ liệu, xác nhận sự
tồn tại và xác nhận tính nguyên bản của thông tin.
Hình 1:Sơ đồ khối một hệ truyền tin mật
Nguồn tin
Bộ mã hóa
Kênh mở
(không an toàn)
Bộ giải mã
Nhận tin
Thám mã
Kênh an toàn
Nguồn khóa
Bản rõ
Bản mã
Bản mã
K
D
K
E
B
A
Bản rõ
Định nghĩa : Một hệ mật mã là một bộ năm (P, C, K, E, D) thoả mãn các điều kiện
sau đây:
+ P là một tập hữu hạn các bản rõ.
+ C là một tập hữu hạn các bản mã.

+ K là một tập hữu hạn các khoá.
8 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
+ Với mỗi k ∈ K, có một hàm lập mã e
k
∈ E
e
k
: P → C
và một hàm giải mã d
k
∈ D
d
k
: C → P sao cho d
k
( )
(x)e
k
= x với mọi x

P
Trong thực tế, P và C thường là bảng chữ cái (hoặc tập các dãy chữ cái có độ
dài cố định).
2.1. Mã cổ điển
Hệ mã cổ điển (hệ mã đối xứng) là hệ mật mã mà khóa mã hóa có thể dễ dàng tìm
được từ khóa giải mã và ngược lại. Trong nhiều trường hợp, khóa mã hóa và khóa giải
mã là giống nhau.
Hệ mật mã cổ điển yêu cầu người gửi và người nhận phải thỏa thuận một mã trước
khi tin tức được gửi đi, khóa này phải được cất giữ bí mật. Độ an toàn của hệ này phụ

thuộc vào khóa. Nếu để lộ khóa, thì bất kỳ người nào cũng có thể mã hóa và giải mã
thông điệp đó.
 Các đặc điểm của hệ mã cổ điển
1. Các phương pháp mã hóa cổ điển đòi hỏi người mã hóa và người giải mã phải
có cùng chung một khóa.
2. Khóa phải được giữ bí mật tuyệt đối, khóa phải được gửi đi trên kênh an toàn.
Vì dễ dàng xác định một khóa nếu biết khóa kia.
Nhược điểm chính của phương pháp này là khóa được truyền trên kênh an toàn
nên chi phí tốn kém và không kịp thời. Ưu điểm là tốc độ mã hóa và giải mã rất
nhanh.
Các hệ mật mã cổ điển cũng dùng chung một khoá cho việc lập mã và giải mã, các
bản rõ và bản mã thường dùng cơ sở là bảng chữ cái trong ngôn ngữ tự nhiên. Và
trong phần này ta sẽ dùng bảng chữ cái tiếng Anh làm ví dụ.
 Nơi ứng dụng
Hệ mã cổ điển thường được sử dụng trong môi trường mà khóa có thể dễ dàng trao
chuyển bí mật. Nó cũng được dùng để mã hóa thông tin khi lưu trữ trên đĩa.
2.1.1. Mã dịch chuyển
Định nghĩa : Mã dịch chuyển: (P, C, K, E, D)
P = C = K = Z
26
với k ∈ K, định nghĩa e
k
(x) = (x + k) mod 26
d
k
(y) = (y – k) mod 26
(x, y ∈ Z
26
)
Ví dụ: Dùng khoá k = 2 để mã hoá dòng thư:

"madichchuyen'"
dòng thư đó tương ứng với dòng số
9 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
m a d i c h c h u y e n
12 0 3 8 2 7 2 7 20 24 4 13
Qua phép mã hoá e
2
sẽ được:
14 2 5 10 4 9 4 9 22 26 6 15
o c f k e j e j w z g p
Bản mã sẽ là:
“ocfkejejwzgp”
Nhận được bản mã đó, dùng d
2
để nhận được bản rõ.
Cách đây 2000 năm mã dịch chuyển đã được Julius Ceasar sử dụng, với khoá k=3
mã địch chuyển được gọi là mã Ceasar.
Tập khoá phụ thuộc vào Z
m
với m là số khoá có thể.
Trong tiếng Anh tập khoá chỉ có 26 khoá có thể, việc thám mã có thể được thực
hiện bằng cách duyệt tuần tự 26 khoá đó, vì vậy độ an toàn của mã dịch chuyển rất
thấp.
2.1.2. Mã thay thế
Định nghĩa Mã thay thế: (P, C, K, E, D)
P = C = Z
26
, K = S (Z
26

) Với mỗi π є K, tức là một hoán vị trên Z
26
, ta xác định
e
π
(x) = π (x)
d
π
(y) = π
-1
(y)
với x, y є Z
26
, π
-1
là nghịch đảo của π
Ví dụ: π được cho bởi (ở đây ta viết chữ cái thay cho các con số thuộc Z
26
):
a b c d e f g h i j k l m n
z y x w v u t s r q p o n m
o p q r s t u v w x y z
l k j i h g f e d c b a
Bản rõ:
10 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
“mathaythe”
sẽ được mã hoá thành bản mã (với khoá π):
“nzgszbgsv”
Dễ xác định được π

-1
, và do đó từ bản mã ta tìm được bản rõ.
Mã thay thế có tập hợp khoá khá lớn - bằng số các hoán vị trên bảng chữ cái, tức
số các hoán vị trên Z
26
, hay là 26! > 4.10
26
. Việc duyệt toàn bộ các hoán vị để thám mã
là rất khó, ngay cả đối với máy tính. Tuy nhiên, bằng phương pháp thống kê, ta có thể
dễ dàng thám được các bản mã loại này, và do đó mã thay thế cũng không thể được
xem là an toàn
2.1.3. Mã hoán vị
Định nghĩa Mã hoán vị: (P, C, K, E, D)
Cho m là số nguyên dương.
P = C = Z
26
, K = S
m
( )
mk
xxxe ,,,
21
=
( ) ( ) ( )
( )
m
xxx
πππ
,,,
21

( )
mk
yyyd ,,,
21
=
( ) ( ) ( )
( )
m
yyy
111
,,,
21
−−−
πππ
với mỗi k = π ∈ S
m
, ta có
Trong đó π
-1
là hoán vị nghịch đảo của π
Ví dụ:Giả sử m = 4, và khoá k được cho bởi phép hoán vị π
1 2 3 4
2 3 4 1
1 2 3 4
4 1 2 3
Khi đó phép hoán vị nghịch đảo π
-1
là:
11 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]

Bản rõ:
“ mahoanvi ”
m a h o a n v i
Vt 1 2 3 4 1 2 3 4
π
1

2 2

3 3

4 4

1 1

2 2

3 3

4 4

1
Vt 2 3 4 1 2 3 4 1
a h o m a h o m
Bản mã:
“ ahomahom ”
Dùng hoán vị nghịch đảo, từ bản mật mã ta lại thu được bản rõ.
Chú ý:
Mã hoán vị là một trường hợp riêng của mã Hill. Thực vậy, cho phép hoán vị π của
{1, 2,…, m}, ta có thể xác định ma trận K

π
=(k
ij
), với
Thì dễ thấy rằng mã Hill với khoá K
π
trùng với mã hoán vị với khoá π.
Với m cho trước, số các khoá có thể có của mã hoán vị là m!
Dễ nhận thấy với m = 26 ta có số khóa 26! (mã Thay thế)
2.2. Mã khóa công khai
Trong mô hình mật mã cổ điển trước đây mà hiện nay đang được nghiên cứu,
A(người gửi) và B (người nhận) chọn khóa bí mật K. Sau đó dùng K để tạo luật mã
hóa e
k
và luật giải mã d
k
. Trong hệ mật này d
k
hoặc giống e
k
hoặc khác, nếu để lộ e
k
thì
làm cho hệ thống mất an toàn.
Nhược điểm của hệ mật này là nó yêu cầu phải có thông tin trước về khóa K giữa
A và B qua một kênh an toàn trước khi gửi một bản mã bất kỳ. Trên thực tế điều này
rất khó đảm bảo. Chẳng hạn khi A và B ở cách xa nhau và họ chỉ có thể liên lạc với
nhau bằng E-mail. Trong tình huống đó A và B không thể tạo một kênh bảo mật với
giá phải chăng.
12 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng

PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Ý tưởng xây dựng một hệ mật khóa công khai là tìm một hệ mật không có khả
năng tính tóan để xác định d
k
khi biết e
k
. Nếu thực hiện được như vậy thì quy tắc mã e
k
có thể được công khai bằng cách công bố nó trong một danh bạ (bởi vậy nên có thuật
ngữ hệ mật khóa công khai).
Ưu điểm của hệ mật khóa công khai là ở chỗ A (hoặc bất kỳ A) có thể gửi một bản
tin đã mã hóa cho B (mà không cần thông tin trước về khóa mật) bằng cách dùng mật
mã công khai e
k
. Người nhận A sẽ là người duy nhất có thể giải mã được bản mã này
bằng việc sử dụng luật giải bí mật d
k
của mình. Có thể hình dung hệ mật này tương tự
như sau: A đặt một vật vào một hộp kim loại và rồi khóa nó lại bằng một khóa số do B
để lại. Chỉ có B là người duy nhất có thể mở được hộp vì chỉ có anh ta mới biết tổ hợp
mã của khóa số của mình.
Ý tưởng về một hệ mật khóa công khai được Diffie và Hellman đưa ra vào năm
1976. Còn việc hiện thực hóa nó thì do Riyesrt, Shamir và Ableman đưa ra lần đầu
vào năm 1977, họ đã tạo nên hệ mật nổi tiếng RSA và một số hệ mật khác. Độ bảo
mật của hệ RSA dựa trên độ khó của việc phân tích ra thừa số nguyên lớn.
 Nơi ứng dụng
Sử dụng chủ yếu trên các mạng công khai như Internet, khi mà việc trao chuyển
khóa bí mật tương đối khó khăn. Đặc trưng nổi bật của hệ mã hóa khóa công khai là
cả khóa công khai và bản mã đều có thể gửi đi trên một kênh thông tin không an toàn.
2.2.1. Mã RSA

Ví dụ:
Chọn p = 2, q = 5. Tính n = p.q = 2*5 = 10
φ(n)= (p – 1).(q – 1) = 1*4 = 4
Do UCLN(φ(n), b) = 1 nên chọn b = 3
a.b ≡ 1 mod φ(n) nên chọn a = 7
Giả sử G muốn gửi bản rõ x = 3 tới N, G phải tính:
y = e
K
(x)= x
b
mod n = 3
3
mod 10 = 7
Khi N nhận được bản mã y = 7, anh ta sử dụng số mũ a mật để tính:
x = d
K
(y) = y
a
mod n = 7
7
mod 10 = 3
Đó chính là bản rõ mà G đã mã hoá.
Độ mật của hệ RSA được dựa trên giả thiết là hàm mã e
K
(x) = x
b
mod n là hàm
một chiều. Bởi vậy thám mã sẽ gặp khó khăn về mặt tính toán để giải mã một bản
mã. Cửa sập cho phép N chính là thông tin về phép phân tích thừa số n (n = p.q).
Vì N biết phép phân tích này nên anh ta có thể tính

φ(n) = (p – 1).(q – 1) và rồi tính số mũ giải mã a bằng cách sử dụng thuật toán
Eculide mở rộng.
2.2.2. Mã Elgamal
Mô tả hệ mã Elgamal
Hệ mật mã ElGamal được T.ElGamal đề xuất năm 1985, dựa vào độ phức tạp của
bài toán tính lôgarit rời rạc, và sau đó đã nhanh chóng được sử dụng rộng rãi không
13 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
những trong vấn đề bảo mật truyền tin mà còn trong các vấn đề xác nhận và chữ ký
điện tử.
Bài toán logarithm rời rạc trong Z
p
là đối tượng trong nhiều công trình nghiên cứu
và được xem là bài toán khó nếu p được chọn cẩn thận. Cụ thể là không có một thuật
toán thời gian đa thức nào cho bài toán logarithm rời rạc. Để gây khó khăn cho các
phương pháp tấn công đã biết, p phải có ít nhất 150 chữ số và (p – 1) phải có ít nhất
một thừa số nguyên tố lớn
Hệ mật mã Elgamal là một hệ mật không tất định vì bản mã phụ thuộc vào cả bản
rõ x lẫn giá trị ngẫu nhiên k do G chọn. Bởi vậy sẽ có nhiều bản mã được mã từ cùng
một bản rõ.
Bài toán logarithm rời rạc trong Z
p
:
Đặc trưng của bài toán: I = (p, α, β) trong đó p là số nguyên tố, α∈
p
Z

phần tử nguyên thuỷ (hay phần tử sinh), β∈
*
p

Z
Mục tiêu: Hãy tìm một số nguyên duy nhất a, 0 ≤ a ≤ p – 2 sao cho:
α
a
≡β (mod p)
Ta sẽ xác định số nguyên a bằng log
α
β.
Định nghĩa mã hoá công khai Elgamal trong
*
p
Z
:
Cho p là số nguyên tố sao cho bài toán logarithm rời rạc trong
p
Z
là khó giải.
Cho α∈
*
p
Z
là phần tử nguyên thuỷ. Giả sử P =
*
p
Z
, C =
*
p
Z
x

*
p
Z
. Ta định
nghĩa: K = {(p, α, a, β): β≡α
a
(mod p)}
Các giá trị p, α, β được công khai, còn a giữ kín.
Với K =(p, α, a, β) và một số ngẫu nhiên bí mật k ∈
1

p
Z
, ta xác định:
e
K
(x, k) = (y
1
, y
2
).
Trong đó: y
1
= α
k
mod p
y
2
= x. β
k

mod p
với y
1
, y
2

*
p
Z
ta xác định:
d
K
(y
1
, y
2
) = y
2
(y
1
a
)
– 1
mod p
Ví dụ:
Chọn p = 7
α∈
*
p
Z

là phần tử nguyên thuỷ nên α = 3
Chọn a sao cho 0 ≤ a ≤ p – 2 nên a = 2
14 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Khi đó : β = α
a
mod p = 3
2
mod 7 = 2
Chọn một số ngẫu nhiên bí mật k ∈
1

p
Z
, chọn k =3
Giả sử G muốn gửi thông báo x = 3 cho N, G phải tính:
e
K
(x, k) = (y
1
, y
2
)
Trong đó:
y
1
= α
k
mod p = 3
3

mod 7 = 6
y
2
= x. β
k
mod p = 3*2
3
mod 7 = 3
Khi N thu được bản mã (y
1
, y
2
) = (6, 3), anh ta sẽ tính:
x = d
K
(y
1
, y
2
) = y
2
(y
1
a
)
-1
mod p = 3*(6
2
)
-1

mod 7 = 3
Đó chính là bàn rõ mà G đã mã hoá
CHƯƠNG III. HỆ MẬT MÃ RSA
3.1. Lịch sử
- Do 3 tác giả Ron Rivest (R), Adi Shamir(S) và Len Adleman(A) của Học viện
Công nghệ Massachusetts (MIT) đưa ra năm 1977 và công bố năm 1997.
- Được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983 (Số đăng ký
4,405,829).
15 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
3.2. Định nghĩa
Hệ mật này sử dụng tính toán trong Z
n
, trong đó n là tích của 2 số nguyên tố phân
biệt p và q. Ta thấy rằng φ(n) = (p – 1).(q – 1).
Cho n = p.q trong đó p và q là các số nguyên tố. Đặt P = C = Z
n
và định nghĩa:
K = {(n, p, q, a, b): n = p.q, p, q là các số nguyên tố, a.b ≡ 1 mod φ(n)}
Với K = (n, p, q, a, b) ta xác định: e
K
(x) = x
b
mod n
và d
K
(y) = y
a
mod n
(x, y ∈ Z

n
) Các giá trị n và b được công khai và các giá trị p, q, a được giữ kín
3.3. Mô tả hoạt động
• Thuật toán RSA có hai khóa:
 khóa công khai (Public Key)
 khóa bí mật ( Private Key).
• 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.
• Khóa bí mật được cá nhân giữ kín và dùng để giải mã.
Ví dụ :
Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai như sau: 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ở sẵn 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 (như loại khoá thông thường chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả
Bob cũng không thể mở lại được-không đọ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.
Bod  Alice
( Mã hóa M bằng Public Key của A đc c ) (Giải mã c bằng Private Key của A đc M ) .
3.3.1.Tạo khóa
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:
Các bước tạo khóa:
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 = pq.
3. Tính: giá trị hàm số Ơle ф(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 d e ≡ 1 (mod ф(n).)
Khóa công khai: (e, n)
Khóa bí mật: (d, n).
16 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
3.3.2.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. Quá trình này được mô tả ở phần Chuyển đổi văn bản rõ.
Lúc này Bob có m và biết n cũng như e do Alice gửi. Bob sẽ tính c là bản mã
hóa của m theo công thức:
c = me mod n
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (môđun) bằng
phương pháp bình phương (exponentiation by squaring). Cuối cùng Bob gửi c cho
Alice
3.3.3.Giải mã
Alice nhận c từ Bob và biết khóa bí mật d. Alice có thể tìm được m từ c theo
công thức sau:
m = cd mod n
Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước. Quá trình giải
mã hoạt động vì ta có :
cd ≡ (me)d ≡ med (mod n).
Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:
med ≡ m (mod p)

med ≡ m (mod q)
Do p và q là hai số nguyên tố cùng nhau, áp dụng định lý số dư Trung Hoa, ta
có:
med ≡ m (mod pq)

hay:
cd ≡ m (mod n).
3.4. Ví dụ
Lấy:
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
Khóa công khai là cặp (e, n).
Khóa bí mật là d.
Hàm mã hóa là: encrypt(m) = me mod n = m17 mod 3233 ( với m là văn bản
rõ.)
Hàm giải mã là: decrypt(c) = cd mod n = c2753 mod 3233 (với c là văn bản
mã.)
Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính: encrypt(123) = 12317
mod 3233 = 855
Để giải mã văn bản có giá trị 855, ta thực hiện phép tính: decrypt(855) =
8552753 mod 3233 = 123
17 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Cả hai phép tính trên đều có thể được thực hiện hiệu quả nhờ giải thuật bình
phương và nhân.
3.5.Chuyển đổi văn bản rõ.
Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi văn bản rõ
(chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ra văn bản mã
không an toàn. Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề sau:
• Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương
ứng
• Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ,

giá trị me cũng nhận giá trị nhỏ (so với n). Như vậy phép môđun không
có tác dụng và có thể dễ dàng tìm được m bằng cách khai căn bậc e của
c (bỏ qua môđun).
• RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên)
nên kẻ 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ã, kẻ 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ự NUL sẽ được gán giá trị m = 0
và cho ra bản mã là 0 bất kể giá trị của e và N. Tương tự, một ký tự ASCII khác, SOH,
có giá trị 1 sẽ luôn cho ra bản mã là 1. Với các hệ thống dùng giá trị e nhỏ thì tất cả ký
tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và
2553 nhỏ hơn giá trị n chấp nhận được. Những bản mã này sẽ dễ dàng bị phá mã.
Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường bao gồm một
hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa. Quá trình chuyển đổi này
phải đảm bảo rằng m không rơi vào các giá trị không an toàn. Sau khi chuyển đổi, mỗi
bản rõ khi mã hóa sẽ cho ra một trong số khả năng trong tập hợp bản mã. Điều này
làm giảm tính 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).
3.6.Tạo chữ ký vào văn bản

Thuật toán RSA còn được dùng để tạo chữ ký số 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
18 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
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ũ e
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.
3.7. An ninh.
Độ 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
• 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.
Bài toán RSAlà bài toán tính căn bậc e môđun n (với n là hợp số): tìm số m
sao cho me c mod n, trong đó (e, n) chính là khóa công khai và c 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 n 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 d 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ố p và q sao cho: n = pq thì có thể dễ dàng tìm được giá trị (p-
1)(q-1) và qua đó xác định d từ e. 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).

Mã hoá RSA 1024 bit đã bị phá vỡ
Các nhà khoa học thuộc Đại học Michigan vừa công bố phát hiện một kẽ hở
trong hệ thống mật mã hoá RSA vốn được sử dụng rất phổ biến hiện nay. Họ cũng mô
tả một cách phá vỡ hệ thống, lấy khoá bí mật RSA 1024 bit trong vài ngày thay vì vài
năm nếu tấn công theo cách thông thường.
19 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Hình 2 : Mã hóa
RSA
Thay vì tấn công bằng brute force (dò tìm lần lượt) theo cách thông thường, 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.
Điều thú vị là, cách đây không lâu, một bài báo cho đã công bố việc bẻ khoá
RSA 768 bit thực hiện trên 80 vi xử lí Opteron. Theo bài báo đó, RSA 768 bit khó hơn
1000 lần so với RSA 512 bit (bị phá vỡ cách đây một thập kỉ), và RSA 1024 bit khó
hơn 1000 lần so với RSA 768 bit. Theo công bố của bài báo trên (tại hoi65nghi5
DATE, tháng 2/2010), RSA 1024 bit có thể bị phá vỡ bằng sức tính toán tương đương
với 1500 năm, dùng một VXL Opteron 2,2 GHz.
Thế mà giờ đây, theo cách tấn công mới, RSA 1024 bit đã bị bẻ gãy trong 100
giờ.
20 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
CHƯƠNG IV. ỨNG DỤNG MINH HỌA THUẬT TOÁN RSA
4.1. Giới thiệu
Ứng dụng được viết trên nền Visual Studio 2010 và ngôn ngữ C#, với các chức năng
vận dụng giải thuật RSA tạo khóa, mã hóa, giải mã.
4.2. Cài đặt thử nghiệm
Màn hình đầu của ứng dụng
Bước 1. Người gởi click vào button để xin khóa công khai
sẽ xuất hiện màn hình 2.

Bước 2. Khi người nhận đồng ý nhận văn bản của người gởi sẽ tạo và cung cấp
khóa công khai cho người gởi bằng 1 trong 2 cách
• Tạo khóa tự động:
21 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Hoặc
• Tạo khóa thủ công: người nhận sẽ tự nhập giá trị cho 2 số nguyên tố p và q, các
giá trị khác chương trình sẽ tự phát sinh
Nếu 1 trong 2 số p và q không phải là số nguyên tố => xuất hiện thông báo lỗi và
button sẽ bị mờ.
Bước 3. Người nhận click button để cấp khóa công
khai cho người gởi
22 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Bước 4. Người gởi nhập nội dung cần gởi
Bước 5. Click button để mã hóa nội dung
23 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
Bước 6. Click button để gởi văn bản cùng khóa công khai
đã được cấp trước đó
• Khi khóa công khai mà người gởi đúng (khớp) với khóa công khai do người
nhận cung cấp, màn hình có dạng
24 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng
PGS.TS. Đỗ Văn Nhơn [TOÁN HỌC CHO KHOA HỌC MÁY TÍNH]
• Khi khóa công khai mà người gởi sai (không khớp) với khóa công khai do
người nhận cung cấp, màn hình có dạng
Bước 7. Khi bước 6 thành công (khóa công khai đúng), người nhận phải bổ sung
khóa riêng để giải mã và xem nội dung
Bước 8. Nội dung văn bản sau khi click button (giải mã ngược)
25 Nguyễn Hữu Lộc | CH1301023Đề tài: Tìm hiểu thuật toán RSA và ứng dụng

×