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

Giải thuật RSA và ứng dụng

13 726 0

Đ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 13
Dung lượng 464,74 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1 Giới thiệu. ____________________________________________________________________ 2 2 Phân phối khóa. _____________________________________________________________ 4 3 Phương pháp truyền dữ liệu „lai“. _________________________________________ 5 4 Giải thuật RSA._______________________________________________________________ 5 4.1 Giải thuật._______________________________________________________________________ 5 4.1.1 Hàm một chiều. _____________________________________________________________________ 5 4.1.2 Public Key. __________________________________________________________________________ 5 4.1.3 Private Key. _________________________________________________________________________ 5 4.1.4 Ví dụ với sự giúp đỡ của RSA Tool : __________________________________________________ 5 4.2 Mã hóa tin tức.__________________________________________________________________ 7 4.2.1 Công thức. __________________________________________________________________________ 7 4.2.2 Ví dụ với mã nguồn C. _____________________________________________________________ 7 4.3 Giải mã tin tức. _________________________________________________________________ 7 4.3.1 Công thức ___________________________________________________________________________ 7 5 Ví dụ. _________________________________________________________________________ 8 5.1 Chuẩn bị. ________________________________________________________________________ 8 5.2 Tạo khóa. _______________________________________________________________________ 8 5.3 Mã hóa.__________________________________________________________________________ 9 5.4 Giải mã. _________________________________________________________________________ 9 5.5 Kết luận. _______________________________________________________________________ 10 5.6 Độ phức tạp của giải thuật RSA. ______________________________________________ 10 6 Chữ ký kỹ thuật số__________________________________________________________ 11 7 Ứng dụng. ___________________________________________________________________ 12 8 Tài liệu tham khảo. _________________________________________________________ 12

Trang 1

Giải thuật RSA

www.reaonline.net

1 Giới thiệu 2

2 Phân phối khóa _ 4

3 Phương pháp truyền dữ liệu „lai“ _ 5

4 Giải thuật RSA. _ 5

4.1 Giải thuật. _ 5

4.1.1 Hàm một chiều _ 5 4.1.2 Public Key 5 4.1.3 Private Key _ 5 4.1.4 Ví dụ với sự giúp đỡ của RSA Tool : 5

4.2 Mã hóa tin tức. 7

4.2.1 Công thức 7 4.2.2 Ví dụ với mã nguồn C# _ 7

4.3 Giải mã tin tức _ 7

4.3.1 Công thức _ 7

5 Ví dụ _ 8

5.1 Chuẩn bị 8 5.2 Tạo khóa _ 8 5.3 Mã hóa. 9 5.4 Giải mã _ 9 5.5 Kết luận _ 10 5.6 Độ phức tạp của giải thuật RSA 10

6 Chữ ký kỹ thuật số 11

7 Ứng dụng _ 12

8 Tài liệu tham khảo _ 12

Trang 2

1 Giới thiệu

• Với sự phát triển như vũ bão của nền công nghệ thông tin trong các thập kỷ qua thì các hệ thống bảo mật cũng như các phương pháp bảo mật mới hàng lọat ra đời nhằm đáp ứng nhu cầu bảo mật dữ liệu trong quá trình truyền tải Nói đến các giải thuật mã hóa dữ liệu nổi tiếng và được sử dụng rộng rãi hiện nay có thể kể đến như MD5, CRC32,… và RSA

• Như quy luật tự nhiên, „vỏ quít dày, móng tay nhọn“, bảo mật cao cách mấy thì cũng có thể bẻ gãy Những MD5-Hash, CRC32-Hash… với một máy tính mạnh và một chương trình bruteforce tốt thì trong vòng 21 ngày một mật mã chuẩn (gồm ký tự hoa, thường, ký tự đặc biệt, số và có chiều dài lớn hơn 8 ký tự) được mã hóa bằng MD5 có thể bị bẻ gãy „dễ dàng“ Như vậy, việc bảo mật

dữ liệu trên đường truyền ngày càng đòi hỏi những giải thuật „mạnh hơn, khó

bẻ gãy hơn“ Và hiện nay dẫn đầu về tính bảo mật trong các giải thuật thông dụng có thể nhắc đến RSA

