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

Lập trình Symbolic Lập trình mã hóa và giải mã thông tin trên Mapple dựa trên hệ mã RSA

11 479 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 11
Dung lượng 153,88 KB

Nội dung

Trong bài thu hoạch này sẽ giới thiệu về vấn đề mã hóa và giải mã thông tin dựa trên hệ mã RSA và việc mã hóa và giải mã sẽ được lập trình trên công cụ hỗ trợ tính toán là Mapple.. Để gi

Trang 1

Trường Đại Học Công Nghệ Thông Tin

BÁO CÁO CHUYÊN ĐỀ Lập trình Symbolic

ĐỀ TÀI:

Lập trình mã hóa và giải mã thông tin trên Mapple dựa trên hệ mã RSA

Giáo viên hướng dẫn :PGS.TS Đỗ Văn Nhơn

Học viên thực hiện :Du Chí Hào

Mã số học viên :CH1101083

TP.HCM – 01/2013

Trang 2

Mục lục



Mục lục 1

I Đặt vấn đề cho bài toán mã hóa thông tin 2

II Giới thiệu về hệ mã RSA 2

1 Định nghĩa 2

2 Nguyên tắc hoạt động 2

3 Thuật toán hệ mã RSA 3

III Tổ chức lưu trữ trên Mapple 4

IV Các hàm được xây dựng để phục vụ cho bài toán 4

V Một số ví dụ thử nghiệm cho bài toán 7

Kết luận 9

Tài liệu tham khảo 10

Trang 3

I Đặt vấn đề cho bài toán mã hóa thông tin

Trao đổi thông tin là nhu cầu thiết yếu trong sinh hoạt của con người Với sự phát triển với tốc độc nhanh của khoa học máy tính hiện nay, việc trao đổi thông tin không còn là giới hạn về mặt thời gian cũng như không gian Nhưng việc trao đổi thông tin như thế này sẽ phát sinh một số vấn đề như: rò rỉ, thất lạc, nội dung bị thay đổi Do đó, con người cần có những cộng cụ để bảo vệ những thông tin riêng tư, bí mật

Trong bài thu hoạch này sẽ giới thiệu về vấn đề mã hóa và giải mã thông tin dựa trên hệ mã RSA và việc mã hóa và giải mã sẽ được lập trình trên công cụ hỗ trợ tính toán là Mapple Để giải quyết bài toán trên, chúng ta cần xây dựng hàm để trả về các khóa công khai và các khóa bí mật Sau đó dựa vào các khóa đó để tiến hành mã hóa

và giải mã thông tin

II Giới thiệu về hệ mã RSA

1 Định nghĩa

Mật mã khóa công khai còn gọi là mật mã bất đối xứng hay mật mã hai khóa là dùng hai khóa riêng biệt cho hai việc mã hóa và giải mã Một trong hai khóa được phổ biến công khai gọi là khóa công khai, khóa còn lại gọi là khóa bí mật Nếu trong quá trình mã hóa thì dùng khóa công khai và trong quá trình giải mã sẽ dùng khóa bí mật

2 Nguyên tắc hoạt động

Các bước cơ bản của một hệ thống dùng mật mã khóa công khai:

1 Người dùng tạo ra một cặp khóa gồm khóa công khai và khóa bí mật cho việc mã hóa và giải mã thông tin

2 Người dùng thông báo khóa công khai cho các người dùng khác biết Khóa còn lại được giữ bí mật

3 Người dùng A muốn gửi thông tin cho người dùng B, người dùng A sẽ

mã hóa thông tin bằng khóa công khai, sau đó gửi cho thông tin được mã hóa cho người dùng B

Trang 4

4 Khi người dùng B nhận được thông tin được mã hóa, người dùng B sử dụng khóa bí mật của mình để mã hóa thông tin Do khóa bí mật không được phổ biến công khai nên chỉ có người dùng B có khả năng giải mã

3 Thuật toán hệ mã RSA

