BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ QUỐC PHÒNG VIỆN KHOA HỌC VÀ CÔNG NGHỆ QUÂN SỰ NGUYỄN THỊ THU NGA NGHIÊN CỨU MỘT SỐ GIẢI PHÁP NÂNG CAO HIỆU NĂNG CỦA THUẬT TỐN MÃ HĨA LUẬN ÁN TIẾN SĨ TOÁN HỌC HÀ NỘI - 2022 NGUYỄN THỊ THU NGA NGHIÊN CỨU MỘT SỐ GIẢI PHÁP NÂNG CAO HIỆU NĂNG CỦA THUẬT TỐN MÃ HĨA Ngành: Cơ sở tốn học cho tin học Mã số: 46 01 10 LUẬN ÁN TIẾN SĨ TOÁN HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS LÊ MỸ TÚ TS NGUYỄN NGỌC CƯƠNG HÀ NỘI - 2022 i LỜI CAM ĐOAN Tôi xin cam đoan, cơng trình nghiên cứu riêng tơi Những nội dung, số liệu kết trình bày luận án hoàn toàn trung thực chưa có tác giả cơng bố cơng trình khác Các tài liệu tham khảo trích dẫn đầy đủ Hà Nội, ngày tháng năm 2022 Tác giả Nguyễn Thị Thu Nga LỜI CẢM ƠN Luận án thực Viện Khoa học Cơng nghệ Qn - Bộ Quốc phịng Lời đầu tiên, NCS xin bày tỏ lòng biết ơn sâu sắc tới Phó Giáo sư Tiến sĩ Lê Mỹ Tú, Tiến sĩ Nguyễn Ngọc Cương, tận tình giúp đỡ, dẫn cho NCS phương pháp nghiên cứu, kinh nghiệm, kiến thức khoa học kiểm tra, đánh giá kết nghiên cứu cho NCS NCS xin cảm ơn Ban Giám đốc Viện Khoa học Công nghệ Quân sự, Thủ trưởng cán bộ, nhân viên Phòng Đào tạo, Viện Công nghệ Thông tin sở đào tạo đơn vị quản lý tạo điều kiện, hỗ trợ, giúp đỡ NCS suốt trình học tập, nghiên cứu NCS xin cảm ơn Ban lãnh đạo Viện Hàn lâm Khoa học Công nghệ Việt Nam, Thủ trưởng Viện Cơng nghệ Thơng tin, Phịng Cơng nghệ Giải pháp Phần mềm động viên, hỗ trợ, tạo điều kiện cho NCS học tập, nghiên cứu NCS xin bày tỏ lòng biết ơn chân thành tới thầy, cô Viện Khoa học Công nghệ quân sự, nhà khoa học quân đội bảo nâng đỡ kết học tập, nghiên cứu NCS NCS xin cảm ơn bạn bè, đồng nghiệp nhiều người động viên, chia sẻ, giúp đỡ NCS suốt thời gian học tập, nghiên cứu Sau cùng, NCS tri ân công ơn bố mẹ, giúp đỡ gia đình xin dành lời cảm ơn đặc biệt tới chồng con, người bên cạnh, động viên chỗ dựa mặt giúp NCS vượt qua khó khăn để hồn thành cơng việc Tác giả MỤC LỤC Trang DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT .v DANH MỤC CÁC BẢNG x DANH MỤC CÁC HÌNH VẼ xi MỞ ĐẦU Chương TỔNG QUAN VỀ THUẬT TỐN MÃ HỐ .7 1.1 Thuật tốn mã khối 1.2 Mã hoá bất đối xứng 15 1.2.1 Thuật tốn mã hóa RSA .16 1.2.2 Thuật toán dựa đường cong Elliptic 17 1.3 Tình hình nghiên cứu ngồi nước việc nâng cao hiệu số thuật toán mã hóa 18 1.3.1 Tình hình nghiên cứu ngồi nước 18 1.3.2 Tình hình nghiên cứu nước 21 1.3.3 Một số vấn đề tồn hướng nghiên cứu phát triển 23 1.4 Kết luận chương 26 Chương NÂNG CAO ĐỘ AN TOÀN VÀ HIỆU NĂNG CAO THUẬT TỐN MÃ HĨA AES 27 2.1 Một số khái niệm .27 2.2 Thuật toán AES .30 2.3 Nâng cao độ an toàn hiệu cao thuật toán AES 32 2.3.1 Sự khuyếch tán tầng biến đổi tuyến tính mã khối có cấu trúc SPN 32 2.3.2 Giải pháp nâng cao độ an tồn thuật tốn AES 37 2.3.3 Nâng cao hiệu thuật toán AES cải tiến với ma trận MDS 43 2.4 Kết luận chương 53 Chương NÂNG CAO ĐỘ AN TOÀN VÀ HIỆU NĂNG THUẬT TỐN MÃ HĨA DỰA TRÊN ĐƯỜNG CONG ELLIPTIC .55 3.1 Tổng quan đường cong Elliptic 55 3.1.1 Cơ sở toán học 55 3.1.2 Nhóm điểm đường cong elliptic trường hữu hạn 58 3.1.3 Nhân vô hướng điểm đường cong Elliptic 60 3.1.4 Đường cong Elliptic trườnghữu hạn Fq 60 3.2 Phương pháp trao đổi khố mã an tồn hệ mật dựa đường cong Elliptic 61 3.2.1 Bài toán logarit rời rạc 61 3.2.2 Ánh xạ song tuyến 62 3.2.3 Đường cong Elliptic .64 3.2.4 Các giao thức mật mã sử dụng ánh xạ song tuyến .68 3.2.5 Kết thử nghiệm ứng dụng 71 3.3 Nghiên cứu, đề xuất xây dựng thuật toán hiệu nhân nhanh đa thức với hệ số nguyên 73 3.3.1 Biến đổi Fourier nhanh cách thực 74 3.3.2 Biểu diễn phần tử trường phép nhân nhanh vành đa thức 74 3.3.3 Sử dụng định lý phần dư Trung Hoa để phân chia tính tốn vi xử lý .81 3.3.4 Thực thuật toán nhân nhanh đa thức vi xử lý 64 bit 85 3.4 Kết luận chương 89 KẾT LUẬN 91 DANH MỤC CÁC CƠNG TRÌNH KHOA HỌC ĐÃ CƠNG BỐ .93 TÀI LIỆU THAM KHẢO .95 PHỤ LỤC PL1 DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT ≡ Dấu đồng dư ∞ Dương vơ (tương đương vói +∞) aij Byte dòng i, cột j char(K) Đặc số trưòng deg(f) Bậc đa thức f det Định thức E Ký hiệu đường cong elliptic EK (D) Hàm mã hóa AES với khóa bí mật K E() Nhóm điểm E trường E[m] Nhóm m-xoắn (m nhỏ cho mP = ) End[E] Vành tự đồng cấu E p Ký hiệu cho trường hữu hạn chứa p phần tử với p số nguyên tố 2n Ký hiệu cho trường hữu hạn chứa 2n phần tử G Một điểm E sinh nhóm cyclic cấp N g Nhóm cyclic sinh g Gcd Ước số chung lớn (greatest common divisor) gcd(a,b) Ước chung lớn a b K Khóa bí mật K** , Nhóm nhân trường đóng đại số trường Ki Khóa bí mật nút i kQ Bội k lần điểm Q, nghĩa Q + Q + + Q, k số hạng L Ánh xạ tuyến tính Tập số tự nhiên N∗ Tập hợp số tự nhiên khác Nb Số cột trạng thái Nk Số cột khóa mã O(f(n)) Hàm g(n) cho |g(n)| C|f(n)| với C số, n đủ lớn o(f(n)) Hàm g(n) cho limn g(n) / ord(g) Cấp phần tử g nhóm P Số cột trạng thái N b1 f (n) Tập số thực Tập số nguyên AES Chuẩn mã hóa tiên tiến (Advanced Encryption Standard) ASIC Vi mạch tích hợp chuyên dụng (Application-specific Integrated Circuit) Blowfish Một thuật tốn mã hóa CA Đơn vị cấp phát chứng thư (Certificate Authority) CBC Một phương thức mật mã khối CBC (Cipher Block Chaining mode) CFB Một phương thức mật mã khối dựa chế độ phản hồi mã CFB (Cipher FeedBack Mode) CIA Bí mật, tồn vẹn, sẵn sàng (Confidentiality, Intergrity, Availability) CRC Kiểm tra phần dư Cyclic (Cyclic Redundancy Check) CRT Định lý phần dư Trung Hoa (Chinese Remainder Theorem) DES Chuẩn mã hóa liệu (Data Encryption Standard) DFT Biến đổi Fourier rời rạc EC Đường cong Elliptic (EllipticCurve) ECB Chế độ mã điện tử (Electronic Codebook Mode) ECC Mật mã đường cong Elliptic (Elliptic Curve Cryptography) ECC Hệ mật đường cong Elliptic (Elliptic Curve Cryptosystem) ECDH Thuật tốn thỏa thuận khóa Diffie-Hellman dựa đường cong elliptic ECDLP Bài toán logarith rời rạc đường cong elliptic (Elliptic Curve Logarithm Problem) ECDSA Thuật toán chữ ký số dựa đường cong Elliptic (Elliptic Curve Digital Signature Algorithm) ECDSA Thuật toán chữ ký số dựa đường cong Elliptic (Elliptic Curve Digital Signature Algorithm) ECIES Hệ mã hóa tích hợp dựa đường cong elliptic (Elliptic Curve Integrated Encryption System) EMV Tiêu chuẩn toàn cầu cho giao dịch tín dụng ghi nợ dựa công nghệ chip (Europay, MasterCard, Visa) FFT Biến đổi Fourier nhanh (Fast Fourier Transform) FIPS-197 Tiêu chuẩn Xử lý thông tin Liên bang 197 (Federal Information Processing Standard) FPGA Vi mạch tích hợp cỡ lớn lập trình (Field Programmable Gate Array) GOST Chuẩn mật mã quốc gia Nga (Liên Xơ trước đây) IDEA Thuật tốn mật mã hóa liệu quốc tế (International Data Encryption Algorithm) IOT Internet of Things ISE Công cụ phần mềm thiết kế tổng hợp vi mạch cỡ lớn lập trình (FPGA) Xilinx (Integrated Software Enviroment) ISIM Một trình mơ đầy đủ tính tích hợp ISE (ISE Simulator) LOKI Mật mã khối công bố năm 1990 để thay cho mật mã DES MDS (Các ma trận, mã) khả tách có khoảng cách cực đại (Maximum Distance Separable) MIT Học viện Công nghệ Massachusetts (Massachusetts Institute of Technology) NCS Nghiên cứu sinh NIST Viện Công nghệ Chuẩn Quốc gia Hoa Kỳ (NIST) (National Institute of Standards and Technology) OFB Một phương thức mã hóa (Output Feedback) OTP Khóa mã dùng lần (One time pad) PGP Một phần mềm máy tính dùng để mã hóa liệu xác thực (Pretty Good Privacy) Q Trưịng số hữu tỉ RC5 Thuật tốn mã khối khóa đối xứng Ronald Rivest thiết kế năm 1994, (Rivest Cipher) RFID Định danh tần số vô tuyến (Radio Frequency Identification) RSA Rivest-Shamir-Adleman SPN Cấu trúc thay hoán vị (Substitution-Permutation Networds) Triple DES Ba DES (Triple Data Encription Standard) WPA Chuẩn bảo mật mạng không dây (Wi-Fi protected access) int i; ARTH_ADC(dst[0], dst[0], src, c); if (c == 1) { for (i = 1; i < len; i++) { dst[i] += 1; if (dst[i] != 0) { return 0;}}} return (int)c;} uint32_tARTH_mul_digit(uint32_t * a, int na, uint32_t b) { uint32_t c = 0; int i; for (i = 0; i < na; i++) { ARTH_MUL(a[i], a[i], b, c);} return c;} uint32_tARTH_mul_digit_add(uint32_t * a, int na, const uint32_t * b, int nb, uint32_t d) { uint32_t c = 0; int i; for (i = 0; i < nb; i++) { ARTH_MUL_ADD(a[i], b[i], d, c);} for (i = nb; i < na; i++) { ARTH_ADC(a[i], a[i], 0, c);} return c;} voidARTH_mul(uint32_t * d, const uint32_t * a, int na, const uint32_t * b, int nb) { uint32_t c; int i; int j; for (i = 0; i < na + nb; i++) { d[i] = 0;} for (i = 0; i < na; i++) { c = 0; for (j = 0; j < nb; j++) { ARTH_MUL_ADD(d[i + j], a[i], b[j], c);} d[i + j] = c;}} uint32_tARTH_mod_digit(const uint32_t * a, int na, uint32_t b) { uint32_t q = 0; uint32_t r = 0; while (na ) { ARTH_DIV(q, r, r, a[na], b)} return r;} intARTH_Fp32_crt_init(ARTH_Fp32_crt * crt, const uint32_t * p, int n) { int i, j; crt->n = n; /* Alokacja pamięci */ if ((crt->p = calloc(crt->n, sizeof(uint32_t))) == 0) { return -1;} if ((crt->c = calloc(crt->n, sizeof(uint32_t))) == 0) { free(crt->p); return -1;} if ((crt->pp = calloc(crt->n * crt->n, sizeof(uint32_t))) == 0) { free(crt->p); free(crt->c); return -1;} /* Copy số nguyên tố */ for (i = 0; i < n; i++) { crt->p[i] = p[i]; } /* Tính tốn hệ hệ sơ cho thuật tốn Garner: * * q[i] = (p[0]*p[1]* *p[i-1])^(-1) mod p[i] * pp[i*n] = p[0]*p[1]* *p[i-1] */ for (i = 0; i < n; i++) { crt->c[i] = 1; for (j = 0; j < i; j++) { crt->c[i] = mod_mul(crt->c[i], mod_exp(crt->p[j], crt->p[i] - 2, crt>p[i]), crt->p[i]);}} crt->pp[0] = 1; for (i = 1; i < n; i++) { crt->pp[i * n] = crt->p[0];} for (i = 1; i < n - 1; i++) { for (j = i + 1; j < n; j++) { crt->pp[j * n + i] = ARTH_mul_digit(crt->pp + j * n, i, crt>p[i]);}} return 0;} VoidARTH_Fp32_crt_free(ARTH_Fp32_crt * crt) { if (crt->p) { free(crt->p); crt->p = 0;} if (crt->c) { free(crt->c); crt->c = 0;} if (crt->pp) { free(crt->pp); crt->pp = 0;}} Phụ lục MODULE CHƯƠNG TRÌNH TRAO ĐỔI KHĨA #include #include "FiniteFieldElement.hpp" #include "sha256.hpp" #include "rijndael.h" namespace Cryptography { template class EllipticCurve { public: typedef FiniteFieldElement ffe_t; class Point { friend class EllipticCurve
; typedef FiniteFieldElement
ffe_t; ffe_t x_; ffe_t y_; EllipticCurve *ec_; void addDouble(int m, Point& acc) { if ( m > ) { Point r = acc; for ( int n=0; n < m; ++n ) { r += r; // doubling step } acc = r; } } Point scalarMultiply(int k, const Point& a) { Point acc = a; Point res = Point(0,0,*ec_); int i = 0, j = 0; int b = k; while( b ) { if ( b & ) { // bit is set; acc = 2^(i-j)*acc addDouble(i-j,acc); res += acc; j = i; // last bit set } b >>= 1; ++i; } return res; } void add(ffe_t x1, ffe_t y1, ffe_t x2, ffe_t y2, ffe_t & xR, ffe_t & yR) const { if ( x1 == && y1 == ) { xR = x2; yR = y2; return; } if ( x2 == && y2 == ) {xR = x1; yR = y1; return; } if ( y1 == -y2 ) {xR = yR = 0; return; } ffe_t s; if ( x1 == x2 && y1 == y2 ) { s = (3*(x1.i()*x1.i()) + ec_->a()) / (2*y1); xR = ((s*s) - 2*x1); } else { //P+Q s = (y1 - y2) / (x1 - x2); xR = ((s*s) - x1 - x2); } if ( s != ) { yR = (-y1 + s*(x1 - xR)); } else { xR = yR = 0; } } Point(int x, int y) : x_(x), y_(y), ec_(0) {} Point(int x, int y, EllipticCurve
& EllipticCurve): x_(x), y_(y), ec_(&EllipticCurve) {} Point(const ffe_t& x, const ffe_t& y, EllipticCurve
& EllipticCurve) : x_(x),y_(y), ec_(&EllipticCurve) {} public: static Point ONE; Point(const Point& rhs) {x_ = rhs.x_; y_ = rhs.y_; ec_ = rhs.ec_;} Point& operator=(const Point& rhs) {x_ = rhs.x_; y_ = rhs.y_; ec_ = rhs.ec_; return *this; } ffe_t x() const { return x_; } ffe_t y() const { return y_; } unsigned int Order(unsigned int maxPeriod = ~0) const {Point r = *this; unsigned int n = 0; while( r.x_ != && r.y_ != ) { ++n; r += *this; if ( n > maxPeriod ) break; } return n; } Point operator-() { return Point(x_,-y_);} friend bool operator==(const Point& lhs, const Point& rhs) { return (lhs.ec_ == rhs.ec_) && (lhs.x_ == rhs.x_) && (lhs.y_ == rhs.y_); } // != friend bool operator!=(const Point& lhs, const Point& rhs) { return (lhs.ec_ != rhs.ec_) || (lhs.x_ != rhs.x_) || (lhs.y_ != rhs.y_); } friend Point operator+(const Point& lhs, const Point& rhs) { ffe_t xR, yR; lhs.add(lhs.x_,lhs.y_,rhs.x_,rhs.y_,xR,yR); return Point(xR,yR,*lhs.ec} friend Point operator*(int k, const Point& rhs) { return Point(rhs).operator*=(k);} Point& operator+=(const Point& rhs) { add(x_,y_,rhs.x_,rhs.y_,x_,y_); return *this } Point& operator*=(int k) { return (*this = scalarMultiply(k,*this)); } friend ostream& operator