1. Trang chủ
  2. » Công Nghệ Thông Tin

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

22 1,1K 19
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 1,09 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.

Trang 1

HỌC PHẦN: CƠ SỞ AN TOÀN & BẢO MẬT THÔNG TIN

ĐỀ TÀI: VIẾT CHƯƠNG TRÌNH MÃ HÓA

VÀ GIẢI MÃ BẰNG AES SỬ DỤNG NGÔN NGỮ C++

Giáo viên hướng dẫn:

Sinh viên thực hiện:

Hà Nội, 2020

Trang 2

MỤC LỤC

LỜI NÓI ĐẦU 3

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

CHƯƠNG II: HÀM SUBBYTE VÀ INVSUBBYTES 6

1 Hàm SubBytes 6

2 Hàm InvSubBytes 8

CHƯƠNG III: HÀM SHIFTROWS VÀ INVSHIFTROWS 10

1 Hàm ShiftRows 10

2 Hàm InvShiftRows 10

CHƯƠNG IV: HÀM MIXCOLUMNS VÀ INVMIXCOLUMNS 11

1 Hàm MixColumns 11

2 Hàm InvMixColumns 12

CHƯƠNG V: HÀM ADDROUNDKEY 13

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

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

2 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

1 Hàm mã hóa Encrypt AES 18

2 Hàm giải mã Decrypt AES 18

3 Khóa 3 chế độ 128/192/256 19

4 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

1 Side-channel attack 21

2 Known attacks 21

3 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

Trang 3

LỜI NÓI ĐẦU

Từ trước công nguyên, con người đã phải quan tâm tới việc làm thế nào để đảm bảo an toán bí mật cho các tài liệu, văn bản quan trọng, đặc biệt là trong lĩnh vực quân sự, ngoại giao Ngày nay với sự xuất hiện của máy tính, các tài liệu văn bản giấy tờ và các thông tin quan trọng đều được số hóa và xử lý trên máy tính, được truyền đi trong môi trường mạng - một môi trường mặc định là có nhiều rủi ro, kém an toàn Do đó yêu cầu về việc có một cơ chế, giải pháp để bảo vệ sự an toàn

và bí mật của các thông tin nhạy cảm, quan trọng ngày càng trở nên cần thiết Các phương pháp mã hóa dữ liệu lần lượt được ra đời và AES là một trong những phương pháp mã hóa tiêu chuẩn

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

Để hoàn thành bài 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 đỡ và truyền đạt những kinh nghiệm quý báu

trong suốt thời gian thực hiện đề tài

Do hạn chế về thời gian nghiên cứu đề tài và kiến thức chuyên môn nên sẽ không tránh khỏi những thiếu sót, kính mong được sự góp ý từ Thầy và mọi người để hoàn thiện bài báo cáo tốt hơn!

Trang 4

CHƯƠNG I: TỔNG QUAN AES Khái niệm từ (Word) trong AES

Bốn byte trên mỗi cột trong mảng trạng thái state tạo thành 1 từ 32 bit, trong đó số thứ tự của hàng r (0≤r<4) cho biết chỉ số của bốn byte trong mỗi từ Từ định nghĩa state ở trên có thể coi state là mảng một chiều chứa các từ 32 bit

Tương tự như đối với mảng khóa cũng có thể biểu diễn thành mảng một chiều chứa các từ 32 bit như công thức dưới đây với số lượng từ khóa phụ thuộc vào Nk

(Nk=4, 6, 8)

Thuật toán của AES

Thuật toán AES khá phức tạp, được mô tả khái quát gồm 3 bước như sau:

 1 Vòng khởi tạo chỉ gồm phép AddRoundKey

 Nr -1 Vòng lặp gồm 4 phép biển đổi lần lượt: SubBytes, ShiftRows,

Trang 5

chỗ, trong đó mỗi dòng trong state được dịch một số bước theo chu kỳ -

MixColumns—trộn các cột trong state, kết hợp 4 bytes trong mỗi cột -

AddRoundKey

4 Final Round (không MixColumns) - SubBytes - ShiftRows - AddRoundKey

