Tuy nhiên, tính an toàn của hệ mã RSA nhiều khi có thể bị phá vỡ mà không buộc phải giải bài toán phân tích n thành các thừa số nguyên tố xem [Nguyen08].. Cụ thể, đề tài thực hiện hai mụ
Trang 1BỘ KHOA HỌC VÀ CÔNG NGHỆ Chương trình KH&CN trọng điểm cấp nhà nước KC.01/11-15
“Nghiên cứu ứng dụng và phát triển công nghệ Thông tin
và Truyền thông”
BÁO CÁO TỔNG KẾT ĐỀ TÀI
“THIẾT KẾ VÀ HIỆN THỰC MỘT SỐ LÕI IP CHUYÊN DỤNG CHO CÁC HỆ MÃ CÔNG KHAI VÀ MÃ DÒNG THỰC HIỆN TRÊN FPGA”
- Mã số KC.01.TN16/11-15
Chủ nhiệm đề tài: PGS.TS Nguyễn Đình Thúc
Cơ quan chủ trì: Trường ĐH Khoa học Tự nhiên, ĐHQG Tp HCM
Tháng 1 năm 2013
Trang 2MỤC LỤC
Chương 1 Thiết kế và thực hiện một số lõi IP chuyên dụng cho các hệ mã công khai và mã
dòng thực hiện trên FPGA 1
1.1 Mở đầu 1
1.2 Mục tiêu đề tài và nội dung thực hiện 4
1.2.1 Mục tiêu đề tài 4
1.2.2 Nội dung thực hiện 5
1.3 Sản phẩm và kết quả thực hiện 6
1.4 Bố cục báo cáo 7
2.1 Định lý RSA 9
Chương 2: Mã công khai – RSA 9
2.2 Nhị phân hóa phép cộng và nghịch đảo modulo 10
2.2.1 Thuật toán 10
2.2.1.1 Cơ sở toán học 10
2.2.1.2 Nhị phân hóa phép nghịch đảo modulo 12
2.2.1.3 Tính hiệu quả và khả năng cứng hóa của thuật toán 15
2.3 Phép nhân nhanh modulo và phép lũy thừa nhanh modulo .15
2.3.1 Phép toán trên vành ℤm 15
2.3.2 Thuật toán 17
2.3.2.1 Phép nhân nhanh modulo 17
2.3.2.1.1 Giới thiệu 17
2.3.2.1.2 Trình bày thuật toán 18
2.3.2.2 Phép lũy thừa nhanh modulo 19
2.3.2.3 Ví dụ 20
2.3.2.4 Tính hiệu quả và khả năng cứng hóa của thuật toán 21
2.4 Xây dựng giải thuật sinh số nguyên tố an toàn và hiệu quả 21
2.4.1 Cơ sở toán học 21
2.4.2 Thuật toán 24
2.4.2.1 Thuật toán phát sinh số nguyên tố ngẫu nhiên 24
2.4.2.2 Thuật toán phát sinh số nguyên tố ngẫu nhiên cải tiến 24
2.4.2.3 Thuật toán phát sinh số nguyên tố mạnh Gordon 24
2.4.2.4 Thuật toán kiểm tra số nguyên tố - Thuật toán Rabin-Miller 25
Trang 32.4.3 Tính hiệu quả của thuật toán 27
2.5 Phân tích và xây dựng thuật giải sinh khóa RSA 27
2.5.1 Cơ sở toán học 27
2.5.2 Thuật toán 30
2.5.3 Tính hiệu quả và khả năng cứng hóa của thuật toán 31
2.6 Nhị phân hóa hệ mã RSA .31
2.6.1 Thuật toán 31
2.6.1.1 Mô hình các module cài đặt RSA 31
2.6.1.2 Chi tiết cài đặt RSA 32
2.6.2 Tính hiệu quả của thuật toán được thể hiện qua kết quả thử nghiệm sau: 33
2.7 Chương trình mô phỏng phần mềm và đánh giá RSA .33
2.7.1 Giới thiệu 33
2.7.2 Phân tích thực nghiệm RSA 34
2.7.2.1 Sinh khóa RSA 34
2.7.2.2 Mã hóa và giải mã 36
2.7.2.3 Ký và xác thực chữ ký 37
2.7.3 Thám mã RSA 39
2.7.3.1 Giới thiệu 39
2.7.3.2 Phân tích ra thừa số dùng phương pháp Pollar 39
2.7.3.3 Tấn công phục hồi khóa bí mật kích thước nhỏ 40
Chương 3: Mã dòng – ZUC 42
3.1 Giới thiệu 42
3.2 Nghiên cứu và mô phỏng hệ mã ZUC 43
3.2.1 Giới thiệu 43
3.2.2 Mã ZUC 44
3.3 Thiết kế SBox 45
3.3.1 Mở đầu 45
3.3.2 Biểu diễn cấu trúc toán học của S-Box 46
3.3.2.1 Cơ sở toán học 46
3.3.2.2 Kiến trúc S-Box 47
3.3.2.3 Đánh giá 47
3.3.3 Thiết lập tiêu chí S-Box an toàn qua các kỹ thuật thám mã 48
3.3.3.1 Thám mã phân biệt tuyến tính 48
3.3.3.2 Thám mã SOBER-t32 và SNOW 2.0 (các hệ mã có cấu trúc tương tự ZUC) 49
Trang 43.3.3.2.1 SOBER-t32 49
3.3.3.2.2 SNOW 2.0 50
3.3.3.2.3 Kết quả SOBER-t32 52
3.3.3.2.4 Kết quả SNOW 2.0 52
3.3.3.3 Tạo và kiểm định chuỗi ngẫu nhiên 53
3.3.3.3.1 Giới thiệu 53
3.3.3.3.2 Phương pháp 53
3.3.3.3.3 Kết quả 54
3.4 Xây dựng bộ sinh khóa dòng cho ZUC .54
3.5 Nhị phân hóa hệ mã ZUC 54
3.5.1 Thuật giải 54
3.5.2 Cài đặt của các phần chính 56
3.5.3 Phân tích tính đúng đắn, hiệu quả và khả năng cứng hóa của thuật giải 60
3.5.4 Mô hình cài đặt 61
3.6 Mô phỏng phần mềm và đánh giá ZUC 62
3.6.1 Kiểm tra tính ngẫu nhiên của chuỗi số sinh bởi ZUC 62
3.6.2 Phân tích cấu trúc ZUC 67
Chương 4: Quy trình thiết kế lõi IP 68
4.1 Quy trình tổng quát thiết kế lõi IP cho FPGA 68
4.1.1 Đặc tả thiết kế: 69
4.1.2 Xây dựng mô hình thiết kế 69
4.1.3 Hiện thực mô hình bằng ngôn ngữ phần cứng 70
4.1.4 Kiểm tra chức năng của thiết kế 71
4.1.5 Tổng hợp thiết kế thành mức cổng 72
4.1.6 Kiểm tra thời gian của thiết kế 73
4.1.7 Kiểm tra trên FPGA 73
4.2 Minh họa với quy trình thiết kế lõi IP RSA 74
4.2.1 Đặc tả thiết kế RSA 74
4.2.2 Xây dựng mô hình thiết kế RSA 76
4.2.3 Hiện thực mô hình RSA bằng ngôn ngữ phần cứng 79
4.2.4 Kiểm tra chức năng của thiết kế RSA 81
4.2.5 Tổng hợp thiết kế RSA thành mức cổng 83
4.2.6 Kiểm tra thời gian của thiết kế RSA 84
4.2.7 Kiểm tra thiết kế RSA trên FPGA 86
Trang 54.3 Kết luận 87
Chương 5: Các Lõi IP Chuyên Dụng 88
5.1 Các lõi phụ trợ tính toán MAP-Coprocessor 89
5.1.1 Khối Mod2048 89
5.1.1.1 Đặc tả thiết kế 89
5.1.1.2 Xây dựng mô hình thiết kế 90
5.1.1.3 Kiểm tra chức năng của thiết kế 103
5.1.1.4 Kiểm tra thời gian trên FPGA 108
5.1.2 Khối Mul1024 110
5.1.2.1 Đặc tả thiết kế 110
5.1.2.2 Xây dựng mô hình thiết kế 111
5.1.2.3 Kiểm tra chức năng của thiết kế 117
5.1.2.4 Tổng hợp thiết kế trên FPGA 120
5.1.2.5 Kiểm tra thời gian trên FPGA 122
5.2 Lõi IP RSA-Coprocessor 124
5.2.1 Đặc tả thiết kế 124
5.2.2 Xây dựng mô hình thiết kế 127
5.2.2.1 Khối RegA 130
5.2.2.2 Khối RegB 130
5.2.2.3 Khối RegN 131
5.2.2.4 Khối RegN0 132
5.2.2.5 Khối RegZ1 132
5.2.2.6 Khối MonModInverse 133
5.2.2.7 Khối MonPro 134
5.2.3 Kiểm tra chức năng của thiết kế 134
5.2.4 Tổng hợp thiết kế trên FPGA 137
5.2.4.1 Cyclone IV 137
5.2.4.2 Aria II 138
5.2.4.3 Stratix III 138
5.2.4.4 Stratix IV 139
5.2.4.5 Tổng hợp 139
5.2.5 Kiểm tra thời gian của thiết kế trên FPGA 140
5.2.5.1 Cyclone IV 140
5.2.5.2 Aria II 140
Trang 65.2.5.3 Stratix III 140
5.2.5.4 Stratix IV 140
5.2.5.5 Tổng hợp 141
5.2.6 Kiểm tra thiết kế trên các loại FPGA 141
5.2.6.1 Chức năng 141
5.2.6.2 Thời gian đáp ứng 142
5.3 Lõi IP ZUC-Coprocessor 144
5.3.1 Đặc tả thiết kế 144
5.3.2 Xây dựng mô hình thiết kế 146
5.3.2.1 Khởi tạo 148
5.3.2.2 BitReorganization 149
5.3.2.3 Dịch thanh ghi hồi đáp tuyến tính 150
5.3.2.4 Module hàm tuyến tính L1 150
5.3.2.5 Module hàm tuyến tính L2 151
5.3.2.6 Giá trị khởi tạo cho mảng hằng D trong bước khởi động khóa (Ek_d) 151
5.3.2.7 S-Box S0 152
5.3.2.8 S-Box S1 154
5.3.3 Kiểm tra chức năng của thiết kế 156
5.3.3.1 Testbench 157
5.3.3.2 Dạng sóng 157
5.3.4 Tổng hợp thiết kế trên FPGA 159
5.3.4.1 Cyclone IV 159
5.3.4.2 Aria II 160
5.3.4.3 Stratix III 160
5.3.4.4 Stratix IV 161
5.3.4.5 Tổng hợp 161
5.3.5 Kiểm tra thời gian trên FPGA 162
5.3.5.1 Cyclone IV 162
5.3.5.2 Aria II 162
5.3.5.3 Stratix III 162
5.3.5.4 Stratix IV 163
5.3.5.5 Tổng hợp 163
5.3.6 Kiểm tra thiết kế trên các loại FPGA 163
5.3.6.1 Chức năng 163
Trang 75.3.6.2 Thời gian đáp ứng 164
5.4 Hệ thống demo truyền video có mã hóa 166
5.4.1 Mã Key ZUC bằng RSA (software) 167
5.4.2 Truyền eKey và giải mã eKey bằng IP RSA (hardware) 168
5.4.3 Chuẩn bị ảnh/video mã hóa ZUC với Key ZUC (software) 171
5.4.4 Truyền ảnh/video mã và tiến hành giải mã và hiển thị (hardware) 173
5.5 Kết luận 178
5.5.1 Lõi IP RSA 178
5.5.2 Lõi IP ZUC 179
5.5.3 Đối chiếu kết quả đã đăng ký 181
Chương 6: Các kịch bản thử nghiệm 183
6.1 Giới thiệu 183
6.2 Mô hình ứng dụng voice-chat có bảo mật và thử nghiệm 183
6.2.1 Giới thiệu ứng dụng 183
6.2.2 Mô hình hoạt động 184
6.2.2.1 Mô hình hoạt động ở chế độ công khai 184
6.2.2.2 Mô hình hoạt động ở chế độ riêng tư 184
6.2.3 Kiến trúc chương trình 185
6.2.4 Thiết kế giao diện 186
6.2.4.1 Giao diện chính của Server 186
6.2.4.2 Giao diện cấu hình Client 187
6.2.4.3 Giao diện kết nối của Client 188
6.2.5 Hướng dẫn sử dụng 188
6.2.6 Thử nghiệm 190
6.2.6.1 Kịch bản 1 190
6.2.6.2 Kịch bản thử nghiệm 2 191
6.3 Thử nghiệm video: mô hình ứng dụng và kịch bản thử nghiệm 192
6.3.1 Mô hình thử nghiệm 192
6.3.2 Kịch bản thử nghiệm 195
6.3.3 Kết quả xây dựng phần cứng 199
6.4 Các kịch bản thử nghiệm 200
6.4.1 Kịch bản 1: truyền khóa RSA 200
6.4.1.1 Tính đúng đắn 201
6.4.1.2 Tài nguyên 202
Trang 86.4.1.3 Thời gian đáp ứng: 202
6.4.2 Kịch bản 2: mã hóa và giải mã video sử dụng ZUC 204
6.4.2.1 Tài nguyên: 205
6.4.2.2 Thời gian đáp ứng: 205
6.4.3 Tấn công sử dụng bản mã và bản rõ mã ZUC 206
Chương 7: Kết luận 208
7.1 Mở đầu 208
7.2 Kết quả thực hiện 209
7.2.1 Kết quả lý thuyết 209
7.2.2 Kết quả hiện thực phần cứng 210
7.2.3 Các kết quả khác 211
7.3 Sản phẩm và kết quả thực hiện 211
7.4 Hướng phát triển ứng dụng 212
Trang 9Chương 1: “Thiết kế và hiện thực một số lõi IP chuyên dụng cho các hệ mã công khai
và mã dòng thực hiện trên FPGA”
là RSA, và hệ mã đối xứng là ZUC2
Độ an toàn của mã khóa công khai phụ thuộc chính vào kích thước khóa Một hệ mã RSA với kích thước khóa cho trước, nếu các số nguyên với kích thước tương ứng bị phân tích thành các thừa số nguyên tố thì hệ RSA với kích thước khóa như vậy không còn an toàn nữa Trong trường hợp này, hệ mã RSA bị phá hoàn toàn Có nhiều hướng tiếp cận để
phân tích thừa số nguyên tố: phương pháp vét cạn, phương pháp Pollard’s p - 1, phương
pháp Pollard’s rho, phương pháp dựa vào đường cong elliptic, phương pháp sàng toàn phương (Quadratic Sieve) và sàng trường số (Number Field Sieve) Phương pháp vét cạn
1 RSA đặt theo tên viết tắt của 3 nhà Toán học phát minh ra hệ mã công khai này là Rivest – Shamir – Adleman
2 ZUC là hệ mã dòng đồng bộ được thiết kế bởi Hongjun Wu
Trang 10thực hiện kiểm tra từng ước số nguyên tố có thể có từ 1 đến n (giả sử n là số cần phân
tích) Mặc dù rất hiệu quả khi phân tích số nhỏ, nhưng đối với số lớn như trong RSA,
phương pháp vét cạn không thể sử dụng do thời gian thực hiện lớn O(n1/2) Phương pháp
Polard’s p - 1 giúp giảm chi phí so với phương pháp vét cạn trong trường hợp một ước số nguyên tố p nào đó của n mà (p - 1) lại là tích của các số nguyên tố nhỏ hơn một ngưỡng
B chọn trước Khi đó, thời gian tìm một ước số nguyên tố của n tỉ lệ với ước số nguyên tố lớn nhất của p - 1 Phương pháp này hiệu quả nếu như ngưỡng B không quá lớn Tuy nhiên, nếu thiết kế RSA, ta chọn n sao cho với mọi ước số nguyên tố p của n, p - 1 phải có
ít nhất một ước số nguyên tố lớn, thì xác suất có thể phân tích n bằng phương pháp này
thành công là rất nhỏ Phương pháp Pollard’s rho dựa vào nguyên tắc ngày sinh nhật (Birthday Paradox), giúp thời gian thực thi tỉ lệ với kích thước của ước số nguyên tố nhỏ
nhất của n, tuy nhiên vẫn không hiệu quả với n lớn như trong RSA hiện nay Phương pháp dựa vào đường cong elliptic là một tổng quát hóa của phương pháp Pollard’s p – 1, và
thực sự cũng chưa chứng tỏ hiệu quả trong trường hợp tổng quát Phương pháp sàng toàn phương (Quadratic Sieve) dựa vào kỹ thuật sàng nguyên tố Eratosthenes, có thời gian chạy gần lũy thừa (subexponential time) lớn hơn thời gian đa thức nhưng nhỏ hơn thời gian số mũ Phương pháp sàng trường số (Number Field Sieve) là phương pháp được xem hiệu quả nhất hiện nay, với thời gian thực thi tốt hơn so với phương pháp Quadratic Sieve [Boneh99] Như vậy, có khá nhiều phương pháp để thực hiện phân tích ước số nguyên tố, tấn công vào RSA Để chống lại tấn công này, cần tăng kích thước khóa lên Tuy nhiên, tính an toàn của hệ mã RSA nhiều khi có thể bị phá vỡ mà không buộc phải giải bài toán
phân tích n thành các thừa số nguyên tố (xem [Nguyen08]) Các kỹ thuật thám mã hiện
đại có thể phục hồi được khóa bí mật từ các thông tin đã được công bố Trường hợp này, nhiều nhà nghiên cứu cũng xem như RSA bị tấn công hoàn toàn Ngoài ra, việc thiếu cẩn trọng khi chọn các tham số hệ thống cho RSA cũng có thể dẫn đến các tấn công phá vỡ hoàn toàn hệ mã Chẳng hạn như, bằng phương pháp liên phân số của M Wiener, với
khóa bí mật d < n1/4/3, cho khóa công khai (e, n), nhiều heuristic cho rằng, kẻ tấn công có
Trang 11thể khôi phục được n một cách hiệu quả [Boneh99] Trong trường hợp khóa công khai n nhỏ, thông tin về khóa bí mật d cũng sẽ bị lộ một phần [Cid ]3 Một trường hợp nữa cũng hay xảy ra với những người sử dụng chưa có nhiều kinh nghiệm là thiết kế hệ thống RSA rơi vào các trường hợp (hiển nhiên) yếu
Với khả năng của máy tính hiện nay, kích thước khóa an toàn của RSA yêu cầu lên tới 1024-bit Chính vì phải thực hiện tính toán trên các số nguyên quá lớn (BigInteger) nên tốc độ của RSA là rất chậm, ngay cả trên các máy tính cá nhân Thực tế cũng đã chứng minh, với kích thước khóa lớn, tốc độ mã/giải mã là đôi khi khó chấp nhận được trong đa
số giao dịch điện tử [MVV96] Vấn đề càng trở nên bất tiện khi phải thi hành các giao dịch điện tử theo thời gian thực, trên các thiết bị năng lực (bao gồm cả năng lực tính toán lẫn năng lượng) yếu Vì thế, ngay từ những năm đầu thế kỷ 21, đã có nhiều giải pháp cài đặt phần cứng cho các hệ mã khóa công khai, cụ thể cho RSA (xem [HWP06] và [WML08])
Về mã đối xứng, mã hóa đối xứng được chia làm hai loại là: mã khối (Block Ciphers) và
mã dòng (Stream Ciphers) Đối với mã khối, khi mã hóa, dữ liệu ban đầu được chia thành các khối (block), thường thì có kích thước bằng nhau, và kích thước này sẽ tùy thuộc vào thuật toán mã hóa được dùng như DES, 3DES, AES, RC2,… Nếu áp dụng DES thì các khối dữ liệu phải có cùng kích thước là 64 bits, còn nếu áp dụng AES thì kích thước này
phải là 128 bits Mã khối cần đến một khóa k trong suốt quá trình mã hóa, khóa này cũng
tùy thuộc vào thuật toán mã hóa áp dụng như trên Trong thực tế khi áp dụng mã khối thì
dữ liệu ban đầu phải biết trước về kích thước Nghĩa là áp dụng mã khối cho dữ liệu đã biết trước cụ thể Sau khi dữ liệu ban đầu được chia ra thành các khối có kích thước nhất định, quá trình mã hóa sẽ sử dụng đến một trong các kiểu hoạt động (mode of operation: ECB, CBC, CFB, OFB, CTR) để tạo thành bản mã tương ứng cho dữ liệu ban đầu Đối với mã dòng, trong thực tế, khi được áp dụng thì dữ liệu thường ở dạng biến thiên theo thời gian Nghĩa là không biết trước được dữ liệu ban đầu Hàm mã hóa đơn giản nhất trong thực tế có thể chỉ đơn giản là một phép XOR giữa các bits của bản rõ (Plaint text)
3 http://www.sans.org/reading_room/whitepapers/vpns/cryptanalysis-rsa-survey_1006
Trang 12và khóa dòng (Keystream) tương ứng Do tính chất biến thiên theo thời gian và việc thực hiện mã hóa/giải mã đơn giản, đồng thời cần tính thời gian thực cho các ứng dụng trên thiết bị năng lực thấp, chúng tôi tập trung vào hệ mã dòng thay vì mã khối
Hệ mã dòng ZUC ra đời năm 2009 và đang được phát triển mạnh trong dự án mở của tổ chức DASCA (Data Assurance and Communication Security Research Center, Chinese Academy of Sciences) nhằm hướng tới các ứng dụng cho chuẩn công nghệ "4G" trong tương lai ZUC được phát triển dựa trên SNOW 2.0 Chúng tôi chưa thấy các công trình liên quan đến mã dòng, đặc biệt là hệ mã dòng ZUC Đây vừa là thuận lợi cũng vừa là thách thức cho đề tài
1.2 Mục tiêu đề tài và nội dung thực hiện
1.2.1 Mục tiêu đề tài
Dựa trên các kết quả nghiên cứu về mã hóa-mật mã và các cách tấn công trên các hệ mã phổ biến hiện nay (RSA, ZUC), đề tài nghiên cứu nhị phân hóa và cải tiến các thuật toán liên quan nhằm tăng tốc độ xử lý và tăng tính an toàn cho các hệ mã này RSA và ZUC)
Từ các kết quả nghiên cứu lý thuyết và thuật toán RSA và ZUC, đề tài thiết kế và hiện thực các lõi IP chuyên dụng cho mã hóa – mật mã thực hiện trên FPGA (FCC – FPGA Crypto Coprocessor) nhằm phục vụ các ứng dụng liên quan đến an ninh thông tin Đặc biệt, nghiên cứu chú trọng đến các thiết bị có năng lực thấp (bao gồm cả năng lực tính toán lẫn năng lượng)
Cụ thể, đề tài thực hiện hai mục tiêu chính như sau:
(1) Cải tiến và nhị phân hóa các thuật toán mã hóa:
Thuật toán nhân modulo
Thuật toán luỹ thừa modulo
Các thuật toán phụ trợ (tính nghịch đảo modulo, sinh khóa an toàn,…)
Thuật toán phát sinh khoá mạnh cho mã dòng: xây dựng một S-Box phát sinh khoá ngẫu nhiên và dài để tăng tính an toàn và chống lại các cơ chế tấn công hiện nay,
Trang 13đặc biệt tấn công tuyến tính và tấn công sai phân Do S-Box là thành phần phi tuyến duy nhất trong các hệ mã dòng (cũng như mã đối xứng AES), việc xây dựng được S-Box tốt đảm bảo khả năng kháng các tấn công hiện đại như tấn công tuyến tính và tấn công sai phân
(2) Thiết kế và hiện thực 3 lõi chính trên một kiến trúc FPGA hợp nhất gồm:
MAP Coprocessor: IP chuyên thực hiện các phép số học modulo cũng như các vấn
đề liên quan
RSA Coprocessor: IP chuyên dụng thực hiện mã/giải mã khóa công khai RSA
ZUC Coprocessor: IP chuyên dụng thực hiện mã/giả mã khóa đối xứng theo phương thức mã dòng (stream cipher)
1.2.2 Nội dung thực hiện
(1) Nhị phân hóa các phép toán số học trên Z 2 n , đặc biệt chú trọng phép nhân modulo và phép lũy thừa modulo Với phép nhân modulo, thiết kế thuật giải hiện thực
trên phần cứng dùng thuật giải Montgomery Với phép lũy thừa modulo, xây dựng thuật giải và phân tích khả năng cứng hóa thuật giải và hiện thực
(2) Nghiên cứu khả năng cứng hóa hệ mã dòng ZUC Độ an toàn của mã dòng nói
chung cũng như ZUC phụ thuộc vào tính ngẫu nhiên của khóa dòng được phát sinh Bộ sinh khóa dòng an toàn phụ thuộc chính vào S-Box, do đó việc thiết kế S-Box tốt là nhiệm vụ quan trọng của nội dung này ZUC là hệ mã dòng mới, rất tiềm năng cho các ứng dụng mã/giải mã thời gian thực
(3) Thiết kế và cài đặt FPGA Crypto-Coprocessor (FCC) FCC gồm một khối xử lý
(processor block) và các lõi IP (IP cores) nhằm tăng tốc độ tính toán trong quá trình thực hiện mã/giải mã thông tin mật Các lõi IP gồm: RSA Coprocessor, Modulo Arithmic Process Coprocessor, ZUC Coprocessor
Trang 141.3 Sản phẩm và kết quả thực hiện
Bảng sau trình bày đối chiếu sản phẩm thực hiện của đề tài so với sản phẩm đăng ký
Các lõi IP chuyên dụng thực hiện trên FPGA:
(i) MAP Coprocessor (lõi chuyên dụng thực
hiện các phép toán số học
(ii) RSA Coprocessor (lõi chuyên dụng thực
hiện mã công khai)
(iii) ZUC Coprocessor (lõi chuyên dụng thực
hiện mã dòng)
Các lõi IP chuyên dụng thực hiện trên FPGA
(1) MAP Coprocessor (lõi chuyên dụng thực
hiện các phép toán số học)
(2) RSA Coprocessor (lõi chuyên dụng thực
hiện mã công khai)
(3) ZUC Coprocessor (lõi chuyên dụng thực
hiện mã dòng)
Qui trình thiết kế lõi các IP (1) Quy trình thiết kế và sử dụng quy trình
hiện thực các lõi đã đăng ký
(2) Đăng ký sở hữu trí tuệ thiết kế mạch cho
ZUC
Determining quantity of S-Boxes using pseudo random sequences generated from stream ciphers In
Algorithms and Architectures for Parallel Processing, LNCS 7440, Springer, 2012
Nhung T.H.Nguyen, Thuc D Nguyen
A variant of non-adative group testing and its application in pay-television via internet”, Springer LNCS,
AsiaARES 2013
Trang 15Bên cạnh các sản phẩm chính, là các kết quả liên quan đến đào tạo bậc cao học, gồm hai luận văn thạc sĩ Khoa học Máy tính đã bảo vệ thành công tại ĐH KHTN thuộc ĐHQG
Chương 2: Mã khóa công khai – RSA Nội dung của chương này trình bày những kết
quả nghiên cứu về RSA, đặc biệt, chúng tôi xây dựng các thuật toán hiệu quả cho việc cài đặc phần cứng đồng thời phân tích độ an toàn của RSA, qua đó gợi ý những cài đặt phần cứng một RSA an toàn, tránh các khóa yếu và các tấn công có thể làm tổn hại RSA
Chương 3: Mã đối xứng – mã dòng ZUC Nội dung của chương trình bày những kết
quả nghiên cứu nhằm hiện thực phần cứng mã đối xứng ZUC, một dạng mã dòng hiệu quả cho các ứng dụng mã hóa lượng dữ liệu liên tục, không xác định kích thước và phải thi hành thời gian thực Độ an toàn cũng được minh chứng qua các thực nghiệm thống kê
Chương 4: Qui trình thiết kế lõi IP Nội dung trình bày quy trình tổng quát thiết kế lõi
IP và minh họa chi tiết quy trình qua các thiết kế cụ thể
Chương 5: Các lõi IP chuyên dụng Nội dung của chương trình bày quy trình thiết kế
các lõi IP chuyên dụng cho mã hóa gồm: MAP-Coprocessor, chuyên thực hiện các phép toán số học trên vành Z2n
; RSA-Coprocessor, chuyên thực hiện quá trình mã/giải mã theo
Trang 16nguyên tắc mã công khai RSA; và ZUC-Coprocessor, chuyên thực hiện quá trình sinh khóa dòng cho việc mã hóa và giải mã dòng dữ liệu theo phương pháp ZUC
Chương 6: Các kịch bản thử nghiệm Trình bày các kịch bản thử nghiệm cho hai minh
họa ứng dụng chính: chat-thoại có bảo mật và video streaming có bảo mật Mục tiêu là minh họa khả năng ứng dụng của đề tài dưới khía cạnh phần mềm (chat-thoại) cũng như minh chứng tính hiệu quả của các lõi IP trong ứng dụng video có mã hóa
Chương 7: Kết luận Tóm tắt kết quả nghiên cứu, đối chiếu với nhiệm vụ đăng ký, đồng
thời cũng dự kiến khả năng ứng dụng và triển khai thành các sản phẩm
Trang 17Chương 2: Mã công khai - RSA
Chọn e và d thuộc ℤN = {0, 1,…, N – 1}, thỏa điều kiện: ed mod Phi = 1 (3)
Khi ấy, với mọi m thuộc ℤN, nếu c = me mod N thì m = c d mod N, và ngược
Ở dòng (1), ta cần chọn được một cách ngẫu nhiên 2 số nguyên tố khác nhau p và
q Bài toán sẽ là không khó khăn gì với máy tính nếu p và q là các số nhỏ Tuy nhiên, với p và q lớn1, không có máy tính cũng như không có ngôn ngữ lập trình nào hỗ trợ trực tiếp, vì thế, việc cài đặt sẽ trở nên khó khăn hơn rất nhiều Bên cạnh
tính ngẫu nhiên, các số nguyên tố cần phải là số nguyên tố mạnh 2 để tránh khả năng
phân tích N thành p và q Vì thế, ta cần các thuật toán sinh số nguyên tố an toàn để
thực hiện nhiệm vụ này
Dòng (2) yêu cầu ta phải tích tích 2 số nguyên lớn (mà máy tính cũng như ngôn
ngữ lập trình không hỗ trợ trực tiếp)
Ở dòng (3), ta có đẳng thức ed mod Phi = 1 Xét trong miền ZPhi, từ đẳng thức này,
ta có khái niệm nghịch đảo Trong đẳng thức này, d được gọi là nghịch đảo (mod Phi) của e và ngược lại Như vậy, cho trước e và Phi, trong điều kiện nào và làm thế nào ta có thể tìm được nghịch đảo d (mod Phi) của nó
Dòng (4), để mã hóa m thành c, (và giải mã c để phục hồi lại m), cần phải tính m e mod N, (hay c d mod N) Phép tính này gọi là phép tính lũy thừa modulo
Bên cạnh các nội dung trên, để đảm bảo chắc chắn xây dựng được một hệ thống RSA an toàn chống được hai tấn công: (i) phân tích ra thừa số (tấn công tổng quát),
Trang 18và (ii) tấn công khóa yếu (tấn công đặc thù), nhất thiết cần khảo sát và thử nghiệm các tấn công này
Cuối cùng, để triển khai phần cứng, cũng cần xem xét khả năng nhị phân hóa RSA,
và đánh giá hiệu năng RSA (bên cạnh phần xem xét tính an toàn của RSA)
Nội dung chương này được tổ chức gồm các nội dung sau:
(1) Nhị phân hóa phép cộng và nghịch đảo modulo
(2) Phép nhân nhanh modulo và phép lũy thừa nhanh modulo
(3) Xây dựng thuật giải sinh số nguyên tố an toàn và hiệu quả
(4) Phân tích và xây dựng thuật giải sinh khoá RSA
(5) Nhị phân hóa hệ mã RSA
(6) Chương trình mô phỏng phần mềm và đánh giá RSA
2.2 Nhị phân hóa phép cộng và nghịch đảo modulo
2.2.1 Thuật toán
2.2.1.1 Cơ sở toán học
Trong bảo mật thông tin, đặc biệt trong hệ mật mã RSA, việc xác định được ước chung lớn nhất, ký hiệu gcd – greatest common divisor, là vấn đề quan trọng Định lý Euclide
là cơ sở toán học cho phép xây dựng các thuật toán/chương trình máy tính tính gcd của
2 số cho trước Ta tóm tắt định lý này theo ngôn ngữ thuật toán như sau:
Định lý Euclide (thuật toán Euclidecho 2 số nguyên dương)
Cho a, b là hai số nguyên dương
Đặt r-1 = a, và r0 = b Ta có
rj-1 = rjqj+1 + rj+1, 0 ≤ j < rj;
(với 0 ≤ j < N và N là số nguyên dương nhỏ nhất sao cho rN+1 = 0)
Khi ấy, ước chung lớn nhất của a, b là rN: gcd(a,b) = rN
Trong thực tế RSA thường sử dụng định lý mở rộng của định lý Euclide, được phát biểu và chứng minh bởi nhà toán học Bezout, người Pháp Định lý này thiết lập quan
hệ giữa 2 số nguyên a, b cho trước với ước số chung lớn nhất cuả chúng Cho 2 số
nguyên dương a, b, giả sử a > b ≥ 1, ta luôn tìm được 2 số nguyên (có thể âm) x và y
sao cho ax + by = gcd(a,b) Ta cũng sẽ phát biểu định lý này dưới dạng thuật toán như sau:
Trang 19Định lý Bezout (tìm quan hệ giữa 2 số nguyên dương với ước chung lớn nhất của
(N là số nguyên dương nhỏ nhất sao cho rN+1 = 0)
Định lý Bezout (nhiều tài liệu gọi là Euclide mở rộng) quan trọng, đặc biệt với RSA,
vì nó cho phép tính số nghịch đảo của một số cho trước trong tập các số nguyên dương
ℤn = {0, 1, …, n-1}
Một số nguyên a thuộc ℤn được gọi là khả nghịch nếu tồn tại số nguyên b cũng thuộc
ℤn sao cho ab mod n = 1 Khi ấy b được gọi là nghịch đảo của a, ký hiệu b a-1
(mod n)
Để tính nghịch đảo của số a (điều kiện là a phải nguyên tố cùng nhau với n, nghĩa là gcd(a, n) = 1), sử dụng thuật toán Bezout ta tính được x và y thỏa:
ax + ny = gcd(a, n) = 1
thực hiện phép chia lấy phần dư cho n, ta có
ax mod n + ny mod n = 1 mod n
ax mod n + 0 = 1 mod n
hay
x a-1
(mod n)
Để nhị phân hóa các thuật toán trên, ta có 2 ghi chú quan trọng sau:
Ghi chú 2.1: cho 2 số nguyên dương x và y, giả sử x và y cùng lớn hơn hay bằng 2 Ta
biết rằng, mọi số nguyên đều có biểu diễn duy nhất dưới dạng tích của các số nguyên
tố (định lý cơ bản của số học) Như vậy, từ biểu diễn của x và y:
Trang 20gcd 𝑥, 𝑦 = 2min (𝑥 2 ,𝑦 2 )gcd(𝑥1, 𝑦1),
Khi y lẻ, gcd(x, y) = gcd(x1, y)
Khi x chẵn và y lẻ, gcd(x, y) = gcd(x/2, y)
Ghi chú 2.2: nếu x và y là hai số nguyên lẻ khác nhau,
gcd(x,y) = gcd(|x – y|/2, min(x,y))
2.2.1.2 Nhị phân hóa phép nghịch đảo modulo
Thuật toán Euclide Nhị phân hóa: Tìm ước chung lớn nhất (gcd) của hai số x, y
Thuật toán 2.1: Euclide nhị phân hóa tìm gcd(x,y)
Ghi chú khi cài đặt:
- Dòng lệnh số 3, để gán g = 1, ta chỉ cần bật bit thấp nhất của biến g
Trang 21- Dòng lệnh số 4, để kiểm tra một số có phải là số chẵn hay không ta chỉ cần kiểm tra xem bit thấp nhất của biến tương ứng có tắt hay không
- Các lệnh trong thân của lệnh lặp số 4, phép chia/nhân cho 2 sẽ được cài đặt bằng các phép shift tương ứng
Thuật toán Bezout Nhị phân hóa
b While (v is even)
y = y/2;
if (C and D are even) then C = C/2, D = D/2 else C = (C + y)/2, D = (D – x)/2
c If(u >= v)
Then u = u –v, A = A – C, B = B – D
Trang 232.2.1.3 Tính hiệu quả và khả năng cứng hóa của thuật toán
Trong thuật giải trên, cài đặt phần cứng phép toán chia cho 2 sử dụng phép dịch 1 bit sang phải, phép toán nhân cho 2 dịch 1 bit sang trái, phép toán kiểm tra chẵn lẻ đưa về kiểm tra bit cuối cùng là 0 hay 1 Do các phép toán đều thực hiện trên bit nên tốc độ của thuật giải được giảm đáng kể, đồng thời thích hợp để thực hiện cứng hóa
2.3 Phép nhân nhanh modulo và phép lũy thừa nhanh modulo
2.3.1 Phép toán trên vành ℤm
Trong phần này, ta sẽ xem xét các thuật toán tính toán trên các số nguyên trong tập ℤm
= {0, 1, …, m – 1}, với m là một số nguyên dương
Một số nguyên x không thuộc tập ℤ m này sẽ được xét qua một số tương đương y = x mod m, là một số thuộc ℤ m, ta ký hiệu:
x y (mod m)
Trước hết, ta có các ghi chú sau:
Ghi chú 3.1: nếu x và y thuộc ℤ m,
(x + y) mod m = x + y nếu (x + y) < m;
(x + y) mod m = x + y – m nếu (x + y) ≥ m
(x – y) mod m = x + m – y nếu x < y;
(x – y) mod m = x – y nếu x ≥ y
Ghi chú này giúp cài đặt phép cộng/trừ mod một cách hiệu quả
Ghi chú 3.2: nếu x và y cùng thuộc ℤ m , thì 0 ≤ xy ≤ m2 – 1
Và nếu k là một số nguyên dương thỏa điều kiện:
Trang 24Công thức (*) gợi ý khi cài đặt, ta không nên thực hiện lại các kết quả đã tính trước đó,
nghĩa là, ở bước thứ i, ta đã tính được xb i , thì bước thứ i+1, ta không phải tính lại giá
trị này nữa
Cũng lưu ý là khi sử dụng cơ sở 2 (b = 2), phép nhân cho 2 thực chất là phép shift, và
phép lũy thừa 2i thực chất là i lần shift
Ghi chú 3.4: để tính x p , với x là số nguyên thuộc ℤ m, và p là một số nguyên dương, ta
nên biểu diễn p dạng nhị phân 𝑝 = 0≤𝑖≤𝐼𝑝𝑖2𝑖, khi ấy
phải thực hiện I lần phép nhân Ta biết rằng chi phí cho phép nhân rất cao Vì thế, ta
có thể thay đổi quy trình tính như sau chi phí tính toán sẽ rút gọn hơn:
(1) y = 1
(2) (I ≥ i ≥ 0) y = y2 mod m, If (pi = 1) Then y = yx mod m
(3) Return y
Trong quy trình mới này, vì y ban đầu bằng 1 (bước số 1), nên y = y2 vẫn sẽ bằng 1
cho đến khi bit đầu tiên của p bật lên (p i = 1) Như vậy, mặc dù độ phức tạp lý thuyết
so với quy trình trước khi cải tiến là như nhau, nhưng trung bình thời gian tính toán thực sự của quy trình cải tiến tốt hơn nhiều
Ghi chú 3.5: trong hệ mã RSA, việc tính x k
mod n khác với việc tính x k mod m với m chung chung Thực vậy, trong RSA, n là tích của 2 số nguyên tố phân biệt: n = pq Vì thế, x k mod n sẽ bằng x k mod pq Nếu đặt
k1 = k mod (p – 1) và k2 = k mod (q – 1), sẽ có 2 số nguyên n1 và n2 sao cho
k = k1 + n1(p – 1) và k = k2 + n2(q – 1)
Trang 25Với các lưu ý này, khi chuyển sang phần cứng sẽ hiệu quả hơn rất nhiều
2.3.2 Thuật toán
2.3.2.1 Phép nhân nhanh modulo
Từ các nghiên cứu nâng cao hiệu quả khi nhị phân hóa các phép toán số học như trình bày trên, phần này khảo sát đánh giá thuật toán nhân Montgomery
, với k thích hợp Vì modulo cho một số có dạng lũy thừa của 2
(r = 2k) sẽ nhanh hơn rất nhiều
3 Định lý Fermat: với mọi số nguyên dương a, ap-1 mod p = 1 nếu p là số nguyên tố
Trang 262.3.2.1.2 Trình bày thuật toán
Với a b n, , là các số nhị phân k bit Giả sử ta có 2k1 n 2k Chọn r2k sao cho r
và n là hai số nguyên tố cùng nhau gcd r n, 1
(Trong trường hợp RSA, n luôn là số lẻ, và ta luôn có điều này.)
Với mọi số nguyên an, ta định nghĩa n residue với r tương ứng là
mod
aa r n, đây chính là tập hợp i r mod n | 0 i n 1
Thuật toán Montgomery trình bày cách tính nhanh tích của hai số nguyên trong lớp
n residue Cho a và b thuật toán nhân Montgomery thực hiện tính toán
1
mod
R a b r n Trong đó 1
r là phần tử nghịch đảo của r (mod n)
Kết quả R chính là số dư trong lớp thặng dư n residue của phép nhân
mod
R a b n
Lưu ý là để thực hiện, cần tính trước 1
r và n thỏa ' r r 1 n n' 1 Việc tính r1 và '
n có thể thực hiện dễ dàng thông qua thuật toán Bezout như trình bày trong phần 2
Thuật toán nhân Montgomery thực hiện tính toán : u a b r1 mod n và chi tiết cài đặt
Trang 27Và phép tính tích modulo, x = a.b mod n, được thực hiện nhanh dùng thuật toán sau:
2.3.2.2 Phép lũy thừa nhanh modulo
Thuật toán nhân Montgomery cũng chính là hạt nhân để tính nhanh lũy thừa modulo mod
b
a n :
Trang 28 Tính x cho x1 : ta có x x r mod n 1.16 mod 13 3
Bước 5 và 6 trong thuật toán mô tả chi tiết như sau :
Cụ thể các bước được thực hiện như sau :
Trang 29Vậy x = 4 là kết quả cuối cùng
2.3.2.4 Tính hiệu quả và khả năng cứng hóa của thuật toán
Bằng cách biến đổi từ modulo cho số n bất kì về modulo cho r2kthích hợp, phép nhân và phép lũy thừa modulo được chuyển về thực hiện chủ yếu bằng các phép dịch bit vì vậy rất hiệu quả và dễ dàng cài đặt phần cứng Việc biến đổi chỉ sử dụng thuật toán Bezout nhị phân nên cũng chỉ sử dụng các phép dịch bit
2.4 Xây dựng giải thuật sinh số nguyên tố an toàn và hiệu quả
2.4.1 Cơ sở toán học
Như ta đã biết, hạt nhân của hệ mã RSA được xây dựng trên các số nguyên tố lớn Khó khăn nằm ở chỗ “lớn” của các số nguyên tố cần dùng (RSA an toàn cần các số nguyên
tố tối thiểu 512 bit)
Trong hệ mã RSA, như ta đã biết, ta cần tìm ra 2 số nguyên tố lớn Phương pháp trực quan là sinh một số ngẫu nhiên và kiểm tra xem nó có phải là số nguyên tố hay không Như vậy, ta cần giải 2 bài toán liên quan sau:
(1) Kiểm tra số nguyên tố Cho một số nguyên dương lớn4, hỏi đó có phải là số nguyên tố hay không ?
(2) Tạo số nguyên tố Sinh ra một số nguyên tố ngẫu nhiên lớn
Theo định nghĩa, một số nguyên dương n là số nguyên tố nếu nó chỉ chia hết cho 1 và cho chính nó Nghĩa là,
(1 < i < m) gcd(i, n) = 1
Vị từ trên thực chất là thuật toán vét cạn để kiểm tra một số có là nguyên tố hay không Thực tế, ta không cần kiểm tra mọi số nhỏ hơn n có phải là ước số của n hay không mà
4 Trong đề tài này, các số nguyên tố có số bit là 512
Trang 30chỉ cần kiểm tra tới n là đủ Tuy vậy, khi n rất lớn (512 bit chẳng hạn), thì số n cũng dài bằng nửa số bit của số n (tương ứng với cỡ 2256
phép thử) Chi phí để kiểm tra một số như vậy là quá lớn Vì thế, cần khảo sát các thuật toán hiệu quả hơn
Trước hết, ta có các ghi chú sau
Ghi chú 4.1: mọi số nguyên tố lớn hơn 2 đều là số lẻ Vì thế, một số lẻ n = 2m + 1 là
số nguyên tố nếu và chỉ nếu thỏa tiêu chí Fermat5:
𝑏 < 𝑛, 𝑏2𝑚 ≡ 1 (𝑚𝑜𝑑 𝑛)
Ghi chú 4.2: Nếu n = 2m + 1 và tồn tại b, 0 < b < n, để ghi chú 4.1, sai, thi chắc chắn n
không phải là số nguyên tố
Từ hai ghi chú trên, một số nguyên lẻ luôn có dạng
thì n được xem là số nguyên tố, ta gọi là số giả nguyên tố cơ sở b
(Việc biểu diễn dạng 2r m để thực hiện phép tính lũy thừa modulo cho hiệu quả.)
Ghi chú 4.3: một số giả nguyên tố chưa chắc là số nguyên tố Thực vậy, số 2047 thỏa
điều kiện Fermat với b = 2, hay 2047 là số giả nguyên tố cơ sở 2, nhưng ta cũng biết
2047 = 23 89, là một hợp số
Ghi chú 4.4: một số là giả nguyên tố của nhiều cơ sở khác nhau thì khả năng là thực
nguyên tố càng cao Thực vậy, dưới 1016, người ta chưa tìm ra được một phản ví dụ nào chứng tỏ một số đồng thời là giả nguyên tố cơ sở 2 và cơ sở 3 lại không phải là số nguyên tố Một ý tưởng tương tự là một số là giả nguyên tố của một cơ sở ngẫu nhiên thì khả năng là số nguyên tố cũng cao Tính nguyên tố cao trong trường hợp này được ủng hộ bởi tính ngẫu nhiên của cơ sở
Từ nhận xét trên, ta có thuật toán kiểm tra số giả nguyên tố như sau:
(1) Lấy ngẫu nhiên một số nguyên tố b làm cơ sở để kiểm tra
(2) Tìm số nguyên r và số lẻ m sao cho n – 1 = 2rm
5 Đinh lý Fermat nhỏ: p nguyên tố nếu chỉ nếu với mọi b nguyên dương b p-1 mod p = 1
Trang 31(3) Với mọi 1 ≤ i ≤ r, kiểm tra nếu (𝑏2𝑖𝑚 𝑚𝑜𝑑 𝑛 ≠ 1) thì Return False
(4) Return True
Trong thuật toán trên, r và m được xác định nhanh như sau:
Gọi nknk-1…n1n0 là chuỗi bit biểu diễn nhị phân của n, nghĩa là
𝑛 = 𝑘𝑖=0𝑛𝑖2𝑖,
Thì r = q và m là số nguyên (k – q) bit, với q là bit thứ 2 có giá trị bằng 1 tính từ trái sang Nghĩa là nếu n = n k …n q+1 10…01, thì r = q và m = n k …n q+11
Bây giờ ta xét đến bài toán thứ 2, bài toán sinh số nguyên tố lớn ngẫu nhiên
Thuật toán sau sinh ra một số nguyên tố lớn dựa trên định lý sau:
Định lý: giả sử n – 1 là tích của 2 số F và Q, n – 1 = FR, trong đó R <n, và F có biểu diễn cơ bản là 𝐹 = 𝑠 𝑝𝑖𝑎𝑖
𝑖=1 , với pi là số nguyên tố nhỏ Giả sử thêm là tồn tại một số nguyên dương b sao cho:
𝑏𝑛 −1 ≡ 1 (𝑚𝑜𝑑 𝑛) và
gcd 𝑏
𝑛 −1
𝑝 𝑖 , 𝑛 = 1, ∀𝑖 = 1,2, … , 𝑠
Và số giả nguyên tố có d ký số được sinh như sau:
(1) Sinh ngẫu nhiên số q có d/2 + 1 chữ số
(2) Chọn r < q thỏa 1 + rq ± 1 (mod 6)
(3) Nếu p = rq + 1 là số giả nguyên tố cơ sở 2 và giả nguyên tố cơ sở 3 thì theo định lý trên, p là số nguyên tố cần tim: Return p
(4) Nếu không, r = r + 6
(5) Quay lại bước (2)
Lưu ý là thuật toán trên là không thực sự hiệu quả và số nguyên tố tạo ra vẫn là số giả nguyên tố Một lưu ý khác là số nguyên tố tạo bằng thuật toán trên không đảm bảo sẽ sinh ra một hệ mã an toàn Một hệ RSA an toàn nếu các số nguyên tố cấu thành nó là các số nguyên tố mạnh, như ta sẽ thấy trong các thực nghiệm sau Tuy nhiên, thuật toán này gợi ý các hướng nghiên cứu sinh số nguyên tố như ta khảo sát và thực nghiệm
Trang 322.4.2.2 Thuật toán phát sinh số nguyên tố ngẫu nhiên cải tiến
Một cải tiến hiệu quả của thuật toán phát sinh số nguyên tố là trước khi gọi hàm Miller Rabin kiểm tra tính nguyên tố là thử chia số n cho lần lược các số nguyên tố nhỏ hơn
2000 để kiểm tra n có các ước số nguyên tố nhỏ hơn 2000 hay không
(Việc kiểm tra này giảm tới 80% thời gian phát sinh số nguyên tố so với thuật toán gốc.)
2.4.2.3 Thuật toán phát sinh số nguyên tố mạnh Gordon
Trước khi các phương pháp phân tích trường hợp đặc biệt được đề xuất, hàng loạt các
đề xuất liên quan đến số nguyên tố có một số tính chất đặc biệt đã được đưa ra Do những tính chất đặc biệt đó, cơ hội để các phương pháp phân tích như trình bày ở trên thành công là rất nhỏ Những số nguyên tố có những tính chất đặc biệt đó được gọi là
số “nguyên tố mạnh” Lý do cho sự cần thiết này là để bảo vệ trước các thuật toán phân tích đặc biệt như thuật toán “rho” và “pollard”
Định Nghĩa Một số nguyên tố p được xem là một số nguyên tố mạnh nếu nó thỏa
mãn các điều kiện sau:
(i) p là một số nguyên tố lớn
(ii) Thừa số nguyên tố lớn nhất của p-1 gọi là p- lớn Nghĩa là p=a-p- + 1 với số nguyên a-
và số nguyên tố lớn p- (iii) Thừa số nguyên tố lớn nhất của p- -1, gọi là p lớn Nghĩa là p- = a p +1 với số nguyên a và số nguyên tố lớn p
(iv) Thừa số nguyên tố lớn nhất của p+1, gọi là p+ lớn Nghĩa là p = a+p+-1 với số nguyên a+ và số nguyên tố lớn p+
“Lớn” ở đây tùy thuộc vào các phương pháp phân tích hiện tại Thường thì kích thước của p tối thiểu là 256 bit còn kích thước của các thừa số p-, p , p+ trên 100 bit
Trong thực tế cài đặt, một số nguyên tố gọi là mạnh khi nó chỉ cần thỏa mãn một số các điều kiện trên, thường là 2 tiêu chí đầu (i) và (ii)
Trang 33Thuật toán Gordon
1 Tìm p và p+ là các số nguyên tố ngẫu nhiên bằng thuật toán tìm kiếm tăng
2 Tính p- là số nguyên tố nhỏ nhất có dạng: p- = a p + 1, với a = là một số chẵn nào
Bằng cách điều chỉnh độ dài (theo bit) của các số nguyên tố 𝑝−−và p+và các giá trị
𝑎−−và 𝑎, ta sẽ có thể điều chỉnh được số nguyên tố 𝑝 có kích thước mong muốn Lưu ý rằng số bit của 𝑝−và 𝑝+xấp xỉ một nửa số bit của 𝑝 trong khi độ số bit của 𝑝−−chỉ ít hơn 𝑝− một chút
Gordon chứng minh được thuật toán của ông chỉ chậm hơn 19% so với thuật toán tìm
số nguyên tố ngẫu nhiên cùng kích thước Tuy nhiên, Gordon mô tả thuật toán tìm số nguyên tố trong bước (1) là thuật toán phát sinh số nguyên tố ngẫu nhiên cải tiến nên khi sử dụng phiên bản cải tiến này, tốc độ tổng thể của thuật toán phát sinh số khả nguyên tố mạnh Gordon sẽ tăng lên đáng kể
2.4.2.4 Thuật toán kiểm tra số nguyên tố - Thuật toán Rabin-Miller
Đây là thuật toán dùng để kiểm tra một số có phải là số nguyên tố hay không Là thuật toán thuộc nhóm Monte Carlo được sử dụng trong việc khẳng định hay phủ định một vấn đề nào đó Câu trả lời luôn có và là „yes‟ hoặc „no‟ Trong thuật toán Miller Rabin
là thuật toán trả lời „yes‟cho vị từ “số nguyên dương n là hợp số” ;nghĩa là câu kết luận
số n là hợp số luôn luôn đúng, còn n là số nguyên tố có khả năng sai Nhưng nếu áp
dụng thuật toán k lần với các giá trị a khác nhau thì xác suất sai là 1
04
k
với k đủ
lớn, nghĩa là khả năng sai là rất thấp
Thuật toán Miller Rabin
Phân tích số nguyên dương n dưới dạng n2t u1
Chọn ngẫu nhiên số nguyên dương a1, 2, ,n1
Tính xa u modn
ifx1 mod pthen
Trang 34Kết luận n là số nguyên tố và dừng thuật toán
Kết luận n là hợp số và dừng thuật toán
Thuật toán 4.1:Mã giả thuật toán Miller-Rabin
Thuật toán4.2: Mã giả hàm Witness(a,n)
Trang 35Thuật toán4.3: Mã giả hàm tính lũy thừa Modular-Exponentiation(a,b,n)
2.4.3 Tính hiệu quả của thuật toán
Thuật toán sinh số nguyên tố ngẫu nhiên sử dụng thuật toán Miler Rabin để kiểm tra một số phát sinh ngẫu nhiên có phải là số nguyên tố hay không Bằng phương pháp chia thử với các số nguyên tố nhỏ hơn 2000 đã giảm được 80% thời gian so với thuật toán ban đầu Ngoài ra, trong thuật toán Miler-Rabin sử dụng module phép nhân modulo Montgomery nên giảm thiểu tối đa thời gian và phù hợp với việc cài đặt phần cứng
2.5 Phân tích và xây dựng thuật giải sinh khóa RSA
2.5.1 Cơ sở toán học
Đề tài này nhằm mục đích cài đặt phần cứng các hệ thống mã hóa Hai hệ thống sẽ được cài đặt gồm RSA (cho mục đích truyền khóa) và hệ mã ZUC (cho mục đích mã hóa dữ liệu)
RSA là hệ mã bất đối xứng và được xây dựng trên nguyên lý hàm một chiều có cửa sập và được mô tả một cách tổng quát như sau
Cho các tập hữu hạn S và T Hàm một chiều
f : S T
là hàm khả nghịch thỏa các điều kiện sau:
(1) f dễ thực hiện Nghĩa là cho x S, có thể tính được y = f(x) dễ dàng
(2) f-1, hàm ngược của f, khó thực hiện Nghĩa là cho y T, rất khó tìm được x: x =
f -1(y)
(3) f -1 có thể tính dễ nếu có một số thông tin
Trang 36Hai điều kiện đầu tạo thành một hàm một chiều, và điều kiện thứ (3) cho phép tạo của sập (trap-door) Chính nhờ trap-door, ta có thể xây dựng được các hệ mã bất đối xứng,
mã bằng một khóa và giải mã bằng khóa khác
Hàm f : pq n là hàm một chiều có cửa sập với p và q là các số nguyên tố rất lớn Thực vậy, ta có thể dễ dàng thực hiện phép nhân n = pq (độ phức tạp thời gian đa thức), nhưng tính f -1 thì lại là vấn đề khó, như mô tả trong giả thuyết sau
Conjecture: bài toán phân tích ra thừa số nguyên tố là bài toán khó
Từ giả thuyết trên và nguyên tắc hàm một chiều có cửa sập, ba nhà toán học, R Rivest, A Shamir, và L Adleman, đã xây dựng hệ mã nổi tiếng RSA
Từ định lý RSA trong phần 1, giao thức mã hóa RSA được mô tả như sau:
Ghi chú 5.1: Bài toán tính lũy thừa d từ khóa công khai (n, e) và bài toán phân tích ra
thừa số nguyên tố là hai bài toán tương đương Vì thế, tính an toàn của RSA đòi hỏi
các số nguyên tố p và q phải rất lớn để việc phân tích n = pq là hầu như không thể
thực hiện trên các hệ thống máy tính hiện nay
6 Với khả năng của máy tính hiện nay, RSA an toàn cần tối thiểu số nguyên tố từ 512 bit trở lên
Trang 37Ghi chú 5.2: hệ mã RSA vẫn đúng cho trường hợp nhiều số nguyên tố khác nhau, với
lưu ý là n = p1…pm với p i, 1 ≤ i ≤ m là các số nguyên tố lớn khác nhau, thì (n) = (p1 –
1)…(p m – 1) Trong trường hợp chỉ có 1 số nguyện tố, m = 1, thi n = p và (n) = (p –
1), bài toán phân tích ra thừa số không còn ý nghĩa trong trường hợp này
Việc phân tích độ an toàn của RSA sẽ được khảo sát sau Tuy nhiên, có thể tóm tắt ở đây một số khả năng tấn công RSA
Cho khóa công khai (n, e) và bản mã c = m mod (n) Trên quan điểm thám mã, ta muốn biết bộ ba (n, e, c) bị phá khó như thế nào ? RSA có thể được thám mã theo các cách như sau:
(1) Phân tích n ra thừa số nguyên tố Thực vậy, nếu phân tích được n thành p và q,
ta có thể xác định được (n) = (p – 1)(q – 1) một cách dễ dàng Từ đó, sử dụng
thuật toán Bezout, ta có thể tìm được khóa cá nhân d từ khóa công khai (n, e)
(2) Tính (n) mà không cần phân tích n Rõ ràng, nếu biết (n), sử dụng thuật toán
Bezout ta có thể dễ dàng xác định được khóa cá nhân d, chính là nghịch đảo của
e (mod (n)) Tuy nhiên, bài toán tìm (n) cũng dẫn về bài toán phân tích n Thực vậy,
có thể được phân tích dung bất kỳ bội số nào của (n)
(4) Tính căn bậc e của c (theo modulo n) Rõ ràng, tiến trình giải mã RSA chính là tính căn bậc e của c (mod n) Nghĩa là bài toán giải mã là bài toán tìm nghiệm
Hiển nhiên phải giải phương trình đồng dư
c me (mod n)
Khi (n, e, c) cho trước, ta có thể thay m = 0, 1, 2, … cho đến khi tìm được một
m thỏa mã phương trình đồng dư trên Trên lý thuyết, có thể liệt kê tất cả các
phần tử của một trường hữu hạn Nhưng trong thực tiễn, việc này hầu như không thể khi n quá lớn
Trang 38Từ đó, Rivest, Shamir và Adleman phỏng đoán giả thuyết sau:
Conjecture RSA: mọi phương pháp thám mã RSA phải khó như bài toán phân tích ra
thừa số nguyên tố
Tuy được bảo đảm bằng giả thuyết RSA, nhưng như cách mô tả các thám mã nêu trên,
ta thấy RSA có thể không an toàn khi
(1) Các số nguyên tố mặc dù lớn nhưng có dạng đặc biệt Chẳng hạn các số nguyên
tố Mersenne7, hay nói chung là các số nguyên tố không phải số nguyên tố mạnh, như Gordon định nghĩa
(2) Khóa cá nhân nhỏ Hiện nay, nhiều công trình đã chứng minh được là nếu kích thước (theo bit) của khóa cá nhân d nhỏ hơn ¼ kích thước của n, thì d có thể được phục hồi từ khóa công khai (n, e).8
(3) Hiển nhiên, e cũng không được quá nhỏ Thực vậy, nếu e quá nhỏ, 3 chẳng hạn,
có thể vét cạn, hoặc sử dụng định lý Số dư Trung Hoa để phục hồi m từ (n, e, c).9
Tóm lại, công việc cần thiết trong nội dung này là:
(1) Phát sinh các số nguyên tố mạnh
(2) Tạo khóa cá nhân có kích thước lơn hơn ¼ kích thước khóa công khai n
(3) Tạo khóa công khai e không quá nhỏ để có thể vét cạn hoạc có thể giải bằng phương pháp số dư Trung Hoa
2.5.2 Thuật toán
1 pBitLength = strength/2
2 qBitLength = strength – pBitLength
3 Phát sinh số nguyên tố mạnh p, độ dài pBitLength
4 Phát sinh số nguyên tố mạnh q, độ dài qBitLength
5 Tinh phiN = (p-1)(q-1)
6 Phát sinh số d < phiN thỏa gcd(d,phiN) = 1 và d < n1/4
7 Tính e = d-1, sử dụng thuật toán Bezout
8 Trả về (n,e) và (n,d)
- Hai dòng lệnh số 2 và số 3 để đảm bảo các số nguyên tố p và q được sinh ra là các số nguyên tố dạng Gordon, các số nguyên tố mạnh Các số nguyên tố này được phát sinh bằng chương trình GenStrongPrime của công việc trước
7 Là số nguyên tố có dạng n = 2 p + 1, với p cũng là số nguyên tố
8 M Wiener “Cryptanalysis of Short RSA Secret Exponents” IEEE Trans Inform Theory 36, 1990
9
Christophe Coupe, Phong Nguyen, and Jacques Stern “The Effectiveness of Lattice Attacks Against Exponent RSA” Public Key Cryptography ‟99
Trang 39Low Hai dòng lệnh số 6 và số 7 để tránh sinh ra các khóa yếu Là khóa cá nhân có kích thước nhỏ hơn ¼ kích thước n và/hay khóa công khai e quá bé
2.5.3 Tính hiệu quả và khả năng cứng hóa của thuật toán
Trong thuật toán sinh khóa ở trên, ở bước 3 và 4 Các số nguyên tố p, q được sinh bằng
thuật toán sinh số nguyên tố mạnh Gordon nên đảm bảo an toàn với các phương pháp tấn công phân tích đặc biệt Ngoài ra, việc sinh khóa cá nhân d thỏa d < n1/4 đảm bảo chống tấn công liên phân số10 và tấn công dàn11
Khả năng cứng hóa của thuật toán này phụ thuộc vào các module đã cài đặt trước đó như module sinh số nguyên tố, thuật toán Bezout, phép nhân nhanh Montgomery
2.6 Nhị phân hóa hệ mã RSA
2.6.1 Thuật toán
2.6.1.1 Mô hình các module cài đặt RSA
Hình 2.1: Các module cài đặt RSA
Để cài đặt thuật toán RSA cần có các module sau:
Trang 40Low-2 MulMod Thực hiện phép tính nhân có modulo Tham số đầu
vào là a b n Kết quả trả về là , , a b* modn
3 GenKey Phát sinh khóa cho thuật toán RSA, tham số đầu
vào là hai số nguyên tố ,p q Kết quả trả về là
dụng để phát sinh khóa GenKey
5 GenPrime Phát sinh số nguyên tố lớn p q sử dụng làm khóa ,
trong RSA Tham số đầu vào là số lượng bits của số cần phát sinh
6 Gordon Thuật toán phát sinh số nguyên tố Sử dụng để sinh
số nguyên tố GenPrime
2.6.1.2 Chi tiết cài đặt RSA
Kiến trúc mô hình cài đặt
Hình 2.2: Chi tiết cài đặt RSA