RSA là thuật toán mật mã khóa công khai được xây dựng bởi Ron Rivest, Adi Shamir và Len Adleman tại viện công nghệ Massachusetts, do đó được đặt tên là Rivest - Shamir - Adleman hay RSA Thuật toán này được ra đời năm 1977 và cho đến nay đã được ứng dụng trong nhiều lĩnh vực

Thuật toán RSA được mô tả như sau:

1 Để tạo ra một cặp khóa RSA, trước hết là phải chọn ra 2 số nguyên p và q

đủ lớn

2 Tính n = p.q

3 Tính φ(n) = (p-1).(q-1)

4 Chọn một số e sao cho e và φ(n) là hai số nguyên tố cùng nhau

5 Tìm số d sao cho d = e-1 mod φ(n)

6 Với 3 thành phần là n, e, d, ta có: khóa công khai là tổ hợp (n, e), khóa bí mật là tổ hợp (n, d)

7 Việc mã hóa thông tin m được thực hiện theo công thức: c = me mod n

8 Quá trình giải mã c được thực hiện theo công thức: m = cd mod n

Ví dụ:

1 Chọn 2 số nguyên tố, p = 30,559, q = 21,517

2 Tính n=p.q = 30,559 21,517 = 657,538,003

3 Tính φ(n) = (p-1).(q-1) = 30,558.21,516 = 657,485,928

4 Chọn e = 28,351 là số nguyên tố cùng nhau với φ(n)

5 Tính d = e-1 mod φ(n) = 103,617,055

Trang 5

6 Như vậy, cặp khóa công khai là (657538003, 28351) và khóa bí mật là ((657538003, 103617055)

III Tổ chức lưu trữ trên Mapple

Việc mã hóa trên hệ mã RSA đòi hỏi phải làm việc với các con số nguyên lớn nên các ngôn ngữ lập trình thông thường có thể sẽ không hỗ trợ Mapple hỗ trợ các số nguyên rất lớn nên việc lập trình mã hóa và giải mã sẽ dễ dàng hơn so với các ngôn ngữ khác

Trong bài toán này, chúng ta cần phải lưu trữ ba số nguyên có thể có giá trị rất lớn (hơn 22048 bit) và chuỗi văn bản như sau:

1 Một biến số nguyên module n cho việc thực hiện quá trình mã hóa và giải mã

2 Một biến số nguyên e kết hợp với số module n tạo thành một cặp mã công

khai sử dụng cho việc mã hóa

3 Một biến số nguyên d kết hợp với số module n tạo thành cặp mã bí mật sử

dụng cho việc giải mã

4 Một chuỗi văn bản cần phải mã hóa

5 Một chuỗi để lưu trữ đoạn chuỗi văn bản đã được hóa

IV.Các hàm được xây dựng để phục vụ cho bài toán

Các hàm đã được triển khai trong phần sourcecode trên Mapple nên trên bài thu hoạch này chỉ mô tả ý nghĩa và cách sử dụng của các hàm đã triển khai:

1 Hàm modpow được xây dựng để tính công thức ab mod n Trong Mapple cũng

có hỗ trợ cách tính công thức này nhưng nếu số mũ b quá lớn thì rất chậm và bị lỗi

"numeric exception: overflow" Ví dụ:

Trang 6

2 Hàm TaoSoNgauNhien dùng để tạo ra một số nguyên dương với một đối số

truyền vào là kích thước số cần tạo Ví dụ: TaoSoNgauNhien(32)  tạo một số ngẫu nhiên trong khoảng 0  232

3 Hàm KiemTraSoNguyenTo dùng để kiểm tra một số có phải là số nguyên tố

hay không Kết quả trả về là giá trị true hoặc false

4 Hàm TaoSoNguyenTo dùng để tạo một số nguyên tố ngẫu nhiên với đối số truyền vào là kích thước số cần tạo Trong hàm này sử dụng hàm TaoSoNgauNhien để tạo số và KiemTraSoNguyenTo để kiểm tra số vừa tạo có phải là số nguyên tố không.

Nếu không sẽ lặp cho đến khi tìm ra số nguyên tố

5 Hàm SoNghichDaoModule dùng để tìm số nghịch đảo của một số theo module

n Hàm được xây dựng dựa trên thuật toán Euclide mở rộng

Procedure Euclid_Extended (int e, int phiN)

{

int dividend = e % phiN;

int divisor = phiN;

int last_x =1;

int curr_x = 0;

while (divisor > 0)

{

int quotient = dividend / divisor;

int remainder = dividend % divisor;

if (remainder <= 0)

Trang 7

break;

} int next_x = last_x - curr_x * quotient;

last_x = curr_x;

curr_x = next_x;

dividend = divisor;

divisor = remainder;

}

If(curr_x< 0) return curr_x + phiN;

Else return curr_x;

}