Các phép biến đổi Substitute bytes, Shift rows, Mix columns có phép biếnđổi ngược tương ứng là Inverse sub bytes, Inverse shift rows, Inverse mix cols.Riêng phép biến đổi Add row key đơn giản chỉ là phép XOR nên phép biến đổingược cũng là Add row key Vận dụng các phép biến đổi ngược trên, thuật toán giải

mã AES cũng gồm 10 vòng thực hiện theo chiều ngược lại Kích thước khóa banđầu là 128 bít (gồm 16 byte) AES dùng hàm Expand key để mở rộng kích thướckhóa thành 44 word 32 bít 44 word này được chia thành 11 cụm khóa con, mỗikhóa con 4 word làm tham số cho 11 thao tác Add row key

Trang 6

CHƯƠNG II: HÀM SUBBYTE VÀ INVSUBBYTES

1 Hàm SubBytes

Phép biến đổi SubBytes: Là phép thay thế byte phi tuyến tính, ở phép thay thế này

nó tác động độc lập đến từng byte trong trạng thái hiện hành Phép biến đổi

SubBytes được thực hiện bằng cách tra cứu bảng thay thế (S-box) với tham số đầu vào là các byte trong bảng trạng thái S-box được xây dựng như sau:

 Bước 1: Điền các con số từ 0 đến 255 vào bảng theo từng hàng Vậy hàng 0 gồm các con số {00}, {01}, …{0F} (thập lục phân) Hàng 1 gồm các con số {10}, {11},…, {1F} Điều này có nghĩa là tại hàng x cột y có giá trị {xy}

 Bước 2: Thay thế mỗi byte trong bảng bằng giá trị nghịch đảo trong trường GF(28 ) Quy ước nghịch đảo của {00} cũng là {00}

 Bước 3: Mỗi byte trong ma trận state được thay thế bởi 1 byte trong Rijndael S-box, hay bij = S(aij)

trong đó, 0 ≤ i ≤8 là bit thứ i của byte b tương ứng và ci là bit thứ thứ i của byte c với giá trị {63} hay {01100011}

Trang 7

Trong đó phép cộng thực hiện như phép XOR Bảng sau trình bày nội dung bảng box sau khi tính toán.

Trang 8

S-2 Hàm InvSubBytes

Phép biến đổi ngược InvSubBytes: là phép thay thế biến đổi ngược với SubBytes

Là một phép thay thế byte, các byte thay thế được thực hiện bằng cách tra bảng thaythế ngược IS Bảng thay thế ngược IS này được xây dựng như sau: Trước tiên, cũngphải xây dựng một bảng Inverse SubBytes (IS- box) Nghĩa là nếu với đầu vào {95}, S-box cho ra kết quả {2A}, thì với đầu vào là {2A}, IS sẽ cho ra lại kết quả {95} Việc xây dựng hộp IS cũng giống như xây dựng S-box tại bước 1 và bước 2 Tại bước 3, IS thực hiện phép thay thế sau:

Với di là bit thứ i của số {05} tức d7 d6 d0 = 00000101

Bảng sau trình bày nội dung bảng thay thế ngược IS sau khi tính toán

Trang 9

Như vậy: phép biến đổi InvSubBytes thực hiện như sau: Mỗi byte trong ma trận state S, dưới dạng thập lục phân là {xy}, được thay thế bằng giá trị trong bảng IS tạidòng x cột y.

Mục đích của phép biến đổi SubBytes: S-box dùng để chống lại hình thức tấn công thám mã vi sai và thám mã tuyến tính Giữa input và output của phép Substitute bytes không thể mô tả bằng một công thức toán đơn giản

Trang 10

CHƯƠNG III: HÀM SHIFTROWS VÀ INVSHIFTROWS

1 Hàm ShiftRows

Phép biến đổi ShiftRows: Thao tác ShiftRows thực hiện hoán vị các byte trong ma

trận state theo cách thức sau:

Phép biến đổi InvShiftRows: Phép biến đổi InvShiftRows thực hiện ngược lại

với phép ShiftRows, nghĩa là:

Trang 11

CHƯƠNG IV: HÀM MIXCOLUMNS VÀ INVMIXCOLUMNS

1 Hàm MixColumns

Phép biến đổi MixColumns: Phép biến đổi MixColumns thực hiện biến đổi độc lập

từng cột trong ma trận state bằng một phép nhân đa thức Mỗi cột của state đươc coi