• Vậy RSA là gì? RSA là một giải thuật (phương pháp) để mã hóa dữ liệu điện

tử, được lấy theo tên của ba nhà phát minh Ronald L Rivest, Adi Shamir, Leonard Adleman RSA được phát triển vào năm 1977 dựa trên:

o Lý thuyết về khóa mở (Public Key) của Whitfield Diffie và Martin

Hellman Cho nên RSA được xếp vào nhóm giải thuật sử dụng phương pháp bất đối xứng hoặc phương pháp Public Key

o Phép tóan mã hóa một chiều với kiến thức tóan học cơ bản „Việc tách

một số ra thành 2 số nguyên tố thông qua một phép tóan chia thì rất khó Trong khi đó việc tạo ra một số từ phép nhân của 2 số nguyên tố thì lại rất đơn giản“

• Dựa trên ý tưởng trên, RSA được áp dụng vào quá trình truyền tải dữ liệu như sau

o Một khóa riêng sẽ được tạo ra dựa trên các số nguyên tố

o Một khóa chung sẽ được tạo ra dựa trên khóa riêng này theo một hàm một chiều Tức là việc tìm lại „khóa riêng“ từ khóa chung này là một

điều gần như là không thể Do đó, khóa chung có thể gởi đi trên

mạng

o Khóa chung sẽ được truyền đi trên mạng trong quá trình truyền tải dữ liệu

o Dữ liệu nhận được sẽ được mã hóa dựa theo khóa chung này, và sẽ được giải mã bằng khóa riêng

• Để dễ hiểu chúng ta có thể xem ví dụ sau:

Trang 3

Server

(3)

(3)

(2)

(2)

(1) (1)

• (1) : Client 1 muốn tải dữ liệu từ Server/Client 2

o Tạo ra một khóa riêng

o Từ khóa riêng này tạo ra một khóa chung

o Gởi yêu cầu đến Server/Client khác đồng thời gởi khóa chung này theo

• (2) : Server/Client 2 nhận được yêu cầu

o Mã hóa dữ liệu dựa trên khóa chung mà Client đã gởi đến

• (3) : Server/Client hòan tất quá trình mã hóa

o Gởi dữ liệu đã mã hóa lại cho Client 1

o Client nhận được dữ liệu và bắt đầu tiến hành giải mã

o Như vậy, trên nguyên tắc bảo mật, chỉ có Client 1 là có thể giải mã được

dữ liệu nhận được Vì “duy nhất”chỉ có Client 1 mới biết được khóa riêng

và với khóa riêng này quá trình giải mã sẽ có thể tiến hành

• Qua ví dụ trên, chúng ta thấy được rằng, với RSA có rất nhiều khóa riêng (tương ứng với mỗi Client) và vì thế có rất nhiều khóa chung để phục vụ quá trình mã hóa và giải mã

Trang 4

2 Phân phối khóa

• Ở trên, chúng ta đã có nhắc tới phương pháp truyền dữ liệu bất đối xứng Để hiểu rõ thêm ta có thể tạo một bảng so sánh giữa 2 phương pháp truyền dữ liệu:

o Đối xứng

o Bất đối xứng

Phương pháp truyền dữ liệu đối xứng Phương pháp truyền dữ liệu bất đối xứng

• Người gởi và người nhận sử dụng

cùng chung một khóa bí mật Tức

là, khi Client yêu cầu dữ liệu thì

Client phải gởi khóa bí mật này

theo để Server/Client khác có thể

mã hóa dữ liệu theo khóa bí mật

này Như vậy, yêu cầu quá trình

truyền tải dữ liệu phải tuyệt đối

bảo mật Nếu đường truyền bị

„nghe lén“ thì dĩ nhiên dữ liệu sẽ

bị mất do khóa bảo mật cũng bị

nghe lén

• Việc kiểm tra xem khóa nhận được

có phải từ người mà dữ liệu cần

được truyền đến cần phải được

thực hiện

• Nếu đường truyền bị nghe lén thì khóa bị mất là khóa chung Vẫn không thể giải mã được dữ liệu vi vẫn cần một khóa riêng Và việc giải mã ngược từ khóa chung ra khóa riêng là một điều gần như là không thể

