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

MÃ hóa THÔNG TIN – hệ mã hóa CÔNG KHAI RSA (rivest shamir adleman)

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 (702.91 KB, 15 trang )

ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC KHOA HỌC
KHOA CÔNG NGHỆ THÔNG TIN


TIỂU LUẬN MÔN
C
C
Ơ
Ơ


S
S




T
T
O
O
Á
Á
N
N


T
T
R


R
O
O
N
N
G
G


T
T
I
I
N
N


H
H


C
C



Đề tài:
M
M
Ã

Ã


H
H
Ó
Ó
A
A


T
T
H
H
Ô
Ô
N
N
G
G


T
T
I
I
N
N







H
H




M
M
Ã
Ã


H
H
Ó
Ó
A
A


C
C
Ô
Ô
N

N
G
G


K
K
H
H
A
A
I
I


R
R
S
S
A
A


(
(
Rivest - Shamir - Adleman)








GIÁO VIÊN HƯỚNG DẪN: TS. TRƯƠNG CÔNG TUẤN
HỌC VIÊN THỰC HIỆN:
ĐOÀN VĂM CỰ
THÁI QUANG HOÀNG
HOÀNG HỮU CHIẾN
HOÀNG TUẤN HƯNG.
ĐẶNG VĂN VINH
NGÀNH HỌC: Khoa học máy tính
KHÓA HỌC: 2011-2013



Huế, tháng 03/2012
ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC KHOA HỌC
KHOA CÔNG NGHỆ THÔNG TIN


TIỂU LUẬN MÔN
C
C
Ơ
Ơ


S
S





T
T
O
O
Á
Á
N
N


T
T
R
R
O
O
N
N
G
G


T
T
I
I

N
N


H
H


C
C



Đề tài:
M
M
Ã
Ã


H
H
Ó
Ó
A
A


T
T

H
H
Ô
Ô
N
N
G
G


T
T
I
I
N
N






H
H




M
M

Ã
Ã


H
H
Ó
Ó
A
A


C
C
Ô
Ô
N
N
G
G


K
K
H
H
A
A
I
I



R
R
S
S
A
A


(
(
Rivest - Shamir - Adleman)







GIÁO VIÊN HƯỚNG DẪN: TS. TRƯƠNG CÔNG TUẤN
HỌC VIÊN THỰC HIỆN:
ĐOÀN VĂM CỰ
THÁI QUANG HOÀNG
HOÀNG HỮU CHIẾN
HOÀNG TUẤN HƯNG.
ĐẶNG VĂN VINH
NGÀNH HỌC: Khoa học máy tính
KHÓA HỌC: 2011-2013








Huế, tháng 03/2012
MỤC LỤC
Trang
MỤC LỤC 3
LỜI NÓI ĐẦU 4
NỘI DUNG 5
I. Hệ mã hóa công khai 5
1. Phân biệt mã hóa bí mật và mã hóa công khai: 5
a. Mã hóa bí mật: 5
b. Mã hóa công khai: 5
2. Lý thuyết toán học: . 6
a. Số nguyên tố (prime): 6
b. Khái niệm nguyên tố cùng nhau (relatively prime or coprime): 6
c. Khái niệm modulo: 6
d. Phi – Hàm EULER 6
e. Số nghịch đảo Modulo. 7
f. Giải bài toán c=b
e
mod n với số lớn: 8
II. Hệ mã hóa RSA: 9
1. Giới thiệu 9
2. Hệ mã hóa RSA: 9
3. Cài đặt thuật toán RSA : 12
4. Độ an toàn của hệ RSA 12

KẾT LUẬN 14
TÀI LIỆU THAM KHẢO 15

LỜI NÓI ĐẦU
Trong mọi lĩnh vực kinh tế, chính trị, xã hội, quân sự… luôn có nhu cầu
trao đổi thông tin giữa các cá nhân, tổ chức, hoặc giữa các quốc gia với nhau.
Ngày nay, với sự phát triển của công nghệ thông tin đặc biệt là mạng internet
thì việc truyền tải thông tin đã dể dàng và nhanh chóng hơn.
Và vấn đề đặt ra là tính bảo mật trong quá trình truyền tải thông tin, đặc
biệt quan trọng đối với những thông tin liên quan đến chính trị, quân sự, hợp
đồng kinh tế… Vì vậy nghành khoa học nghiên cứu về mã hóa thông tin được
phát triển. Việc mã hóa là làm cho thông tin biến sang một dạng khác khi đó chỉ
có bên gửi và bên nhận mới đọc được, còn người ngoài dù nhận được thông tin
nhưng cũng không thể hiểu được nội dung.
Qua quá trình học tập môn Cơ Sở Toán và một số tài liệu liên quan đến mã
hóa thông tin, chúng em được biết có rất nhiều phương pháp để mã hóa thông
tin. Qua đó chúng em chọn phương pháp Mã hóa thông tin – Hệ khóa công khai
RSA (Rivest, Shamir và Adleman) để làm tiểu luận của nhóm.
Xin cám ơn thầy giáo TS Trương Công Tuấn đã hướng dẫn và truyền đạt
kiến thức cho chúng em.
Tuy đã rất cố gắng song bài viết không tránh khỏi những thiếu sót, chúng
em rất mong nhận được sự đóng góp ý kiến của các thầy cô giáo và các anh chị
học viên lớp cao học Khoa học máy tính để bài viết được hoàn thiện hơn. Chúng
em xin chân thành cảm ơn!
NỘI DUNG
I. Hệ mã hóa công khai
1. Phân biệt mã hóa bí mật và mã hóa công khai:
a. Mã hóa bí mật:
Thông tin sẻ được mã hóa theo một phương pháp ứng với một key, key này
dùng để lập mã và đồng thời cũng để giải mã. Vì vậy key phải được giữ bí mật,

chỉ có người lập mã và người nhận biết được, nếu key bị lộ thì người ngoài sẽ dễ
dàng giải mã và đọc được thông tin.

Hình 1:Mã hóa bí mật
b. Mã hóa công khai:
Sử dụng khóa mã hóa gọi là khóa công khai (public key), khóa giải mã được gọi
là khóa riêng (private key)
Public key: Được sử dụng để mã hoá những thông tin mà ta muốn chia sẽ
với bất cứ ai. Chính vì vậy ta có thể tự do phân phát nó cho bất cứ ai mà ta cần
chia sẽ thông tin ở dạng mã hoá.
Privite key: Đúng như cái tên, Key này thuộc sở hữu riêng tư của bạn(ứng
với public key) và nó được sử dụng để giải mã thông tin. Chỉ mình bạn sở hữu
nó, Key này không được phép và không nên phân phát cho bất cứ ai.
Nghĩa là mỗi người sẽ giữ 2 key: 1 dùng để mã hóa key này được công bố
rộng rãi, 1 dùng để giải mã key này giữ kín.
Khi ai đó có nhu cầu trao đổi thông tin với bạn, sẽ dùng public key mà bạn
công bố để mã hóa thông tin và gửi cho bạn, khi nhận được bạn dùng private
key để giải mã. Những người khác dù có nhận được thông tin nhưng không biết
được private key thì cũng không thể giải mã và đọc được thông tin.



Hình 2: Mô hình mã hóa công khai
Đặc trưng nổi bật của hệ mã hóa công khai là cả khóa công khai (public key) và
bản tin mã hóa (ciphertext) đều có thể gửi đi trên một kênh thông tin không an toàn
2. Lý thuyết toán học: Trước hết, chúng ta sẽ nhắc lại những khái niệm toán
học cơ bản cần thiết cho việc hiểu RSA.
a. Số nguyên tố (prime):
Số nguyên tố là những số nguyên chỉ chia hết cho 1 và cho chính nó.
Ví dụ : 2, 3, 5, 7, 11, 13, 17, 23

b. Khái niệm nguyên tố cùng nhau (relatively prime or coprime):
Với hai số nguyên dương a và b. Ta ký hiệu GCD (a,b) : Ước chung lớn
nhất của a và b (Greatest Common Divisor). Để đơn giản ta ký hiệu GCD(a,b)
=(a,b).
Ví dụ: (4,6)=2 và (5,6)=1
Hai số a và b gọi là nguyên tố cùng nhau khi (a,b)=1.
Ví dụ : 9 và 10 nguyên tố cùng nhau vì (9,10)=1
c. Khái niệm modulo:
Với m là một số nguyên dương .Ta nói hai số nguyên a va b là đồng dư với
nhau modulo m nếu m chia hết hiệu a-b ( Viết là m|(a-b) ), ký hiệu a ≡ b ( mod
m)
Như vậy a ≡ b (mod m ) khi và chỉ khi tồn tại số nguyên k sao cho a = b +km
Ví dụ : 13 ≡ 3 ( mod 10 ) vì 13= 3 + 1*10
d. Phi – Hàm EULER
Định nghĩa: Phi – Hàm Euler Φ(n) có giá trị tại n bằng số các số không vượt
quá n và nguyên tố cùng nhau với n.
Ví dụ : Φ(5) = 4 , Φ(6) = 2 , Φ(10) = 4.
e. Số nghịch đảo Modulo.
Số nghịch đảo của 10 là 1/10, bởi vì 10 × 1/10=1. Trong số học modulo thì
vấn đề nghịch đảo phức tạp hơn. 4 × x ≡ 1 mod 7 phương trình trên tương
đương với tìm x và k sao cho 4x = 7k+1 với điều kiện là cả x và k đều là số
nguyên. Vấn đề chung đặt ra tại đây là tìm x sao cho 1 = (a × x) mod n có thể
viết lại như sau: a-1 ≡ x(mod n ) Sự thu nhỏ vấn đề Modulo là rất khó giải quyết.
Đôi khi nó là một vấn đề, nhưng đôi khi lại không phải vậy. Ví dụ : nghịch đảo
của 5 modulo 14 là 3 bởi 5 × 3 = 15 ≡ 1 (mod 14). Trong trường hợp chung a-1 ≡
x (mod n) chỉ có duy nhất một giải pháp nếu a và n là một cặp số nguyên tố. Nếu
a và n không phải là cặp số nguyên tố, thì a-1 ≡ x (mod n) không có giải pháp
nào. Thuật toán Euclid có thể tính ra được số nghịch đảo của số Modulo n, đôi
khi thuật toán này còn gọi là thuật toán Euclid mở rộng.
Giải thuật Euclid mở rộng:

Giải thuật sau chỉ thực hiện với các số nguyên m>a>0, biểu diễn bằng giã mã:
Procedure Euclid_Extended (a,m)
int, y0=0,y1:=1;
While a>0 do {
r:= m mod a
if r=0 then Break
q:= m div a
y:= y0-y1*q
m:=a
a:=r
y0:=y1
y1:=y
}
If a>1 Then Return "A không khả nghịch theo mođun m"
else Return " Nghịch đảo modulo m của a là y"
Ví dụ
Tìm số nghịch đảo (nếu có) của 30 theo môđun 101
Bước i
m
a
r
q
y0
y1
y
0
101
30
11
3

0
1
-3
1
30
11
8
2
1
-3
7

2
11
8
3
1
-3
7
-10

3
8
3
2
2
7
-10
27


4
3
2
1
1
-10
27
-37

5
2
1
0
.
.
.
.

Kết quả tính toán trong bảng cho ta − 37. Lấy số đối của 37 theo mođun 101 được 64.
Vậy .
f. Giải bài toán c=b
e
mod n với số lớn:
Trong đó e là số mũ lớn, n là số chia để lấy dư
Ví dụ: Tính 4
13
(mod 497)
Cách tính đơn thuần: 413=67108864 67108864 mod 497 =445
Nếu b và e lớn thì b
e

sẽ rất lớn và tính b
e
mod n sẽ mất nhiều thời gian và
tốn bộ nhớ. Có một số cách để giải quyết vấn đề đó. Trong nội dung của tiểu
luận chúng tôi sử dụng giải pháp như sau:
c ≡ (a.b)(mod n) => ((a (mod n)).(b (mod n))) (mod n)
Áp dụng công thức trên ta có thuật toán











Ví dụ: Tính 4
13
(mod 497)
c=1 , e’=0 c ≡ (b.c) (mod m)
e’=1
c=(4*1)mod 497=4 mod 497 = 4
e’=2
c=(4*4)mod 497=16 mod 497 = 16
e’=3
c=(4*16)mod 497 = 64 mod 497 = 64

….


….
e’=12
c=(4*121)mod 497 = 484 mod 497 = 484
e’=13
c=(4*484)mod 497 = 1936 mod 497 = 445

Input: b,e,m
Output: c≡ b
e
(mod m)
1/ Gán c=1, e’=0
2/ e’=e’+1
3/ c ≡ (b.c) (mod m)
4/ Nếu e’<e quay lại bước 2. Ngược lại, c là kết
quả cần tìm.

II. Hệ mã hóa RSA:
1. Giới thiệu
RSA được Rivest, Shamir và Adleman phát triển, là một thuận toán mật mã
hóa khóa công khai. Nó đánh dấu một sự tiến hóa 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 khai. 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.
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 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 1997 vì được xếp vào loại tuyệt mật.

RSA là một thí dụ điển hình về một đề tài toán học trừu tượng lại có thể áp
dụng thực tiễn vào đời sống thường nhật. Khi nghiên cứu về các số nguyên tố, ít
có ai nghĩ rằng khái niệm số nguyên tố lại có thể hữu dụng vào lãnh vực truyền
thông.
2. Hệ mã hóa RSA:
Hệ mã hóa này dựa trên cơ sở của hai bài toán:
- Bài toán Logarith rời rạc
- Bài toán phân tích thành thừa số
Trong hệ mã hóa RSA các bản rõ, các bản mã và các khóa (public key và private
key) là thuộc tập số nguyên ZN ={1,…,N-1}. Trong đó tập ZN với N =pxq là các số
nguyên tố khác nhau cùng với phép cộng, phép nhân mođun N tạo ra mođun số học N.
Khóa mã hóa EKB là cặp số nguyên (N, KB) và khóa giải mã DkB là cặp số nguyên
(N, kB), các số là rất lớn, số N có thể lên tới hàng trăm chữ số
Các phương pháp mã hóa và giải mã hóa là rất dễ dàng.
Công việc mã hóa là sự biến đổi bản rõ P (Plaintext) thành bản mã C
(ciphertext) dựa trên cặp khóa công khai KB và bản rõ P theo công thức sau đây:
C = E
KB
(P) = P
KB
(mod N) (1)
Công việc giải mã là sự biến đổi ngược lại bản mã C thành bản rõ P dựa trên cặp
khóa bí mật kB, mođun N theo công thức sau
P =D
kB
(C) =C
kB
(mod N) (2)
Dễ thấy rằng, bản rõ ban đầu cần được biến đổi một cách thích hợp thành bản
mã, sau đó để có thể tái tạo lại bản rõ ban đầu từ chính bản mã đó:

P =D
kB
(E
KB
(P)) (3)
Thay thế (1) vào (2) ta có:
( P
KB
)
kB
=P (mod N) (4)
Ta thấy N =pxq với p, q là số nguyên tố. Trong toán học đã chứng minh được
rằng, nếu N là số nguyên tố thì công thức (4) sẽ có lời giải khi và chỉ khi:
KB.kB ≡1 (mod

N)(5)
Trong đó

N =LCM(p-1, q-1 ).
(Lest Common Multiple) là bội số chung nhỏ nhất .
Nói một cách khác, đầu tiên người nhận B lựa chọn một khóa công khai KB một
cách ngẫu nhiên. Khi đó khóa bí mật kB được tính ra bằng công thức (5). Điều này
hoàn toàn tính được vì khi B biết được cặp số nguyên tố (p, q) thì sẽ tính được

N.














Hình 3: Sơ đồ các bước thực hiện mã hoá theo thuật toán RSA.
Ví dụ:
N=11413=101x113,

(N) =100x112 =11200 =2
6
x5
2
x7. KB phải chọn sao cho không chia hết cho 2,5,
7. Chọn, chẳng hạn KB =3533 khi đó:
kB = KB
-1
mod11200=6597. Và ta có khóa công khai là (N,KB)=(11413,3533)
khóa bí mật là 6597. Phép lập mã và giải mã là:
E
KB
(P) =P
KB
(mod N) =P
3533
(mod 11413)
D

kB
(C) =C
kB
(mod N) =C
6579
(mod 11413)
Chọn p và q
Tính N = p
x q
Tính

N
Chọn khóa
K
B
Chọn khóa
k
B
C = P
KB
(mod
N)
P = C
kB
(mod
N)
K
B
k
B

Bản rõ P
Bản mã C
Bản rõ gốc
3. Cài đặt thuật toán RSA :
 Chương trình được viết bằng ngôn ngữ lập trình C#, có chức năng mô
phỏng lại toàn bộ quá trình mã hóa và giải mã của thuật toán RSA.
 Hiện tại thuật toán chỉ cài đặt mã hóa các ký tự hoa, không dấu.

Giao diện của chương trình
 Quá trình xử lý của chương trình như sau:
B1: Nhập văn bản cần mã hóa vào ô “Văn bản gốc”
Ví dụ: CO SO TOAN
B2: Chương trình sẽ chuyển đổi văn bản đó thành chuỗi số bằng cách dựa
trên số thứ tự của chữ cái đó trong bảng chữ cái.
CO SO TOAN -> 03152719152720150114
B3: Mã hóa chuỗi số dựa trên Khóa mã và số N
03152719152720150114 -> 64241131545795607113154579471131517289
B4: Giải mã dựa trên Khóa giải
64241131545795607113154579471131517289 -> 03152719152720150114
B5: Đưa ra văn bản gốc dựa trên chuỗi số được giải mã
4. Độ an toàn của hệ RSA
Một nhận định chung là tất cả các cuộc tấn công giải mã đều mang mục
đích không tốt. Trong phần độ an toàn của hệ mã hoá RSA sẽ đề cập đến một
vài phương thức tấn công điển hình của kẻ địch nhằm giải mã trong thuật toán
này. Chúng ta xét đến trường hợp khi kẻ địch nào đó biết được modulo N, khoá
công khai KB và bản tin mã hoá C, khi đó kẻ địch sẽ tìm ra bản tin gốc
(Plaintext) như thế nào. Để làm được điều đó kẻ địch thường tấn vào hệ thống
mật mã bằng hai phương thức sau đây:
Phương thức thứ nhất :
Trước tiên dựa vào phân tích thừa số modulo N. Tiếp theo sau chúng sẽ tìm

cách tính toán ra hai số nguyên tố p và q, và có khả năng thành công khi đó sẽ
tính được λ(N) và khoá bí mật kB. Ta thấy N cần phải là tích của hai số nguyên
tố, vì nếu N là tích của hai số nguyên tố thì thuật toán phân tích thừa số đơn
giản cần tối đa
N
bước, bởi vì có một số nguyên tố nhỏ hơn
N
. Mặt khác,
nếu N là tích của n số nguyên tố, thì thuật toán phân tích thừa số đơn giản cần
tối đa N
1/n
bước.
Một thuật toán phân tích thừa số có thể thành phức tạp hơn, cho phép
phân tích một số N ra thành thừa số trong O(
P
) bước, trong đó p là số chia
nhỏ nhất của N, việc chọn hai số nguyên tố là cho thuật toán tăng hiệu quả.
Phương thức thứ hai:
Phương thức tấn công thứ hai vào hệ mã hoá RSA là có thể khởi đầu bằng
cách giải quyết trường hợp thích hợp của bài toán logarit rời rạc. Trường hợp
này kẻ địch đã có trong tay bản mã C và khoá công khai KB tức là có cặp
(KB,C).
Cả hai phương thức tấn công đều cần một số bước cơ bản, đó là :
O(exp
)ln(lnln NN
), trong đó N là số modulo.
KẾT LUẬN
Qua quá trình làm tiểu luận này, chúng em đã hiểu biết thêm kiến thức về
sự an toàn của thông tin trên mạng, một số thuật toán và phương pháp mã hoá.
Để so sánh, đánh giá một thuật toán mã hoá cần dựa vào một số yếu tố cơ bản

như độ phức tạp thuật toán, thời gian mã hoá và vấn đề phân phối khoá trong
môi trường nhiều người sử dụng. Dễ nhận thấy rằng các phương pháp mã hoá
cổ điển như phương pháp đổi chỗ và thay thế là đơn giản và dễ thực hiện, tuy
nhiên độ an toàn không cao do không đạt được độ phức tạp cần thiết, đồng thời
khoá cũng rất dễ bị lộ do khoá của người gửi và người nhận là giống nhau. Đối
với các thuật toán mã khoá công khai đã khắc phục được vấn đề phân phối
khoá, khoá mã hoá có thể công khai và bất kỳ người nào có khoá công khai đều
có thể mã hoá bản tin của mình, nhưng chỉ duy nhất người có khoá bí mật mới
có thể giải mã được.
Phương pháp mã hoá công khai sử dụng thuật toán RSA khá chậm chạp
do yêu cầu những số nguyên tố lớn để sinh ra khoá công khai và khoá bí mật
nhưng mặt khác nó rất hữu ích vì cho tới nay chưa có thuật toán nào phân tích
nhanh một số lớn thành các thừa số là các số nguyên tố. Với đề tài “Mã hóa
thông tin – Hệ khóa công khai RSA” chúng em đã hoàn thành xây dựng một ứng
dụng để Demo để thực hiện việc mã hóa thông tin theo Hệ khóa công khai RSA.
Tuy nhiên do qũi thời gian hạn hẹp, trình độ còn hạn chế nên không tránh
khỏi thiếu xót, rất mong được sự chỉ bảo, góp ý nhiệt tình của thầy và các bạn.
TÀI LIỆU THAM KHẢO
1. Quyển “Toán học rời rạc ứng dụng trong tin học”. Tác giả: Kenneth
H.Rosen. NXB Thống kê
2. Quyển “RSA Tấn công Và Phòng thủ” - Nguyễn Thành Nhân. NXB
Thanh Niên.
3. Giáo trình mã hóa thông tin – Lý thuyết và Ứng dụng – Bùi Doãn Khanh
& Nguyễn Đình Thúc & Hoàng Đức Hải.
4. Internet.

×