là biểu diễn của một đa thức f(x) trong GF(2^8) như vậy phép biến đổi

MixColumns chính là phép nhân theo modulo với x^4+1 với một đa thức cố định định nghĩa như sau:

Phép nhân đa thức trên có thể biểu diễn dưới dạng phép nhân ma trận như sau

Ví dụ về phép MixColumns:

Trang 12

2 Hàm InvMixColumns

Phép biến đổi ngược InvMixColumns: Là phép biến đổi ngược với phép biến đổi

MixColumns InvMixColumns cũng thực hiện thao tác theo từng cột của trạng thái, xem mỗi cột như một đa thức bậc 3 gồm 4 hạng tử trên trường GF(2^8) Các cột của phép InvMixColumns được nhân theo modulo ( x^4 + 1 ) với đa thức nghịch đảo a(x) chính là đa thức a^-1(x) được định nghĩa:

Như vậy phép InvMixColumns cũng được biểu diễn tương đương với phép nhân

ma trận sau

Mục đích của MixColumns: Việc coi mỗi cột là một đa thức bậc 3, rồi nhân mỗi cộtvới đa thức a(x) sau đó modulo ( x4 1 ) đã làm cho mỗi byte trong cột kết quả đều phụ thuộc vào bốn byte trong cột ban đầu Thao tác MixColumns kết hợp với

ShiftRows đảm bảo rằng sau một vài vòng biến đổi, 128 bit trong kết quả đều phụ thuộc vào tất cả 128 bit ban đầu Điều này tạo ra tính khuếch tán (diffusion) cần thiết cho mã hóa

Trang 13

CHƯƠNG V: HÀM ADDROUNDKEY

Trong thao tác AddRoundKey, 128 bit của ma trận state sẽ được XOR với 128 bit của khóa con của từng vòng Vì sử dụng phép XOR nên phép biến đổi ngược của AddRoundKey trong cấu trúc giải mã cũng chính là AddRoundKey Việc kết hợp với khóa bí mật tạo ra tính làm rối (confusion) của mã hóa Sự phức tạp của thao tác

mở rộng khóa (KeySchedule) giúp gia tăng tính làm rối này

Trang 14

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

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

ECB là chế độ mã hóa từng khối bit độc lập Với cùng một khóa mã K, mỗi khối plaintext ứng với một giá trị ciphertext cố định và ngược lại

Quá trình mã hóa ECB

Trang 15

Ciphertext là đầu vào trực tiếp để thực thi thuật toán giải mã với khóa mã K để tạo

 Có thể thực hiện mã hóa/giải mã song song (parallel) nhiều khối dữ liệu cùnglúc Điều này giúp tăng tốc độ xử lý trong các hệ thống đòi hỏi mã hóa/giải

mã tốc độ cao

Nhược điểm:

 Khả năng bảo mật kém Do giá trị plaintext và ciphertext được ánh xạ độc lậpmột-một nên thông tin mã hóa dễ bị sửa đổi bằng cách như xóa bớt khối dữ liệu, chèn thêm khối dữ liệu, hoán đổi vị trí khối dữ liệu để làm sai lệch thông tin tại nơi nhận

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

CBC là chế độ mã hóa chuỗi, kết quả mã hóa của khối dữ liệu trước (ciphertext) sẽ được tổ hợp với khối dữ liệu kế tiếp (plaintext) trước khi thực thi mã hóa

Trang 16

Quá trình mã hóa CBC

 Biểu thức định nghĩa:

- C1 = CIPHk(P1+IV)

- Cj = CIPHk(Pj+Cj-1) với j=2, 3, …, n

 Lần mã hóa đầu tiên:

- Plaintext XOR với vector khởi tạo IV

- Kết quả bước trên là đầu vào cho việc thực thi thuật toán mã hóa với khóa

mã K

 Lần mã hóa sau lần đầu tiên:

- Plaintext XOR với ciphertext của lần mã hóa trước đó

- Kết quả bước trên là đầu vào cho việc thực thi thuật toán mã hóa với khóa

mã K

Trang 17

Quá trình giải mã CBC

 Biểu thức định nghĩa:

- P1 = CIPHINVk(C1)+IV