• Tương tự như ở phương pháp truyền

dữ liệu đối xứng, việc nhận dạng cũng phải được thực hiện

• Với hàm Hash SHA-1, khóa chung có thể được chia thành nhiều phần Mỗi phần là một khóa con và có thể được gởi vào các thời điểm khác nhau cũng như với các phương pháp trao đổi khác nhau hòan tòan

Trang 5

3 Phương pháp truyền dữ liệu „lai“

• So sánh với 3DES, AES và SHA-1 mã hóa bằng RSA chậm hơn khỏang 1000 lần Vì vậy để mã hóa một số lượng lớn dữ liệu thì RSA sẽ không được sử

dụng Thay vào đó phương pháp mã hóa đối xứng sẽ được sử dụng Nhược điểm của phương pháp mã hóa đối xứng chính là khóa sẽ được truyền đi, cho nên để khắc phục nhược điểm này, khóa của phương pháp mã hóa đối xứng

sẽ được mã hóa bằng RSA và gởi đi Phần nội dung sẽ được gởi theo phương pháp đối xứng

• Sử dụng phương pháp truyền dữ liệu như trên gọi là phương pháp lai

4 Giải thuật RSA

• Như vậy chúng ta đã có một cái nhìn sơ lược về giải thuật RSA cũng như

những lợi điểm và yếu điểm của giải thuật này Bây giờ, chúng ta sẽ tìm hiểu sâu hơn về giải thuật RSA về phương diện cấu trúc

• Ta đã biết, với giải thuật RSA chúng ta cần 2 khóa : Khóa riêng và khóa chung

và một hàm một chiều để tạo ra khóa chung này từ khóa riêng tùy ý Chúng

ta sẽ tìm hiểu xem các thành phần này được tạo ra như thế nào

4.1 Giải thuật

4.1.1 Hàm một chiều

• Chọn 2 số nguyên tố bất kỳ p ≠ q

• Tính tích N = p * q

• Tính hàm Euler φ(N) = (p -1)*(q -1)

4.1.2 Public Key

• Chọn 1 số e bất kỳ sao cho 1<e< φ(N) và φ(N) không chia hết cho e

• Một khóa public key bao gồm:

o N, tích của 2 số nguyên tố

o e, mũ public

4.1.3 Private Key

• Tìm k sao cho ((φ(N)*k) + 1 mod e) = 0

• Tính d = (φ(N)*k + 1) / e

• Một khóa private key bao gồm:

o d, mũ private

o N, đã biết trước có trong khóa public key

4.1.4 Ví dụ với sự giúp đỡ của RSA Tool :

• Chọn 2 số nguyên tố: p = 11 và q = 13

• Chọn e = 17

4.1.4.1 Dùng RSA Tool

• Ta dùng RSA Tool để tính N và khóa riêng d

Trang 6

• Bước 1 : Nhập vào 2 số nguyên tố P = 11 và Q = 13 ( tại 2 Textbox viền đỏ)

• Bước 2 : Nhập vào mũ e = 0x11 (tại Textbox viền xanh lá cây), tức bằng 17 ở

hệ thập phân

• Bước 3 : Chọn NumberBase là 10, tức là ta dùng hệ thập phân để tính

• Nhấn nút “Calc D” để tính ra D (nút viền xanh dương) Ta tính được N = 143

và D = 47

• Vậy, private key (143,47) và public key (143,17)

• Lưu ý: Ở đây ta thấy có một Textbox thể hiện Keysize (Bits) của khóa

Tức là nếu chúng ta chọn 256 thì Public Key e cũng như Private key d

sẽ có chiều dài là 256 bits trong hệ nhị phân Tức là sẽ có dạng một chuỗi 1000101110001…010101010 Å Dài 256 ký tự

4.1.4.2 Tự lập trình

• Dưới đây là source code tham khảo trong C#

• Do khả năng lập trình hạn chế nên source code bên dưới chỉ họat động với các

số nguyên tố nhỏ hơn 100

Trang 7

int p = 11,q = 13;

