Viết chương trình mã hóa và giải mã bằng AES sử dụng ngôn ngữ C++

24 1.1K 19
Viết chương trình mã hóa và giải mã bằng AES sử dụng ngôn ngữ C++

Đ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

AES (viết tắt của từ tiếng Anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa tiên tiến) là một thuật toán mã hóa khối được chính phủ Mỹ áp dụng làm tiêu chuẩn mã hóa. Thuật toán AES làm việc với khối dữ liệu 128 bit và khóa độ dài là 128 bit, 192 bit và 256 bit. Mã hóa dùng AES là mã hóa khối lặp gồm nhiều chu trình, các khóa con sử dụng trong các chu trình được tạo ra bởi quá trình tạo khóa con Rijndael.Trong bài báo cáo này chúng ta sẽ tìm hiểu về các chu trình làm việc của phương pháp mã hóa AES, các chế độ mã hóa ECB và CBC và ứng dụng viết một chương trình mã hóa và giải mã bằng AES sử dụng ngôn ngữ C++, rồi sau đó sẽ tìm hiểu các dạng tất công vào AES và phương pháp phòng tránh.

BAN CƠ YẾU CHÍNH PHỦ HỌC VIỆN KỸ THUẬT MẬT MÃ *** BÁO CÁO Giáo viên hướng dẫn: Sinh viên thực hiện: Hà Nội, 2020 MỤC LỤC LỜI NÓI ĐẦU .3 CHƯƠNG I: TỔNG QUAN AES CHƯƠNG II: HÀM SUBBYTE VÀ INVSUBBYTES .6 Hàm SubBytes .6 Hàm InvSubBytes CHƯƠNG III: HÀM SHIFTROWS VÀ INVSHIFTROWS 10 Hàm ShiftRows 10 Hàm InvShiftRows .10 CHƯƠNG IV: HÀM MIXCOLUMNS VÀ INVMIXCOLUMNS 11 Hàm MixColumns .11 Hàm InvMixColumns 12 CHƯƠNG V: HÀM ADDROUNDKEY 13 CHƯƠNG VI: CHẾ ĐỘ MÃ HÓA ECB CBC 14 Chế độ sách mã điện tử ECB (Electronic Code Book) 14 Chế độ xích liên kết khối mã CBC (Cipher block Chaining) .15 CHƯƠNG V: ỨNG DỤNG VIẾT CHƯƠNG TRÌNH MÃ HĨA VÀ GIẢI MÃ BẰNG AES SỬ DỤNG C++ .18 Hàm mã hóa Encrypt AES 18 Hàm giải mã Decrypt AES 18 Khóa chế độ 128/192/256 19 Form chương trình 20 VI CÁC DẠNG TẤN CƠNG VÀO AES VÀ PHƯƠNG PHÁP PHỊNG CHỐNG 21 Side-channel attack 21 Known attacks .21 Các phương pháp phòng chống 21 KẾT LUẬN VÀ ĐÁNH GIÁ THUẬT TOÁN AES 22 TÀI LIỆU THAM KHẢO 22 LỜI NĨI ĐẦU Từ trước cơng ngun, người phải quan tâm tới việc làm để đảm bảo an tốn bí mật cho tài liệu, văn quan trọng, đặc biệt lĩnh vực quân sự, ngoại giao Ngày với xuất máy tính, tài liệu văn giấy tờ thơng tin quan trọng số hóa xử lý máy tính, truyền mơi trường mạng - mơi trường mặc định có nhiều rủi ro, an tồn Do u cầu việc có chế, giải pháp để bảo vệ an tồn bí mật thơng tin nhạy cảm, quan trọng ngày trở nên cần thiết Các phương pháp mã hóa liệu đời AES phương pháp mã hóa tiêu chuẩn AES (viết tắt từ tiếng Anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa tiên tiến) thuật tốn mã hóa khối phủ Mỹ áp dụng làm tiêu chuẩn mã hóa Thuật toán AES làm việc với khối liệu 128 bit khóa độ dài 128 bit, 192 bit 256 bit Mã hóa dùng AES mã hóa khối lặp gồm nhiều chu trình, khóa sử dụng chu trình tạo trình tạo khóa Rijndael Trong báo cáo tìm hiểu chu trình làm việc phương pháp mã hóa AES, chế độ mã hóa ECB CBC ứng dụng viết chương trình mã hóa giải mã AES sử dụng ngơn ngữ C++, sau tìm hiểu dạng tất cơng vào AES phương pháp phịng tránh Để hồn thành báo cáo này, chúng tơi xin gửi lời cám ơn chân thành đến TS Nguyễn Đào Trường tận tình giúp đỡ truyền đạt kinh nghiệm quý báu suốt thời gian thực đề tài Do hạn chế thời gian nghiên cứu đề tài kiến thức chuyên môn nên khơng tránh khỏi thiếu sót, kính mong góp ý từ Thầy người để hồn thiện báo cáo tốt hơn! CHƯƠNG I: TỔNG QUAN AES Khái niệm từ (Word) AES Bốn byte cột mảng trạng thái state tạo thành từ 32 bit, số thứ tự hàng r (0≤rmode; //AES->Key = System::Text::ASCIIEncoding::ASCII->GetBytes(pass); AES->Mode = Security::Cryptography::CipherMode::ECB; System::Security::Cryptography::ICryptoTransform^ DESEncrypter = AES>CreateEncryptor(System::Text::ASCIIEncoding::ASCII->GetBytes(pass), System::Text::ASCIIEncoding::ASCII->GetBytes(modeTung)); array^ Buffer = System::Text::ASCIIEncoding::ASCII>GetBytes(input); encrypted = Convert::ToBase64String(DESEncrypter>TransformFinalBlock(Buffer, 0, Buffer->Length)); delete Hash_AES; delete AES; return encrypted; } Hàm giải mã Decrypt AES private: System::String^ AESD(String^ input, String^ pass) { System::Security::Cryptography::RijndaelManaged^ AES = gcnew System::Security::Cryptography::RijndaelManaged(); System::Security::Cryptography::MD5CryptoServiceProvider^ Hash_AES = gcnew System::Security::Cryptography::MD5CryptoServiceProvider(); String^ decrypted = L""; try { //AES->Key = System::Text::ASCIIEncoding::ASCII->GetBytes(pass); String^ modeTung = this->mode; AES->Mode = Security::Cryptography::CipherMode::ECB; System::Security::Cryptography::ICryptoTransform^ DESDecrypter = AES->CreateDecryptor(System::Text::ASCIIEncoding::ASCII->GetBytes(pass), System::Text::ASCIIEncoding::ASCII->GetBytes(modeTung)); array^ Buffer = Convert::FromBase64String(input); decrypted = System::Text::ASCIIEncoding::ASCII>GetString(DESDecrypter->TransformFinalBlock(Buffer, 0, Buffer->Length)); delete Hash_AES; delete AES; K return decrypted; } 19 Khóa chế độ 128/192/256 private: System::Void txtKey_TextChanged(System::Object^ sender, System::EventArgs^ e) { String^ modeOpt = this->mode; if (modeOpt == "128") { if (txtKey->Text->Length != 16) { lblNoti->ForeColor = System::Drawing::Color::Red; lblNoti->Text = "Length of secret key should be 16 for 128 bits key size"; button2->Enabled = false; button3->Enabled = false; } else { lblNoti->Text = ""; button2->Enabled = true; button3->Enabled = true; } } else if (modeOpt == "192") { if (txtKey->Text->Length != 24) { lblNoti->ForeColor = System::Drawing::Color::Red; lblNoti->Text = "Length of secret key should be 24 for 192 bits key size"; button2->Enabled = false; button3->Enabled = false; } else { lblNoti->Text = ""; button2->Enabled = true; button3->Enabled = true; } } else if (modeOpt == "256") { if (txtKey->Text->Length != 32) { lblNoti->ForeColor = System::Drawing::Color::Red; lblNoti->Text = "Length of secret key should be 32 for 256 bits key size"; button2->Enabled = false; button3->Enabled = false; } else { lblNoti->Text = ""; button2->Enabled = true; button3->Enabled = true; } } else { lblNoti->ForeColor = System::Drawing::Color::Red; lblNoti->Text = "Required key size missing."; button2->Enabled = false; button3->Enabled = false; } } Form chương trình 20 21 VI CÁC DẠNG TẤN CƠNG VÀO AES VÀ PHƯƠNG PHÁP PHỊNG CHỐNG Side-channel attack  Side Channels (Kênh kề) định nghĩa kênh đầu không mong muốn từ hệ thống  Tấn cơng kênh bên hay cịn gọi Tấn công kênh kề loại công dễ thực loại công mạnh chống lại trình triển khai mã hóa, mục tiêu loại cơng phân tích ngun tố, giao thức, modul, thiết bị hệ thống  Phân loại : o Tấn công thời gian o Tấn công dựa vào lỗi o Tấn công phân tích lượng o Tấn cơng phân tích điện từ Known attacks  Vào năm 2002, Nicolas Courtois Josef Pieprzyk phát công lý thuyết gọi công XSL điểm yếu tiềm tàng AES  Tuy nhiên, vài chuyên gia mật mã học khác số vấn đề sở toán học cơng cho tác giả có sai lầm tính tốn Việc cơng dạng có thực trở thành thực hay khơng cịn để ngỏ cơng XSL suy đoán Các phương pháp phịng chống  Phương pháp 1: Mã hóa cực mạnh 22 o Sử dụng biện pháp để tăng tính bảo mật thuật tốn mã hóa  Phương pháp 2: Bảo vệ liệu theo phương pháp vật lý o Nếu kẻ công tiếp cận vật lý với liệu, dĩ nhiên khả đánh cắp khóa mã hóa khó khăn Vì vậy, trước công qua âm tiềm tàng, bạn sử dụng giải pháp bảo vệ vật lý đặt laptop vào hộp cách ly âm thanh, khơng để lại gần máy tính giải mã liệu sử dụng nguồn âm băng rộng tần số đủ cao để gây nhiễu  Phương pháp 3: Kết hợp cách KẾT LUẬN VÀ ĐÁNH GIÁ THUẬT TOÁN AES  Thiết kế độ dài khóa thuật tốn AES ( 128, 192 256 bit ) đủ an tồn để bảo vệ thơng tin xếp vào loại tối mật an ninh AES nhà khoa học đánh giá chưa cao Nếu kỹ thuật cơng cải thiện AES bị phá vỡ  Một vấn đề khác cấu trúc toán học AES đơn giản TÀI LIỆU THAM KHẢO   Visual C++ Tutorial 19 -Windows Forms Application: Encrypt data from simple string Part 1/2/3: https://www.youtube.com/watch? v=1N9DMQjUmg0&list=LL&index=4 Advanced Encryption Standard: https://vi.wikipedia.org/wiki/Advanced_Encryption_Standard 23  Cấu trúc thuật toán Advanced Encryption Standard (Chuẩn mã hóa nâng cao):https://viblo.asia/p/cau-truc-va-thuat-toan-advanced-encryptionstandard-chuan-ma-hoa-nang-cao-924lJYe8ZPM 24 ... tạo c? ??t kh? ?c trư? ?c sử dụng c? ??t cho thao t? ?c MixColumns 10 11 CHƯƠNG IV: HÀM MIXCOLUMNS VÀ INVMIXCOLUMNS Hàm MixColumns Phép biến đổi MixColumns: Phép biến đổi MixColumns th? ?c biến đổi đ? ?c lập c? ??t... CHƯƠNG VI: CHẾ ĐỘ MÃ HÓA ECB CBC Chế độ sách mã điện tử ECB (Electronic Code Book) ECB chế độ mã hóa khối bit đ? ?c lập Với khóa mã K, khối plaintext ứng với giá trị ciphertext c? ?? định ngư? ?c lại ... System::Text::ASCIIEncoding::ASCII->GetBytes(pass); AES- >Mode = Security::Cryptography::CipherMode::ECB; System::Security::Cryptography::ICryptoTransform^ DESEncrypter = AES> CreateEncryptor(System::Text::ASCIIEncoding::ASCII->GetBytes(pass),

Ngày đăng: 11/04/2021, 10:04

Mục lục

  • CHƯƠNG I: TỔNG QUAN AES

  • CHƯƠNG V: HÀM ADDROUNDKEY

  • CHƯƠNG VI: CHẾ ĐỘ MÃ HÓA ECB và CBC

    • 1. Chế độ sách mã điện tử ECB (Electronic Code Book)

    • 2. Chế độ xích liên kết khối mã CBC (Cipher block Chaining)

    • CHƯƠNG V: ỨNG DỤNG VIẾT CHƯƠNG TRÌNH MÃ HÓA VÀ GIẢI MÃ BẰNG AES SỬ DỤNG C++

      • 1. Hàm mã hóa Encrypt AES

      • 2. Hàm giải mã Decrypt AES

      • KẾT LUẬN VÀ ĐÁNH GIÁ THUẬT TOÁN AES

      • TÀI LIỆU THAM KHẢO

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

Tài liệu liên quan