- Pj = CIPHk(Cj)+Cj-1 với j=2, 3, …, n

 Lần giải mã đầu tiên:

- Ciphertext được thực thi quá trình giải mã với khóa mã K

- Kết quả bước trên được XOR với vector khởi tạo IV để tạo ra plaintext

 Lần giải mã sau lần đầu tiên:

- Ciphertext được thực thi quá trình giải mã với khóa mã K

- Kết quả bước trên được XOR với ciphertext sử dụng trong lần giải mã trước

để tạo ra plaintext

Nhận xét

 Ưu điểm:

- Khả năng bảo mật cao hơn ECB Ciphertext của một khối dữ liệu plaintext

có thể khác nhau cho mỗi lần mã hóa vì nó phụ thuộc vào IV hoặc giá trị mã hóa (ciphertext) của khối dữ liệu liền trước

- Quá trình giải mã (mã hóa nghịch) vẫn có thể thực hiện song song nhiều khối dữ liệu

 Nhược điểm:

- Thiết kế phần cứng phức tạp hơn ECB ngoài logic thực thi thuật toán mã hóa, người thiết kế cần thiết kế thêm:

- Logic quản lý độ dài chuỗi dữ liệu sẽ được mã hóa, cụ thể là số lượng khối

dữ liệu trong chuỗi dữ liệu

- Lỗi bit bị lan truyền Nếu một lỗi bit xuất hiện trên ciphertext của một khối

dữ liệu thì nó sẽ làm sai kết quả giải mã của khối đữ liệu đó và khối dữ liệu tiếp theo

- Không thể thực thi quá trình mã hóa song song vì xử lý của khối dữ liệu sau phụ thuộc vào ciphertext của khối dữ liệu trước, trừ lần mã hóa đầu tiên

Trang 18

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

private: System:: String ^ AESE( 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 ^ encrypted = L"" ; try

>GetBytes( pass ), System::Text:: ASCIIEncoding ::ASCII->GetBytes(modeTung));

array < Byte >^ Buffer = System::Text:: ASCIIEncoding

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 < Byte >^ Buffer = Convert ::FromBase64String( input );

decrypted = System::Text:: ASCIIEncoding

::ASCII->GetString(DESDecrypter->TransformFinalBlock(Buffer, 0, Buffer->Length));

delete Hash_AES;

Trang 19

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;

} }

Trang 20

4 Form chương trình

Trang 21

VI CÁC DẠNG TẤN CÔNG VÀO AES VÀ PHƯƠNG PHÁP PHÒ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 năng lượng

o Tấn công phân tích điện từ

2 Known attacks.

 Vào năm 2002, Nicolas Courtois và Josef Pieprzyk phát hiện một tấn công trên lý thuyết gọi là tấn công XSL và chỉ ra điểm yếu tiềm tàng của AES

 Tuy nhiên, một vài chuyên gia về mật mã học khác cũng chỉ ra một số vấn

đề trong cơ sở toán học của tấn công này và cho rằng các tác giả đã có sai lầm trong tính toán Việc tấn công dạng này có thực sự trở thành hiện thực hay không vẫn còn để ngỏ và cho tới nay thì tấn công XSL vẫn chỉ là suy đoán

Trang 22

o Nếu một kẻ tấn công không thể tiếp cận vật lý với dữ liệu, dĩ nhiên khả năng đánh cắp khóa mã hóa sẽ khó khăn hơn Vì vậy, trước nhữngcuộc tấn công qua âm thanh tiềm tàng, bạn có thể sử dụng các giải pháp bảo vệ vật lý như đặt laptop vào các hộp cách ly âm thanh, không để ai lại gần máy tính khi đang giải mã dữ liệu hoặc sử dụng các nguồn âm thanh băng rộng tần số đủ cao để gây nhiễu.

 Phương pháp 3: Kết hợp cả 2 cách trên

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

 Thiết kế và độ dài khóa của thuật toán AES ( 128, 192 và 256 bit ) là đủ an toàn để bảo vệ các thông tin được xếp vào loại tối mật nhưng về an ninh của AES thì các nhà khoa học đánh giá là chưa cao Nếu các kỹ thuật tấn công được cải thiện thì AES có thể bị phá vỡ

 Một vấn đề khác nữa là cấu trúc toán học của AES khá đơ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?

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w