int N = p * q;

int phi = (p - 1) * (q - 1);

int k=1;

while (((phi * k + 1) % exp

!= 0)) {

k++;

} int exp= 17;

int d = (phi * k + 1) / exp;

4.2 Mã hóa tin tức

• Như vậy, ta đã xác định được private key và public key Bây giờ ta sẽ sử dụng các khóa này vào quá trình mã hóa dữ liệu

4.2.1 Công thức

• Để mã hóa tin tức K, người gởi sử dụng công thức : C ≡ Ke mod N

o C: tin đã mã hóa

o K: tin chưa mã hóa

4.2.2 Ví dụ với mã nguồn C#

• Chúng ta muốn mã hóa số 7 để gởi về người nhận, và chúng ta có khóa chung

là (143,17)

• Vậy số gởi đi là C ≡ 717mod 143 = 50

int C = (int) ( Math Pow(7, exp) % N);

4.3 Giải mã tin tức

4.3.1 Công thức

• Tin tức mã hóa có thể phục hồi trở lại tin tức chưa mã hóa theo công thức

K ≡ Cd mod N

• Lưu ý : Ta thấy qua công thức trên có một điều kiện cần phải thỏa cho

N đó là N phải lớn hơn K Do ta chia lấy phần dư nên phần dư phải bắt buộc nhỏ hơn số chia Như vậy điều kiện là : N > K (Cảm ơn lão Dump

đã gợi ý cho điều kiện này)

• Ví dụ:

• Theo ví dụ trên ta sẽ có

• K ≡ 50113 mod 143 = 7

int K = (int) ( Math Pow(C, d) % N);

Trang 8

5 Ví dụ

5.1 Chuẩn bị

• Như vậy, chúng ta vừa hòan thành mã hóa và giải mã một số đơn giản bằng giải thuật RSA Dĩ nhiên trong thực tế giải thuật RSA được sử dụng và biến tấu phức tạp hơn gấp nhiều lần Vì vậy chúng ta lại tiếp tục với một ví dụ khác phức tạp hơn một chút để gắn liền với thực tiễn hơn

• Trong thực tế người ta sử dụng bảng mã ASCII để chuyển Text sang dạng số Sau đó, người ta sẽ dùng giải thuật RSA để mã hóa dữ liệu Text ở dạng số này rồi truyền trên mạng Ở đây để đơn giản, thay vì sử dụng ký tự ASCII chúng

ta sử dụng thứ tự của các chữ cái trong bảng chữ cái

• A = 01, B = 02, C = 03 … và 00 = ký tự trống

for (i = 0; i < strName.Length; i++)

{

strTmp = Convert ToString((strAlphabet.IndexOf(strName[i]) + 1));

if (strTmp.Length == 2)

{

strNameIndex += strTmp;

}

else

{

strNameIndex += "0" + strTmp;

}

}

• Ta giả sử ở đây cứ hai ký tự sẽ tạo thành một nhóm tin tức K Ví dụ chuỗi TI

sẽ được chuyển thành 2009 Như vậy số mã hóa nhỏ nhất sẽ là 0000 ( 2 ký tự trống liên tục) và 2626( 2 chữ ZZ)

• Bây giờ là chúng ta sẽ mã hóa một Text : RONGCHAUA bằng giải thuật RSA

• Chuỗi chưa mã hóa : R O N G C H A U A

• Chuỗi mã hóa bằng vị trí của ký tự trong bảng chữ cái là : 18 15 14 07

03 08 01 21 01

5.2 Tạo khóa

• Trước tiên ta chọn 2 số nguyên tố p & q Chọn p = 53 và q = 51 Lưu ý điều kiện là N = 51*53 phải lớn hơn 2626

• Chọn ra e = 0xB (tức 11 ở hệ thập phân)

Trang 9

• Như vậy ta có khóa riêng là (2703,1891) và khóa chung là (2703,11)

5.3 Mã hóa

• Cn = Kne mod N ( với n = 1,2,3 …)

• C1 = 181511 mod 2703 = 1500

• C2 = 140711 mod 2703 = 939

• C3 = 030811 mod 2703 = 1344

• …

5.4 Giải mã

