1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

15 601 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 702,91 KB

Nội dung

Đặ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 3

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=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 4

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!

Trang 5

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

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

1 30 11 8 2 1 -3 7

2 11 8 3 1 -3 7 -10

Trang 8

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

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 9

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 = 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 10

KB.kB ≡1 (modN)(5)

Trong đó N =LCM(p-1, q-1 )

(Lest Common Multiple) là bội số chung nhỏ nhất

Trang 11

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

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 12

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

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

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

Ngày đăng: 02/06/2015, 17:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w