Bố cục của luận văn bao gồm phần mở đầu, phần kết luận và ba chương nội dung được tổ chức như sau: Chương 1: Giới thiệu các khái niệm về mật mã, các phương pháp mã hoá, trình bày các cơ
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Trang 2MỤC LỤC
DANH MỤC CÁC BẢNG - 7 -
DANH MỤC CÁC HÌNH VẼ - 8 -
MỞ ĐẦU - 9 -
Chương 1 - 12 -
CƠ SỞ LÝ THUYẾT MẬT MÃ - 12 -
1.1 TỔNG QUAN VỀ MẬT MÃ 12
1.1.1 Một số khái niệm cơ bản 12
1.1.2 Mô hình mật mã biểu diễn dưới dạng toán học 13
1.1.3 Các yêu cầu đối với một hệ mật mã 13
1.1.4 Phương pháp mã hoá dữ liệu 14
1.1.4.1 Mã hoá khoá đối xứng 14
1.1.4.2 Mã hoá khoá không đối xứng 16
1.1.5 Mật mã dựa trên những bài toán khó tính toán 16
1.2 LÝ THUYẾT SỐ 17
1.2.1 Các phép toán số học modul 17
1.2.2 Một số định lý và định nghĩa quan trọng 19
1.3 CÁC THUẬT TOÁN THƯỜNG DÙNG 21
1.3.1 Tìm phần tử nghịch đảo nhân 21
1.3.2 Thuật toán kiểm tra tính nguyên tố 22
1.3.3 Thuật toán luỹ thừa nhanh 24
-Chương 2 - 26 -
CÁC HỆ MẬT MÃ KHÓA CÔNG KHAI - 26 -
VÀ MÔ HÌNH CHỮ KÝ ĐIỆN TỬ - 26 -
2.1 LÝ THUYẾT CHUNG VỀ HỆ MẬT MÃ KHÓA CÔNG KHAI 26
2.1.1 Nguyên lý cơ bản của hệ mật mã khoá công khai 27
2.1.2 Hoạt động của hệ mật mã khoá công khai 27
2.1.3 Khả năng ứng dụng của hệ mật mã khoá công khai 29
2.1.4 Các yêu cầu của hệ mật mã khoá công khai 30
Trang 32.2 HỆ MẬT MÃ KHÓA CÔNG KHAI BA LÔ 31
2.2.1 Bài toán ba lô 31
2.2.2 Bài toán ba lô siêu tăng 31
2.2.3 Hệ mật mã khoá công khai ba lô MerkleHellman 32
2.2.3.1 Mô tả các quá trình tạo khoá, mã hoá, giải mã 32
2.2.3.2 Tính đúng của quá trình giải mã 35
2.2.4 Đánh giá hệ mật mã khoá công khai ba lô 37
2.2.4.1 Độ an toàn 37
2.2.4.2 Hiệu suất thực hiện và ứng dụng 38
2.3 HỆ MẬT MÃ KHÓA CÔNG KHAI ELGAMAL 38
2.3.1 Bài toán logarithm rời rạc 38
2.3.2 Định nghĩa các tập làm việc của hệ mật mã ElGamal 39
2.3.3 Mô tả các quá trình tạo khoá, mã hoá, giải mã 39
2.3.4 Tính đúng của quá trình giải mã 40
2.3.5 Đánh giá hệ mật mã công khai Elgamal 42
2.3.5.1 Độ an toàn 42
2.3.5.2 Hiệu suất thực hiện và ứng dụng 43
2.4 HỆ MẬT MÃ KHÓA CÔNG KHAI RSA 43
2.4.1 Bài toán phân tích số nguyên 43
2.4.2 Định nghĩa các tập làm việc của hệ RSA 44
2.4.3 Mô tả các quá trình tạo khoá, mã hoá và giải mã 44
2.4.5 Chi phí thực hiện các phép tính cơ bản trong mã hoá và giải mã 48
2.4.6 Một số phương pháp thám mã hệ mật mã RSA 49
2.4.7 Các thuận toán phân tích ra thừa số 52
2.4.7.1 Phân tích theo mục đích đặc biệt 52
2.4.7.2 Phân tích theo mục đích tổng quát 53
2.4.8 Đánh giá hệ mật mã khoá công khai RSA 53
2.4.8.1 Độ an toàn 53
2.4.8.2 Hiệu suất thực hiện và ứng dụng 54
2.5 HÀM BĂM VÀ CHỮ KÝ ĐIỆN TỬ 55
Trang 42.5.1 Hàm băm 55
2.5.1.1 Yêu cầu của một hàm băm 56
2.5.1.2 Hàm băm MD5 56
2.5.1.3 Hàm băm SHA1 62
2.5.2 Chữ ký số 65
2.5.2.1 Yêu cầu của một hệ thống chữ ký số 65
2.5.2.2 Lược đồ chung của chữ ký điện tử 66
2.5.2.3 Lược đồ chữ ký điện tử RSA 69
2.5.2.4 Lược đồ chữ ký điện tử ElGamal 70
2.5.2.5 Lược đồ chữ ký điện tử DSA 71
2.5.2.6 Tóm tắt và kết luận ứng dụng 73
-Chương 3 - 74 -
MỘT SỐ MÔ HÌNH TIỀN ĐIỆN TỬ - 74 -
3.1 GIỚI THIỆU VỀ TIỀN ĐIỆN TỬ 74
3.1.1 Các hình thức thanh toán trong thương mại điện tử 74
3.1.2 Tiền điện tử là gì? 75
3.1.3 Cấu trúc chung của chuyển tiền điện tử 76
3.1.4 Các đặc trưng quan trọng của tiền điện tử 77
3.1.5 Thanh toán offline và online 78
3.1.5.1 Offline 78
3.1.5.2 Online 79
3.2 MỘT SỐ THUẬT TOÁN TRONG HỆ THỐNG TIỀN ĐIỆN TỬ 79
3.2.1 Chữ ký mù 79
3.2.2 Lược đồ chữ ký Schnorr 80
3.2.3 Chia cắt và lựa chọn (Cut and Choose) 81
3.2.4 Chia sẻ bí mật 83
3.2.5 Giao thức truyền bit 83
3.2.6 Bài toán biểu diễn trong nhóm nguyên tố 84
3.3 HỆ THỐNG TIỀN ẨN DANH (ChaumFiatNaor) 85
3.3.1 Giao thức rút tiền 85
Trang 53.3.2 Giao thức thanh toán 86
3.3.3 Giao thức gửi tiền 86
3.3.4 Khả năng đáp ứng các đặc trưng 86
3.3.5 Chi phí về tiền và thời gian 88
3.3.6 Khả năng tấn công 88
3.4 HỆ THỐNG TIỀN ẨN DANH KHÔNG CÓ KHẢ NĂNG GHI NHẬN 88
3.4.1 Giao thức rút tiền 89
3.4.2 Giao thức thanh toán 93
3.4.3 Giao thức gửi tiền 93
3.4.4 Khả năng đáp ứng các đặc trưng 93
3.4.5 Khả năng tấn công 94
3.5 LƯỢC ĐỒ BRAND 94
3.5.1 Giao thức mở tài khoản 95
3.5.2 Giao thức rút tiền 96
3.5.3 Giao thức thanh toán 98
3.5.4 Giao thức gửi tiền 99
3.5.5 Khả năng đáp ứng các đặc trưng 99
3.5.6 Khả năng tấn công 101
3.5.7 Chi phí về tiền và thời gian 102
3.5.8 Khó khăn 102
3.5.9 Thuận lợi 102
3.6 TIỀN ĐIỆN TỬ CÓ THỂ CHIA NHỎ 104
3.6.1 Biểu diễn cây nhị phân 104
3.6.2 Giao thức mở tài khoản 106
3.6.3 Giao thức rút tiền 106
3.6.4 Giao thức thanh toán 107
3.6.5 Giao thức rút tiền 109
3.6.6 Khả năng đáp ứng các đặc trưng 109
3.6.7 Khả năng tấn công 112
3.6.8 Chi phí về tiền và thời gian 113
Trang 63.6.9 Nhược điểm 113
3.7 TIỀN ĐIỆN TỬ TRONG THỰC TẾ 113
3.7.1 So sánh 113
3.7.2 Một số khía cạnh cài đặt 115
3.7.3 Khả năng chấp nhận của người dùng 116
3.7.4 Thẻ thông minh 116
3.7.5 Sử dụng chữ ký điện tử trong hệ thống thẻ thông minh 116
3.8 Kết luận 117
-KẾT LUẬN - 119 -
TÀI LIỆU THAM KHẢO 121
Trang 7-DANH MỤC CÁC BẢNG
Bảng 1.1 Kết quả minh họa phép cộng với modulo n=5 18
Bảng 1.2 Kết quả minh họa phép nhân modulo n=5 18
Bảng 2.1 Qui tắc chuyển đổi ký tự 5-bits nhị phân ( - khoảng trắng) 33
Bảng 2.2 Các bước tạo khoá, mã hoá, giải mã của Hệ ba lô Merkele-Hellman 34
Bảng 2.3 Các bước toạ khoá, mã hoá, giải mã của Hệ ElGamal 40
Bảng 2.4 Các bước tạo khoá, mã hoá, giải mã của hệ RSA 45
Bảng 2.5 Bảng chi phí thời gian cần thiết để phân tích các số nguyên N 54
Bảng 3.1 Một số hệ thống tiền điện tử Off-line 79
Trang 8DANH MỤC CÁC HÌNH VẼ
Hình 1.1 Sơ đồ quá trình viết bí mật thông tin 12
Hình 1.2 Mô hình mã hóa khóa đối xứng 15
Hình 1.3 Mô hình mã hóa không đối xứng 16
Hình 2.1 Sơ đồ nguyên lý cơ bản của hệ mật mã khóa công khai 27
Hình 2.2 Sơ đồ hoạt động của hệ mật mã khóa công khai 28
Hình 2.3 Sơ đồ minh họa tính mật của hệ mật mã khóa công khai 29
Hình 2.4 Sơ đồ minh họa tính xác thực của hệ mật mã khóa công khai 29
Hình 2.5 Sơ đồ minh họa tính mật và tính xác thực của hệ mật mã khóa công khai 30
Hình 2.6 Sơ đồ minh họa hàm băm 55
Hình 2.7 Sơ đồ thực hiện tổng quát của thuật toán MD5 58
Hình 2.8 Sơ đồ xử lý một khối 512 bits thứ i 61
Hình 2.9 Sơ đồ xử lý một bước, trong 64 bước của thuật toán MD5 61
Hình 2.10 Mô tả hình tổng quát của chữ ký điện tử 66
Hình 2.11 Sơ đồ minh hoạ các bước tạo chữ ký điện tử 67
Hình 2.12 Sơ đồ minh hoạ các bước kiểm tra chữ ký điện tử 68
Hình 2.13 Mô hình chữ ký điện tử dùng quá trình mã hóa và giải mã 69
Hình 3.1 Vòng đời của đồng tiền điện tử 77
Hình 3.2 Giao thức rút tiền của lược đồ Ferguson 92
Hình 3.3 Giao thức thanh toán của lược đồ Ferguson 93
Hình 3.4 Giao thức mở tài khoản 95
Hình 3.5 Khách hàng chứng minh có sở hữu I 96
Hình 3.6 Giao thức rút tiền của lược đồ Brand 97
Hình 3.7 Giao thức thanh toán của lược đồ Brand 99
Hình 3.8 Cây nhị phân của đồng tiền $100 105
Hình 3.9 Giao thức rút tiền của hệ thống Okamoto 107
Hình 3.10 Sử dụng giá trị và trong cây nhị phân 108
Trang 9MỞ ĐẦU
Trong những thập kỷ gần đây, con người đang đứng trước sự bùng nổ thông tin
và sự phát triển mạnh mẽ của mạng toàn cầu Internet Nhu cầu trao đổi thông tin giữa các máy tính ngày càng nhiều, trong những thông tin trao đổi có những thông tin mang tính chất công khai và cũng có những thông tin có giá trị vô cùng quan trọng đối với cá nhân, tổ chức, hoặc có thể là đối với cả quốc gia Đặc biệt trong nền kinh tế toàn cầu, thương mại điện tử và kinh doanh điện tử đã trở thành một yếu
tố cần thiết của chiến lược kinh doanh và là một chất xúc tác mạnh mẽ cho sự phát triển kinh tế Việc lồng ghép công nghệ thông tin và truyền thông vào kinh doanh đã tăng cường năng suất, khuyến khích sự tham gia nhiều hơn của khách hàng và tạo điều kiện cho việc phục vụ khách hàng trên diện rộng, bên cạnh việc giảm chi phí Xét trên nhiều phương diện, thanh toán trực tuyến là nền tảng của các hệ thống thương mại điện tử Sự khác biệt cơ bản giữa thương mại điện tử với các ứng dụng khác cung cấp trên Internet chính là nhờ khả năng thanh toán trực tuyến này Do vậy, việc phát triển thanh toán trực tuyến sẽ hoàn thiện hóa thương mại điện tử, để thương mại điện tử được theo đúng nghĩa của nó Một khi thanh toán trong thương mại điện tử an toàn, tiện lợi, việc phát triển thương mại điện tử trên toàn cầu là một điều tất yếu với dân số đông đảo và không ngừng tăng của mạng Internet
Thanh toán trong thương mại điện tử với ưu điểm đẩy mạnh quá trình lưu thông tiền tệ và hàng hóa Thanh toán điện tử giúp thực hiện thanh toán nhanh, an toàn, đảm bảo quyền lợi cho các bên tham gia thanh toán, hạn chế rủi ro so với thanh toán bằng tiền mặt, mở rộng thanh toán không dùng tiền mặt, tạo lập thói quen mới trong dân chúng về thanh toán hiện đại
Tiến cao hơn một bước, thanh toán điện tử tạo ra một loại tiền mới, tiền số hóa, không chỉ thỏa mãn các tài khoản tại ngân hàng mà hoàn toàn có thể dùng để mua hàng hóa thông thường Quá trình giao dịch được đơn giản và nhanh chóng, chi phí giao dịch giảm bớt đáng kể và giao dịch sẽ trở nên an toàn hơn Tiền số hóa không
Trang 10chiếm một không gian hữu hình nào mà có thể chuyển một nửa vòng trái đất chỉ trong chớp mắt bằng thời gian của ánh sáng Đây sẽ là một cơ cấu tiền tệ mới, một mạng tài chính hiện đại gắn liền với mạng Internet Vì vậy, vấn đề đảm bảo an toàn trong giao dịch điện tử nhất là vấn đề thanh toán điện tử là rất quan trọng Công nghệ thông tin được phát triển một cách nhanh chóng thì các nguy cơ xâm nhập thông tin dữ liệu vào các hệ thống truyền tin, các mạng dữ liệu ngày càng gia tăng Bảo vệ an toàn thông tin dữ liệu là một chủ đề khó đánh giá được như thế nào là tối
ưu Vấn đề dẫn đến sự lựa chọn hoặc căn cứ vào tiêu chí tham số nào để đánh giá,
ví dụ độ bảo mật, tính hiệu quả, tính kinh tế hoặc độ phức tạp của hệ thống…Trước những yêu cầu cấp thiết đó việc nghiên cứu ứng dụng giải pháp mật mã là cách tốt nhất có thể đáp ứng đầy đủ những vấn đề đặt ra Hiểu một cách sơ lược về giải pháp này là: người gửi phải sử dụng một kỹ thuật mã hoá để xáo trộn nội dung thông tin nhằm đảm bảo tính an toàn tại nơi lưu trữ cũng như khi truyền đi trên mạng Nếu thông tin bị đánh cắp hoặc bị chặn trên đường truyền, muốn hiểu được hacker phải tốn một thời gian rất lớn (có thể mất hàng trăm năm) cho việc giải mã Tuy nhiên đối với người nhận hợp pháp thì công việc giải mã và xác thực thông tin lại trở nên
dễ dàng Vì giữa người gửi và người nhận luôn có một sự thống nhất về các thuật toán, các tham số cần thiết cho việc mã hoá giải mã và xác thực thông tin
Trong quá trình học tập, nghiên cứu, hoạt động thực tiễn cùng với sự gợi ý của thầy PGS.TS Đoàn Văn Ban tôi chọn đề tài cho luận văn tốt nghiệp Cao học ngành
Công nghệ thông tin: “ Hệ mật mã khoá công khai ứng dụng bảo mật thông tin
trong thương mại điện tử”
Bố cục của luận văn bao gồm phần mở đầu, phần kết luận và ba chương nội dung được tổ chức như sau:
Chương 1: Giới thiệu các khái niệm về mật mã, các phương pháp mã hoá, trình bày các cơ sở toán học cơ bản và các thuật toán quan trọng thường được sử dụng trong các hệ mật mã khoá công khai
Chương 2: Trình bày lý thuyết chung về hệ mật mã khóa công khai và một số các hệ mật mã khoá công khai cụ thể như: hệ mật mã khoá công khai Ba lô, hệ mật
Trang 11mã khoá công khai ELGAMAL, hệ mật mã khoá công khai RSA, lý thuyết về hàm băm và chữ ký số
Chương 3: Giới thiệu về tiền điện tử Trình bầy về một số hệ thống tiền điện tử
cụ thể như: Hệ thống tiền ẩn danh (Chaum – Fiat – Naor), Hệ thống tiền ẩn danh không có khả năng ghi nhận, lược đồ Brand, tiền điện tử có thể chia nhỏ
Luận văn đã hệ thống được một cơ sở lý thuyết cơ bản, giúp cho việc nghiên cứu, tìm hiểu về hệ mã khoá công khai và mô hình chữ ký điện tử Đồng thời tìm hiểu một số mô hình tiền điện tử, khai thác những khía cạnh cài đặt, một số tồn tại
và quan điểm của người dùng đối với tiền điện tử Từ đó có thể mở rộng và hoàn thiện thêm một số chức năng để đưa vào ứng dụng thực tiễn
Trang 12Chương 1
CƠ SỞ LÝ THUYẾT MẬT MÃ 1.1 TỔNG QUAN VỀ MẬT MÃ
1.1.1 Một số khái niệm cơ bản
Mật mã (Criptography): là một khoa học nghiên cứu cách viết bí mật Có thể
một cách khái quát, đó là phương thức đảm bảo sự bí mật thông tin tại nơi lưu trữ cũng như khi chuyền đi trên mạng Cho dù sự trao đổi này diễn ra trên môi trường truyền thông không an toàn
Mã hoá (Encription): Là quá trình chuyển đổi thông tin có thể chuyển đổi thông
tin từ dạng có thể hiểu được, sang dạng không hiểu được để đảm bảo tính bí mật thông tin
Giải mã (Decryption): là quá trình khôi phục lại thông tin ban đầu, từ dạng
thông tin đã được mã hoá
Bản rõ (Plaintext): lưu thông tin chưa mã hoá (có thể đọc được)
Bản mã (Ciphertext): lưu thông tin đã mã hoá (không thể đọc được)
Khoá mã (Key): là dãy các ký tự và số dùng làm biến cho các quá trình mã hoá
hay giải mã thông tin
Thám mã (Cryptanalysis): là những người phân tích các bản mã
Bộ lập mã (Encipher)
Trang 131.1.2 Mô hình mật mã biểu diễn dưới dạng toán học
Định nghĩa 1.1: Hệ thống mật mã, là một bộ bao gồm 5 thành phần (P, C, K, E, D) thoả mãn các điều kiện sau [1]:
P là tập hợp hữu hạn các bản rõ (plaintext) hoặc thông điệp (message) có thể
C là tập hợp hữu hạn các bản mã (ciphertext) có thể
K là tập hợp hữu hạn các khoá có thể
Với mỗi khoá k K, có một phép biến đổi mã hóa Ek E và một phép biến đổi giải mã tương ứng Dk D Trong đó Ek: P C và Dk: C P là các hàm thoả mãn Dk(Ek(x)) = x với bất kỳ thông điệp x P
Ở đây mỗi phép biến đổi mã hoá Ek được xác đinh bởi thuật toán mã hoá E chung cho mọi phép biến đổi và một khoá k riêng để phân biệt với các phép biến đổi khác tương tự, mỗi phép biến đổi giả mã Dk được xác định bởi thuật toán giải mã D chung và một khoá k phân biệt Yêu cầu đặt ra cho quá trình giải mã là: Ek (x1) Ek(x2) nếu x1 x2 Mặt khác nếu Ek(x1) = Ek(x2) mà x1 x2 là giải mã không duy nhất,
và người nhận sẽ không thể quyết định thông điệp giải mã được là x1 hay x2
1.1.3 Các yêu cầu đối với một hệ mật mã
Dễ tính toán: các phép biến đổi mã hoá và giải mã phải hiệu quả đối với mọi khoá trong không gian khoá
Sự an toàn: phụ thuộc vào tính mật của các khoá k K, không phụ thuộc vào tính phức tạp và tính mật của các thuật toán mã hoá E hay giải mã D
Dễ sử dụng
Đối với hệ mật thì tính mật và tính xác thực phải được bảo đảm
Yêu cầu của tính mật:
Đối với những người thám mã, thì công việc tính toán là không thể thực hiện được, để xác định một cách có hệ thống phép biến đổi giải mã Dk từ bản mã
C, ngay cả khi biết bản rõ M tương ứng cũng không thể giải mã C
Đối với những người thám mã, thì công việc tính toán là không thể thực hiện được, để xác định một cách có hệ thống bản mã M từ bản mã chặn được C nếu không có phép biến đổi giải mã Dk
Trang 14 Yêu cầu cho tính xác thực:
Người thám mã không thể thay thế bản mã sang C‟ thay cho bản mã C mà không bị phát hiện
Đối với người thám mã việc tính toán là không làm được, để xác định một cách hệ thống phép biến đổi lập mã Ek khi cho phép C, ngay cả khi đã biết bản rõ M (nghĩa là, không thể mã hoá bản rõ M‟ để thay thế bản mã giả C‟
= Ek(M‟) cho bản mã thật C)
Đối với những người thám mã thì về mặt tính toán là không nổi để tìm một cách hệ thống bản mã C‟ sao cho Dk(C‟) là bản rõ hợp thức trong tập P
1.1.4 Phương pháp mã hoá dữ liệu
Có hai phương pháp mã hoá khoá, đó là phương pháp mã hoá khoá đối xứng và phương pháp mã hoá khoá không đối xứng Những hệ mật mã dựa trên phương pháp mã hoá khoá đối xứng gọi là hệ mật mã khoá đối xứng (Symmetric key Cryptography) ngược lại, các hệ mật mã dựa trên phương pháp mã hoá không đối xứng, gọi là hệ mật mã khoá không đối xứng (Asymmetric key Cryptography), hay
hệ mật mã khoá công khai (Public key Cryptography)
1.1.4.1 Mã hoá khoá đối xứng
Trong phương pháp mã hoá khoá đối xứng [4], người gửi và người nhận sẽ dùng chung một khoá k duy nhất cho cả hai quá trình mã hoá và giải mã dữ liệu (hình 1.2) Trước khi thực hiện việc trao đổi thông tin bí mật thông qua môi trường mạng, hai bên gửi và nhận phải có khoá trước (bên gửi chuyển khoá bí mật cho bên nhận), đồng thời phải thống nhất các thuật toán dùng cho quá trình mã hoá và giải Hiện tại
có nhiều hệ mật mã được xây dựng trên phương pháp mã hóa khóa đối xứng như: DES, 3DES-Triple, RC2-Rivest Cipher 2…
Trang 15
Ƣu điểm:
Tốc độ thực hiện rất nhanh do quá trình mã hoá và giải mã đều sử dụng các phép toán trên dãy bits nhị phân đơn giản, như: AND, OR, XOR, SHIFT (phép dịch), ROTATE (phép quay), (phép nối),… gần với lệnh mã máy
Dễ dàng thực hiện trên các ứng dụng cho cả phần cứng lẫn phần mềm Do tính chất đơn giản của các phép toán trên dãy bits nhị phân
Chiều dài của bản mã (Ciphertext) bằng với chiều dài bản rõ (Plaintext) vì không sinh thêm những thông tin phụ trong quá trình mã hoá và giải mã
Nhƣợc điểm:
Nhược điểm chính của các hệ là khoá bí mật được chuyền đi trên môi trường mạng Cho nên vẫn tồn tại nguy cơ khoá bí mật có thể bị đánh cắp Vì vậy đòi hỏi công việc quản lý khoá là rất phức tạp, phải dùng thêm các cơ chế
và giải thuật khác trong việc quản lý, trao đổi khóa giữa các đối tác
Không có tính chất xác định được chủ nhân của thông tin đã mã hoá, cũng như không có tính chất không thể phủ nhận (Non-Repudiation) thông tin
Do đó khó có thể ứng dụng vào các nhu cầu cần xác định nguồn gốc của thông tin như chữ kí điện tử (Digital signature)…
Đối với một hệ thống lớn có nhiều đối tác giao tiếp với nhau, tạo nên sự khó khăn trong việc quản lý khoá vì một người sử dụng phải giữ quá nhiều khoá bí mật của các đối tác muốn trao đổi thông tin với họ
Trang 16 Ứng dụng
Mã hoá dữ liệu đường truyền (tranmission encryption): cũng do những ưu thế về tính bảo mật, tốc độ và thực hiện đơn giản
Mã hoá dữ liệu lưu trữ (Data storage encryption): cũng do những ưu thế trên,
mà hệ này được dùng phổ biến trong việc mã hoá cơ sở dữ liệu, mã hoá hệ thống file an toàn (secure file system),…
Nhận xét: Do những nhược điểm trên nên luận văn sẽ không đi sâu nghiên cứu chi
tiết mật mã dựa theo phương pháp mã hoá khoá đối xứng Vì phương pháp mã hoá này rất khó đáp ứng được mục tiêu của đề tài đã đặt ra
1.1.4.2 Mã hoá khoá không đối xứng
Phương pháp mã hoá không đối xứng [1], [4], [6] đã giải quyết được những nhược điểm của phương pháp mã hoá khoá đối xứng Đây chính là phương pháp mã hoá mà luận văn này sẽ đi sâu nghiên cứu chi tiết để giải quyết vấn đề đã đặt ra Trong phương pháp này sử dụng hai khoá có vai trò trái ngược nhau bao gồm một khoá công khai (public key), được công bố rộng dãi dùng cho quá trình mã hoá Khoá riêng (private key) tương xứng còn lại được giữ bí mật của từng người, dùng cho quá trình giải mã (hình 1.3) Tuy nhiên, hai khóa này có quan hệ toán học với nhau, từ khoá riêng có thể tính toán để đưa ra được khoá công khai nhưng điều ngược lại về mặt tính toán là không thể làm nổi với điều kiện chiều dài khoá đủ lớn
1.1.5 Mật mã dựa trên những bài toán khó tính toán
Trong bài báo đưa ra năm 1976, Diffie và Hellman gợi ý áp dụng độ phức tạp
tính toán để thiết kế các bài toán mã hoá Các tác giả này đã lưu ý những bài toán
Trang 17NP-đầy đủ có thể là những ứng cử viên tuyệt vời để thiết kế các hệ mật mã khoá công khai Vì chúng không thể giải được trong thời gian đa thức với bất kỳ kỹ thuật nào đã biết (những bài toán có độ phức tạp tính toán lớn hơn bài toán NP không tích hợp, vì các phép biến đổi mã hoá và giải mã cần phải có tốc độ thực hiện nhanh)
Để xây dựng những hệ mật mã như vậy, một thông tin “cửa sập” bí mật được chèn thêm vào bài toán khó bao gồm việc nghịch đảo một hàm một chiều
Định nghĩa 1.2: Cho các tập hữu hạn S, T Hàm : S T được gọi là hàm một
chiều (a one-way function) nếu như:
Hàm (x) dễ tính toán, nghĩa là x S, có thể dễ dàng tính y = (x)
Hàm ngược -1 (y) khó tính, nghĩa là cho y T thì khó tính được x = -1
(y)
Định nghĩa 1.3: Hàm một chiều cửa sập (a trapdoor one-way function) là hàm một
chiều f được thêm vào thông tin cửa sập (trapdoor information) để có thể dễ dàng tính x khi biết bất kỳ y T thoả mãn x = -1
(y)
Ví dụ hàm một chiều:
: pq N là một hàm một chiều với p, q là các số nguyên tố lớn Thực vậy
ta có thể dễ thực hiện phép nhân N = p q (độ phức tạp đa thức), nhưng khi tính -1
lại là bài toán cực khó (đây chính là bài toán phân tích ra thừa số nguyên tố có tốc độ phức tạp dạng mũ)
k, N :x xk mod N là hàm một chiều, với N = p q, p và q là các số nguyên
tố lớn, k k‟ 1 (mod (N)) Thực vậy phép tính xk mod N có độ phức tạp
đa thức Nhưng khi tính -1 lại cực khó Tuy nhiên nếu biết k‟ thì dễ dàng tính được x khi biết xk từ công thức (xk)k‟ = x
Trang 18âm) được định nghĩa như sau: với bất kỳ số x Zn y Zn : (x + y) mod n = 0
Ghi chú: Tương tự như phép cộng, phép nhân modulo n cũng có phần tử nghịch
đảo được định nghĩa như sau: cho a Zn nếu x Zn sao cho: a * x 1 (mod n) thì x gọi là phần tử nghịch đảo nhân của a mod n, ký hiệu x = a-1
mod n Ví dụ như
2 là phần tử nghịch đảo của 3 mod 5 vì ta có (3 * 2) mod 5 = 1
c = (a * b) mod n = [(a mod n) * (b mod n)] mod n
Trang 191.2.2 Một số định lý và định nghĩa quan trọng
Ở phần này sẽ trình bày một số các định lý quan trọng [1], được áp dụng để chứng minh tính đúng của các thuật toán trong các thế hệ mật khoá công khai
Hàm -Euler (Euler’s totient function)
Định nghĩa 1.4: Cho n là số nguyên dương, hàm -Euler của n, ký hiệu (n), là
số các số nguyên dương nhỏ hơn hoặc bằng n và nguyên tố cùng nhau với n
Công thức tính tổng quát hàm -Euler nhƣ sau:
Giả sử n được phân tích thành các số nguyên tố: n = piei, với pi là các số nguyên
Định nghĩa 1.5: Một trường hữu hạn là một trường F chứa một số hữu hạn
các phần tử Bậc của nhóm F là số các phần tử tồn tại trong F
Định nghĩa 1.6: Cho Fq là một trường hữu hạn và một phần tử g Fq, định nghĩa bậc (order) của g là số nguyên dương m nhỏ nhất sao cho: gm 1 (mod q), và ký hiệu là: Ordq(g) = m
Định nghĩa 1.7: Một phần tử sinh g của trường hữu hạn Fq, nếu g có bậc
q – 1:
Phát biểu tương đương: g là phần tử sinh (chính), nếu luỹ thừa của g có thể sinh
ra tất cả các phần tử khác không của Fq* Nghĩa là: gx : 0 ≤ x ≤ q - 2 = Fq*
a (p - 1) 1 (mod p)
a(n) 1 (mod n)
Trang 20 Định lý 1.3: Mỗi trường hữu hạn đều có phần tử sinh Nếu g là một phần tử
sinh của Fq* thì gj
cũng là phần tử sinh nếu và chỉ nếu gcd(j, q – 1) = 1 Vậy
có tổng cộng (q–1) phần tử sinh khác nhau của Fq* (gcd: greatest common divisor)
Định nghĩa 1.8: aZn* được gọi là thặng dư bậc hai theo modul n nếu tồn tại
xZn* sao cho x2 a mod n Tập tất cả các thặng dư bậc hai modul n được
ký hiệu là Qn
Định nghĩa 1.9: Cho aQn Nếu x Zn* thỏa mãn x2 a mod n thì x được gọi là căn bậc hai modul n
Định nghĩa 1.10: Cho p là số nguyên tố và a là số nguyên Ký hiệu Jacobi
(a/p) bằng 1 nếu a là thặng dư bậc hai của p, ngược lại thì bằng -1
Định nghĩa 1.11: Nếu n không phải số nguyên tố thì ký hiệu Jacobi được
định nghĩa như sau:
n a
a n a
p a p
a p
p a n
Định nghĩa 1.13: N=pq được gọi là số Williams nếu p=3 mod 8 và q=3 mod
8 Số Williams là một dạng đặc biệt của số Blum nên có tất cả những đặc trưng của số Blum
Chú ý: (Số lượng căn bậc hai)
(i) Mỗi thặng dư bậc hai có hai căn bậc hai nếu n là số nguyên tố Một số nhỏ hơn (n/2) và một số lớn hơn (n/2)
(ii) Nếu n không phải số nguyên tố thì mỗi thặng dư bậc hai có bốn căn bậc hai Bốn số này thuộc bốn tập khác nhau:
1 Số thứ nhất có giá trị nằm giữa 1 và pq và có (a/p)=1, (a/q)=1
Trang 21(i) Tính kết hợp: a(bc)=(ab)c với mọi a, b, c G
(ii) Có môt phần tử 1G được gọi là phần tử đơn vị sao cho:
a1=1a=a với mọi aG
(iii) Với mỗi aG, tồn tại một phần tử a-1G được gọi là phần tử nghịch đảo của
a sao cho: aa-1=a-1a=1
1.3 CÁC THUẬT TOÁN THƯỜNG DÙNG
1.3.1 Tìm phần tử nghịch đảo nhân
Thuật toán tìm phần tử nghịch đảo [1] còn được gọi là thuật toán Euclide mở rộng Cho phép tính phần tử nghịch đảo của một số theo modulo, được sử dụng hầu hết trong tất cả các hệ mật mã khóa công khai ở các quá trình tạo khóa và giải mã
Thuật toán 1.2: Tìm phần tử nghịch đảo của một số nguyên theo modulo n
Trang 221.3.2 Thuật toán kiểm tra tính nguyên tố
Các thuật toán kiểm tra tính nguyên tố của một số nguyên bằng xác suất Monte Carlo [2], [4] như thuật toán Miller-Rabin, Soloway-Strassen, đều có tốc độ thực
hiện khá nhanh (khoảng 0(n 2 ), với n là số bits của số cần kiểm tra) Tuy nhiên,
những thuật toán này không đưa ra một kết luận chính xác về tính nguyên tố của con số, mà luôn có một xác suất sai sót Như vậy để có một sai số cực nhỏ chấp nhận được, ta phải thực hiện thuật toán kiểm tra nhiều lần Một câu hỏi khác đặt ra
là với khoảng bao nhiêu số nguyên dương ngẫu nhiên (có chiều dài xác định) thì có thể tìm ra được một số nguyên tố? Lý thuyết số nguyên tố đã chứng minh được số
các số nguyên tố nhỏ hơn N là: N/ln(N) Như vậy, nếu p là một số nguyên ngẫu nhiên thì xác suất để p trở thành số nguyên tố là: 1/ln(p) Giả sử nếu chọn p là số
nguyên tố có chiều dài 512-bits, thì xác suất để số p nguyên tố là 1/354 Mặt khác,
do chúng ta chỉ quan tâm đến những số lẻ, nên xác suất để p nguyên tố là 2/354 = 1/177 Nghĩa là, trung bình khoảng 177 số lẻ ngẫu nhiên sẽ có 1 số nguyên tố
Người ta đã cũng chứng minh được, thuật toán Miller-Rabin dùng kiểm tra tính nguyên tố của một số nguyên dương lẻ với sai số nhiều nhất là1/4 Do đó, nếu thực hiện thuật toán này t lần thì sai số nhiều nhất là 1/4t, trong thực hành nên chọn số t >
20 để đảm bảo chắc chắn tính nguyên tố cho kiểm tra Thuật toán này được sử dụng trong quá trình tạo khoá ở hệ mật mã RSA và hệ mật mã ELGamal mà luận văn này nghiên cứu trong chương hai
Trang 23Thuật toán 1.3: (thuật toán Miller-Rabin) kiểm tra tính nguyên tố của một số
Unit Testprime
Input n > 2
Output [True, False] (True: n là sốnguyên tố, False: n là hợp số)
1 Đặt n = 2km + 1; (với m lẻ, dùng thuật toán 2km);
8 Return True; /*n là số nguyên tố */
Thuật toán 1.4: Kiểm tra tính nguyên tố của một số với t lần thực hiện (t > 20)
Unit Testprime_t
Input n > 2 Output True, False (True: n là số nguyên tố, False: n là hợp số)
1 Đặt n = 2km + 1; (sử dụng thuật toán 2km ở trên)
2 For (j = 1; j ≤ t; j++) Chọn số ngẫu nhiên a 2,…, n - 1
Trang 24i = i + 1;
If (b <> (n – 1)) Return False; /* n là hợp số*/
3 Return True; /* n là số nguyên tố */
1.3.3 Thuật toán luỹ thừa nhanh
Thuật toán luỹ thừa nhanh modulo N (y = xe mod N) [5] được sử dụng rất nhiều trong các thế hệ mật mã khoá công khai Tốc độ thực hiện của các quá trình mã hoá
và giải mã của hệ mật mã phụ thuộc rất nhiều vào phép tính này với toán hạng là những số nguyên cực lớn Vì vậy đòi hỏi cần phải có một thuật toán thực hiện phép tính luỹ thừa modulo càng nhanh càng tốt Trong phần này sẽ trình bầy chi tiết về thuật toán và chi phí thực hiện của thuật toán thường được sử dụng nhất hiện nay
gọi là: “Thuật toán luỹ thừa nhanh”
Thuật toán này, dựa vào biểu diễn nhị phân của số mũ để thực hiện phép tính luỹ thừa modulo của một số nguyên, chỉ với một vài phép tính nhân và phép tính bình phương Thuật toán có các tham số đầu vào là: số M, số N và biểu diễn nhị phân của số mũ: e = e(k – 1)e(k – 2) e(1)e(0) =
1
0 *2
k i
i i
e
M =
1 0
k i
i i
e
M 2 mod N
Đầu tiên gán biến C = 1, sau đó duyệt từng giá trị bít, thông qua biểu diễn nhị phân của số mũ, bắt đầu từ phía bên trái sang phía bên phải Tại mỗi vòng lặp thứ I, thực hiện một phép tính bình phương của kết quả hiện tại (Ci = Ci – 1 * Ci – 1 mod N) Nếu giá trị bít tại vị trí đang xét ei = 1 thì kết quả vừa tính được nhân với M modulo
N, (C = C * Mod N) Khi kết thúc lần lặp thứ k ta có kết quả là: C = M e
mod N
Thuật toán 1.5: Tính luỹ thừa nhanh của một số theo modulo N
Unit Fastexp
Input M, e, N Output C (với C = Me mod N)
1 Biểudễn nhị phân số mũ e = (ek – 1, ek – 2,…, e0)2;
2 C = 1;
Trang 25 Chi phí thực hiện thuật toán:
Mỗi lần lặp thuật toán đều thực hiện một phép tính bình phương (C = C * C mod N), ngoại trừ bước đầu tiên khi C = 1 và một phép nhân (C = C * M mod N) với xác suất xảy ra khoảng 1
/2 Như vậy với k lần lặp (k là số bits biểu diễn nhị phân của số
mũ e) Thuật toán thực hiện tất cả khoảng (3k/2 – 1) phép nhân modulo N, mà chi phí thời gian để thực hiện một phép nhân modulo N (có chiều dài n-bits) là: 2n2+ 2n Như vậy chi phí tổng cộng của thuật toán là (3k – 2) * (n2 + n), nếu số mũ e có kích cỡ gần bằng với số N (k n, số bít của số mũ xấp xỉ với số bít của số n) Thì chi phí thời gian tổng cộng của thuật toán là :3n3 + n2 + 0(n2)
Trang 26Chương 2 CÁC HỆ MẬT MÃ KHÓA CÔNG KHAI
VÀ MÔ HÌNH CHỮ KÝ ĐIỆN TỬ 2.1 LÝ THUYẾT CHUNG VỀ HỆ MẬT MÃ KHÓA CÔNG KHAI
Vào năm 1976, một hệ thống có kiểu mã hoá mới gọi là hệ thống mật mã khoá
công khai được đưa ra bởi các nhà khoa học Whitfield Diffie, Martin Hellman và Ralph Merkle [1], [7] Nhưng trong khi hai nhà nghiên cứu đầu tiên đã công bố
những phát minh của mình vào thời điểm đó và nhận được nhiều sự quan tâm của đồng nghiệp, thì Ralph Merkle lại thiếu may mắn hơn Chính vì vậy mà những nghiên cứu của ông mãi đến năm 1978 mới được công bố Ngày nay người ta đều công nhận rằng tất cả các nhà khoa học trên là cha đẻ của hệ mật mã khoá công khai
Độ 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ã hoá, mà nó dựa vào một khám phá mới vô cùng quan trọng ngành khoa học máy tính, gọi là lý thuyết độ phức tạp tính toán lý thuyết độ phức tạp chủ yếu đề cập đến sự phân tích các thuật toán và đặc biệt là số các bước tính toán cần thiết để hoàn thành thuật toán Từ đó xác định độ an toàn của bất kì hệ mật
mã khoá công khai nào, đều được đo bằng tổng thời gian cần dùng cho một máy tính có thể bẻ gẫy hệ mật mã đó
Trong hệ mật mã khoá công khai, khóa mã hoá ke (khoá công khai) và khoá giải
mã kd (khoá riêng) là hoàn toàn khác nhau Người sử dụng có thể công bố phương pháp mã hoá Eke của mình mà không sợ bị tiết lộ thông tin Điều này có nghĩa rằng, người thám mã cũng biết được Eke do đó về mặt lý thuyết thì họ có thể biết được phương pháp giải mã Dkd bởi vì hai quá trình này là nghịch đảo lẫn nhau Tuy nhiên, trên thực tế người thám mã rất khó tìm được Dkd từ Eke Vì vậy, việc mã hoá thông tin (bản rõ) bằng phương pháp mã hoá Eke vẫn giữ được độ an toàn cho những thông tin bí mật
Trang 272.1.1 Nguyên lý cơ bản của hệ mật mã khoá công khai
Hệ mật mã khoá công khai được xây dựng dựa trên ba quan điểm [7] sau:
Hệ mật mã khoá công khai dựa trên quan điểm hàm một chiều (one-way function) và khoá công khai, để biến đổi một bản rõ thành bản mã với thời gian tính toán hợp lý Nhưng nếu muốn hàm tính ngược (inverse funcition) thì phải mất nhiều thời gian, đến mức không thực hiện nổi Vì vậy, các hacker khó có thể tính toán để thu được bản rõ từ bản mã chặn được
Một quan điểm khác dùng trong hệ mật mã hoá công khai đó là thông tin “ cửa sập” (trap door) mà hàm một chiều phải có Thông tin bí mật này (khoá riêng) chỉ có thể được đưa vào bởi người sở hữu cặp khoá Khi có được thông tin “ cửa sập” thì công việc giải mã sẽ trở nên dễ dàng
Hầu hết các hệ mật mã khoá công khai được xây dựng dựa trên những bài toán khó đã viết như: hệ Ba lô dựa trên bài toán tổng quan, hệ EIGamal dựa trên bài toán logrithm rời rạc trong trường hữu hạn Zp và hệ RSA dựa trên bài toán phân tích một số nguyên lớn ra các thừa số nguyên tố
2.1.2 Hoạt động của hệ mật mã khoá công khai
Trong hệ thống mã hoá khoá công khai [4], mỗi người sử dụng đều tạo riêng cho mình một cặp khoá Trong đó, một khoá gọi là khoá công khai (public key) cùng với thuật toán mã hoá E, được công bố rộng rãi tại thư mục dùng chung cho mọi
Trang 28người sử dụng (giống như số điện thoại) Khoá còn lại gọi là khoá riêng (private key) và thuật toán giải mã D được giữ bí mật bởi từng người sử dụng
Giả sử người A muốn gửi thông điệp M đến người B (hình 2.2) Người A sẽ tìm khoá công khai keB của người B trong thư mục dùng chung, và tính C = EkeB (M) rồi gửi bản mã C cho người nhận B Khi nhận được bản mã C, người B sẽ giải mã dựa vào khoá riêng kdB của mình để tính M = DkdB (C) Trong quá trình trao đổi, mặc dù người thám mã có thể chặn được bản mã C, và biết khoá lập mã keB, nhưng
để giải mã thông điệp, họ phải đối mặt với bài toán rất khó đến mức không thể giải nổi Như vậy hệ mã hoá khoá công khai đã loại bỏ được sự cần thiết phải có kỹ thuật quản lý và phân phối khoá phức tạp như ở hệ thống mã hoá khoá đối xứng Do tất cả các thành viên đều có thể dùng khoá công khai của thành viên khác để mã hóa thông tin gửi cho họ Nhưng chỉ có duy nhất một thành viên có khoá riêng tương ứng, mới giải mã được thông điệp Đây chính là yếu tố rất quan trọng cho sự xây dựng thành công các hệ thống tiền điện tử mà luận văn này quan tâm
Thám mã
Giải mã
B Thông điệp
Key pulic
Mã hóa Thông điệp
A
Hình 2.2 Sơ đồ hoạt động của hệ mật mã khoá công khai Hình 2.2 Sơ đồ hoạt động của hệ mật mã khoá côngkhai
Khoá B công khai
Trang 292.1.3 Khả năng ứng dụng của hệ mật mã khoá công khai
Tuỳ thuộc vào những lĩnh vực ứng dụng cụ thể mà người gửi sử dụng khoá bí mật của mình, khoá công khai của người nhận hoặc cả hai để hình thành một số các
mô hình ứng dụng phù hợp như sau [4], [8]:
Mã hoá và giải mã: Người gửi A thực hiện mã hoá thông điệp M bằng khoá
công khai keB của người nhận B: C = Ekeb (M) Còn người nhận giải mã bằng khoá riêng kdB của mình: M = DkdB(C) Như vậy chỉ có duy nhất người
B mới giải mã được thông điệp, điều này gọi là tính mật của hệ
Chữ ký điện tử: Người gửi A thực hiện mã hoá (hay ký) một thông điệp M
bằng khóa riêng kdA: C = EkdA(M) Người nhận B giải mã bằng khóa công khai keA của người gửi A: M = DkeA(C) Như vậy chỉ có thứ duy nhất A là người có khóa riêng để mã hóa, cho nên thông điệp nhận được là của A,
điều này gọi là tính xác thực của hệ
Trang 30 Chuyển đổi khóa: Người gửi A thực hiện mã hóa thông điệp hai lần, lần thứ
nhất sử dụng khóa bí mật kdA của mình EkdA(M), lần thứ hai sử dụng khóa công khai keB của người nhận B: EkeB(EkdA(M)) Khi nhận bản mã, người nhận B cũng thực hiện giải mã hai lần, đầu tiên dùng khóa riêng kdB của mình DkdB(EkeB[EkdA(M)]), sau đó dùng khóa công khai keA của người gửi A: DkeA{DkdB(EkeB[EkdA(M)])} = M Như vậy chỉ người gửi mới có khóa riêng để mã hóa và chỉ người nhận mới có khóa riêng để giải mã, đây chính
là tính xác thực và tính mật của hệ
2.1.4 Các yêu cầu của hệ mật mã khoá công khai
Cộng việc tính toán thì dễ dàng đối với các thành viên khi muốn tạo một cặp khoá (bao gồm khoá công khai ke và khoá riêng kd)
Công việc tính toán thì dễ dàng cho người gửi, khi biết khoá công khai và thông điệp M cần hoá thành một văn bản mã tương ứng C = EKe(M)
Công việc tính toán thì dễ cho người nhận, sử dụng khóa riêng để giải mã bản mã C, khôi phục lại đoạn tin ban đầu: M = DKdB(C) = DkdB [EKeB(C)]
Tính toán không tính nổi đối với người thám mã, khi biết được khoá công khai ke, muốn xác định khoá bí mật kd
Tính toán không tính nổi, đối với các thám mã khi biết được khoá công khai
ke và bản mã C để khôi phục lại thông điệp M ban đầu
Hình 2.5 Sơ đồ minh họa tính mật và tính xác thực của hệ mật mã khóa công khai
Trang 31Nhận xét: Hệ thống mã hoá khoá công khai không hẳn là đảm bảo được tính an
toàn tuyệt đối Bởi vì với mật mã C quan sát được, về mặt lý thuyết người thám mã đều có thể tìm ra bản rõ M sao cho C là bản mã được mã hoá từ bản rõ M Tuy nhiên, việc giải bài toán ngược là rất khó, mất rất nhiều thời gian Thông thường thuật toán để giải bài toán loại này có chi phí rất lớn (độ phức tạp có dạng mũ), cho nên khó có thể giải mã nổi trong một thời gian hợp lý
2.2 HỆ MẬT MÃ KHÓA CÔNG KHAI BA LÔ
Vào năm 1977, Ralph Merkel đưa ra ý tưởng của mình về hệ mật mã khoá công
khai, ông đã xây dựng được thông tin “cửa sập” (trap door) chèn vào hàm một chiều
ba lô, để phát triển thành hệ mật mã khoá công khai ba lô (knapsack public key cryptosystem) [1], [4], có độ an toàn phụ thuộc vào độ khó giải bài toán ba lô tổng quát (bài toán tổng con) Hiện nay có nhiều hệ mật mã ba lô khác nhau, nhưng hầu hết các hệ này chỉ khác nhau ở kỹ thuật thiết kế thông tin “cửa sập”
2.2.1 Bài toán ba lô
Bài toán 2.1: Giả sử (a1, a2,…, an) là những số nguyên dương, cho bất kỳ số nguyên dương S là tổng của một tập con có các phần tử ai Hãy tìm một vector nhị phân
(x1, x1,…, x1) với xi = {0, 1} thgoả mãn: S = n
i =1 ai * xi, i = 1, 2,…,n)
Đây là bài toán “khó” nổi tiếng thuộc lớp NP, vì với một tập con bất kỳ, dễ dàng kiểm tra để thấy được tổng các phần tử ai có bằng số nguyên S hay không Nhưng điều ngược lại, việc tìm một tập con có tổng các phần tử bằng S là khó hơn rất nhiều, có thể tìm kiếm hết mọi khả năng, yêu cầu thực hiện kiểm tra 2n
tập con có thể Phương pháp tốt nhất được biết để giải bài toán ba lô yêu cầu khoảng 2n/ 2 bước tính Như vậy nếu chọn phần tử n = 100 thì máy tính khó có thể giải nổi bài toán Tuy nhiên, ta có thể tìm các giá trị (a1, a2,…, an) có tính chất nào đó để bài toán ba
lô được giải một cách dễ dàng hơn
2.2.2 Bài toán ba lô siêu tăng
Các số nguyên (a1, a2,…,an) được gọi là dãy số siêu tăng nếu và chỉ nếu mỗi phần tử aj đều lớn hơn tổng tất cả các phần tử đứng trước nó Nghĩa là: aj >j -1
i =1 ai với j = 2, 3,…, n
Trang 32Bài toán 2.2: Giả sử có một dãy các số nguyên (a1, a2,…,an) siêu tăng và S là tổng các phần tử trong một tập hợp con bất kỳ của dãy Hãy tìm vector x = (x1,
Cách giải bài toán ba lô siêu tăng như sau:
Đầu tiên xác định phần tử xn của vector theo qui tắc:
j i
i i
n
j
i
j i i
j
a a x s
a a x s
x
1
1
*,
0
*,
1
Với j = n-1, n-2, … , 2, 1
Thuật toán 2.1: Giải bài toán ba lô siêu tăng
Unit Super_knapsack Input (a1, a2,…,an), S Output (x1, x1,…, xn)
1 For (i = n; i > 0; i ) { if (S > ai)
{xi = 1; S = S – ai;}
else xi = 0;
}
2 Return (x1, x1,…, xn);
2.2.3 Hệ mật mã khoá công khai ba lô Merkle-Hellman
Ý tưởng của hệ mật mã khoá công khai ba lô Merkle-Hellman [1], [4] là: đầu
tiên chọn bài toán ba lô siêu tăng “dễ giải” Sử dụng bài toán ba lô “khó” làm khoá công khai, còn bài toán ba lô siêu tăng ban đầu sẽ được giữ bí mật làm khóa riêng
2.2.3.1 Mô tả các quá trình tạo khoá, mã hoá, giải mã
Tạo khoá:
Nếu S > an
Nếu S < an
Trang 33Để sử dụng hệ mật mã khoá công khai ba lô Merkle-Hellman [1], [4], mỗi người
sử dụng phải tạo riêng một cặp khoá gồm khoá công khai, và khoá riêng như sau:
Chọn một vector ba lô siêu tăng a = (a1, a2,…, an) (khoảng 100 phần tử)
Chọn một số nguyên m > n
i =1ai và một số w sao cho gcd (w, m) = 1
Nhân các phần tử của vector a với w modulo m, kết quả thu được là vector
ba lô b = (b1, b2,…,bn), trong đó bi = w * ai mod m, và i = 1,…,n
Công bố vector ba lô b = (b1, b2,…,bn) như khoá công khai, các số w, m và vector ba lô siêu tăng a = (a1, a2,…, an) được giữ bí mật làm khoá riêng
Mã hoá:
Hệ mật mã khoá công khai ba lô Merkle-Hellman, thực hiện mã hoá theo từng
khối n-bits với n là số phần tử của vector ba lô lập mã b Giả sử người sử dụng A muốn mã hoá thông điệp M để gửi cho B, thì phía A phải thực hiện như sau:
Biến đổi các ký tự trong thông điệp thành chuỗi nhị phân theo qui tắc sau:
Trang 34 Chia thông điệp thành từng khối có chiều dài n-bits với n là số phần tử của vector ba lô b, kết quả thu được một dãy gồm k khối M1, M2,…,Mk, mỗi khối là một vector Mi = (xi1, xi2,…, xin), với:
Giải mã:
Khi nhận được bản mã C, người nhận B giải mã lần lượt từng số Ci như sau:
Tính các tổng Si = Ci * w-1 mod m, với i = 1,…, k ở đây w-1 là phần tử nghịch đảo của w mod m: w * w-1 1 (mod m)
Giải lần lượt bài toán ba lô siêu tăng với vector a = (a1, a2,…,an) với các số Sitính được Kết quả là một dãy các khối số M1, M2,…,Mk trong đó mỗi khối
là một vector Mi = (xi1, xi2,…, xin), với xij = {0, 1}, 1 ≤ i ≤ k và 1 ≤ j ≤ n
Thực hiện phép biến đổi ngược từ các chuổi bits thành các ký tự tương ứng,
để phục hồi lại thông điệp M ban đầu
Bảng 2.2 Các bước tạo khoá, mã hoá, giải mã của Hệ ba lô Merkele-Hellman
Trang 352.2.3.2 Tính đúng của quá trình giải mã
Giả sử (a1, a2,…, an), m, w-1, w, (b1, b2,…, bn) được định nghĩa như trên, ta có:
Để tính toán đơn giản, trong ví dụ này chỉ chọn vector ba lô siêu tăng có 10 phần
tử nhằm mục đích minh hoạ các bước mà không xét đến độ an toàn của hệ
Chọn vector ba lô siêu tăng a = (1, 3, 5, 11, 21, 24, 44, 87, 175, 349, 701)
Chọn số m = 1590 thoả mãn m > 2an = 2 * 701 = 1402, và chọn số w = 43 thoả mãn gcd (43, 1590) = 1
Nhân các phần tử của vector a với 43 modulo 1590 ta được vector ba lô tổng quát b = (43, 129, 215, 473, 903, 302, 516, 1165, 697, 1523)
Chọn (43, 129, 215, 473, 903, 302, 516, 1165, 697, 1523) làm khoá công khai Các số 43, 1590, (1, 3, 5, 11, 21, 44, 87, 175, 349, 701) là khoảng riêng
Mã hoá:
Trang 36Giả sử người A muốn mã hoá thông điệp M = “LOP CAO HOC CNTT” để gửi cho người B thì phía A thực hiện các bước như sau:
Biến đổi các ký tự thành các chuỗi nhị phân như sau: ( khoảng trắng)
Khi nhận được bản mã C phía B thực hiện các bước giải mã như sau:
Nhân các phần tử của vector C với 37 modulo 1590 (43 * 37 1 mod 1590),
Trang 37Vậy khối bản rõ đầu tiên dược giải mã là: M1 = (0110001111)
Tiếp tục giải bài toán trên với các số Si cnf lại thu được kết quả như sau:
0110001111 10000000000 0001100001 0111100000
0100001111 0001100000 0001101110 1010010100
Chia chuỗi bits giải mã được thành các khối 5-bits và thực hiện qui tắc biến đổi ngược lại từ khối 5-bits 1 ký tự tương ứng để khôi phục lại thông điệp M = “LOP CAO HOC CNTT” giống như ban đầu
2.2.4 Đánh giá hệ mật mã khoá công khai ba lô
2.2.4.1 Độ an toàn
Khi đưa ra hệ mật mã ba lô, Ralph Merkle cho rằng hệ mật mã này là an toàn, và ông đưa ra một giải thưởng cho bất kỳ ai bẻ gãy được hệ mật mã này Năm 1982 Adi Shamir đã tìm ra cách tấn công lược đồ mật mã ba lô Merkle-Hellman một lần
lặp (singly-iterated Merkle-Hellman scheme) với thuật toán thực hiện trong thời
gian đa thức Cách tấn công này đã chứng minh rằng sự che dấu cấu trúc vector ba
lô siêu tăng bằng phép toán nhân modulo là không an toàn [4] Sau khi cải tiến và
đưa ra lược đồ Merkle-Hellman nhiều lần lặp (Imultiply- iterated Merkle-Hellman
scheme) ông lại có một giải thưởng khác cho bất kỳ ai có thể bẻ gãy được phiên bản
mới này Chỉ sau đó hai năm, 1984 Merkle đành phải trao thưởng cho Ernest
Brickell người đã tìm được phương pháp tấn công lưựoc đồ ba lô Merkle-Hellman
Trang 38lặp nhiều lần, kỹ thuật này nhận biết được bản rõ mà không cần tìm vector ba lô siêu tăng ban đầu
Một hệ mật mã với vector ba lô có 100 phần tử và thực hiện 20 lần lặp xử lý để che giấu cấu trúc có thể bị bẻ gãy trong thời gian 2 giờ trê máy tính Cray-1
2.2.4.2 Hiệu suất thực hiện và ứng dụng
Hệ mật mã khoá công khai ba lô Merkle-Hellman cũng như một số hệ ba lô khác
có một đặc điểm là tốc độ thực hiện rất nhanh Vì vậy mà hệ mật mã này rất được chú ý vào những năm 1978, hơn cả hệ mật mã nổi tiếng RSA nhờ có tốc độ mã hoá
và giải mã nhanh, đặc biệt lúc này còn có những con chips điện tử dùng trong các ứng dụng bảo mật được cài đặt để thi hành hệ mật mã ba lô Ngày nay hệ mật mã ba
lô dường như không còn được ứng dụng nữa Vì kỹ thuật tấn công hệ mật mã ba lô được phát triển rất mạnh, bất kỳ hệ mật mã ba lô nào dùng phép nhân modulo để biến đổi cấu trúc vector siêu tăng đều có thể bị bẻ gãy trong thời gian hợp lý [4]
2.3 HỆ MẬT MÃ KHÓA CÔNG KHAI ELGAMAL
Hệ mật mã khóa công khai ElGamal [2], [9] được giới thiệu vào năm 1985 bởi
T ElGamal, độ an toàn của hệ này phụ thuộc vào độ khó giải bài toán logarithm rời rạc trong trường số hữu hạn Zp Vì vậy số nguyên tố p cần phải được chọn sao cho bài toán logarithm là khó tính toán Trong trường hợp đặc biệt để ngăn ngừa sự tấn công, thì số nguyên tố p cần phải được chọn sao cho số (p – 1) có ít nhất một thừa
số nguyên tố p Mục đích của hệ này được thiết kế chủ yếu ứng dụng vào mục đích chữ ký điện tử
2.3.1 Bài toán logarithm rời rạc
Độ an toàn của nhiều kỹ thuật mã phụ thuộc vào việc khó giải nổi bài toán logarithm rời rạc (discrete logarithm problem) Một phần danh sách đó bao gồm: lược đồ trao đổi khoá Diffie-Helllman, lược đồ mã hoã ElGamal, lược đồ chữ ký ElGemal và một số các lược đồ mật mã khác…
Định nghĩa 2.1: Cho G là một nhóm vòng (cyclic) hữu hạn có bậc n và g là phần tử
sinh của G Logarithm rời rạc của y cơ số g biểu thị loggy, là một số nguyên duy nhất x, với 0 ≤ x ≤ n – 1 sao cho y = gx
Trang 39
Bài toán 2.3: Cho số nguyên tố p, một phần tử sinh g của Zp*, và một phần tử y
Zp, tìm số nguyên x, 0 ≤ x ≤ p – 2 sao cho y = gx (mod p) (tìm x = loggy)
2.3.2 Định nghĩa các tập làm việc của hệ mật mã ElGamal
Tạo số nguyên tố p lớn sao cho bài toán logarithm rời rạc trong Zp là khó giải nổi và số p – 1 có ít nhất một thừa số nguyên tố q lớn
Chọn số g Zp* là phần tử chính (primitive element) Các giá trị p và g thường được sử dụng chọn ngẫu nhiên số x sao cho 0 < x < p –2, và định nghĩa: K = {(p, g, x, y): y = gx
Lấy khoá công khai đích thực của người nhận B (p, g, y)
Đầu tiên dùng thuật toán để chia thông điệp m ra nhiều khối có chiều dài cố định, và mỗi khối được biến đổi thành một số nguyên tương ứng Mi < p, (i
= 1,…, k) theo một thuật toán nào đó Ví dụ dùng thuật toán như sau:
Trang 40- Biến đổi các ký tự trong nội dung của thông điệp thành các số tương ứng theo qui tắc 00, A 01, B 02,…,Z 26
- Chia thông điệp số vừa biến đổi thành 1 nhóm số có chiều dài bằng nhau, mỗi nhóm biểu diễn một số nguyên Mi < p với (1 ≤ i ≤ 1)
Chọn ngẫu nhiên một số nguyên k sao cho 0 ≤ k ≤ (p – 2)
Mã hoá lần lượt từng số Mi (1 ≤ i ≤ 1) với khoá công khai của người nhận bằng cách tính: Ci = Eke(Mi) = (Ci1, Ci2) Với Ci1 = gk mod p và Ci2 = Mi * ykmod p
Tập số {C1, C2,…, Ck}, với Ci = (Ci1, Ci2), i = 1,…, 1 là bản mã gửi cho B
Giải mã:
Để giải mã bản mã {C1, C2,…, Ck}, người nhận B thực hịên các bước như sau:
Giải mã lần lượt các cặp số Ci = (Ci1, Ci2), với 1 ≤ i ≤ 1 bằng cách:
Tạo số nguyên tố p chọn sao cho
bài toán Logarithm rời rạc trong
2.3.4 Tính đúng của quá trình giải mã
Ta có: y = gx
(mod p) (định nghĩa)