• Kn = Cnd mod N

• K1 = 15001891 mod 2703 = 1815 √

• K2 = 9391891 mod 2703 = 1407 √

• K3 = 13441891 mod 2703 = 308 √

• …

Trang 10

5.5 Kết luận

• Như vậy ta đã hòan thành phần mã hóa, giải mã của giải thuật RSA với một Text

5.6 Độ phức tạp của giải thuật RSA

• Giải thuật RSA cho phép chúng ta mã hóa với các mức độ phức tạp khác nhau bằng cách thiết lập độ lớn của Keysize (Bits)

• Chúng ta có thể làm một ví dụ để hiểu rõ hơn về mức độ phức tạp của giải thuật RSA

• Đầu tiên chúng ta thiết lập các thông số như sau

• Chúng ta click vào nút Factor N để chương trình tính ra 2 số nguyên tố P và Q Rất nhanh chúng ta được kết quả P = 91M và Q = 4AM (nhìn hình)

• Bây giờ chúng ta hãy làm tương tự như trên nhưng với cách thiết lập thông số như sau:

Trang 11

• Nhấn nút Calc D và chờ… Chúng ta dĩ nhiên không thể chờ được vì theo lý thuyết thì để giải được khóa này chúng ta cần khỏang 8 giờ để máy chạy liên tục Như vậy, chúng ta đã xong với phần test độ an tòan của khóa được tạo

ra bằng giải thuật RSA Trong việc bảo mật dữ liệu thông qua RSA người ta thông thường dùng Keysize là 1024 để an tòan tuyệt đối

6 Chữ ký kỹ thuật số

• Một trong những ứng dụng to lớn của RSA đó chính là việc tạo chữ ký kỹ thuật số cho các tài liệu Vì sao chúng ta lại cần chữ ký kỹ thuật số? Đó là vì trong quá trình truyền tải dữ liệu chúng ta cần phải chắc chắn rằng tài liệu

mà chúng ta nhận được có phải từ nguồn mà chúng ta mong muốn hay

không

• Chúng ta sẽ làm một ví dụ đơn giản cho rõ ràng hơn

• Giả sử Ti muốn gởi cho Mi một tài liệu Thì Ti sẽ làm các bước sau

o Trước tiên Ti tạo một khóa riêng (d,N) và một khóa chung (e,N)

Trang 12

o Sau đó Ti sẽ tạo ra Hash của tài liệu (có thể là checksum MD5 hay CRC của tài liệu)

o Tiếp theo Ti sẽ mã hóa giá trị Hash này bằng khóa riêng (d,N)

o Sau đó Ti sẽ chuyển tài liệu + giá trị mã hóa của giá trị Hash + khóa chung này cho Mi

• Mi nhận được tài liệu, muốn biết chắc là nó có phải là của Ti không Mi cần làm các bước sau

o Dùng khóa chung nhận được từ Ti Giải mã giá trị mã hóa giá trị Hash

sẽ một giá trị Hash

o Tính giá trị Hash của tài liệu với cùng cách với các tính giá trị Hash của tài liệu như Ti đã tính

o So sánh 2 giá trị Hash này nếu bằng nhau thì tài liệu đó chính là của Ti gởi

• Toàn bộ quá trình được biễu diễn theo hình dưới

7 Ứng dụng

• Hệ thống Internet và điện thọai : X.509 – Certifikate

• Giao thức truyền tải : IPSec, TLS, SSH, WASTE

• Mã hóa Email : PGP, S/MIME

• Thanh tóan bằng thẻ : EMV

8 Tài liệu tham khảo

• Wikipedia www.wikipedia.org

• Xin cảm ơn dump về gợi ý điều kiện N > K

Trang 13

Rongchaua chấp bút

My Email : rongchaua@reaonline.net

My Website : www.rongchaua.nth12a1.com

“46a42a575a3115eff2d2a37e9cf33626”ÅÝ nghĩa của đọan MD5 này là gì?

Nếu tôi có gì sai sót, vui lòng liên hệ email trên để “mắng vốn”

16.04.2006-16.12.2006

Ngày đăng: 26/07/2015, 13:34

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w