Đặ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.. Nó đánh dấu một sự tiế
Trang 1ĐẠ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Ơ SỞ TOÁN TRONG TIN HỌC
Đề tài:
MÃ HÓA THÔNG TIN – HỆ MÃ HÓA CÔNG KHAI
RSA ( (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
Trang 2ĐẠ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Ơ SỞ TOÁN TRONG TIN HỌC
Đề tài:
MÃ HÓA THÔNG TIN – HỆ MÃ HÓA CÔNG KHAI
RSA ( (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
Trang 3MỤ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=be 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
Trang 4LỜ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!
Trang 5NỘ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 k hó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
Trang 6Đặ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
Trang 7e 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
1 30 11 8 2 1 -3 7
2 11 8 3 1 -3 7 -10
Trang 83 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
f Giải bài toán c=be 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 be 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
Trang 9II 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 = EKB(P) = PKB (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 =DkB(C) =CkB (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 =DkB (EKB(P)) (3)
Thay thế (1) vào (2) ta có:
( PKB)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:
Trang 10KB.kB ≡1 (modN)(5)
Trong đó N =LCM(p-1, q-1 )
(Lest Common Multiple) là bội số chung nhỏ nhất
Trang 11Nó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
KB
Chọn khóa
kB
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
Trang 123 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 K B 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 :
Trang 13Trướ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 K B tức là có cặp (K B ,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 lnNln(ln N) ), trong đó N là số modulo
Trang 14KẾ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