Giải thuật mã hóa RSA và ứng dụng trong mã hóa dữ liệu và tạo chữ ký điện tử giành cho các bạn có nhu cầu làm đồ án thuật toán... Lịch sử Giải thuật mã hóa RSA, Cài đặt Giải thuật mã hóa RSA, Code thuật toán mã hóa RSA,....
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
ĐỒ ÁN MÔN HỌC
ĐỀ TÀI:
GIẢI THUẬT MÃ HÓA RSA VÀ ỨNG DỤNG TRONG MÃ
HÓA DỮ LIỆU VÀ TẠO CHỮ KÝ ĐIỆN TỬ
Sinh viên thực hiện: Huỳnh Ngọc Nam
Lớp: 11CNTT2
Giảng viên hướng dẫn: TS Nguyễn Trần Quốc Vinh
Đà Nẵng, 2013
Trang 2MỤC LỤC
MỞ ĐẦU
Trong mật mã học, RSA là một thuật toán mã hóa khóa công khai Đây là thuật toán đầu tiên phùhợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa Nó đánh dấu sự tiến bộ vượt bậc củalĩnh vực mật mã học trong việc sử dụng khóa công cộng RSA đang được sử dụng phổ biến trongthươ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
1 Lý do chọn đề tài:
Thuật toán mã hóa công khai đã ra đời từ rất lâu đời Nhưng trước những nhu cầu về giaodịch an toàn trên mạng Internet ngày nay, những ứng dụng của nó ngày càng tỏ rõ tầm quantrọng Mà trong đó, thuật toán mã hóa RSA là phổ biến nhất Nó được sử dụng rộng rãi chocông nghệ VPN
Khi mà các ứng dụng CNTT đã và đang ngày càng phổ biến rộng rãi đã ảnh hưởng rất lớnđến diện mạo của đời sống xã hội, kinh tế Mọi công việc của chúng ta đều có thể thực hiệnđược từ xa với sự hỗ trợ của máy tính và mạng Internet (từ học tập, giao dich,… đến việc gửithư) Tất cả các thông tin liên quan đều được máy tính quản lý và truyền đi trên hệ thốngmạng Đối với những thông tin bình thường thì không có ai chú ý tới, thế nhưng đối vớinhững thông tin mang tính chất sống còn đối với một cá nhân hay tổ chức thì vấn đề bảo mật
và giữ cho đến đúng địa chỉ cần đến Rất nhiều phương pháp bảo mật ra đời và trong số đóphương pháp mã hóa khóa công khai được xem là phương pháp có tính an toàn khá cao Với
thuật toán RSA chúng ta có thể mã hóa các dữ liệu của mình thành các dữ liệu không thể
đọc nếu không có khóa bí mật
o Về phát triển và triển khai ứng dụng
Ứng dụng thuật toán mã hóa RSA vào ứng dụng mã hóa dữ liệu gửi đi và tiến hành giải
mã dữ liệu ở phía nhận, thuật toán được triển khai trên ứng dụng bằng java
• Nhiệm vụ
- Nghiên cứu quá trình thực hiện mã hóa và giải mã của thuật toán trong hệ mã hóakhóa công khai
- Cài đặt thuật toán RSA
- Xây dựng ứng dụng mã hóa và giả mã dữ liệu bằng thuật toán RSA trên java bằngcông cụ Eclipse
3 Đối tượng và phạm vi
• Đối tượng
- Hệ mã RSA
Trang 3- Thuật toán RSA và ứng dụng chữ ký điện tử.
- Mã hóa và giải mã dữ liệu
• Phạm vi
- Thuật toán RSA thực hiện tính toán với số nguyên vừa và nhỏ
- Ứng dụng thuật toán phạm vi hẹp, đủ để có thể giao tiếp một cách trực diện chứkhông cần phải thông qua các file
3 Mật mã hóa khóa công khai
Chương 2: TỔNG QUAN VÀ HOẠT ĐỘNG
1 Mô tả sơ lược
Chương 3: PHÁT BIỂU BÀI TOÁN
1 Phát biểu bài toán
2 Trình bày thuật toán
Trang 4Trướ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ì đượcxếp vào loại tuyệt mật.
Thuật toán RSA được MIT đăng ký bằng sáng chế vào năm 1983 tại Hoa Kỳ (Số đăng ký4.405.829) Bằng sáng chế này hết hạn vào ngày 21/09/2000 Tuy nhiên, do thuật toán đã được công
bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ Ngoài ra,nếu như công trình của Clifford Cocks đã được công bố trước đó thì bằng sáng chế RSA đã khôngthể được đăng ký
2 Tổng quan về mã hóa
Trong mật mã học, một ngành toán học ứng dụng cho công nghệ thông tin, mã hóa là phương pháp
để biến thông tin (phim ảnh, văn bản, hình ảnh ) từ định dạng bình thường sang dạng thông tinkhông thể hiểu được nếu không có phương tiện giải mã
Giải mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu, quátrình ngược của mã hóa
Một hệ thống mã hóa bao gồm các thành phần:
- Thông tin trước khi mã hóa, kí hiệu là P
- Thông tin sau khi mã hóa, kí hiệu là C
- Chìa khóa, kí hiệu là K
- Phương pháp mã hóa/giải mã, kí hiệu là E/D
Trang 5Quá trình mã hóa được tiến hành bằng cách áp dụng hàm toán học E lên thông tin P, vốn được biểudiễn dưới dạng số, để trở thành thông tin đã mã hóa C.
Quá trình giải mã được tiến hành ngược lại: áp dụng hàm D lên thông tin C để được thông tin đãgiải mã P
3 Mật mã hóa khóa công khai
Mật mã hóa khóa công khai là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông tinmật mà không cần phải trao đổi các khóa chung bí mật trước đó Điều này được thực hiện bằng cách
sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bímật)
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa với mật mã hóa khóa côngkhai mặc dù hai khái niệm không hoàn toàn tương đương Có những thuật toán mật mã khóa bất đốixứng không có tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa vàgiải mã) đều cần phải giữ bí mật
Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật trong khi khóa công khaiđược phổ biến công khai Trong 2 khóa, một dùng để mã hóa và khóa còn lại dùng để giải mã Điềuquan trọng đối với hệ thống là không thể tìm ra khóa bí mật nếu chỉ biết khóa công khai
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:
Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải mã được
Tạo chữ ký số: cho phép kiểm tra một văn bản có phải đã được tạo với một khóa bí mật nào đó haykhông
Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin mật giữa 2 bên
Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các
kỹ thuật mã hóa khóa đối xứng nhưng những lợi điểm mà chúng mang lại khiến cho chúng được ápdụng trong nhiều ứng dụng
• Các ứng dụng:
-Ứng dụng rõ ràng nhất của mật mã hóa khóa công khai là bảo mật: một văn bản được mãhóa bằng khóa công khai của một người sử dụng thì chỉ có thể giải mã với khóa bí mật củangười đó
-Các thuật toán tạo chữ ký số khóa công khai có thể dùng để nhận thực Một người sử dụng
có thể mã hóa văn bản với khóa bí mật của mình Nếu một người khác có thể giải mã với
Trang 6khóa công khai của người gửi thì có thể tin rằng văn bản thực sự xuất phát từ người gắnvới khóa công khai đó.
-Các đặc điểm trên còn có ích cho nhiều ứng dụng khác như: tiền điện tử, thỏa thuậnkhóa
CHƯƠNG 2 TỔNG QUAN VÀ HOẠT ĐỘNG
1 Mô tả sơ lược
- Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa
cá nhân) Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã Khóacông khai được công bố rộng rãi cho mọi người và được dùng để mã hóa Những thông tinđược mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng Nóicách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới
có thể giải mã được
Trang 7- Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai như sau: Bob muốn gửi choAlice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc được Để làm được điềunày, Alice gửi cho Bob một chiếc hộp có khóa đã mở sẵn và giữ lại chìa khóa Bob nhậnchiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khóa lại (như loại khoá thôngthường chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả Bob cũng không thể mở lại được-không đọc lại hay sửa thông tin trong thư được nữa) Sau đó Bob gửi chiếc hộp lại cho Alice.Alice mở hộp với chìa khóa của mình và đọc thông tin trong thư Trong ví dụ này, chiếc hộpvới khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật.
2 Tạo khóa
- Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không an toàn (ví dụnhư Internet) Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình cặp khóa gồm khóacông khai và khóa bí mật theo các bước sau:
B1 Chọn 2 số nguyên tố lớn p và q với , lựa chọn ngẫu nhiên và độc lập
Các số nguyên tố thường được chọn bằng phương pháp thử xác suất
Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng (xem thêm: số họcmôđun)
- Khóa công khai bao gồm:
- Một dạng khác của khóa bí mật bao gồm:
p and q, hai số nguyên tố chọn ban đầu
d mod (p-1) và d mod (q-1) (thường được gọi là dmp1 và dmq1)
(1/q) mod p (thường được gọi là iqmp)
- Dạng này cho phép thực hiện giải mã và ký nhanh hơn với việc sử dụng định lý số dư TrungQuốc (tiếng Anh: Chinese Remainder Theorem - CRT) Ở dạng này, tất cả thành phần củakhóa bí mật phải được giữ bí mật
- Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình Ở đây, p và q giữvai trò rất quan trọng Chúng là các phân tố của n và cho phép tính d khi biết e Nếu không sửdụng dạng sau của khóa bí mật (dạng CRT) thì p và q sẽ được xóa ngay sau khi thực hiệnxong quá trình tạo khóa
Trang 83 Mã hóa
- Giả sử Bob muốn gửi đoạn thông tin M cho Alice Đầu tiên Bob chuyển M thành một số m <
n theo một hàm có thể đảo ngược (từ m có thể xác định lại M) được thỏa thuận trước
- Lúc này Bob có m và biết n cũng như e do Alice gửi Bob sẽ tính c là bản mã hóa của m theocông thức:
- Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo môđun) bằng (thuậttoán bình phương và nhân) Cuối cùng Bob gửi c cho Alice
4 Giải mã
- Alice nhận c từ Bob và biết khóa bí mật d Alice có thể tìm được m từ c theo công thức sau:
- Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước Quá trình giải mã hoạt động vì
- Định lý nhỏ của Fermat (hay định lý Fermat nhỏ - phân biệt với định lý Fermat lớn) khẳng
định rằng nếu p là một số nguyên tố, thì với số nguyên a bất kỳ, ap – a sẽ chia hết cho p.
Nghĩa là:
Trang 9- Một cách phát biểu khác của định lý như sau: nếu p là số nguyên tố và a là số nguyên nguyên
tố cùng nhau với p, thì ap-1 - 1 sẽ chia hết cho p Bằng ký hiệu đồng dư ta có:
- Cũng có một cách phát biểu khác là: Nếu p là một số nguyên tố và a là số nguyên không chia hết cho p, thì a lũy thừa bậc p-1 có số dư bằng 1 khi chia cho p.
- Định lý Fermat nhỏ là cơ sở để kiểm tra tính nguyên tố theo xác suất
5.2 Định lý số dư Trung Quốc
- Bản chất của bài toán Hàn Tín điểm binh là việc giải hệ phương trình đồng dư bậc nhất
Trong đó đôi một nguyên tố cùng nhau Trong bài toán Hàn Tín
- Định lý:
Hệ phương trình đồng dư nói trên có nghiệm duy nhất theo mođun
Trang 10trong đó
, Trong đó
là nghịch đảo theo modulo của với
- Áp dụng trong trường hợp đặc biệt:
Cho p va q là 2 số nguyên tố cùng nhau
Nếu a = b mod p
Và a = b mod qThì a = b mod (pq)
6 Ví dụ
- Ở đây chúng ta sử dụng những số nhỏ để tiện tính toán còn trong thực tế phải dùng các số cógiá trị đủ lớn
Lấy:
p = 61 — số nguyên tố thứ nhất (giữ bí mật hoặc hủy sau khi tạo khóa)
q = 53 — số nguyên tố thứ hai (giữ bí mật hoặc hủy sau khi tạo khóa)
n = pq = 3233 — môđun (công bố công khai)
e = 17 — số mũ công khai
d = 2753 — số mũ bí mậtKhóa công khai là cặp (e, n) Khóa bí mật là d Hàm mã hóa là:
encrypt(m) = mod n = mod 3233với m là văn bản rõ Hàm giải mã là:
decrypt(c) = = mod 3233với c là văn bản mã
- Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính:
encrypt(123) = mod 3233 = 855
Để giải mã văn bản có giá trị 855, ta thực hiện phép tính:
Trang 118 Các giải thuật có sử dụng
8.1 Giải thuật Euclid mở rộng
- Giải thuật Euclid mở rộng sử dụng để giải phương trình vô định nguyên (còn được gọi
- Giải thuật Eclid mở rộng kết hợp quá trình tìm ƯCLN(a, b) trong thuật toán Eclid với việc
tìm một cặp số x, y thoả mãn phương trình Đi-ô-phăng Giả sử cho hai số tự nhiên a, b, ngoài
ra a>b>0 Đặt , chia cho được số dư và thương số nguyên Nếu thì dừng, nếu khác không, chia cho được số dư , Vì dãy các là giảm thực sự nên sau hữu hạn bước ta được số dư
;
;
Trang 12trong đó số dư cuối cùng khác 0 là Bài toán đặt ra là tìm x, y sao cho
Để làm điều này, ta tìm x, y theo công thức truy hồi, nghĩa là sẽ tìm
để tính x, y
Trang 138.2 Thuật toán bình phương và nhân
- Thuật toán bình phương và nhân là thuật toán tính nhanh lũy thừa tự nhiên của một số (thực hoặc nguyên), trong trường hợp cơ số là số nguyên có thể được rút gọn theo
một môđun nào đó
Phép nâng lên lũy thừa tự nhiên bậc n của số x (x được gọi là cơ số) được định nghĩa từ hệ
thức
Với n lớn số phép nhân là rất lớn
- Code thuật toán
int binhphuong(int m, int e, int n)
{ int []a = new int[100];
int k = 0;
do { a[k] = e % 2;
k++;
e = e / 2;
} while (e != 0);
int kq = 1;
for (int i = k - 1; i >= 0; i )
Trang 14}
CHƯƠNG 3 PHÁT BIỂU VẤN ĐỀ
1 Phát biểu bài toán
- Một cá nhân (hoặc tổ chức) muốn gửi một thông tin mật cho một cá nhân (hoặc tổ chức) khác
mà họ muốn chỉ có cá nhân (hoặc tổ chức) có thể đọc được Để làm được điều này cá nhân (hoặc tổ chức) nhận văn bản mật sẽ gửi cho cá nhân (hoặc tổ chưc) gửi văn bản một cái public key (khóa công khai) mà cá nhân (hoặc tổ chức) đó đã tiến hành tính toán từ trước Cá nhân (hoặc tổ chức) đó sẽ tiến hành mã hóa văn bản mật đó bằng public key mà cá nhân (hoặc tổ chức) kia gửi tới Sau khi mã hóa xong thì văn bản sẽ không thể nào đọc được, rồi tiến hành ký vào văn bản đó và gửi văn bản đã mã hóa cùng với chữ ký đó cho cá nhân (hoặc
tổ chức) nhận văn bản
- Cá nhân (hoặc tổ chức) nhận văn bản sẽ tiến hành giải mã văn bản đã mã hóa Sau khi giải
mã, văn bản sẽ đọc được bình thường, sau đó sẽ tiến hành đối chiếu với chữ ký mà bên gửi
đã gửi qua xem có thay đổi hay sai sót gì trong quá trình truyền dữ liệu hay không
Trang 152 Trình bày thuật toán
- Đầu tiên, cá nhân (hoặc tổ chức) nhận văn bản sẽ tiến hành khởi tạo 2 số nguyên tố p và q
- Tiếp theo họ sẽ tiến hành tính toán các key và lưu lại để gửi cho bên gửi tài liệu
Trang 17- Số nguyên tố p và q được khởi tạo ngẫu nhiên trong 100 số tự nhiên đầu tiên
- Public key gồm e và n với n = p*q và e được tạo ngẫu nhiên từ trong 10000 số tự nhiên đầu tiên sao cho e>0 và e<o=(p-1)*(q-1) và UCLN(e,o)==1(nghĩa là e và o là 2 số nguyên tố cùng nhau)
- Secret key gồm d và n với n = p*q và d được tính theo giải thuật euclid mở rộng
- Đối với cá nhân(hoặc tổ chức) muốn gửi tài liệu, họ sẽ tiến hành mã hóa tài liệu với
public key mà bên nhận đã đưa cho, cùng với đó họ sẽ tiến hành ký văn bản của mình theo các bước:
B1 Tải văn bản muốn mã hóa lên
Trang 18B2 Tải public key vừa nhận được lên
Trang 19B3 Tiến hành mã hóa đồng thời với ký
Trang 20B4 Tiến hành lưu văn bản sau mã hóa và chữ ký lại
Trang 21- Sau khi lưu lại ta sẽ có văn bản đã được mã hóa, chẳng hạn:
Trang 22- Các bước mã hóa dữ liệu được thực hiện như sau
B1 Chuyển đổi văn bản chứa trong TextArea đầu tiên thành chuỗi ký tự rồi chuyển tiếp các ký tự này về dạng mã ACCII
B2 Sau đó ta dùng giải thuật bình phương và nhân để tiến hành tính k = với e và n
đã cho, m chính là giá trị trong bảng mã ACII của ký tự trong chuỗi
B3 Chuyển k thành chuỗi ký tự kèm công thức cố định c[i] = k+32
B4 Xuất chuỗi lên TextArea thứ 2 Riêng đối với chữ ký số ta sẽ lấy bảng băm của chuỗi
ký tự, trong eclipse dùng hàm hashcode
- Đối với cá nhân(hoặc tổ chức) nhận tài liệu, họ sẽ tiến hành giải mã văn bản đã mã hóa
bằng secret key mà họ đã khởi tạo cùng với public key ban đầu theo các bước sau:
B1 Tải văn bản đã mã hóa lên
Trang 23B2 Tải secret key lên
Trang 24B3 Tiến hành giải mã
Trang 25B4 Lưu văn bản sau khi giải mã
Trang 26- Sau khi giải mã ta sẽ có được văn bản như ban đầu bên gửi muốn gửi, chẳng hạn:
Trang 27- Các bước tiến hành giải mã như sau:
B1 Chuyển đổi văn bản chứa trong TextArea đầu tiên thành chuỗi ký tự rồi chuyển tiếp các ký tự này về dạng mã ACCII
B2 Từ công thức cố định quy ước ta tính được l = c[i] - 32
B3 Dùng giải thuật bình phương và nhân, ta tính được k = , sau đó chuyển k lại thành
chuỗi các ký tự theo công thức c[i] = k
B4 Xuất chuỗi lên TextArea thứ 2 để ta có thể lưu lại
- Ngoài ra, cá nhân(hoặc tổ chức) nhận văn bản có thể tiến hành kiểm tra văn bản xem có bị sửa đổi hay mất mát trong quá trình truyền dữ liệu hay không bằng cách tiến hành kiểm tra chữ ký của văn bản sau khi giải mã theo các bước sau:
B1 Tải văn bản sau giải mã lên
Trang 28B2 Tải chữ ký lên
Trang 29B3 Tải public key đã tạo ban đầu lên