Độ an toàn của hệ thống mật mã mới này, không phải đƣợc đo bằng độ phức tạp của các thuật toán mã hóa, mà nó dựa vào một khám phá mới vô cùng quan trọng trong ngành kh[r]
(1)KHOA CÔNG NGHỆ THÔNG TIN ĐẠI HỌC THÁI NGUYÊN
NGUYỄN NGỌC TRUNG
CÁC THUẬT TỐN TỐI ƢU HĨA TRONG BẢO MẬT THÔNG TIN
CHUYÊN NGÀNH : KHOA HỌC MÁY TÍNH MÃ SỐ : 60.48.01
LUẬN VĂN THẠC SĨ KHOA HỌC NGÀNH CÔNG NGHỆ THÔNG TIN
NGƢỜI HƢỚNG DẪN KHOA HỌC PGS.TSKH NGUYỄN XUÂN HUY
(2)LỜI CẢM ƠN
Tôi xin gửi lời cảm ơn tới Khoa CNTT – ĐHTN, nơi thầy cô tận tình truyền đạt kiến thức q báu cho tơi suốt trình học tập Xin cảm ơn Ban chủ nhiệm khoa cán tạo điều kiện tốt cho chúng học tập hồn thành đề tài tốt nghiệp
Đặc biệt, xin gửi tới PGS TSKH Nguyễn Xn Huy, thầy tận tình bảo tơi suốt trình thực đề tài lời cảm ơn biết ơn sâu sắc Bên cạnh kiến thức khoa học, thầy giúp nhận bài học phong cách học tập, làm việc kinh nghiệm sống quý báu
Tơi xin bày tỏ lịng biết ơn tới gia đình, bạn bè, đồng nghiệp ngƣời thân động viên khích lệ tinh thần giúp đỡ để tơi hồn thành luận văn
Thái Nguyên, ngày 10 tháng 11 năm 2008
(3)LỜI CAM ĐOAN
Tôi xin cam đoan, toàn nội dung liên quan tới đề tài đƣợc trình bày trong luận văn thân tơi tự tìm hiểu nghiên cứu, dƣới hƣớng dẫn khoa học Thầy giáo PGS TSKH Nguyễn Xuân Huy
Các tài liệu, số liệu tham khảo đƣợc trích dẫn đầy đủ nguồn gốc Tôi xin chịu trách nhiệm trƣớc pháp luật lời cam đoan
Học viên thực
(4)MỤC LỤC
Trang LỜI CẢM ƠN
LỜI CAM ĐOAN
MỤC LỤC DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
MỞ ĐẦU
CHƢƠNG - LÝ THUYẾT MẬT MÃ
1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ MÃ HÓA
1.2 LÝ THUYẾT ĐỘ PHỨC TẠP 10
1.3 CƠ SỞ TOÁN HỌC CỦA MẬT MÃ 13
CHƢƠNG - NGHIÊN CỨU CƠ CHẾ HOẠT ĐỘNGCỦA HỆ MẬT KHĨA CƠNG KHAI 20
2.1 GIỚI THIỆU VỀ HỆ MẬT VỚI KHĨA CƠNG KHAI 20
2.2 HỆ MẬT MÃ KHĨA CƠNG KHAI RSA 22
2.3 HỆ MẬT MÃ KHĨA CƠNG KHAI RSA WITH CRT 29
2.4 CƠ CHẾ HOẠT ĐỘNG CỦA RSA 34
2.5 KHẢ NĂNG BỊ BẺ KHÓA CỦA HỆ MÃ CÔNG KHAI RSA 36
2.6 HỆ MẬT MÃ KHĨA CƠNG KHAI ELGAMAL 40
CHƢƠNG - MỘT SỐ GIẢI THUẬT XỬ LÝ SỐ HỌC ÁP DỤNG ĐỂ TỐI ƢU HĨA Q TRÌNH MÃ HÓA VÀ GIẢI MÃCỦA HỆ MÃ RSA ……… 41
3.1 PHÂN TÍCH CÁC PHÉP XỬ LÝ TỐN HỌC TRONG HỆ MÃ RSA 41
3.2 ỨNG DỤNG GIẢI THUẬT FAST FOURIER TRANSFORM TRONG XỬ LÝ PHÉP NHÂN SỐ LỚN 45
3.1 CÀI ĐẶT THỬ NGHIỆM CÁC PHÉP TOÁN VỚI SỐ LỚN 53
CHƢƠNG 4: ỨNG DỤNG TRONG XÂY DỰNG HỆ MÃ RSA 56
4.1 XÂY DỰNG HỆ MÃ RSA THỬ NGHIỆM 56
4.2 ĐÁNH GIÁ VÀ NHẬN XÉT KẾT QUẢ 59
(5)DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
CRT Chinese Remainder Theorem
DES Data Encryption Standard
RSA Rivest ShamirAdleman
GCD Great Comon Divisor
(6)DANH MỤC CÁC BẢNG
Trang
(7)DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Trang
Hình 1.1: Mơ hình mã hóa khóa đối xứng
Hình 1.2: Mơ hình mã hóa khóa bất đối xứng 10
Hình 2.1: Đồ thị so sánh chi phí cơng khóa bí mật khóa cơng khai 39
Hình 3.1: Sơ đồ thực giải thuật nhân nhanh sử dụng DFT 49
Hình 3.2: Giao diện thực phép cộng 54
Hình 3.3: Giao diện thực phép nhân 55
Hình 4.1: Giao diện chương trình mơ hệ RSA 56
(8)MỞ ĐẦU
1. Lý chọn đề tài
Các hệ mã công khai nhƣ RSA thực tính tốn với số ngun lớn hàng trăm chữ số Độ phức tạp việc giải mã hệ mã tỉ lệ thuận với độ lớn số nguyên tham gia vào việc tạo khóa mã hóa khóa cơng khai Do để hệ mã an tồn, cần tăng kích thƣớc số ngun
Mặt khác, kích thƣớc số nguyên cần xử lý lớn thời gian xử lý chƣơng trình mã hóa tăng lên
Thơng tin cần mã hóa ngày đa dạng có khối lƣợng lớn, đòi hỏi hệ mã giảm thiểu thời gian xử lý
Các công cụ giải thuật nhằm bẻ khóa hệ mật mã đƣợc cải tiến địi hỏi hệ mã cần đƣợc nâng cấp tính bảo mật
Tuy nhiên, việc nghiên cứu triển khai nâng cấp việc tối ƣu hóa mặt thuật toán phép xử lý số học hệ mã hạn chế phạm vi chƣơng trình độc quyền
Để hỗ trợ giải vấn đề trên, đề tài tập trung vào việc xây dựng số thuật tốn tối ƣu hóa nhằm tăng hiệu phép tính tốn thực với số nguyên lớn
Các kết đề tài đƣợc ứng dụng việc hỗ trợ cho phép xử lý số học hệ mã Từ làm tăng tốc độ xử lý tính bảo mật hệ mã
Từ tính cấp thiết vấn đề tối ƣu hóa hệ mã cơng khai, đồng thời đƣợc hƣớng dẫn gợi ý PGS.TSKH Nguyễn Xuân Huy chọn đề tài cho luận văn tốt nghiệp Cao học ngành khoa học máy tính là:
(9)2 Mục đích nhiệm vụ
Mục tiêu
o Về học thuật:
Đề tài tập trung vào việc xây dựng số thuật toán tối ƣu hóa nhằm tăng hiệu phép tính tốn thực với số nguyên lớn
o Về phát triển triển khai ứng dụng:
Các kết đề tài đƣợc ứng dụng việc hỗ trợ cho phép xử lý số học với số nguyên lớn hệ mã Từ làm tăng tốc độ xử lý tính bảo mật hệ mã
Nhiệm vụ
- Nghiên cứu q trình thực mã hóa giải mã hệ mã công khai
- Tìm hiểu thuật tốn xử lý số học đƣợc dùng hệ mã - Phát giải thuật tính tốn cần tối ƣu hóa
- Thực đƣa giải pháp tối ƣu hóa giải thuật - Ứng dụng hệ mã cụ thể
- So sánh với kết thực thi hệ mã chƣa thực tối ƣu hóa
3 Phƣơng pháp nghiên cứu
- Nghiên cứu dựa việc tìm hiểu giải thuật xử lý với số nguyên lớn hệ mã Cụ thể hệ mã hóa RSA, từ kết nghiên cứu có đƣợc định hƣớng lựa chọn thuật tốn cần tối ƣu hóa
- Thực việc tối ƣu hóa giải thuật cách tối ƣu phép xử lý với số học lớn Thao tác sử dụng kết hợp phƣơng pháp tính toán với số học nhằm tăng hiệu bƣớc xử lý
- Thu thập tài liệu xuất bản, báo tạp chí khoa học tài liệu mạng Internet có liên quan đến vấn đề nghiên cứu
(10)- Thực nghiệm cài đặt ứng dụng để minh họa vấn đề trình bày đề tài
4 Đối tƣợng phạm vi nghiên cứu
Đối tượng nghiên cứu :
Các hệ mật mã khóa cơng khai, hệ mật mã RSA đƣợc sử dụng làm đối tƣợng nghiên cứu đề tài nhằm phát phép xử lý toán học cần tối ƣu Từ kết thu đƣợc bƣớc đầu đề tài đƣa cách xây dựng thử nghiệm hệ mã RSA áp dụng kết tối ƣu hóa
Phạm vi nghiên cứu
Đề tài thực việc tối ƣu hóa với số phép tính tốn với số nguyên lớn
Ứng dụng thử nghiệm hệ mã nhằm so sánh hiệu xử lý hệ mã trƣớc sau tối ƣu
Đề tài giới hạn phạm vi nghiên cứu để đƣa giải pháp, việc triển khai ứng dụng thực tiễn cần có thêm điều kiện thời gian quy mô
5 Ý nghĩa khoa học thực tiễn luận văn
Ý nghĩa khoa học
- Trình bày kiến thức toán học bản, lý thuyết độ phức tạp thuật toán, thuật toán thƣờng dùng hệ mật mã khố cơng khai
- Trình bày phƣơng pháp mật mã gồm: Phƣơng pháp mã hoá khóa bí mật phƣơng pháp mã hố khóa cơng khai Với phƣơng pháp mã hóa khóa cơng khai tập trung vào thuật tốn mã hóa RSA Với phƣơng pháp mã hóa khóa bí mật giới thiệu sơ lƣợc để so sánh với phƣơng pháp mã hóa khóa cơng khai
- Tối ƣu phép xử lý số học với số nguyên lớn yêu cầu cần thiết việc xây dựng hệ mã hóa có tốc độ xử lý độ an toàn cao
Ý nghĩa thực tiễn
(11)- Đƣa đƣợc chƣơng trình thử nghiệm giải thuật xây dựng đƣợc hệ mã
- Đƣa kết so sánh hiệu xử lý hệ mã trƣớc sau tối ƣu
6 Bố cục luận văn Mở đầu
1 Lý chọn đề tài Mục đích ý nghĩa Phƣơng pháp nghiên cứu
4 Đối tƣợng phạm vi nghiên cứu
5 Ý nghĩa khoa học thực tiễn luận văn
Chƣơng 1: Nghiên cứu lý thuyết thực tiển mã hóa liệu
1.1 Một số khái niệm mã hóa 1.2 Lý thuyết độ phức tạp thuật toán
1.3 Các phép xử lý số học – Cơ sở toán học mật mã
Chƣơng 2: Các thuật toán xử lý số học hệ mã thông dụng
2.1 Giới thiệu hệ mật mã với khóa cơng khai 2.2 Hệ mật mã công khai RSA
2.3 Hệ mật mã công khai RSA with CRT 2.4 Phân tích chế hoạt động hệ mã RSA 2.5 Các phép xử lý số học hệ mã RSA
2.6 Khả bị bẻ khóa hệ mã cơng khai RSA 2.7 Hệ mật mã khóa cơng khai ELGAMAL
Chƣơng 3: Tối ƣu hóa số giải thuật xử lý số học trong hệ mã cụ thể
3.1 Phân tích giải thuật xử lý số học hệ mã RSA 3.2 Tối ƣu hóa giải thuật để xử lý với số nguyên lớn
Chƣơng 4: Ứng dụng kết hệ mã hóa cụ thể
(12)4.2 Kiểm nghiệm so sánh kết đạt đƣợc trƣớc sau tối ƣu hóa
Chƣơng 5: Kết luận
5.1 Đánh giá nêu ƣu nhƣợc điểm đề tài 5.2 Định hƣớng phát triển đề tài
7 Đóng góp luận văn
(13)CHƢƠNG – NGHIÊN CỨU LÝ THUYẾT VÀ THỰC TIỄN VỀ MÃ HÓA DỮ LIỆU
1.1 MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ MÃ HÓA
Lịch sử mật mã học có từ sớm, ban đầu ngƣời cố gắng tìm cách để bảo vệ thông tin, tránh việc thông tin bị giải mã ngƣời khác có đƣợc chúng Các cách áp dụng thƣờng mang tính mẹo mực đơn giản dễ dàng bị giải mã thông tin cách thức che giấu bị lộ bị suy đoán Mật mã học ban đầu đƣợc áp dụng nhiều lĩnh vực quân đội Các phƣơng pháp mã hóa cổ điển đƣợc áp dụng nhƣ Caesar, Playfair, …
Các hệ mật mã cổ điển đƣợc sử dụng nhiều nhƣng chúng bộc lộ hạn chế lớn Do cách mã hóa dựa phƣơng pháp mã khóa bí mật, gửi mã cần phải gửi kèm theo cách giải mã Bên cạnh đó, cách mã hóa quen thuộc đơn giản ngƣời có đƣợc thơng tin bị mã hóa tiến hành cách để dị luật mã hóa để có đƣợc văn gốc
Ngày với trợ giúp máy tính điện tử, phƣơng pháp mã hóa với khóa bí mật đƣợc sử dụng chung cho q trình mã hóa giải mã (hay cịn gọi mã hóa cổ điển) dễ dàng bị giải mã
Sự cần thiết phải có phƣơng pháp mã hóa an tồn đƣợc đáp ứng việc áp dụng kết nghiên cứu tốn học Sự thay đổi phƣơng pháp mã hóa nhƣ độ an toàn hệ mã đƣa lịch sử mật mã học sang trang Các hệ mật mã với khóa mã đối xứng góp phần to lớn việc củng cố vai trò mật mã học ứng dụng ngƣời Đƣa mật mã đến với ứng dụng sống đời thƣờng ngƣời, mật mã khơng cịn đƣợc nhắc đến nhiều lĩnh vực quân Ứng mật mã học trở thành công cụ cần thiết cho ngƣời, cần thiết cho hoạt động thƣờng ngày
(14)toàn tuyệt đối thời gian chi phí lựa chọn mơi trƣờng lại cần giải pháp dung hịa bảo mật chi phí
Các mơ hình mã hóa có chung số thuật ngữ nhƣ sau:
Bản rõ: Là nội dung thông điệp cần gửi cần đƣợc bảo vệ an tồn Nó
có thể xâu bít, file văn bản, file có cấu trúc
Mã hố: Là q trình xử lý thơng điệp cần bảo mật trƣớc gửi
Bản mã: Là kết thu đƣợc mã hóa rõ theo qui trình mã hóa
phƣơng pháp đƣợc chọn
Giải mã: Là trình xử lý ngƣợc, tiến hành giải mã mã để thu lại rõ
Ví dụ: Mã hóa văn có nội dung “ABC” với luật mã tịnh tiến vòng
đơn vị mã ASCII kí tự Vậy ta có:
Bản rõ: “ABC”
Mã hóa: Thực mã hóa theo luật mã
Biến đổi kí tự thành số theo mã ASCII kí tự A 65, B 66, C 67
Thu đƣợc mã sau tịnh tiến là: 66 - 67 - 68 Biến đổi mã thành kí tự
Bản mã: “BCD”
Giải mã: Thu đƣợc rõ “ABC”
1.1.1 Khái niệm chung mật mã
Hệ mật mã đại thƣờng gồm thành phần (P, C, K, E, D) đó: P (Plaintext) tập hợp hữu hạn rõ (khơng gian rõ) C (Ciphertext) tập hợp hữu hạn mã (không gian mã) K (Key) tập hợp khố
E (Encrytion) tập hợp qui tắc mã hố D (Decrytion) tập hợp qui tắc giải mã
(15)mã đƣợc gửi đƣờng truyền tới ngƣời nhận, sau nhận đƣợc mã (C) ngƣời nhận sử dụng qui tắc (D) khóa (K) giải mã để hiểu đƣợc nội dung thơng điệp gốc (DK(C) = P)
1.1.2 Những yêu cầu hệ mật mã đại
Hệ mật mã đại cần đảm bảo đƣợc hai yêu cầu sau: - Đảm bảo tính bảo mật
- Đảm bảo tính xác thực
Bảo mật: Ngăn khơng để ngƣời lạ thực việc trích chọn, sửa đổi thông tin từ mã đƣợc gửi kênh truyền phổ biến (thƣờng khơng an tồn)
Xác thực: Đảm bảo có ngƣời nhận giải mã nội dung mã, đồng thời đảm bảo ngƣời gửi phủ nhận nội dung gửi
1.1.3 Các phƣơng pháp mã hóa 1.1.3.1 Hệ thống mã hóa đối xứng
Cả hai q trình mã hóa giải mã hệ thống mã hóa đối xứng sử dụng chung khóa bí mật Do đó, bị khóa bí mật tính bảo mật hệ mã bị phá vỡ
Ban đầu, rõ đƣợc ngƣời gửi A mã hóa với khóa k Sau mã đƣợc gửi tới ngƣời nhận B Khi nhận đƣợc mã, ngƣời B sử dụng khóa k giải mã để thu đƣợc rõ Do đó, ngƣời khác có đƣợc khóa k hệ thống mã hóa bị cơng (Hình 1.1)
Hình 1.1: Sơ đồ hoạt động mã hóa khóa đối xứng
Các hệ mật mã nhƣ DES, 3DES-Triple DES đƣợc xây dựng phƣơng pháp mã hóa khóa đối xứng
Bản mã
Bản rõ Mã hóa Giải mã Bản rõ
(16)Nhận xét:
- Trong giao dịch mạng, khóa k phải đƣợc truyền mơi trƣờng Do bị lấy cắp Để an toàn hơn, việc bảo mật cho khóa k cần phải đƣợc trọng Thƣờng phải dùng thêm chế giải thuật khác việc quản lý, trao đổi khóa đối tƣợng
- Nội dung rõ xác thực đƣợc nguồn gốc nhƣ khơng có tính chất phủ nhận chủ thể
- Khi số lƣợng khóa bí mật tăng lên, việc quản lý khóa trở nên phức tạp khó khăn cho cơng việc ngƣời phải giữ nhiều khóa bí mật giao dịch với nhiều đối tƣợng khác
Những nhƣợc điểm dẫn đến hệ mã với khóa mã đối xứng khó áp dụng rộng rãi Trong nội dung đề tài này, phƣơng pháp mã hóa với khóa mã cơng khai đƣợc nghiên cứu để thực mục đích đề tài
1.1.3.2 Hệ thống mã hóa bất đối xứng
Hệ thống mã hóa bất đối xứng hay cịn gọi mã hóa với khóa cơng khai đƣợc Martin Hellman, Ralph Merkle Whitfield Diffie thuộc Đại học Stanford giới thiệu vào năm 1976
Hệ mã đƣợc áp dụng kết toán học khắc phục đƣợc hạn chế phƣơng pháp mã hóa khóa đối xứng Phƣơng pháp mã hóa bất đối xứng sử dụng hai loại khóa cặp khóa: Khóa cơng khai (public key) đƣợc công bố rộng rãi sử dụng để mã hóa thơng điệp, khóa riêng (private key) chủ thể nắm giữ đƣợc sử dụng để giải mã thơng điệp đƣợc mã hóa khóa cơng khai
(17)Hình 1.2 Sơ đồ hoạt động mã hóa khóa bất đối xứng
Khi thực mã hóa bất đối xứng, ngƣời A sử dụng khóa cơng khai ngƣời B tạo để mã hóa thơng điệp gửi cho ngƣời B Do biết đƣợc khóa riêng nên B giải mã đƣợc thơng điệp mà A mã hóa Trong trƣờng hợp mã bị ngƣời thứ ba có đƣợc, kết hợp với thơng tin khóa cơng khai đƣợc cơng bố, khó có khả giải mã đƣợc mã khoảng thời gian chấp nhận đƣợc không nắm đƣợc khóa riêng B
Khóa cơng khai khóa riêng có quan hệ tốn học với theo nghĩa từ khóa riêng tính tốn để suy đƣợc khóa cơng khai, nhƣng để từ khóa cơng khai suy khóa riêng phức tạp số lƣợng phép tính tốn lớn dẫn đến thời gian thực để giải mã không khả thi chiều dài khóa đủ lớn
Đây mấu chốt vấn đề bảo mật cơng hệ mã khóa cơng khai Đề tài đề cập đến vấn đề an toàn hệ mã công khai Nghiên cứu đƣa giải pháp hỗ trợ làm tăng tính an tồn hệ mã cách cố gắng áp dụng thuật tốn xử lý nhanh với số lớn Từ tăng chiều dài khóa mà đảm bảo yếu tố thời gian mã hóa giải mã chấp nhận đƣợc
1.2 LÝ THUYẾT ĐỘ PHỨC TẠP
1.2.1 Khái niệm độ phức tạp thuật toán
Khi tiến hành chạy thuật tốn nhiều máy tính với cấu hình khác ta thu đƣợc thời gian thực thuật toán khác Do ta khơng thể lấy thời gian thực thuật tốn máy tính để đánh giá độ phức tạp thuật toán
Bản mã
Bản rõ Mã hóa Giải mã Bản rõ
(18)Độ phức tạp thuật tốn đƣợc tính số phép tính sở máy tính thực tiến hành chạy thuật tốn (các phép tính sở: đọc, ghi, phép so sánh) Ngoài ra, số lƣợng phép tính cịn phụ thuộc vào kích cỡ đầu vào thuật toán Nhƣ vậy, độ phức tạp thuật toán phải hàm số theo độ lớn đầu vào Việc xác định xác hàm phức tạp, nhiên biết cỡ chúng ta có đƣợc ƣớc lƣợng chấp nhận đƣợc
Độ phức tạp thuật toán đƣợc đo số phép tính bit Phép tính bit phép tính logic hay số học thực số bit Để ƣớc lƣợng độ phức tạp thuật toán, ta dùng khái niệm bậc O-lớn
Định nghĩa 1.1:
Giả sử f(n) g(n) hai hàm xác định tập hợp số nguyên dƣơng Ta nói f(n) có bậc O-lớn g(n), viết f(n) = O(g(n)) f=O(g), tồn số C > cho với n đủ lớn Ta có < f(n) < Cg(n)
Định nghĩa 1.2:
Một thuật tốn đƣợc gọi có độ phức tạp đa thức, có thời gian đa thức, số phép tính cần thiết thực thuật tốn khơng vƣợt O(logkn), n độ lớn đầu vào, k số nguyên dƣơng
Nói cách khác, đầu vào số m-bit thời gian thực thuật tốn O(md), tức tƣơng đƣơng với đa thức m
Các thuật toán với thời gian O(αn), α > 1, đƣợc gọi thuật toán với độ phức tạp mũ, thời gian mũ
Một thuật tốn có độ phức tạp O(g), nói có độ phức tạp O(h) với hàm h > g Tuy nhiên, ta luôn cố gắng tìm ƣớc lƣợng tốt đƣợc để tránh hiểu sai độ phức tạp thực thuật tốn
Tồn thuật tốn có độ phức tạp trung gian đa thức mũ Các thuật tốn đƣợc gọi thuật tốn dƣới mũ
(19)Bảng dƣới đƣa thơng số thời gian số lƣợng phép tốn bit để thực việc phân tích số nguyên n thừa số nguyên tố áp thuật toán tốt máy tính có tốc độ xử lý triệu phép tính giây:
Giải thuật có độ phức tạp dƣới mũ: exp lognloglogn
Bảng 1.1: Bảng chi phí thời gian phân tích số nguyên n thừa số nguyên tố
Số chữ số thập phân Số phép tính
trên bit Thời gian
50 1,4.1010 3,9
75 9,0.1012 104 ngày
100 2,3.1015 74 năm
200 1,2.1023 3,8.109 năm
300 1,5.1029 4,9.1015 năm
500 1,3.1039 4,2.1025 năm
Dễ nhận thấy với thuật toán dƣới mũ, thời gian làm việc với số nguyên lớn không khả thi Do đó, với ứng dụng xử lý số lớn, ta thƣờng phải cố gắng biến đổi để thu đƣợc thuật tốn có thời gian tính tốn đa thức Ý tƣởng đƣợc áp dụng phần nghiên cứu để tài để xử lý cho phép toán số học với số lớn hệ mã hóa cơng khai
1.2.2 Các tốn khó tính toán ứng dụng mật mã học
Một hệ mật phải cố gắng gây khó khăn cho ngƣời giải mã khơng biết khóa giải nhƣng lại dễ dàng giải mã biết đƣợc khóa giải mã
Một hệ mã nhƣ có thơng tin “cửa sập” bí mật đƣợc chèn thêm vào tốn dựa tính khó khăn thực nghịch đảo hàm chiều
Định nghĩa 1.3:
(20)- Hàm f dễ tính tốn, nghĩa x S, dễ dàng tính y = f(x)
- Hàm ngƣợc f -1(y) khó tính, nghĩa cho y T khó tính đƣợc x = f -1(y)
Định nghĩa 1.4:
Hàm chiều cửa sập (trapdoor one-way function) hàm chiều f đƣợc thêm vào thông tin cửa sập (trapdoor information) để dễ dàng tính x biết y T thoả mãn x = f -1(y)
Ví dụ hàm chiều:
- f(p,q) = p*q, hàm chiều với p, q số nguyên tố lớn Nhƣ vậy, ta thực phép nhân p * q (độ phức tạp đa thức); nhƣng tính f -1 lại tốn
cực khó (bài tốn phân tích thừa số ngun tố - độ phức tạp mũ)
- fg ,N : x gx mod N hàm chiều Thực vậy, phép tính gx mod N có độ phức tạp đa thức; nhƣng tính f -1 lại tốn cực khó (bài tốn logarithm rời rạc)
- fk ,N : x xk mod N hàm chiều, với N = pq, p q số nguyên tố lớn, kk’ 1(mod φ(N)) Thực vậy, phép tính xk mod N có độ phức tạp đa thức, nhƣng tính f -1 lại cực khó Tuy nhiên, biết k’ dễ dàng tính đƣợc f từ cơng thức (xk)k’= x
1.3 CƠ SỞ TỐN HỌC CỦA MẬT MÃ 1.3.1 Hàm phi Euler
Định nghĩa 1.5
Cho n ≥1, đặt φ(n) tập số nguyên khoảng [1, n] nguyên tố với n Hàm φ nhƣ đƣợc gọi hàm phi Euler
* Tính chất hàm phi Euler
1 Nếu p số nguyên tố φ(n) = p –
2 Hàm phi Euler hàm có tính nhân: Nếu gcd(m,n) = φ(m.n) = φ(m).φ(n) (trong gcd(m, n) ký hiệu ƣớc số chung lớn m n)
Nếu n = p1e1p2e2…pkek p1, p2, , pk thừa số nguyên tố n thì:
φ(n) = n(1 -
1
p )(1 -
1
p )… (1 - pk
1
)
(21)Định nghĩa 1.6
Cho a b số nguyên, a đƣợc gọi đồng dƣ với b theo modulo n, ký hiệu a b (mod n) n chia hết (a-b) Số nguyên n đƣợc gọi modulo đồng dƣ
* Tính chất đồng dư: Cho a, a1, b, b1, c Z Ta có tính chất sau:
i a a(mod n) (phản xạ);
ii Nếu a b(mod n) b a(mod n) (đối xứng);
iii Nếu a b(mod n), b c(mod n) a c(mod n) (bắc cầu);
iv Nếu a a1(mod n), b b1(mod n) a + b (a1 + b1)(mod n), ab (a1b1)
(mod n), an (a1)n(mod n), với n Z
Ta có khái niệm lớp tƣơng đƣơng nhƣ sau: Lớp tƣơng đƣơng số nguyên a tập hợp số nguyên đồng dƣ với a theo modulo n Từ tính chất i, ii iii ta thấy: Cho n cố định, số đồng dƣ theo modulo n không gian Z đƣợc xếp vào lớp tƣơng đƣơng Nếu a = qn + r, ≤ r < n a r (mod n) Vì số nguyên a đồng dƣ theo modulo n với số nguyên khoảng [0, n-1] đƣợc gọi thặng dƣ nhỏ a theo modulo n, a r thuộc lớp tƣơng đƣơng Do r đơn giản đƣợc sử dụng để thể lớp tƣơng đƣơng
1.3.3 Không gian Zn
* Các định nghĩa không gian Zn
- Các số nguyên theo modulo n ký hiệu Zn tập hợp số nguyên {0, 1, 2,
3,…, n - 1} Các phép toán cộng, trừ, nhân Zn đƣợc thực theo modulo n
- Cho aZn Nghịch đảo nhân a theo modulo n số nguyên x Zn
sao cho a*x 1(mod n) Nếu x tồn giá trị a đƣợc gọi khả nghịch, nghịch đảo a ký hiệu a -1
- Cho a, bZn Phép chia a cho b theo modulo n tích a b -1 theo
(22)Cho a Zn, a có nghịch đảo a n nguyên tố
(gcd(a,n) = 1), gcd(a,n) ƣớc số chung lớn a n
Giả sử d = gcd(a,n) Phƣơng trình đồng dƣ ax b (mod n) có nghiệm x b chia hết cho d, trƣờng hợp nghiệm d nằm khoảng [0, n-1] nghiệm đồng dƣ theo modulo n/d
1.3.4 Nhóm nhân Z*n
* Các định nghĩa nhóm nhân Z*n
- Nhóm nhân Zn ký hiệu Z*n = {a Zn | gcd (a, n) = 1} Nếu n số
nguyên tố Z*n = {aZn | ≤ a ≤ n-1}
- Cho aZn* Bậc a ký hiệu ord(a) số nguyên dƣơng t nhỏ
cho at ≡ 1(mod n)
- Cho aZn* Bậc a ký hiệu ord(a) số nguyên dƣơng t nhỏ
cho a t (mod n)
* Các tính chất Zn*
- Cho số nguyên n ≥
Định lý 1.1 (Euler)
Nếu a Zn* aφ(n) (mod n)
Nếu n tích số nguyên tố phân biệt r s(mod φ(n)) ar as (mod n) với số nguyên a Nói cách khác, làm việc với số theo modulo nguyên tố p số mũ giảm theo modulo φ(n)
Định lý 1.2 (Fermat)
Cho p số nguyên tố
Nếu gcd(a, p) = ap-1 1(mod p)
Nếu r s(mod(p-1)) ar as(mod p) với số nguyên a ap a (mod p) với số nguyên a
1.3.5 Thặng dƣ Định nghĩa 1.7
Cho aZn* , a đƣợc gọi thặng dƣ bậc theo modulo n bậc theo
(23)gọi thặng dƣ không bậc theo modulo n Tập hợp thặng dƣ bậc theo modulo n ký hiệu Qn tập hợp thặng dƣ không bậc theo modulo n ký hiệu _Qn
Theo định nghĩa ta có Zn* nên Qn
_ Qn * Tính chất thặng dư
Cho n tích số nguyên tố p q Khi a Zn* thặng dƣ bậc
theo modulo n a Qn a
_
Qn Ta có, |Qn| = |Qp|.|Qq| = (p-1)(q-1)/4
và | _Q n| = 3(p-1)(q-1)/4 1.3.6 Căn bậc modulo
Định nghĩa 1.8
Cho a Qn Nếu a Zn* thoả mãn x2 a (mod n) x đƣợc gọi bậc
của a theo modulo n
* Tính chất (số bậc 2)
Nếu p số nguyên tố lẻ a Qn a có bậc theo modulo p
Tổng quát hơn: cho n = p1e1p2 e2…pk ek pi số nguyên tố lẻ phân
biệt ei ≥1 Nếu a Qn a có 2k bậc theo modulo n
1.3.7 Các thuật toán Zn
Cho n số nguyên dƣơng Nhƣ nói trƣớc, phần tử Zn đƣợc thể số nguyên {0, 1, 2,…, n-1} Ta thấy rằng: a, b Zn thì:
(a + b) mod n =
a + b a + b <n a + b – n a + b ≥ n
(24)* Thuật tốn tính nghịch đảo nhân Zn
Bài toán phát biểu nhƣ sau: Cho a Zn, tìm a-1 mod n có
Bƣớc đầu, dùng thuật tốn Euclid mở rộng sau để tìm số nguyên x y cho:
ax + ny = d với d = gcd(a,n)
Nếu d > a-1 mod n khơng tồn Ngƣợc lại, return (x)
* Thuật toán Euclid mở rộng(N+={1,2,3,…,}là tập số nguyên dương)
Algorithm Euclid INPUT: a, b N+ ;
OUTPUT: x, y Z thoả ax + by = gcd(a, b) Method
x := ; y := ;
u := ; v := ;
q := a div b ; r := a mod b ; While r ≠
a := b; b := r;
t := u ; u := x ; x := t – q * x ; t := v ; v := y ; y := t – q * y ; endwhile;
return (x, y) ; end
* Thuật tốn bình phương liên tiếp để tính số mũ modulo Zn
Algorithm expmod
INPUT: a Zn , k N
k đƣợc biểu diễn dƣới dạng nhị phân gồm t bit: k = (k1, k2,…, kt)
OUTPUT: ak mod n
Method b := ;
For i := to t
if ki = then
(25)endif
a := (a * a) mod n;
endfor;
return b; end
1.3.8 Thuật tốn kiểm tra tính ngun tố
Ta thấy rằng, để kiểm tra tính nguyên tố số nguyên phƣơng pháp Monte Carlo (thuật toán Miller-Rabin, Soloway-Strassen) có tốc độ thực nhanh (khoảng O(n2), với n số bit số cần kiểm tra) Tuy nhiên, thuật tốn khơng đƣa kết luận xác tính nguyên tố số, mà ln có xác suất sai sót Nhƣ để có sai số cực nhỏ chấp nhận đƣợc, ta phải thực thuật toán kiểm tra nhiều lần Vậy thì, với khoảng số ngun dƣơng ngẫu nhiên (có chiều dài xác định) tìm đƣợc số ngun tố Theo lý thuyết số số nguyên tố nhỏ N là: N/ln(N)
Giả sử ta chọn p số ngun có chiều dài 512-bits, xác suất để số p nguyên tố 1/354 Mặt khác, quan tâm đến số lẻ, nên xác suất để p nguyên tố 2/354 = 1/177 Vậy thì, trung bình khoảng 177 số lẻ ngẫu nhiên có số nguyên tố
Ngƣời ta chứng minh đƣợc, thuật toán Miller-Rabin dùng kiểm tra tính nguyên tố số nguyên dƣơng lẻ với sai số nhiều 1/4 Nếu thực thuật tốn t lần sai số nhiều 1/4t, để đảm bảo chắn tính nguyên tố cho số kiểm tra nên chọn số t > 20 Thuật tốn đƣợc sử dụng q trình tạo khóa hệ mật mã RSA
Thuật tốn Miller-Rabin: Kiểm tra tính nguyên tố số dạng 2km+1
Input n > 2, n = 2km +
Output [True, False] (True: n số nguyên tố, False: n hợp số) Giả sử n = 2km + 1; ( với m lẻ)
(26)4 if (b and b (n – 1)) Return True; /* n nguyên tố */ i = 1;
6 while (i < k and b (n – 1)) { b = b2 (mod n);
if (b = 1) Return False; /* n hợp số */ i ++;
}
7 if (b! = (n – 1)) Return False; /* n hợp số */
8 Return True; /* n số nguyên tố */
Thuật tốn:Kiểm tra tính ngun tố số dạng 2km+1 với t lần thực (t > 20)
Input n > 2, n = 2km +
Output {True, False} (True: n số nguyên tố, False: n hợp số) Giả sử n = 2km + 1;
2 For (j = 1; j t; j++)
{ Chọn số ngẫu nhiên a {2, ,n-1} Tính b = am mod n;
if (b = 1) continue; /* quay lại bƣớc 2*/ i = 1;
while ((i < k) and (b n – 1)) { b = b2 mod n;
If (b = 1) Return False; /* n hợp số */ i = i + 1;
}
if (b <> (n –1)) Return False; /* n hợp số */ }
3 Return True; /* n số nguyên tố */
(27)CHƢƠNG - NGHIÊN CỨU CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MẬT KHĨA CƠNG KHAI
2.1 GIỚI THIỆU VỀ HỆ MẬT VỚI KHÓA CÔNG KHAI
Vào năm 1976, nhà khoa học Whitfield Diffie, Martin Hellman Ralph Merkletại Đại học Stanford giới thiệu ý tƣởng hệ thống mật mã khóa cơng khai, khắc phục nhƣợc điểm phƣơng pháp mật mã khoá đối xứng Các phƣơng pháp Diffie-Hellman Martin Hellman Whitfield Diffie đƣợc công bố Năm 1977 nhóm tác giả Ronald Rivest, Adi Shamir Leonard Adleman công bố phƣơng pháp RSA, phƣơng pháp mã hóa khóa cơng khai RSA đƣợc sử dụng nhiều ứng dụng mã hóa bảo mật thơng tin RSA nhanh chóng trở thành chuẩn mã hóa khóa cơng khai tồn giới tính an tồn khả ứng dụng
Độ an toàn hệ thống mật mã này, đƣợc đo độ phức tạp thuật tốn mã hóa, mà dựa vào khám phá vô quan trọng ngành khoa học máy tính, lý thuyết độ phức tạp tính tốn: Chủ yếu đề cập đến phân tích thuật tốn đặc biệt số bƣớc tính tốn cần thiết để phát khóa bí mật Từ xác định độ an tồn hệ mật mã khóa cơng khai
Một hệ thống mật mã khóa cơng khai sử dụng hai loại khóa cặp khóa: Khố cơng khai (public key) đƣợc công bố rộng rãi sử dụng mã hóa thơng tin, khóa riêng (private key) sử dụng để giải mã thơng tin đƣợc mã hóa khóa cơng khai Các phƣơng pháp mã hóa khai thác ánh xạ f mà việc thực ánh xạ ngƣợc f -1 khó so với việc thực ánh xạ f Chỉ biết đƣợc khóa riêng thực đƣợc ánh xạ f -1.
2.1.1 Các quan điểm hệ mật mã khố cơng khai
(28)tốn hợp lý Nhƣng muốn tính ngƣợc lại (inverse function) phải nhiều thời gian khó thực đƣợc Vì vậy, thám mã khó tính tốn để thu đƣợc rõ từ mã chặn đƣợc
- Một quan điểm khác dùng hệ mật mã khố cơng khai, thông tin “cửa sập” (trap door) mà hàm chiều phải có Thơng tin bí mật (khố riêng) đƣợc đƣa vào ngƣời sở hữu cặp khóa Khi có đƣợc thơng tin “cửa sập” cơng việc giải mã trở nên dễ dàng
- Các hệ mật mã khóa cơng khai đƣợc xây dựng dựa tốn khó nhƣ: tốn logarithm rời rạc trƣờng hữu hạn Zp (hệ ElGamal) toán phân tích số nguyên lớn thừa số nguyên tố (hệ RSA)
2.1.2 Hoạt động hệ mật mã khóa cơng khai
Đối với hệ thống mã hóa khóa cơng khai: Mỗi ngƣời sử dụng phải tạo riêng cho cặp khóa Trong đó, khóa cơng khai (public key) với thuật tốn mã hóa E, đƣợc cơng bố rộng rãi thƣ mục dùng chung cho ngƣời sử dụng Còn lại khóa riêng (private key) với thuật tốn giải mã D đƣợc giữ bí mật ngƣời sử dụng
Nhƣ vậy, ngƣời A muốn gửi thông điệp R đến cho ngƣời B (Hình 2.1) Giả sử: Khóa cơng khai B là: KB , Khóa riêng B là: MB
Khóa cơng khai A là: KA , Khóa riêng A là: MA
Thuật tốn mã hóa: E , thuật toán giải mã: D
Ngƣời A tìm khóa cơng khai KB ngƣời B thƣ mục dùng chung tính C = E(KB, R), sau gửi mã C cho ngƣời B Khi nhận mã C ngƣời B giải mã dựa vào khóa riêng MBcủa để tínhR = D(MB, C)
2.1.3 Các mơ hình ứng dụng hệ mật mã khóa cơng khai
Thơng qua lĩnh vực ứng dụng cụ thể mà ngƣời gửi sử dụng khóa bí mật mình, khóa cơng khai ngƣời nhận hai để hình thành số ứng dụng phù hợp nhƣ sau:
- Tính mật: Ngƣời gửi A thực mã hóa thơng điệp R khóa cơng khai
(29)của mình: R = D(MB,C) Vậy, có ngƣời B giải mã đƣợc thông điệp, điều gọi tính mậtcủa hệ
- Tính xác thực: Ngƣời gửi A thực mã hóa thơng điệp R khóa
riêng MA: C = E(MA,R) Ngƣời nhận B giải mã khóa cơng khai KA ngƣời
gửi A: R = D(KA,C) Nhƣ có A ngƣời có khóa riêng để mã hóa, thơng điệp nhận đƣợc A, điều gọi tính xác thựccủa hệ
- Tính mật xác thực: Ngƣời gửi A thực mã hố thơng điệp hai lần, lần
thứ sử dụng khóa bí mật MA của E(MA,R), lần thứ hai sử dụng khóa cơng khai KB ngƣời nhận B: C = E(KB,(E(MA,R))) Khi nhận mã, ngƣời nhận B
cũng thực giải mã hai lần, dùng khóa riêng MB D(MB,C), sau
đó dùng khóa cơng khai KA ngƣời gửi A: R = D(KA,D(MB,C)) Nhƣ
ngƣời gửi có khóa riêng để mã hố ngƣời nhận có khóa riêng để giải mã, tính mật vàtính xác thựccủa hệ
2.1.4 Các u cầu hệ mật mã khóa cơng khai
- Dễ tính tốn thành viên muốn tạo cặp khóa (khóa cơng khai khóa riêng)
- Ngƣời gửi dễ tính tốn biết khóa cơng khai thơng điệp R cần mã hoá thành mã tƣơng ứng C = E(KB,R)
- Ngƣời nhận dễ tính tốn sử dụng khóa riêng để giải mã mã C, khôi phục lại thông điệp ban đầu: R = D(MB,C)
- Đối với ngƣời thám mã, biết đƣợc khóa cơng khai KB, muốn xác định
khóa bí mật MB biết đƣợc khóa cơng khai KB mã C để khôi phục lại
thông điệp R ban đầu: Điều khơng thể tính tốn
2.2 HỆ MẬT MÃ KHĨA CƠNG KHAI RSA
Hệ mật RSA đƣợc xây dựng năm 1978 ba tác giả R.L.Rivest, A.Shamir L.Adleman Hệ mật RSA đƣợc thiết kế làm việc trƣờng số ZN, dựa sở
độ khó giải tốn phân tích số ngun N lớn thành thừa số nguyên tố p q khác
(30)Bài tốn 2.1(Bài tốn phân tích số ngun):
Cho số nguyên dƣơng N, tìm thừa số nguyên tố pi N để N = p1e1
p2e2 pkek , với pi số nguyên tố phân biệt ei số nguyên (với i =
1, , k)
Ví dụ : Với N=12, ta có N=22.31
Bài tốn khó giải N số nguyên lớn, có nhiều thuật toán để giải toán Nhƣng chƣa có thuật tốn hiệu để phân tích số ngun N có khoảng 232 chữ số thập phân (768-bits) trở lên
Bài toán 2.2(Bài toán RSA):
Cho số nguyên dƣơng N, N=p*q với p q số nguyên tố phân biệt, số nguyên e cho thỏa mãn gcd(e, (p – 1) * (q – 1)) = 1, số nguyên c Tìm
số nguyên m cho me c (mod N)
Bài tốn RSA có độ khó tƣơng tự nhƣ tốn phân tích số ngun, nhƣng dễ dàng đƣợc giải nhƣ biết đƣợc hai số nguyên tố p q
2.2.2 Định nghĩa tập làm việc hệ RSA
Tập rõ (plaintext): P = ZN = {0, 1,…, N-1}
Tập mã (ciphertext): C = ZN = {0, 1,…, N-1}
Tập khóa: K = {(n, p, q, e, d): N = p * q, e * d 1(mod φ(N))}
2.2.3 Q trình tạo khố, mã hố giải mã a) Tạo khóa:
Tạo hai số nguyên tố phân biệt p q lớn, cho tốn phân tích thật khó giải (kích cỡ số khoảng 512 bits 1024 bits)
Tính N = p* q φ(N) = (p – 1) * (q – 1)
Chọn số nguyên ngẫu nhiên e cho < e < φ(N) gcd(e, φ(N)) =
Sử dụng thuật tốn Euclid mở rộng, để tính số ngun d nhất, cho < d < φ(N) e * d mod φ(N) (d nghịch đảo e modulo N)
(31)Giả sử để gửi thông điệp M cho ngƣời B Ngƣời A thực nhƣ sau:
Lấy khóa cơng khai ngƣời nhận B: (e, N)
Biến đổi thông điệp M thành số nguyên Mi tƣơng ứng cho Mi <
N, (i = 1,…, k) Theo phép biến đổi sau:
- Biến đổi ký tự thông điệp M thành số nguyên tƣơng ứng, thí dụ theo qui tắc: Dấu cách 00, A 01, B 02, , Z 26
- Chia thông điệp vừa biến đổi thành k nhóm có chiều dài nhau, nhóm biểu diễn số nguyên Mi {0,…, N – 1} (với ≤i ≤k)
Thực mã hóa lần lƣợt cho số Mi Ci cách:
Ci = Eke(Mi) = Mie (mod N)
Tập số nguyên {C1, C2, ,Ck} mã để gửi đến ngƣời nhận B
c) Giải mã:
Ngƣời nhận B thực bƣớc sau:
Thực giải mã lần lƣợt số nguyên Ci Mi cách:
Mi = D(Ci) = Cid (mod N) với ≤Mi < N, (d khố bí mật B)
Thực phép biến đổi ngƣợc lại từ số Mi thành chuỗi ký tự tƣơng ứng để khôi phục lại nội dung thông điệp M ban đầu
Bảng 2.2: Tóm tắt bước tạo khố, mã hố, giải mã Hệ RSA
Tạo khoá: Tạo số nguyên tố lớn p q
* Tính N = p * q Tính φ(N) = (p-1) * (q-1)
* Chọn 1< e < φ(N): gcd(φ(N), e) =
* Tính d = e-1 mod φ(N) (dùng thuật toán Euclid mở rộng) Khóa cơng khai: (e, N) Khóa riêng: (d, N)
Mã hóa: Khối rõ M < N * Tính: C = Me mod N
(32)2.3.4 Tính trình giải mã
Từ: ed 1mod φ(N) φ(N) | (ed – 1)
φ(pq)| (ed – 1)
φ(p) * φ(q) | (ed – 1) (do p, q số nguyên tố)
φ(p) | (ed – 1) (1)
và φ(q) | (ed – 1) (2)
Từ (1) k Z: ed -1= k φ(p) = k (p-1) (p số nguyên tố) (3) Xét trƣờng hợp tổng quát với số M Zn , nâng lũy thừa ed ta có:
Med M(ed –1) + (mod p)
ed (M(ed-1))
* M (mod p) (4)
Từ (3) & (4)ed (Mk(p - 1))
* M (mod p) (5)
Vì p số nguyên tố, số M ZN có hai trƣờng hợp: M nguyên tố
nhau với p (nghĩa gcd(M, p) = 1) M bội số p (nghĩa gcd(M, p) = p)
Trường hợp 1: gcd (M, p) = 1
Vậy M p-1 (mod p) (định lý Fermat) Từ: (5) Med (1)k M (mod p)
Med M (mod p) (6)
Trường hợp 2: Nếu gcd(M, p) = p M (mod p) Đồng thời lũy thừa số
M lên số nguyên bất kỳ, chia hết cho p Nghĩa Med (mod p ) Vậy trƣờng hợp thỏa mãn phƣơng trình (6)
Với cách tính tƣơng tự với q, từ (2) Med M (mod q) (7) Từ (6) & (7) Med M (mod pq) M (mod N)
Ví dụ 2.1 : Minh họa hệ mật mã RSA
a) Tạo khóa:
Chọn p q số nguyên tố nhỏ với mục đích minh họa
Chọn hai số nguyên tố p = 41, q = 67;
Tính N = 47 * 61 = 2747 φ(N) = (41- 1) * (67-1) = 2600 ;
(33) Tìm phần tử nghịch đảo d = 179 (dùng thuật toán Euclid mở rộng) ;
Cơng bố khóa cơng khai cặp số ( e = 49, N = 2747), cịn số d = 179 đƣợc giữ làm khóa riêng
b) Mã hóa: Giả sử nội dung cần mã hoá M = “MA HOA CONG KHAI ”
Biến đổi ký tự thông điệp thành số tƣơng ứng nhƣ sau:
M A H O A C O N G K H A I
13 01 00 08 15 01 00 03 15 14 07 00 11 08 01 09
Chia thông điệp thành khối, khối gồm chữ số biểu diễn số nguyên Mi < N, với Mi {1301;0008;1501;0003;1514;0700;1108;0109}
Mã hóa lần lƣợt số Mi : Ci = Mi59 ( mod 2747) (8)
Mã hóa số M1 = 1301 theo cách tính (8) ta có: C1 = M159 mod 2747 130159 mod 2747 = 2352
Tiếp tục tính số C2 , ,C8 từ số M2 , , M8 theo (8) Ta có đƣợc kết
cột Ci mã để gửi đến ngƣời nhận:
Khối
Mi 1301 0008 1501 0003 1514 0700 1108 0109
Ci=E(Mi) 2352 2537 1745 2733 1203 2651 0534 0454
c) Giải mã:
Thực giải mã lần lƣợt số cột Ci (1≤i ≤ 8)
Mi = Dkd(Ci) Ci179 ( mod 2747) (9)
Giải mã số C1 = 2352 theo cách tính (2.9) ta có: M1 = C1179 mod 2747 = 2352179 mod 2747 = 1301
Tiếp tục tính số M2, , M8 từ số C2, ,C8 theo (9) ta có bảng minh họa
các số Mi đƣợc giải mã từ số Ci nhƣ sau:
Khối
Ci=E(Mi) 2352 2537 1745 2733 1203 2651 0534 0454
(34)Thực phép biến đổi ngƣợc từ số Mi thành chuỗi ký tự tƣơng ứng để khôi phục lại thông điệp gốc ban đầu M = "MA HOA CONG KHAI"
2.2.4 Chi phí thực q trình mã hóa giải mã
Chi phí cho q trình mã hố:
Tính C = Me mod N, với số mũ e thƣờng đƣợc chọn có dạng e = 2x + (với xmax = 16) để phép tính lũy thừa modulo đƣợc thực nhanh Vì biểu diễn nhị phân số dạng có hai bít giá trị đầu cuối Nhƣ q trình mã hóa có nhiều 16 phép tính bình phƣơng phép nhân, tổng chi phí q trình mã hóa là: 17(2n2 + 2n) = 34(n2+n)
Chi phí cho q trình giải mã:
Quá trình giải mã hệ RSA, thực phép tính M = Cd mod N, với số mũ bí mật d thƣờng lớn (d N) để đảm bảo độ an toàn cho liệu Vì chi phí thực giải mã hệ RSA tƣơng đƣơng với chi phí để thực phép tính lũy thừa nhanh là: 3n3 + n2
2.2.5 Đánh giá hệ mật mã khóa cơng khai RSA 2.2.5.1 Độ an toàn
Hệ RSA đƣợc thiết kế dựa độ khó giải tốn phân tích thừa số nguyên tố Hầu hết phƣơng pháp thám mã hệ RSA nhƣ tìm thừa số p q, tìm φ(n), hay tìm khóa riêng d… khó nhƣ tốn phân tích
(35)Bảng 2.3: Bảng chi phí thời gian cần thiết để phân tích số nguyên N
Hệ RSA Số chữ số
thập phân
Số bits
Thuật
toán Năm
Chi phí phân tích (MIPS-Years)
RSA-129 129 426 MPQS 1994 5.000
RSA-130 130 430 GNFS 1996 1.000
RSA-140 140 465 GNFS 1999 2.000
RSA-155 155 512 GNFS 1999 8.000
RSA-576 174 576 GNFS 2003 13.000
Vào ngày 22/8/1999 nhóm nhà nghiên cứu hồn thành việc phân tích số N dùng hệ RSA-155 có 155 chữ số thập phân (512-bits) thuật toán General Number Field Sieve (GNFS) Sau thời gian tháng mạng máy tính có 300 workstation u cầu khoảng 8000 MIPS-Years
Việc phân tích số nguyên N thành thừa số nguyên tố p, q nhằm mục đích bẻ gãy hệ mật mã RSA điều khó tính tốn nổi, nhƣ q trình thiết kế hệ RSA ta chọn số nguyên N lớn Tuy nhiên, độ dài số nguyên N lớn hay nhỏ phụ thuộc vào mối liên hệ tốc độ giải mã độ an toàn hệ RSA Số N sử dụng cho modulo RSA phải có khoảng 232 chữ số thập phân (768-bits) cho ta độ an toàn đủ để chống lại công sử dụng kỹ thuật phân tích Trong thực tế, q trình thiết kế sử dụng số N có kích cỡ khoảng 1024-bits an tồn, chống lại kỹ thuật phân tích kỹ thuật khác phát triển tƣơng lai
2.2.5.2 Hiệu suất thực ứng dụng
(36)Theo ƣớc tính, thực mã hóa giải mã hệ mật mã RSA chậm 100 lần so với hệ mật mã khóa đối xứng DES (bằng phần mềm) Và chậm 1000 lần so với DES (bằng phần cứng) Vì lý mà thực tế hệ mã khố cơng khai RSA đƣợc dùng vào mục đích mã hóa cho khối lƣợng liệu lớn, mà thƣờng đƣợc ứng dụng để mã hóa khối liệu nhỏ Nhƣ để khắc phục phần cho cơng việc mã hóa giải mã hệ mật mã RSA đƣợc nhanh nghiên cứu thêm hệ mật mã RSA WITH CRT nhƣ sau :
2.3 HỆ MẬT MÃ RSA WITH CRT
Ta thấy rằng, trình giải mã hệ mật mã RSA có độ phức tạp (M = Cd mod N) phụ thuộc trực tiếp vào kích cỡ số nguyên d N Để giảm đƣợc kích cỡ hai số ngun d N tăng tốc độ giải mã, dựa vào định lý đồng dƣ Trung hoa (CRT-Chinese Remainder Theorem) sau:
2.3.1 Định lý đồng dƣ Trung Hoa
Định lý đồng dƣ Trung Hoa (CRT) cho phép giảm số lần tính tốn q trình giải mã hệ RSA, cách thiết lập ánh xạ tập Z N tích Đề-các
k 1 i
ni
Z , với N = k 1 i
i
n số ni (1 i k) nguyên tố Cho phép thực
hiện phép tính lũy thừa modulo trƣờng số Zni nhỏ hơn, thay phải tính trực tiếp trƣờng số Z N lớn nhƣ cách tính hệ RSA chuẩn
Định lý 2.2:(định lý đồng dƣ Trung Hoa)
Giả sử p1, p2, , pk số nguyên dƣơng nguyên tố đôi
một (gcd(pi, pj) = 1, i j) cho x1, x2, , xk số nguyên Khi hệ
phƣơng trình đồng dƣ sau đây: x x1 (mod p1)
x x2 (mod p2)
x xk (mod pk)
(37)x = k 1 i i i
ic s N
x mod (10)
Trong đó:
i i
p N
c 1(modpi)
i i c
s , i = 1, 2,…, k
Vậy, theo định lý đồng dƣ Trung Hoa, với số nguyên dƣơng x < N biểu diễn dƣới dạng gồm k phần tử [x1, x2,…, xk] ngƣợc
lại, xi số dƣ phép tính x mod pi (i = 1, 2…, k) Sự chuyển đổi số
nguyên x thành số dƣ đƣợc thực phép rút gọn xi = x mod pi Cịn
chuyển ngƣợc lại khó hơn, địi hỏi tính tốn liên quan đến cơng thức (10)
Hệ 2.1: Nếu số nguyên x không chia hết cho p, n m mod (p – 1) xn xm mod p
Từ hệ trên, thực phép toán lũy thừa với modulo số ngun tố p số mũ đƣợc rút gọn mod (p – 1) Điều cho phép thực trình giải mã hệ RSA nhanh hơn, số mũ có kích cỡ nhỏ
Thuật toán 2.1:Định lý đồng dư Trung Hoa tổng quát
Input [x1, x2, , xk], [p1, p2, , pk]
Output x (với x mod pi = xi với i =1, 2, , k)
1 x = 0; N = p1;
2 For (i = 2; i k; i++) {N = N * pi;} /* N tích số pi */
3 For (i = 1; i k; i++) /* tính nghiệm x */ { ci = (N/pi);
si = ci-1 mod pi;
x = (x + si* ci* xi) mod N;
}
4 Return x;
Trƣờng hợp đặc biệt định lý đồng dƣ Trung Hoa đƣợc áp dụng cho trình giải mã hệ RSA, modulo N tích hai số nguyên tố p vàq (N = p *
(38)[Mp, Mq], thỏa mãn Mp = M mod p Mq = M mod q Cho nên ta giải mã
thơng điệp, cách tính trƣớc hai số Mp Mq kết hợp chúng với công thức
(10) Trong Mp, Mq đƣợc tính nhờ vào hệ (2.1) nhƣ sau:
Mp = M mod p = (Cd mod N) mod p = Cd mod p (vì N = p * q)
= Cd mod p – mod p = Cdp mod p (với dp = d mod (p – 1)
Hơn nữa, dễ dàng thấy mã C rút gọn mod p, trƣớc tính Mp, Mq Nhƣ vậy, kích cỡ tốn hạng Cp = C mod p, Cq = C mod q, dp
= d mod (p – 1), dq = d mod (q – 1), giảm Vậy, ta có cách tính Mp =
Cpdp mod p Mq = Cqdq mod q
Thuật toán 2.2: Định lý đồng dư Trung Hoa với modulo N = p* q
Input Mp, Mq, p, q, N
Output M (sao cho M = Mp mod p M = Mq mod q)
1 y = q-1 mod p;
2 M = y * q * Mp mod N;
3 y = p-1 mod q;
4 M = (M + y * p * Mq) mod N;
5 Return M;
2.3.2 Thuật toán Garner
Thuật toán Garner cải tiến tốc độ giải mã so với thuật toán CRT vừa xét Ở bƣớc tính phần tử nghịch đảo bị loại bỏ, thuật tốn tìm số ngun M từ số Mp = M mod p Mq = M mod q Ngồi thuật
tốn cịn có tham số đầu vào: p’ = p-1 mod q đƣợc tính tốn trƣớc
Thuật tốn 2.3: Thuật toán Garner
Input Mp, Mq, p, q, (p’ = p-1mod q), N
Output M
1 V = (Mq – Mp) mod q;
(39)3 M = V * p mod N;
4 M = M + Mp mod N;
5 Return M;
Phân tích chi phí thực thuật tốn
Giả sử số N có kích cỡ n-bits, số ngun tố p, q có kích cỡ n/2-bits Thuật toán thực phép nhân số ngun có kích cỡ n/2-bits để tính V (bƣớc 2) với chi phí 2(n/2)2+2(n/2) n2/2 + o(n2), phép nhân số ngun có kích cỡ n-bits để tính M (bƣớc 3) với chi phí 2n2 +2n 2n2 + o(n2) Vậy chi phí thuật tốn là: 5n2/2 + o(n2)
Ví dụ 2.3: Minh họa bước thực thuật toán Garner
Cho hai số nguyên tố p = 47 q = 61, số dƣ Mp = 49 Mq = 34, sử dụng
thuật tốn Garner, tìm số nguyên M từ số Mp Mq
Tính trƣớc: N = p * q = 2747 p’ = p-1 mod q = 47-1 mod 61 = 13 b1: V = (Mq – Mp) mod q = (34 – 12) mod 61
= -12 mod 61 = 49 (vì 12+49 mod 61) b2: V = V * p’ mod q = 49 *13 mod 61 = 27
b3: M = V * p mod N = 27 * 47 mod 2747 = 1269
b4: M = M + Mp mod N =1269 + 46 mod 2747 = 1315
2.3.3 Các q trình tạo khố, mã hố giải mã
Hệ mật mã RSA With CRT có tốc độ thực q trình giải mã nhanh hệ RSA chuẩn nhiều Trong phần trình bày bƣớc tính tốn thêm vào cho q trình tạo khóa q trình giải mã nhờ vào định lý đồng dƣ Trung Hoa, trình mã hóa hồn tồn giống với hệ RSA chuẩn
2.3.3.1 Mơ tả q trình tạo khố giải mã a) Tạo khoá:
Quá trình tạo khóa giống nhƣ hệ RSA chuẩn, nhƣng thêm bƣớc sau: - Tính dp = d mod (p – 1) dq = d mod (q – 1)
(40)- Chọn (e, N) làm khố cơng khai, cịn (p, q, dp, dq, p’) làm khoá riêng
b) Giải Mã:
- Tính số Mp= Cpdp mod p Mq= Cqdq mod q với:
Cp = C mod p; Cq = C mod q
- Giải mã C để tìm M từ số Mp Mq nhờ vào thuật toán Garner
Thuật toán 2.4
Input C, N, dp, dq, p, q, p’ = p-1mod q
Output M
1 Cp = C mod p;
2 Cq = C mod q;
3 Mp = Cpdp mod p;
4 Mq = Cqdq M mod q;
5 M = Garner(Mp, Mq, p, q, p’, N);
6 Return M;
2.3.3.2 Phân tích chi phí thuật tốn giải mã RSA_CRT
Giả sử số N sử dụng cho modulo RSA có kích cỡ n-bits, số ngun tố p, q có kích cỡ n/2-bits Thuật tốn RSA_CRT thực hai phép tính rút gọn modulo (b1) (b2) với số ngun có kích cỡ n-bits, modulo có kích cỡ n/2-bits Chi phí bƣớc n2/2, (b3) (b4) thực hai phép tính lũy thừa modulo với số ngun có kích cỡ n/2-bits, với bƣớc có chi phí 3n3/8 + n2/4 Tại (b5) thực thuật tốn Garner để tìm M từ hai số Mp Mq với chi phí tính
5n2/2 Vậy tổng chi phí thuật toán giải mã là: 3n3/4 + 7n2/2 + o(n2).
2.4 PHÂN TÍCH CƠ CHẾ HOẠT ĐỘNG CỦA HỆ MÃ RSA 2.4.1 Phân tích q trình tạo khóa:
Tạo hai số nguyên tố phân biệt p q lớn, cho tốn phân tích thật khó giải
(41)Chọn số nguyên ngẫu nhiên e cho < e < φ(N) gcd(e, φ(N)) = Sử dụng thuật tốn Euclid mở rộng, để tính số ngun d nhất, cho < d < φ(N) e * d mod φ(N) (d nghịch đảo e modulo N)
Hai số (e, N) làm khóa cơng khai, cịn (d, N) đƣợc giữ bí mật làm khóa riêng Các số nguyên tố p, q bị xóa kết thúc q trình tạo khóa
Nhƣ vậy, mấu chốt để tăng tính an tồn hệ mã RSA ta cần thực đƣợc q trình mã hóa xuất phát từ số ngun tố p, q lớn
2.4.2 Phân tích q trình mã hóa:
Giả sử để gửi thơng điệp M cho ngƣời B Ngƣời A thực nhƣ sau:
Lấy khóa cơng khai ngƣời nhận B: (e, N)
Biến đổi thông điệp M thành số nguyên Mi tƣơng ứng cho Mi <
N, (i = 1,…, k) Theo phép biến đổi sau:
- Biến đổi ký tự thông điệp M thành số nguyên tƣơng ứng, thí dụ theo qui tắc: Dấu cách 00, A 01, B 02, , Z 26
- Chia thơng điệp vừa biến đổi thành k nhóm có chiều dài nhau, nhóm biểu diễn số nguyên Mi {0,…, N – 1} (với ≤i ≤k)
Thực mã hóa lần lƣợt cho số Mi Ci cách:
Ci = Eke(Mi) = Mie (mod N)
Tập số nguyên {C1, C2, ,Ck} mã để gửi đến ngƣời nhận B
Ta thấy trình mã hóa phải thực liên tiếp việc mã hóa số Mi
theo công thức: Ci = Eke(Mi) = Mie (mod N)
Khi p q lớn ta có N = p*q lớn
Trên lý thuyết, số e chọn cần thỏa mãn gcd(e, φ(N)) = 1, nhiên để tăng tính an toàn, số e thƣờng đƣợc số lớn Max(p,q) với Max(p,q) trả số lớn p q
Do đó, q trình mã hóa thực với số lớn nhƣng phải đảm bảo thời gian thực việc mã hóa đủ tốt
(42)2.4.3 Phân tích trình giải mã:
Ngƣời nhận B thực bƣớc sau:
Thực giải mã lần lƣợt số nguyên Ci Mi cách:
Mi = D(Ci) = Cid (mod N) với ≤Mi < N, (d khố bí mật B)
Thực phép biến đổi ngƣợc lại từ số Mi thành chuỗi ký tự tƣơng ứng để khôi phục lại nội dung thông điệp M ban đầu
Quá trình giải mã phải thực việc tính tốn liên tiếp để tìm Mi theo cơng thức: Mi = D(Ci) = Cid (mod N), trình thực số lớn
vì ta có d số lớn Do đó, q trình giải mã cần có tác động để đảm bảo thời gian giải mã chấp nhận đƣợc Điều có ý nghĩa quan trọng hệ mã RSA có số lƣợng phép tính lớn, bên cạnh để thực với rõ có nội dung lớn ta phải giải đƣợc vấn đề
Kết luận:
Trong thực tế, tốc độ mã hóa giải mã RSA chậm so với hệ mã khác Điều dẫn đến việc RSA chủ yếu đƣợc dùng để mã hóa khóa bí mật các rõ ngắn Phần nội dung cần gửi đƣợc mã hóa phƣơng pháp mã hóa khác có tốc độ thực nhanh (Phƣơng pháp thƣờng an toàn so với RSA) Ngƣời nhận giải mã RSA để lấy khóa bí mật tiến hành giải mã nội dung cần nhận
Điều dẫn đến bất cập ứng dụng RSA rộng rãi thực tế Giải đƣợc mâu thuẫn việc tăng tính an tồn tăng thời gian thực mã hóa vấn đề cần đƣợc nghiên cứu để giải
2.5 KHẢ NĂNG BỊ BẺ KHÓA CỦA HỆ MÃ CÔNG KHAI RSA 2.5.1 Một số phƣơng pháp công hệ mã RSA.
(43)thức tốn học sâu sắc, có kinh nghiệm bảo mật am hiểu phƣơng pháp công
• Brute-force attack: phƣơng pháp cơng cách thử tất chìa
khóa có Đây phƣơng pháp công thô sơ khó khăn Theo lý thuyết, tất thuật tốn mã hóa đại bị đánh bại brute-force nhƣng thực tiễn việc thực đƣợc thời gian hàng triệu, chí hàng tỉ năm Vì coi thuật tốn mã hóa an tồn nhƣ khơng cịn cách khác để cơng dễ brute-force
• Frequency analysis: thống kê tần suất, áp dụng đƣợc
thuật toán cổ điển dùng phƣơng pháp thay thế, ví dụ phƣơng pháp Caesar Để thực phƣơng pháp ta cần lƣợng văn mã hóa đủ lớn để phép thống kê đƣợc xác Ngồi cịn phải biết ngơn ngữ sử dụng văn ban đầu, văn ban đầu tiếng Anh nhiều khả kí tự xuất nhiều văn mã hóa chữ e mã hóa thành
• Differential cryptanalysis: Phƣơng pháp Eli Biham Adi Shamir
tìm vào khoảng cuối năm 1980, thƣờng đƣợc sử dụng để cơng thuật tốn khối (block cipher) Phƣơng pháp dựa việc phân tích biến đổi hai văn gốc có liên quan đƣợc mã hóa chìa
• Tấn công dựa thời gian
Năm 1995, Paul Kocher mô tả dạng công lên RSA: Khi kẻ công nắm đủ thông tin phần cứng thực mã hóa xác định đƣợc thời gian giải mã số mã lựa chọn nhanh chóng tìm khóa d Dạng cơng áp dụng hệ thống chữ ký điện tử sử dụng RSA
• Tấn cơng lựa chọn thích nghi mã
(44)khuyết PKCS #1, Bleichenbacher thực cơng lên RSA dùng cho giao thức Secure Sockets Layer (tìm đƣợc khóa phiên) Do phát này, mơ hình chuyển đổi an tồn nhƣ chuyển đổi mã hóa bất đối xứng tối ƣu (Optimal Asymmetric Encryption Padding) đƣợc khuyến cáo sử dụng Đồng thời phòng nghiên cứu RSA đƣa phiên PKCS #1 có khả chống lại dạng cơng nói
• Phƣơng pháp sử dụng (n)
Giả sử ngƣời cơng biết đƣợc giá trị (n) Khi việc xác định giá trị p, q đƣợc đƣa việc giải hai phƣơng trình sau
n = pq
Thay q = n/p, ta đƣợc phƣơng trình bậc hai
p, q hai nghiệm phƣơng trình bậc hai Tuy nhiên vấn đề phát đƣợc giá trị (n) cịn khó việc xác định hai thừa số nguyên tố n
Ngồi cịn số phƣơng pháp cơng khác đƣợc sử dụng để công hệ mã RSA Tuy nhiên, từ sở toán học RSA, hầu hết phƣơng pháp công chƣa thực hiệu Các cố gắng bẻ khóa RSA thành cơng đƣợc công bố phải dựa sức mạnh kết hợp nhiều máy tính thực thực khoảng thời gian dài
Tuy nhiên, để đảm bảo tính an tồn cao cho hệ mã RSA nói riêng hệ mã cơng khai nói chung Việc áp dụng cải tiến nhằm tăng tính an tồn cấp thiết
2.5.2 Độ an toàn hệ mã RSA
Độ an toàn hệ thống RSA dựa vấn đề toán học: toán phân tích thừa số nguyên tố số nguyên lớn toán RSA Nếu toán khó (khơng tìm đƣợc thuật tốn hiệu để giải chúng) khơng thể thực
n p1 q1
1 0
2 n n pn
(45)đƣợc việc phá mã toàn RSA Phá mã phần phải đƣợc ngăn chặn phƣơng pháp chuyển đổi rõ an tồn
Bài tốn RSA: Cho số ngun dƣơng N tích hai số nguyên tố phân biệt
p q (N = p * q), số nguyên e cho thỏa mãn gcd(e, (p – 1) * (q – 1)) = 1, số
nguyên c Tìm số nguyên m cho me c (mod N)
Hiện phƣơng pháp triển vọng giải tốn phân tích n thừa số nguyên tố Khi thực đƣợc điều này, kẻ cơng tìm số mũ bí mật d từ khóa cơng khai giải mã theo quy trình thuật tốn Nếu kẻ cơng tìm đƣợc số nguyên tố p q cho: n = p*q dễ dàng tìm đƣợc giá trị (p-1)*(q-1) qua xác định d từ e Chƣa có phƣơng pháp đƣợc tìm máy tính để giải tốn thời gian đa thức (polynomial-time) Tuy nhiên ngƣời ta chƣa chứng minh đƣợc điều ngƣợc lại (sự không tồn thuật toán)
Tại thời điểm năm 2005, số lớn đƣợc phân tích thừa số ngun tố có độ dài 663 bít với phƣơng pháp phân tán khóa RSA có độ dài từ 1024 tới 2048 bít Một số chuyên gia cho khóa 1024 bít sớm bị phá vỡ (cũng có nhiều ngƣời phản đối việc này) Với khóa 4096 bít hầu nhƣ khơng có khả bị phá vỡ tƣơng lai gần Do đó, ngƣời ta thƣờng cho RSA đảm bảo an toàn với điều kiện n đƣợc chọn đủ lớn Nếu n có độ dài 256 bít ngắn hơn, bị phân tích vài với máy tính cá nhân dùng phần mềm có sẵn Nếu n có độ dài 512 bít, bị phân tích vài trăm máy tính thời điểm năm 1999
(46)Nhƣ vậy, tính an tồn phƣơng pháp RSA dựa sở máy tính thời điểm chƣa đủ khả giải việc phân tích số nguyên lớn thừa số nguyên tố
2.6 HỆ MẬT MÃ KHĨA CƠNG KHAI ELGAMAL
Vào năm 1985, Hệ mật mã khố cơng khai ElGamal đƣợc giới thiệu T ElGamal Độ an toàn hệ phụ thuộc vào độ khó giải tốn logarithm rời rạc trƣờng số hữu hạn Zp Vì vậy, số nguyên tố p cần phải đƣợc chọn cho toán logarithm khó tính tốn Trƣờng hợp đặc biệt để ngăn ngừa cơng, số ngun tố p cần phải đƣợc chọn cho số (p - 1) có thừa số nguyên tố lớn q
2.6.1 Bài toán logarithm rời rạc
Định nghĩa 2.1: Một trƣờng hữu hạn trƣờng F chứa số hữu hạn
các phần tử Bậc nhóm F số phần tử tồn F
Hình xxx: Đồ thị so sánh chi phí cơng khóa bí mật khóa cơng khai
64 128 256 512 1K 2K 4K
Độ dài mã khóa (bits)
C
hi
phí
1 2
(47)Định nghĩa 2.2: Cho Fq trƣờng hữu hạn, phần tử g Fq, định nghĩa bậc (order) g số nguyên dƣơng m nhỏ cho: gm 1(mod q), ký hiệu là:
Ordq(g) = m
Định nghĩa 2.3: Một phần tử sinh g trƣờng hữu hạn Fq, g có bậc (q–
1);
Phát biểu tương đương: g phần tử sinh (chính), lũy thừa g
sinh tất phần tử khác không Fq* Nghĩa là:
{gx : ≤ x ≤ q – 2} = Fq*
Định lý 2.1: Mỗi trƣờng hữu hạn có phần tử sinh Nếu g phần tử
sinh Fq* gj phần tử sinh gcd(j, q –1) = Vậy có tổng cộng
φ(q – 1) phần tử sinh khác Fq*
Định nghĩa 2.4: Cho G nhóm vịng (cyclic) hữu hạn có bậc n g
phần tử sinh G Logarithm rời rạc y số g, kí hiệu loggy số nguyên x, với x n – cho:
y = gx
Bài toán 2.1: Cho số nguyên tố p, phần tử sinh g Zp*, phần
tử y Zp*, tìm số nguyên x , x p – cho:
y = gx (mod p), (tìm x = loggy)
2.6.2 Định nghĩa tập làm việc hệ mật mã ElGamal
Tập rõ M = Zp*= {1, 2, , p-1}
Tập mã C = Zp* Zp*
Tập khố cơng khai Ke = {p} P Zp* ( với P tập phần tử sinh)
Tập khóa riêng Kd = Zp - = {1, 2, , p – 2}
2.6.3 Q trình tạo khố, mã hố, giải mã a) Tạo khoá:
Tạo số nguyên tố p lớn cho toán logarithm rời rạc Zp khó
(48)Chọn số g Zp* phần tử sinh Các giá trị p gthƣờng đƣợc sử dụng nhƣ
những tham số chung nhóm
Ngƣời sử dụng chọn ngẫu nhiên số x cho < x < p – 2, định nghĩa: K = {(p, g, x,y y = gx (mod p)}.
Công bố ba số ngun (p, g, y) làm khố cơng khai, cịn số ngun x đƣợc giữ bí mật làm khóa riêng
b) Mã hố:
Mã hóa thơng điệp M gửi cho B, ngƣời gửi A thực bƣớc nhƣ sau:
Dùng thuật toán để chia thơng điệp M nhiều khối có chiều dài cố định khối đƣợc biến đổi thành số nguyên tƣơng ứng Mi < p, (i =1,.…, k)
- Biến đổi ký tự thông điệp thành số tƣơng ứng, thí dụ theo qui tắc: Dấu cách 00, A 01, B 02, , Z 26
- Chia thông điệp số vừa biến đổi thành r nhóm số có chiều dài nhau, nhóm biểu diễn số nguyên Mi < pvới (1 i r).
Lấy khóa công khai ngƣời nhận B (p, g, y).
Chọn ngẫu nhiên số nguyên k cho 0 k (p – 2).
Mã hoá lần lƣợt số Mi với khóa cơng khai ngƣời nhận, cách
tính: Ci = Eke(Mi) = (Ci1, Ci2), với Ci1 = gk mod p Ci2 = Mi*yk mod p
Tập số {C1, C2, ,Cr}, với Ci = (Ci1, Ci2), i = 1,…, r mã gửi cho B
c) Giải mã:
Để giải mã mã {C1, C2, ,Cr }, ngƣời nhận B thực bƣớc nhƣ sau:
Giải mã lần lƣợt cặp số Ci = (Ci1, Ci2), với 1 i r
Tính: Mi = DKd(Ci1, Ci2) = Ci2 * (Ci1x) -1 mod p
Kết thu đƣợc tập số nguyên lớn { M1, M2, , Mr }. Biến đổi số
(49)Bảng 2.1: Tóm tắt bước tạo khoá, mã hoá, giải mã Hệ ElGamal
2.6.4 Tính q trình giải mã
Ta có: y = gx (mod p) (định nghĩa) C1 = gk mod p
C2 = M *yk mod p
DKd(C1, C2) = C2 * (C1x)-1 mod p
= M * yk * ([gk)-x mod p
= M * gx]k * ([gk)-x mod p
= M * gkx * g-kx mod p
= M mod p mà M < p, DKd(C1, C2) = M mod p = M
2.6.5 Đánh giá độ an toàn khả ứng dụng hệ mật mã khóa cơng khai ElGamal
2.6.5.1 Độ an tồn
Mã hoá: Mã hoá rõ M
* Chọn số ngẫu nhiên k: k p –
* Tính C = Eke(M) = (C1, C2) với C1 = gk (mod p), C2 = M*yk (mod p)
Giải mã: Giải mã mã C
M = D(C) = Dkd(C1, C2) = C2 * (C1x) -1 mod p
Tạo khoá:
* Tạo số nguyên tố p lớn, cho toán logarithm rời rạc Zp*
khó thực
* Chọn g Zp*là phần tử sinh
* Chọn ngẫu nhiên số < x < p – * Tính y = gx (mod p)
(50)p lớn (khoảng 1024-bits), cho số p – có thừa số ngun tố q lớn nhằm ngăn ngừa công kỹ thuật Pohlig-Hellman Ngồi số ngẫu nhiên k khơng đƣợc sử dụng để mã hóa nhiều thơng địêp Vì sử dụng k để mã hố cho hai thơng điệp M M’ với kết (C1, C2) (C1’, C2’) ta có
C2(C2’) M(M’)-1(mod p) Vậy biết đƣợc M M’ tính tốn đƣợc dễ
dàng
2.6.5.2 Khả thực ứng dụng
(51)CHƢƠNG : MỘT SỐ GIẢI THUẬT XỬ LÝ SỐ HỌC ÁP DỤNG ĐỂ TỐI ƢU HĨA Q TRÌNH MÃ HÓA VÀ GIẢI MÃ
CỦA HỆ MÃ RSA
3.1 PHÂN TÍCH CÁC PHÉP XỬ LÝ TOÁN HỌC TRONG HỆ MÃ RSA 3.1.1 Xử lý với số nguyên lớn
Trong trình tạo khóa ta cần phải tạo hai số nguyên tố phân biệt p q lớn, cho toán phân tích thật khó giải
Nhƣ vậy, để đảm bảo an toàn cho hệ mã RSA, giải thuật xử lý phải thực đƣợc với số lớn hàng trăm chữ số
3.1.2 Xử lý phép toán với số nguyên lớn 3.1.2.1 Phép nhân với số nguyên lớn
Để thực đƣợc phép tính tốn q trình ta cần thực đƣợc phép toán đƣợc sử dụng
Trong q trình tạo khóa, ta phải tính đƣợc N = p*q φ(N) = (p–1)*(q–1) Do chƣơng trình cần xử lý đƣợc phép nhân hai số p q với p q số nguyên tố lớn
3.1.2.2 Phép cộng – trừ số nguyên lớn
Sử dụng q trình tính tốn, việc cài đặt tƣơng đối đơn giản tổ chức đƣợc liệu lƣu trữ cho số hạng
3.1.2.3 Phép tính lũy thừa với số nguyên lớn
Q trình giải mã RSA cần tính M = Cd mod N, với số mũ bí mật d thƣờng lớn (d N) để đảm bảo độ an tồn cho liệu Vì chi phí thực giải mã hệ RSA tƣơng đƣơng với chi phí để thực phép tính lũy thừa nhanh là: 3n3 + n2
Do chƣơng trình cần phải xử lý đƣợc phép tính lũy thừa nhanh
(52)Về chất, phép lũy phép nhân liên tiếp, sử dụng tính chất đồng dƣ, ta đƣa việc xử lý phép lũy thừa phép nhân Do đó, đề tài sâu vào việc xử lý phép nhân nhanh số nguyên với số hạng số lớn
Kết thực thử nghiệm với hai chương trình:
Chƣơng trình 1: Xử lý phép toán số học với số lớn
Thực phép tính số học: Cộng, trừ, nhân, lũy thừa với số lớn Đây phần kết đề tài, mặt lý thuyết, cài đặt thành cơng phép xử lý tốn học ta hồn tồn áp dụng để xây dựng hệ mã RSA
Chƣơng trình 2: Hệ mã RSA thử nghiệm
Áp dụng kết có đƣợc việc xử lý phép toán số học để bƣớc đầu xây dựng thử nghiệm hệ mã RSA Trong điều kiện có hạn luận văn phức tạp hệ mã RSA, chƣơng trình dừng mức thực nghiệm
3.2 ỨNG DỤNG GIẢI THUẬT FAST FOURIER TRANSFORM TRONG XỬ LÝ PHÉP NHÂN SỐ LỚN
3.2.1 Giới thiệu thuật toán FFT
Cho hai số lớn X Y với kích thƣớc lớn n-1, chúng đƣợc viết dạng sau:
X = P(B), Y = Q(B)
Với B số (Thông thƣờng B=10 lũy thừa 10) P Q hai đa thức
P(z) =
n-1
j =
xj zj, Q(z) =
n-1
j =
yjzj
(53)Dựa lý thuyết này, ta áp dụng để thực việc nhân hai đa thức có bậc nhỏ n
Một đa thức có bậc nhỏ m đƣợc tạo giá trị cụ thể m điểm Do đó, để tính tích R(z)= P(z).Q(z) ta cần tính giá trị R(wk) 2n điểm phân biệt ứng với wk, điều có nghĩa ta cần tính giá trị P(wk) Q(wk) Thuật toán FFT gợi ý phù hợp với việc lựa chọn cho wk đơn vị
wk = exp
2ik 2n =
k, = exp
2i 2n
Với cách lựa chọn này, giá trị wk thỏa mãn hai thuộc tính sau:
Tập hợp giá trị (P(w0),,P(w2n-1)) (Q(w0),,Q(w2n-1)) tính tốn đƣợc thời gian O(n logn)
Từ giá trị R(wk) với i = 0,,2n-1, đa thức R(z) thu đƣợc thời
gian O(n logn)
Khi đó, hệ số thứ k kí hiệu rk R(z) thỏa mãn:
rk =
1 2n T
w k
, T(z) =
2n-1
j =
R(wj) zj,
3.2.2 Biến đổi Fourier
Cho dãy A = (a0, a1,, a2n-1), tìm dạng biến đổi Fourier dãy A
Gọi F2n(A) dạng biến đổi Fourier A, F2n(A) đƣợc biểu diễn nhƣ sau:
F2n(A) = (b0, b1, , b2n-1), bk =
2n-1
j =
ajjk (*)
Cuối ta thu đƣợc R(z) dạng biến đổi Fourier ngƣợc với hệ số R(j) đƣợc thể công thức sau:
F
(54)F
2n (A) = (b0, b1, , b2n-1), bk = 2n-1
j =
aj-jk.
3.2.3 Biến đổi Fourier nhanh
Thuật toán Fast Fourier Transform phƣơng pháp để tìm dạng biến đổi Fourier dãy số A thời gian O(n logn) Cách nhanh với phƣơng pháp truyền thống cần đến thời gian O(n2) với n lũy thừa
bk =
2n-1
j =
ajjk =
n-1
j =
a2j (2)jk + k
n-1
j =
a2j+1 (2)jk.
Nói cách khác, để tính toán hệ số bk F2n(A), ta thực bƣớc sau:
Định nghĩa dãy kích thƣớc n, A0 chứa hệ số chẵn A1 chứa hệ số lẻ
A0 = (a0, a2, , a2n-2), and A1 = (a1,a3,,a2n-1).
Tìm biến đổi Fourier
C = Fn(A0) = (c0,c1,,cn-1) and D = Fn(A1) = (d0,d1,,dn-1).
Từ suy biểu diễn Fourier B = (b0,,b2n-1) = F2n(A) theo công thức sau:
bk = ck + k dk, bn+k = ck - k dk, k < n.
3.2.3 Phép nhân số lớn áp dụng giải thuật FFT 3.2.3.1 Giải thuật
(55)Cho n lũy thừa hai số nguyên lớn X Y có n hệ số biểu diễn dạng đa thức số B
X Y có dạng biểu diễn đa thức nhƣ sau:
X =
n-1
j =
xj Bj, Y =
n-1
j =
yj Bj.
Để tính Z=XY ta thực bƣớc sau :
Tìm dạng biến đổi Fourier X* X với kích thƣớc 2n:
X* = (x0*,x1*,,x2n-1*) F2n(x0,x1,,xn-1,0,,0)
Tƣơng tự, ta tìm Y* dạng biểu diễn Fourier Y:
Y* = (y0*,y1*,,y2n-1*) F2n(y0,y1,,yn-1,0,,0).
Nhân phần tử tƣơng ứng X* với Y* lƣu kết Z*
Z* = (z0*,z1*,,z2n-1*), zi* xi* yi*.
Biến đổi Fourier ngƣợc để tìm Z từ Z*
Z = (z0,z1,,z2n-1)
1 2n
F
2n (Z
*).
Đa thức Z kết cần tìm tích XY
Z =
2n-1
i =
zi Bi
Chú ý X* dạng biến đổi Fourier dãy x0,,xn-1 với n số đƣợc thêm vào
sau x0,,xn-1 Y* dạng biến đổi Fourier dãy y0,,yn-1 với n số đƣợc
(56)3.2.3.1 Cài đặt giải thuật nhân nhanh
Thực việc nhân nhanh số lớn sử dụng thuật toán FFT áp dụng nhân nhanh hai số lớn nhằm biến đổi rời rạc Fourier thời gian O(nlogn)
Giải thuật Discrete Fourier Transform (DFT) đƣợc áp dụng sơ đồ sau để thực phép nhân:
Thêm số 0
[ a0, a1, a2, , an-1] [ b0, b1, b2, , bn-1]
DFT DFT
[ a0, a1, a2, , an-1 ,0,0, ,0] [ b0, b1, b2, , bn-1 ,0,0, ,0] [ y0, y1, y2, , y2n-1] [ z0, z1, z2, , z2n-1]
Khối thực nhân
DFT ngƣợc
[ y0z0, y1z1, , y2n-1z2n-1]
[ c0, c1, c2, , c2n-1]
Thêm số
(57)3.2.3.1 Cài đặt thuật tốn FFT DFT Mơ thuật tốn FFT:
Cho dãy A có chiều dài m, w nguyên thủy bậc m đơn vị Kết đƣợc lƣu vector V
FFT(A, m, w,V) {
if (m==1) return vector V = (a_0) else {
A_even = (a_0, a_2, , a_{m-2}) A_odd = (a_1, a_3, , a_{m-1}) V_even = FFT(A_even, m/2, w^2)
//w^2 nguyên thủy bậc m/2 đơn vị V_odd = FFT(A_odd, m/2, w^2)
for (j=0; j < m/2; ++j) {
V[j] = V_even[j] + w^j*V_odd[j] V[j+m/2] = V_even[j] - w^j*V_odd[j] }
}
Thuật toán Direct fourier transform
int DFT(int dir,int m,double *x1,double *y1) {
long i,k; double arg;
double cosarg,sinarg;
double *x2=NULL,*y2=NULL; x2 = malloc(m*sizeof(double)); y2 = malloc(m*sizeof(double)); if (x2 == NULL || y2 == NULL) return(FALSE);
for (i=0;i<m;i++) { x2[i] = 0;
y2[i] = 0;
arg = - dir * 2.0 * 3.141592654 * (double)i / (double)m; for (k=0;k<m;k++) {
cosarg = cos(k * arg); sinarg = sin(k * arg);
(58)y2[i] += (x1[k] * sinarg + y1[k] * cosarg); }
}
/* Copy the data back */ if (dir == 1) {
for (i=0;i<m;i++) {
x1[i] = x2[i] / (double)m; y1[i] = y2[i] / (double)m; }
} else {
for (i=0;i<m;i++) { x1[i] = x2[i]; y1[i] = y2[i]; } } free(x2); free(y2); return(TRUE); }
Thuật toán Fast Fourier Transform
X Y hay dãy số gồm 2mphần tử dir = thực chiều thuận FFT dir = -1 thực chiều ngƣợc FFT */
short FFT(short int dir,long m,double *x,double *y) {
long n,i,i1,j,k,i2,l,l1,l2;
double c1,c2,tx,ty,t1,t2,u1,u2,z; n = 1;
for (i=0;i<m;i++) n *= 2;
i2 = n >> 1; /* Sử dụng phép dịch phải*/ j = 0;
for (i=0;i<n-1;i++) { if (i < j) {
(59)x[j] = tx; y[j] = ty; }
k = i2;
while (k <= j) { j -= k;
k >>= 1; }
j += k; }
/* Thực FFT */ c1 = -1.0;
c2 = 0.0; l2 = 1;
for (l=0;l<m;l++) { l1 = l2;
l2 <<= 1; /* Sử dụng phép dịch trái*/ u1 = 1.0;
u2 = 0.0;
for (j=0;j<l1;j++) { for (i=j;i<n;i+=l2) { i1 = i + l1;
t1 = u1 * x[i1] - u2 * y[i1]; t2 = u1 * y[i1] + u2 * x[i1]; x[i1] = x[i] - t1;
y[i1] = y[i] - t2; x[i] += t1; y[i] += t2; }
z = u1 * c1 - u2 * c2; u2 = u1 * c2 + u2 * c1; u1 = z;
}
c2 = sqrt((1.0 - c1) / 2.0); if (dir == 1)
c2 = -c2;
c1 = sqrt((1.0 + c1) / 2.0); }
/* Thực chiều thuận FFT */ if (dir == 1) {
(60)x[i] /= n; y[i] /= n; }
}
return(TRUE); }
Cơ số B đƣợc sử dụng áp dụng cài đặt Ta chọn số máy tính biểu diễn thông tin hệ số Việc tối ƣu hóa cài đặt đƣợc thực với phép dịch bit Thuật toán thực nhanh phép dịch bit có tốc độ thực nhanh
Bằng việc sử dụng phép dịch bit, ta tối ƣu hóa việc cài đặt thuật tốn nhân nhanh so với cách cài đặt thông thƣờng
3.3 CÀI ĐẶT THỬ NGHIỆM CÁC PHÉP TOÁN VỚI SỐ LỚN
Từ kết phân tích, thuật tốn số học đƣợc cài đặt thành chƣơng trình để chạy thử nghiệm với số lớn
3.2.1 Xử lý phép cộng –trừ
Giải thuật cộng – trừ hai số nguyên lớn đƣợc thực dễ dàng hai số đƣợc tổ chức liệu để biểu diễn
Ví dụ 3.1:
Giả sử ta cần cộng hai số a, b đƣợc biểu diễn dạng chuỗi Sa Sb Giải thuật cộng hai số lớn đƣợc thực nhƣ sau:
Bước 1: Đƣa hai số a, b độ dài N (Nếu độ dài a b khác nhau)
bằng cách thêm số vào đầu số có độ dài nhỏ Ta đƣợc Sa Sb có độ dài N với N =Max[Length(Sa), Length(Sb)]
Bước 2: Gán giá trị Remem =0 (Remem biến để nhớ số hàng chục kết
(61)Bước 3: Cộng vị trí tƣơng ứng hai chuỗi Sa Sb từ trái sang phải Lƣu kết bƣớc chuỗi Sc với Sc[k]= (Sa[k] + Sb[k]+Remem) mod 10, Remem = (Sa[k] + Sb[k]) div 10 Gán Sc[N+1]=Remem
Bước 4:
Đảo ngƣợc Sc (Chỉ lấy từ vị trí đến vị trí cuối khác 0) ta thu đƣợc kết Sc (Chiều dài Sc từ đến N+1)
Giải thuật áp dụng tƣơng tự cho phép trừ, bên cạnh cách tổ chức liệu chuỗi (Thƣờng gặp hạn chế chiều dài chuỗi có giới hạn) ta tổ chức liệu sử dụng Stack
Dễ thấy độ phức tạp thuật tốn ln O(n)
(62)3.2.2 Xử lý phép nhân
Có nhiều giải thuật để thực nhân nhanh hai số lớn Ở ta sử dụng giải thuật nhân nhanh ứng dụng giải thuật Fast Fourier Transform (FFT)
Giải thuật nhân nhanh hai số nguyên lớn với N chữ số thực đƣợc với độ phức tạp O(n ln(n)ln(ln(n))) áp dụng thuật toán FFT
(63)CHƢƠNG 4: ỨNG DỤNG TRONG XÂY DỰNG HỆ MÃ RSA
4.1 XÂY DỰNG HỆ MÃ RSA THỬ NGHIỆM
Giao diện chƣơng trình:
(64)(65)Văn thu đƣợc sau mã hóa:
Kết thực trình giải mã:
4.2 ĐÁNH GIÁ VÀ NHẬN XÉT KẾT QUẢ
4.2.1 Chƣơng trình xử lý phép toán với số lớn:
Minh họa thuật toán cộng, nhân, lũy thừa nhanh với số lớn
Thể đƣợc thông số cần kiểm nghiệm nhân hai số lớn nhƣ: - Tính xác thuật tốn
- Thời gian thực (Tính đơn vị thời gian) thực với nhiều phép nhân số lớn liên tục
4.2.1 Chƣơng trình mơ hệ mã RSA:
Thực q trình thử nghiệm mã hóa với tham số
(66)CHƢƠNG V: KẾT LUẬN CÁC KẾT QUẢ ĐẠT ĐƢỢC:
Đề tài bƣớc đầu đƣa giải pháp để xử lý phép toán số học với số lớn hệ mã cơng khai dựa sở tốn học tính tốn độ an tồn hệ mã cơng khai
Các kết nghiên cứu ứng dụng bƣớc đầu thực đƣợc mục đích đề tài Bằng việc tối ƣu hóa phép xử lý tính tốn phức tạp hệ mã cơng khai minh chứng hệ mã cụ thể RSA Giải thuật đƣợc áp dụng để tối ƣu hóa phép nhân giải thuật xử lý có độ phức tạp nhỏ đƣợc biết đến thời điểm
Chƣơng trình thử nghiệm đƣợc xây dựng nhằm chứng minh tính khả thi kết nghiên cứu
Chƣơng trình hồn thiện cần có đầu tƣ nhiều mặt thời gian cơng sức Đề tài tiếp tục phát triển để đem lại ứng dụng đáp ứng đƣợc yêu cầu thực tế
HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI
Các kết đề tài đƣợc áp dụng nhiều hệ mã công khai khác tiếp tục đƣợc cải tiến để có đƣợc tốc độ thực thi tốt
Các kết đƣợc áp dụng nhiều hệ thống bảo mật, thực giao dịch mạng, thực tạo xác thực chữ ký điện tử
Bên cạnh đó, cần tối ƣu phép toàn cài đặt đƣợc thử nghiệm với ngơn ngữ lập trình mạnh
(67)TÀI LIỆU THAM KHẢO Tiếng Việt
[1] Phan Đình Diệu (1999), Lý thuyết mật mã an tồn thơng tin, Nxb Đại Học Quốc Gia Hà Nội, Hà Nội
[2] Dƣơng Anh Đức, Trần Minh Triết (2005), Mã hóa ứng dụng, Nxb Đại Học Quốc Gia TP Hồ Chí Minh, TP Hồ Chí Minh
[3] Phạm Huy Điển, Hà Huy Khối (2003), Mã hóa thơng tin Cơ sở tốn học & ứng dụng, Viện toán học Hà Nội, Hà Nội
[4] Bùi Dỗn Khanh, Nguyễn Đình Thúc (2005), Giáo trình mã hóa thơng tin Lý thuyết & ứng dụng, Nxb Lao Động Xã Hội, TP Hồ Chí Minh
[5] PGS Hồ Thuần (2000), Giáo trình Lý thuyết mật mã an toàn liệu, Đại học Bách Khoa Hà Nội, Hà Nội
Tiếng Anh
[6] Andreas V Meier (2005), “The ElGamar Cryptosystems”
[7] Deninis Luciano, Gordon Prichett (1978), From Caesar Ciphers To Public Key Cryptosystems (http://www.maa.org/pubs/Calc_articles/ma079.pdf) [8] RHUL M.Sc Advanced Cryptography, Week 7: Public Key Cryptography +
RSA, Spring 2004
[9] Dr Andreas Steffen (2000), Secure Network Communication Part II Public Key Cryptography
[10] Dr Cunsheng Ding, HKUST Hong Kong (September 2004), The ElGamal Public Key Cryptosystem
http:/www.cs.ust.hk/faculty/cding/CSIT571/SLIDES/slide09.pdf
[11] R.Rivest, MIT Laboratory for computer Science and RSA Data Security, Inc (April 1992), The MD5 Message – Digest Algorithm
http://www.faqs.org/rfcs/rfc1321.html
[12] RSA Laboratories’ FAQ, RSA Security Inc.(http://www.rsasecurity.com) [13] Ph.D William Stallings (1999), Cryptography And Internetwork Security –
Principles And Practice, PRENTICE HALL
[14] Message Authentication, Hash Function, Digital Signature schemes http://www.williamstallings.com
Schönhage Strassen