Ví dụ: Tìm số nghịch đảo (nếu có) của 30 theo môđun 101

Bước lặp dividend divisor last_x curr_x quotient remainder next_x

Đến bước 7, do remainder = 0 nên return ra kết quả -37 Lấy số đối của 37 theo mođun 101 được 64 Vậy 30-1 mod 101 = 64

6 Hàm TaoKhoaRSA dùng để phát sinh ra các số e, d, module n để phục vụ cho

việc mã hóa và giải mã Với hai đối số truyền vào là kích thước hai số nguyên tố P, Q

và kích thước cho khóa

Trang 8

7 Hàm MaHoaDuLieu dùng để mã hóa chuỗi thông tin cần mã hóa dựa trên cặp

mã công khai (e, n) Hàm sẽ mã hóa từng ký tự, sau đó ghép lại thành một chuỗi các

ký tự đã mã hóa

8 Hàm GiaiMaDuLieu dùng để giải mã chuỗi các ký tự đã mã hóa ở trên thành

lại chuỗi ban đầu dựa trên cặp mã bí mật (d, n)

V Một số ví dụ thử nghiệm cho bài toán

1 Ví dụ về mã hóa chuỗi "Y thuc co truoc, vat chat co sau, day la quan diem duy tam" theo kích thức khóa là 16 bit

2 Ví dụ về mã hóa chuỗi "Y thuc co truoc, vat chat co sau, day la quan diem duy tam" theo kích thức khóa là 512 bit Do chuỗi được mã hóa theo khóa 512 bit rất dài nên em không hiển thị trong bài thu hoạch

Trang 9

VI.

Trang 10

Kết luận



Qua bài thu hoạch này, em có cơ hội tìm hiểu chi tiết về lập trình và sử dụng các công thức tính toán trên Mapple Qua đó, em có thể thấy được Mapple có khả năng tính toán các số có giá trị lớn, với thời gian nhanh và độ chính xác cao Trong bài thu hoạch này em có kèm theo sourcecode Mapple trong file " MaHoaGiaiMaRSA.mw" và đã triển khai tất cả các thuật toán và các hàm đã mô tả ở phần trên

Tuy nhiên do thời gian và kiến thức còn gói gọn trong môn học nên chuyên đề

sẽ không tránh được những thiếu sót, em mong nhận được sự đóng góp xây dựng tích cực của thầy PGS TS Đỗ Văn Nhơn cùng bạn đọc

Em xin cảm ơn PGS TS Đỗ Văn Nhơn đã tận tình truyền đạt cho em những kiến thức nền tảng về “Lập trình Symbolic” để em có thể thực hiện bài thu hoạch này

Trang 11

Tài liệu tham khảo



[1] Các file bài giảng về lập trình Symbolic của PGS TS Đỗ Văn Nhơn.

[2] RSA – Tấn công và phòng thủ -Nguyễn Thành Nhân – Nhà xuất bản Thanh niên –

2007.

Ngày đăng: 10/04/2015, 00:50

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w