Nghiên cứu một số phương pháp mã hóa có thể chối từ và xây dựng ứng dụng phục vụ công tác cơ yếu

72 1 0
Nghiên cứu một số phương pháp mã hóa có thể chối từ và xây dựng ứng dụng phục vụ công tác cơ yếu

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO UBND TỈNH THANH HÓA TRƯỜNG ĐẠI HỌC HỒNG ĐỨC NGUYỄN THÀNH NAM NGHIÊN CỨU MỘT SỐ PHƯƠNG PHÁP MÃ HÓA CÓ THỂ CHỐI TỪ VÀ XÂY DỰNG ỨNG DỤNG PHỤC VỤ CÔNG TÁC CƠ YẾU LUẬN VĂN THẠC SĨ MÁY TÍNH THANH HĨA, NĂM 2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO UBND TỈNH THANH HÓA TRƯỜNG ĐẠI HỌC HỒNG ĐỨC NGUYỄN THÀNH NAM NGHIÊN CỨU MỘT SỐ PHƯƠNG PHÁP MÃ HÓA CÓ THỂ CHỐI TỪ VÀ XÂY DỰNG ỨNG DỤNG PHỤC VỤ CÔNG TÁC CƠ YẾU LUẬN VĂN THẠC SĨ MÁY TÍNH Chuyên ngành: Khoa học máy tính Mã số: 8480101 Người hướng dẫn khoa học: PGS TS Trịnh Viết Cường THANH HÓA, NĂM 2022 Danh sách Hội đồng đánh giá luận văn Thạc sỹ khoa học (Theo Quyết định số: /QĐ- ĐHHĐ ngày tháng năm 2022 Hiệu trưởng Trường Đại học Hồng Đức) Học hàm, học vị Cơ quan Chức danh Họ tên Công tác Hội đồng Chủ tịch HĐ UV, Phản biện UV, Phản biện Uỷ viên Uỷ viên, Thư ký Xác nhận Người hướng dẫn Học viên chỉnh sửa theo ý kiến Hội đồng Ngày tháng năm 2022 LỜI CAM ĐOAN Em xin cam đoan luận văn “Nghiên cứu số phương pháp mã hóa chối từ xây dựng ứng dụng phục vụ công tác yếu” đề tài nghiên cứu cá nhân em hướng dẫn PGS.TS Trịnh Viết Cường, trung thực không chép tác giả khác Toàn nội dung nghiên cứu luận văn, vấn đề trình bày tìm hiểu nghiên cứu cá nhân em trích dẫn từ nguồn tài liệu có ghi tham khảo rõ ràng, hợp pháp Em xin chịu trách nhiệm hình thức kỷ luật theo quy định cho lời cam đoan Thanh Hóa, ngày 12 tháng năm 2022 Tác giả luận văn Nguyễn Thành Nam i LỜI CẢM ƠN Lời đầu tiên, em xin gửi lời cảm ơn sâu sắc đến Thầy PGS.TS Trịnh Viết Cường tận tình hướng dẫn, truyền đạt kiến thức, kinh nghiệm cho em suốt trình thực luận văn Em xin gửi lời cảm ơn đến quý thầy cô Khoa Công nghệ thông tin truyền thông, Trường đại học Hồng Đức - người truyền đạt kiến thức cho em suốt thời gian học tập trường Em xin gửi lời cảm ơn tới lãnh đạo, đồng nghiệp quan Sở Giáo dục Đào tạo Thanh Hóa tạo điều kiện thời gian để em hồn thành chương trình học Em xin gửi lời cảm ơn đến gia đình, bạn bè bạn học viên lớp thạc sĩ khoa học máy tính K13, khóa 2020-2022 ln động viên, giúp đỡ trình học tập làm luận văn Mặc dù thân cố gắng nghiên cứu với khả kiến thức có hạn nên khơng tránh khỏi cịn thiếu sót Rất mong nhận góp ý q báu từ Q Thầy, Cơ để luận văn hoàn chỉnh Một lần em xin chân thành cảm ơn! Thanh Hóa, ngày 12 tháng năm 2022 Tác giả luận văn Nguyễn Thành Nam ii MỤC LỤC LỜI CAM ĐOAN - LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT v MỞ ĐẦU 1 Lý chọn đề tài Mục tiêu nghiên cứu Đối tượng phạm vi nghiên cứu Nội dung nghiên cứu Phương pháp nghiên cứu Dự kiến kết đạt Chương GIỚI THIỆU CHUNG VỀ MÃ HÓA CÓ THỂ CHỐI TỪ 1.1 Giới thiệu chung mã hóa chối từ 1.2 Ứng dụng mã hóa chối từ 10 1.3 Các hướng nghiên cứu mã hóa chối từ 12 Kết luận chương 14 Chương MÃ HĨA CĨ THỂ CHỐI TỪ KHĨA BÍ MẬT 15 2.1 Giới thiệu chung mã hóa khóa bí mật 15 2.2 Phương pháp mã hóa chối từ dựa mã khối 17 Kết luận chương 30 Chương MÃ HĨA CĨ THỂ CHỐI TỪ KHĨA CƠNG KHAI 31 3.1 Giới thiệu mã hóa giao hốn giao thức ba bước Shamir 31 3.2 Mã hóa chối từ dựa giao thức ba bước Shamir 32 3.3 Hệ mã hóa chối từ sử dụng thuật tốn SRA 34 3.4 Hệ mã hóa chối từ sử dụng mã hóa Vernam kết hợp mã hóa ElGamal 38 Kết luận chương 42 Chương CÀI ĐẶT THỰC NGHIỆM 43 iii 4.1 Mô tả nghiệp vụ, chức công tác yếu 43 4.2 Cấu hình máy tính thực thực nghiệm 44 4.3 Kết thực nghiệm hệ mã hóa khóa bí mật chối từ 44 4.4 Mã nguồn chương trình thực nghiệm Thuật tốn 2.2 (Phụ lục) 48 KẾT LUẬN 49 TÀI LIỆU THAM KHẢO 50 iv DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT Các từ viết tắt Nghĩa tiếng Anh MHCTCT Nghĩa tiếng Việt Mã hóa chối từ OTP Advanced Encryption Standard One Time Pad RSA Rivest Shamir Adleman Hệ chữ ký điện tử RSA SRA Shamir Rivest Adleman Hệ mã hóa SRA AES XOR Chuẩn mã hóa tiên tiến Mã hóa sử dụng lần Phép tốn cộng modulo PKE Public Key Encryption Mã hóa khóa cơng khai SKE Secret Key Encryption Mã hóa khóa bí mật v MỞ ĐẦU Lý chọn đề tài Để bảo vệ thơng tin q trình truyền tin mạng lưu trữ an tồn thơng tin, phương pháp dùng mã hóa thơng tin Thơng tin sau mã hóa gọi mã giải mã biết khóa bí mật Mã hóa chối từ (MHCTCT) giải trường hợp đặc biệt mã hóa, kẻ cơng thu mã khơng biết khóa bí mật có khả (quyền lực) ép người lập mã người giải mã (hoặc hai) đưa khóa bí mật để giải mã thuật toán liên quan Để giải trường hợp phương pháp đưa người lập mã người giải mã xây dựng hai hệ thống mã hóa khác (có thể thuật tốn khóa khác thuật tốn khác khóa tham số khác) cho mã hóa hai văn khác m1 m2 cho mã m’ Như đối phương thu mã m’, để giấu thông tin m1 người lập mã người giải mã đưa hệ thống giả mạo tương ứng với m2, phương pháp gọi mã hóa chối từ Có nhiều trường hợp thực tế ta phải dùng mã hóa chối từ Thứ nhiều quốc gia xảy vấn đề, luật pháp yêu cầu phải đưa chứng chứng minh rõ ràng, trường hợp người lập mã người giải mã phải trình bày đầy đủ thuật tốn mã hóa, giải mã khóa liên quan Thứ hai, trường hợp hoạt động tình báo, điệp viên bị đối phương thu mã, điệp viên bị ép buộc phải đưa thuật tốn mã hóa, giải mã khóa bí mật liên quan Một ứng dụng thực tiễn khác bầu cử điện tử [3, 4, 5, 6], bầu cử điện tử phiếu mã hóa gửi cho trung tâm kiểm phiếu Khi người dùng A bị người dùng B “ép buộc mua chuộc” phải bầu nội dung m2, người dùng A dùng đến hệ thống mã hóa chối từ để bầu nội dung m1 đưa chứng (thuật tốn khóa) cho người dùng B bầu nội dung m2 Ngoài KẾT LUẬN Nội dung luận văn tìm hiểu nghiên cứu trường hợp đặc biệt mã hóa nhằm bảo vệ thơng tin q trình truyền tin, mã hóa chối từ Mã hóa chối từ ứng dụng nhiều trường hợp thực tế như: truyền tin mật ngành yếu, bầu cử điện tử, an toàn lưu trữ liệu, Các đóng góp luận văn sau: - Tìm hiểu chung mã hóa chối từ, mơ hình hệ mã hóa chối từ khóa bí mật mơ hình hệ mã hóa chối từ khóa cơng khai, số ứng dụng thực tiễn hướng nghiên cứu mã hóa chối từ - Trình bày hệ mã hóa chối từ khóa bí mật (khóa đối xứng) dạng mã khối hiệu Trong với ưu tính an tồn cao tốc độ mã hóa giải mã nhanh, mã khối đặc biệt với chuẩn mã hóa AES dùng phổ biến thực tế - Trình bày mã hóa chối từ khóa cơng khai, loại mã hóa có ưu điểm so với mã hóa chối từ khóa bí mật khía cạnh hai đối tác truyền tin khơng phải giao tiếp trước với Cách xây dựng hệ mã hóa chối từ khóa cơng khai dựa giao thức ba bước Shamir, dùng hệ mã hóa có tính chất giao hốn E Tùy hệ mã hóa E có tính chất giao hốn khác nhau, ta xây dựng hệ mã hóa chối từ khóa cơng khai khác Trình bày việc dùng hai hệ mã hóa E khác có tính chất giao hốn hệ SRA hệ Vernam kết hợp Elgamal để xây dựng nên hai phiên khác hệ mã hóa chối từ khóa cơng khai - Cài đặt thực nghiệm hệ mã hóa khóa bí mật chối từ dựa mã khối 49 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Nguyễn Đức Tâm, Lê Mỹ Tú (2019), "Đề xuất giao thức mã hóa khơng khóa giả xác suất chối từ sử dụng thuật tốn RSA" Tạp chí nghiên cứu KH&CN quân sự, vol 62, pp 37-45, [2] Nguyễn Đức Tâm, Lê Mỹ Tú(2019), "Đề xuất giao thức mã hóa giả xác suất chối từ sử dụng mã hóa Vernam kết hợp thuật tốn ElGamal" The 22st National Conference on Electronics, Communications and Information Technology, Hà Nội, 12 Tiếng Anh [3] Amrutiya V., Baskaran A and I N C S N (2016), "Deniable Encryption using One Time Pads”, AICTC '16 Proceedings of the International Conference [4] Ambika R., Ramachandran S., Kashwan K (2013), "Securing Distributed FPGA System using Commutative RSA Core”, Global Journal of Research In Engineering [5] Anderson R., Needham R and Shamir A (1998), "The steganographic file system”, Information Hiding Portland, Oregon, pp 73-82 [6] Barakat T (2014), "A New Sender-Side Public-Key Deniable Encryption Scheme with Fast Decryption”, KSII Transactions on Internet and Information Systems (TIIS), pp 3231-3249 [7] Benaloh J and Tunistra D (1994), "Receipt-Free Secret-Ballot Elections”, 26th STOC, pp 544-552 [8] Cohen H and Frey G (2006), Handbook of Elliptic and Hyperelliptic Curve Cryptography, Boca Raton: Chapman & Hall/CRC [9] Canetti R., Dwork C., Naor M and Ostrovsky R (1997), "Deniable Encryption”, Proceedings Advances in Cryptology - CRYPTO Lectute Notes in Computer Science Springer - Verlag Berlin, Heidelberg, New York, pp 90-104 50 [10] Czeskis A., Hilaire D., Koscher K., Gribble S., Kohno T and Schneier B (2008), "Defeating Encrypted and Deniable File Systems: TrueCrypt v5.1a and the Case of the Tattling OS and Applications”, 3rd Usenix Workshop on Hot Topics in Security [11] Chong-zhi G., Dongqing X and Baodian W (2012), "Deniable encryptions secure against adaptive chosen ciphertext attack”, ISPEC, Hangzhou, China, pp 46-62 [12] Canetti R., Sunoo P and Oxana P (2018), "Fully Bideniable Interactive Encryption”, IACR Cryptology ePrint Archive 2018: 1244 [13] ElGamal T (1985), "A public key cryptosystem and a signature scheme based on discrete logarithms”, IEEE Trans Information Theory [14] Gentry C., Peikert C and Vaikuntanathan V (2008), "Trapdoors for hard lattices and new cryptographic constructions”, STOC, Victoria, British Columbia, Canada, pp 197-206 [15] Gasti P., Ateniese G and Blanton M (2010), "Deniable cloud storage: Sharing files via public-key deniability”, WPES, Chicago, Illinois, pp 3142 [16] Gennaro R (1996), "A multi-authority election scheme which is voter efficient and receipt-free against a dynamic coercer”, Workshop on Security in Communication Networks, Amalfi [17] Herzberg A (1991), "Rump-Session presentation”, CRYPTO 199 [18] Howlade J., Nair V., Basu S and Kumar Mal A (2011), "Uncoercibility In E-Voting And E-Auctioning Mechanisms Using Deniable Encryption”,ternational Journal of Network Security & Its Applications, vol 3(2), pp 97-109 [19] Howlader J and Basu S (2009), "Sender-side public key deniable encryption scheme”, ARTCom Kottayam, Kerala, India, pp 9-13 [20] HweeHwa P., Kian-Lee T and Xuan Z (2003), "StegFS: A steganographic file system”, ICDE, Bangalore, India, pp 657-667 51 [21] Ibrahim M (2009), "A method for obtaining deniable publickey encryption”, J Netw Secur, vol 8, no 1, pp 1-9 [22] Ibrahim M (2009), "Receiver-deniable public-key encryption.”, J Netw Secur, vol 8, no 2, pp 159-165, 2009 [23] Jen-Chieh H., Raylin T., YuChi C., MuEn W (2018), "Oblivious Transfer Protocols Based on Commutative Encryption”, International Conference on New Technologies, Mobility and Security (NTMS), IFIP IEEE [24] Kerner M (2006), Uncoercible Communication and Deniable Encryption, or How to Lie With Impunity [25] Klonowski M., Kubiak P and Kutylowski M (2008), "Practical deniable encryption”, SOFSEM 2008: Theory and Pract of Comput Sci., pp 599609 [26] Meng B (2009), "A Secure Internet Voting Protocol Based on Non interactive Deniable Authentication Protocol and Proof Protocol that Two Ciphertexts are Encryption of the Same Plaintext”, Journal of Networks, p 370-377 [27] McDonald A and Kuhn M (1999), "StegFS: A steganographic file system for Linux”, Information Hiding Dresden, Germany, pp 462-477 [28] Moldovyan A., Moldovyan D and Shcherbacov V (2015), "Stream Deniable-Encryption Algorithm Satisfying Criterion of the Computational Indistinguishability from Probabilistic Ciphering”, Workshop on Foundations of Informatics, Chisinau, pp 318-330 [29] Moldovyan A and Moldovyan N (2014), "Practical Method for BiDeniable Public-Key Encryption”, Quasigroups and related systems, vol 22, pp 277-282 [30] Moldovyan N., Moldovyan A and Shcherbacov V (2015), "Provably sender-deniable encryption scheme”, Computer Science Journal of Moldova, vol 23, no 1, pp 62-71 52 [31] Moldovyan A., Moldovyan N and Shcherbakov V (2014), "Bi-Deniable Public-Key Encryption Protocol Secure Against Active Coercive Adversary”, Buletinul Academiei de Stiinte a Republicii Moldova Mathematica, pp 23-29 [32] Moldovyan A., Moldovyan N and Shcherbacov A (2016), "Deniableencryption protocol using commutative transformation”, Proceedings of the Conference on Mathematical Foundations of Informatics MFOI2016, Chisinau, Republic of Moldova, pp 285-298 [33] Moldovyan N., Berezin A., Kornienko A and Moldovyan A (2016), "Bideniable Public-Encryption Protocols Based on Standard PKI”, Proceedings of the 18th FRUCT & ISPIT Conference, Technopark of ITMO University, Saint-Petersburg, Russia FRUCT Oy, Finland, pp 212219 [34] Moldovyan N., Berezin A., Kornienko A and Moldovyan A (2017), "Deniable encryption protocols based on probabilistic public-key encryption”, 20th Conference of Open Innovations Association (FRUCT), pp 284-289 [35] Moldovyan N., Shcherbacov A and Eremeev M (2017), "Deniableencryption protocols based on commutative ciphers”, Quasigroups and related systems, pp 95-108 [36] Moldovyan Nikolay Andreevich, Moldovyan Alexander Andreevich, Tam Nguyen Duc, Hai Nguyen Nam, Manh Cong Tran, Minh Nguyen Hieu(2014), "Pseudo-probabilistic block ciphers and their randomization", in Journal of Ambient Intelligence and Humanized Computing (volume 10).: Springer International, pp 1977-1984 [37] Moldovyan N and Moldovyan A (2007), Innovative cryptography 2nd Edition, Boston: Charles River Media, pp 50-57 [38] Menezes A., Oorschot P and Vanstone S (1996), Applied cryptography, CRC Press, New York, London 53 [39] National Institute of Standards and Technology, NIST FIPS PUB 186-4, Digital Signature Standard, U.S Department of Commerce [40] O'Neil A., Peikert C and Waters B (2011), "Bi-Deniable Public-Key Encryption, Advances in Cryptology – CRYPTO”, Lectute Notes in Computer Science, Springer - Verlag Berlin, Heidelberg, New York, pp 525-542 [41] Shannon C (1948), "Communication Theory of Secrecy Systems”, Bell Systems Technical Journal, vol 28, p 656715 [42] Sahai A and Waters B (2013), "How to use indistinguishability obfuscation: Deniable encryption, and more”, IACR Cryptology ePrint Archive [43] Xuan Z., HweeHwa P and Kian-Lee T (2004), "Hiding data accesses in steganographic file system”, ICDE, pp 572-583 [44] Yu I., Kushilevits E and Ostrovsky R (2011), "Efficient Non-interactive Secure Computation”, Advances in Cryptology EUROCRYPT 2011 Lectute Notes in Computer Science, Springer - Verlag Berlin, Heidelberg, New York, pp 406-425 54 PHỤ LỤC Mã nguồn chương trình thực nghiệm Thuật tốn 2.2 /** * Algorithm 2.2 * * Compile: gcc aes.c alg_3.1.c -o alg_2.2 -lgmp -lcrypto */ #include #include #include #include #include #include #include "aes.h" #define BITS_IN_BYTE /* KHAI BAO THAM SO */ /* Number of bits of prime number */ #define PRIME_BITS #define INTERGER_BITS 136 PRIME_BITS #define CIPHER_KEY_SIZE_BITS 256 #define MESSAGE_SIZE_BITS 128 #define CIPHER_KEY_SIZE_BYTES CIPHER_KEY_SIZE_BITS/BITS_IN_BYTE #define MESSAGE_SIZE_BYTES MESSAGE_SIZE_BITS/BITS_IN_BYTE char buff_to_print[1024]; static char* hex2char(char *dst, unsigned char b); const char* hex2str(const char *bin, int bin_size, char *buff, int buff_size); void generate_primes(mpz_t prime, int len); void generate_mpz(mpz_t big, int len); void mpz_to_str(mpz_t big, char *str); void str_to_mpz(char *str, mpz_t big); P1 /* THUAT TOAN MA HOA XAC SUAT DUA TREN MA KHOI */ printf("\n\nI ALGORITHM ENC-DENI AND DEC-DENI (3.1)"); printf("\n==================================================\n"); printf("[A] WANT TO SEND A MESSAGE TO [B]\n"); printf("[A] have [m, r, K1, k1, k2]:\n"); printf("\t[m] = \t\t%s\n", hex2str((const char* )m_fake_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\t[r] = \t\t%s\n", hex2str((const char* )r, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\t[K1] = \t\t%s\n", hex2str((const char* )K1, CIPHER_KEY_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); gmp_printf ("\t[k1] = \t\t%Zd\n", big_k1); gmp_printf ("\t[k2] = \t\t%Zd\n", big_k2); start = clock(); printf("\n1 [A] encrypt message [m] with key [K1], cm = E(m, K1):\n"); cipher_encrypt(m_fake_A, K1, cm_fake_A); printf("\t[cm] = \t\t%s\n", hex2str((const char* )cm_fake_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n2 [A] calculate [c] from [cm, k1, k2, r]:\n"); str_to_mpz(cm_fake_A, big_cm_fake_A); compute_c(big_c, big_cm_fake_A, big_r, big_k1, big_k2); gmp_printf ("\t[c] = \t\t%Zd\n", big_c); end = clock(); enc_time_taken[i] = (((double) (end - start)) / CLOCKS_PER_SEC) * 1000; printf("\n3 [A] send [c] to [B] \n"); printf("\n "); printf("\n "); printf("\n "); printf("\n\n[B] receive [c] from [A]: \n"); gmp_printf ("\t[c] = \t\t%Zd\n", big_c); start = clock(); P2 printf("\n1 [B] calculate [cm] from [c] and [k1]:\n"); compute_cm_value(big_cm_fake_B, big_c, big_k1); mpz_to_str(big_cm_fake_B, cm_fake_B); printf("\t[cm] = \t\t%s\n", hex2str((const char* )cm_fake_B, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n2 [B] decrypt [cm] with key [K1], m = D(cm, K1):\n"); cipher_decrypt(cm_fake_B, K1, m_fake_B); printf("\t[m] = \t\t%s\n", hex2str((const char* )m_fake_B, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); end = clock(); dec_time_taken[i] = (((double) (end - start)) / CLOCKS_PER_SEC) * 1000; printf("\n3 [B] compare with [m] that sent from [A]\n"); printf("\t[m] = \t\t%s\n", hex2str((const char* )m_fake_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); if(memcmp(m_fake_B, m_fake_A, MESSAGE_SIZE_BYTES) == 0) { printf("\nOK, [A] HAVE SUCCESSFULY SENT A MESSAGE [m] TO [B]!\n"); dec_ok[i] = 1; } else { printf("\nWOW, THEY ARE NOT THE SAME (SOMETHING WENT WRONG!!!)\n"); dec_ok[i] = 0; } /* THUAT TOAN MA HOA CO THE CHOI TU DUA TREN MA KHOI */ printf("\n\nII ALGORITHM ENC-SEC AND DEC-SEC (3.1)"); printf("\n==================================================\n"); printf("[A] WANT TO SEND MESSAGES TO [B]!\n"); printf("[A] > Fake message [m_fake] and true message [m_true] > [B]\n"); printf("[A] have [m_fake, m_true, K1, K2, k1, k2]:\n"); printf("\t[m_true_A] = \t%s\n", hex2str((const char* )m_true_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); P3 printf("\t[m_fake_A] = \t%s\n", hex2str((const char* )m_fake_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\t[K1] = \t\t%s\n", hex2str((const char* )K1, CIPHER_KEY_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\t[K2] = \t\t%s\n", hex2str((const char* )K2, CIPHER_KEY_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); gmp_printf ("\t[k1] = \t\t%Zd\n", big_k1); gmp_printf ("\t[k2] = \t\t%Zd\n", big_k2); start = clock(); printf("\n1 [A] encrypt message [m_fake] with key [K1], cm_fake = E(m_fake, K1):\n"); cipher_encrypt(m_fake_A, K1, cm_fake_A); printf("\t[cm_fake] = \t%s\n", hex2str((const char* )cm_fake_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n2 [A] encrypt message [m_true] with key [K2], cm_true = E(m_true, K2):\n"); cipher_encrypt(m_true_A, K2, cm_true_A); printf("\t[cm_true] = \t%s\n", hex2str((const char* )cm_true_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n3 [A] calculate [c] from [cm_fake] and [cm_true], [k1] and [k2]:\n"); str_to_mpz(cm_fake_A, big_cm_fake_A); str_to_mpz(cm_true_A, big_cm_true_A); compute_c(big_c, big_cm_fake_A, big_cm_true_A, big_k1, big_k2); gmp_printf ("\t[c] = \t\t%Zd\n", big_c); end = clock(); enc_true_fake_time_taken[i] = (((double) (end - start)) / CLOCKS_PER_SEC) * 1000; printf("\n\n4 [A] send [c] to [B] \n"); printf("\n "); printf("\n "); printf("\n "); printf("\n\n[B] receive [c] from [A]: \n"); gmp_printf ("\t[c] = \t\t%Zd\n", big_c); start = clock(); printf("\n\nWhen NORMAL condition:"); P4 printf("\n1 [B] calculate [cm_true] from [c] and [k2]:\n"); compute_cm_value(big_cm_true_B, big_c, big_k2); mpz_to_str(big_cm_true_B, cm_true_B); /* Replaced cm_true_B=cm_true_A*/ printf("\t[cm_true] = \t%s\n", hex2str((const char* )cm_true_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n2 [B] decrypt [cm_true] with key [K2], m_true = D(cm_true, K2):\n"); cipher_decrypt(cm_true_B, K2, m_true_B); /* Replaced m_true_B=m_true_A*/ printf("\t[m_true] = \t%s\n", hex2str((const char* )m_true_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n3 [B] have [m_true] that sent from [A]\n"); printf("\t[m_true] = \t%s\n", hex2str((const char* )m_true_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); /* Replaced m_true_B=m_true_A*/ if(memcmp(m_true_A, m_true_A, MESSAGE_SIZE_BYTES) == 0) { printf("\nOK, [A] HAVE SUCCESSFULY SENT A MESSAGE [m_fake] TO [B]!\n"); dec_true_ok[i] = 1; } else { printf("\nWOW, THEY ARE NOT THE SAME (SOMETHING WENT WRONG!!!)\n"); dec_true_ok[i] = 0; } end = clock(); dec_true_time_taken[i] = (((double) (end - start)) / CLOCKS_PER_SEC) * 1000; start = clock(); printf("\n\nWhen ATTACKED condition:"); printf("\n1 [B] calculate [cm_fake] from [c] and [k1]:\n"); compute_cm_value(big_cm_fake_B, big_c, big_k1); mpz_to_str(big_cm_fake_B, cm_fake_B); printf("\t[cm_fake] = \t%s\n", hex2str((const char* )cm_fake_B, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); P5 printf("\n2 [B] decrypt [cm_fake] with key [K1], m_fake = D(cm_fake, K1):\n"); cipher_decrypt(cm_fake_B, K1, m_fake_B); printf("\t[m_fake] = \t%s\n", hex2str((const char* )m_fake_B, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); printf("\n3 [B] have [m_fake] that sent from [A]\n"); printf("\t[m_fake] = \t%s\n", hex2str((const char* )m_fake_A, MESSAGE_SIZE_BYTES, buff_to_print, sizeof(buff_to_print))); if(memcmp(m_fake_B, m_fake_A, MESSAGE_SIZE_BYTES) == 0) { printf("\nOK, [A] HAVE SUCCESSFULY SENT A MESSAGE [m_fake] TO [B]!\n"); dec_fake_ok[i] = 1; } else { printf("\nWOW, THEY ARE NOT THE SAME (SOMETHING WENT WRONG!!!)\n"); dec_fake_ok[i] = 0; } end = clock(); dec_fake_time_taken[i] = (((double) (end - start)) / CLOCKS_PER_SEC) * 1000; enc_time_taken_average = enc_time_taken_average + enc_time_taken[i]; dec_time_taken_average = dec_time_taken_average + dec_time_taken[i]; enc_true_fake_time_average = enc_true_fake_time_average + enc_true_fake_time_taken[i]; dec_true_time_taken_average = dec_true_time_taken_average + dec_true_time_taken[i]; dec_fake_time_taken_average = dec_fake_time_taken_average + dec_fake_time_taken[i]; printf("\nEXECUTION: %d DONE\n", i + 1); printf("\n**************************************************\n"); /* Pause seconds */ sleep(1); } P6 enc_time_taken_average = enc_time_taken_average/RUN_TIMES; dec_time_taken_average = dec_time_taken_average/RUN_TIMES; enc_true_fake_time_average = enc_true_fake_time_average/RUN_TIMES; dec_true_time_taken_average = dec_true_time_taken_average/RUN_TIMES; dec_fake_time_taken_average = dec_fake_time_taken_average/RUN_TIMES; printf("\n\t\t\t\tALG 3.1 EXECUTION TIME TAKEN AVERAGE\n"); times: %d\n", RUN_TIMES); printf("\t\t\t\t Number of running printf("\n\tNo/Time(ms) \tEnc_deni \tDec_deni \tEnc_sec \tDec_sec(true)\tDec_sec(fake)\tSUCCESSFULY"); printf("\n \n"); char *dec_char, *dec_true_char, *dec_fake_char; for (i = 0; i < RUN_TIMES; i++) { if (dec_ok[i]) { dec_char = "yes"; } else { dec_char = " no"; } if (dec_true_ok[i]) { dec_true_char = "yes"; } else { dec_true_char = " no"; } if (dec_fake_ok[i]) { dec_fake_char = "yes"; } else { dec_fake_char = " no"; } printf(" \t %d \t\t%f \t%f \t%f \t%f \t%f\t%s, %s, %s\n", i + 1, enc_time_taken[i], dec_time_taken[i], enc_true_fake_time_taken[i], dec_true_time_taken[i], dec_fake_time_taken[i], dec_char, dec_true_char, dec_fake_char); } printf("\n \n"); printf("Average (miliseconds) \t%f \t%f \t%f \t%f \t%f\n\n", enc_time_taken_average, P7 dec_time_taken_average, enc_true_fake_time_average, dec_true_time_taken_average, dec_fake_time_taken_average); mpz_clear(big_k1); mpz_clear(big_k2); mpz_clear(big_gcd); mpz_clear(big_r); mpz_clear(big_c); mpz_clear(big_cm_true_A); mpz_clear(big_cm_true_B); mpz_clear(big_cm_fake_A); mpz_clear(big_cm_fake_B); /* if(K1) free(K1); if(K2) free(K2); if(m_true_A) free(m_true_A); if(m_fake_A) free(m_fake_A); if(m_fake_A) free(m_fake_A); if(m_fake_B) free(m_fake_B); if(r) free(r); if(cm_true_A) free(cm_true_A); if(cm_true_B) free(cm_true_B); if(cm_fake_A) free(cm_fake_A); if(cm_fake_B) free(cm_fake_B); P8 */ return 1; } static char* hex2char(char *dst, unsigned char b) { unsigned char v = b >> 4; *dst++ = (v

Ngày đăng: 17/07/2023, 23:53

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan