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 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 Ngành: Cơ sở toá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 Những nội dung, số liệu kết trình bày luận án hồn tồ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 ii LỜI CẢM ƠN Luận án thực Viện Khoa học Công nghệ Quân - 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ả iii 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 TOÁN MÃ HỐ 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 nước việc nâng cao hiệu số thuật tốn mã hóa 18 1.3.1 Tình hình nghiên cứu 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 toàn thuật toá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 iv Chương NÂNG CAO ĐỘ AN TỒ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 v 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 Ký hiệu cho trường hữu hạn chứa p phần tử với p số nguyên p tố Ký hiệu cho trường hữu hạn chứa 2n phần tử 2n 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 vi 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) / f (n) ord(g) Cấp phần tử g nhóm P4 Nb1 Số cột trạng thái 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) vii 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 viii 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) P21 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; P22 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]; } P23 /* 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;}} P24 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) { P25 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 ) P26 { 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_; } P27 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