Tải bản đầy đủ (.docx) (29 trang)

BÀI TẬP MÔN HỌC CƠ SỞ AN TOÀN VÀ BẢO MẬT THÔNG TIN VIẾT CHƯƠNG TRÌNH MÃ HÓA VÀ GIẢI MÃ BẰNG AES

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.26 MB, 29 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

HỌC VIỆN KỸ THUẬT MẬT MÃ

<b>KHOA CÔNG NGHỆ THÔNG TIN</b>

BÀI TẬP MÔN HỌC CƠ SỞ AN TỒN VÀ BẢO MẬT THƠNG TIN

<b>VIẾT CHƯƠNG TRÌNH MÃ HĨA VÀ GIẢI MÃ BẰNG AES</b>

Ngành: Công nghệ thông tin

Chuyên ngành: Kỹ thuật phần mềm nhúng và di động

Sinh viên thực hiện:

Trần Xuân Nghĩa-CT050334 Ngô Xuân Trọng-CT050350 Nguyễn Quang Huy-CT050325

<b> Người hướng dẫn: TS. Nguyễn Đào Trường</b>

Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Hà Nội, 2024

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN</b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<i><b><small>1.2 Tổng quan về thuật toán AES...5</small></b></i>

<small>1.2.1 Giới thiệu về chuẩn mã hóa AES...5</small>

<small>1.2.2 Q trính mã hóa với AES...9</small>

<small>1.2.3 Quá trình giải mã với AES...14</small>

<b><small>CHƯƠNG 2. ỨNG DỤNG VIẾT CHƯƠNG TRÌNH MÃ HĨA VÀ GIẢI MÃ AES</small></b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>LỜI NÓI ĐẦU</b>

Với sự bùng nổ của Công nghệ thông tin, nhân loại đã và đang bước vào một thời đại mới: Thời đại của nền kinh tế thơng tin tồn cầu hóa. Mọi hoạt động xã hội, chính trị, kinh tế trong thời đại mới hiện nay xét cho cùng, thực chất đều là những hoạt động thu thập, xử lý, lưu trữ và trao đổi thơng tin. Trong bối cảnh đó An tồn và Bảo mật thông tin luôn là mối quan tâm hàng đầu trong mọi giao dịch xã hội. Chính vậy, mật mã học và các thành tựu của nó ln là lĩnh vực quan trọng trong sự phát triển của nhân loại. Với mục tiêu làm rối và làm loạn thông tin rồi sau đó có thể tái tạo lại thơng tin một cách chân thực, chúng ta có thể đảm bảo được tính bí mật của thơng tin, có thể truyền thơng tin đi xa, và dựa vào các đặc tính của q trình mã hóa, như tính khơng thể chối bỏ, tìm ra được các lỗ hổng bảo mật.

Nhóm chúng em chọn triển khai đề tài “Viết chương trình mã hóa và giải mã bằng mật mã AES bằng ngôn ngữ C#” với mục tiêu là: hiểu về các chu trình làm việc của phương pháp mã hóa AES 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#.

<i><b>Với đề tài này, chúng em xin gửi lời cám ơn chân thành đến TS. Nguyễn</b></i>

<i><b>Đào Trường đã tận tình hướng dẫn và truyền đạt những kinh nghiệm quý báu</b></i>

qua những buổi học và thảo luận về lĩnh vực liên quan.

Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế, báo cáo khơng thể tránh được những thiếu sót. Chúng em mong nhận được sự đóng góp ý kiến của q thầy cơ để chúng em hồn thành sản phẩm của mình.

Chúng em xin chân thành cảm ơn!

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>DANH MỤC TỪ VIẾT TẮT</b>

AES Advanced Encryption Standard - chuẩn mã quốc tế DES Data Encryption Standards - Chuẩn mã dữ liệu

IDEA International Data Encryption Algorithm

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>DANH MỤC HÌNH VẼ</b>

Hình 1.1 Sơ đồ các bước xử lí của AES...10

Hình 1.2 Bảng S-box của mã hóa AES...14

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>CHƯƠNG 1. TỔNG QUAN 1.1 Tổng quan về mật mã học </b>

Mật mã học (Cryptography) là ngành khoa học nghiên cứu về việc đảm bảo an tồn thơng tin. Mật mã học gắn liền với q trình mã hóa nghĩa là chuyển đổi thơng tin từ dạng "có thể hiểu được" thành dạng "khơng thể hiểu được" và ngược lại là quá trình giải mã.

Chúng ta tạm phân mật mã làm hai phần, mật mã cổ điển và mật mã “hiện đại". Mật mã cổ điển là mật mã được mã hoá và giải mã bằng thủ công. Mật mã loại này ra đời sớm nhất, nó được sử dụng lâu đời và là cơ sở, nền tảng để phát triển mật mã hiện đại. Mật mã hiện đại gồm mật mã đối xứng và mật mã bất đối xứng. Mật mã hiện nay đang phát triển rất mạnh với rất nhiều thuật toán mã nổi bật như: DES, 3DES, IDEA, Feal, AES, RSA…

Mật mã học giúp đảm bảo những tính chất sau cho thơng tin:

- Tính bí mật (confidentiality): thơng tin chỉ được tiết lộ cho những ai được

- Tính chống chối bỏ (non-repudiation): người gửi hoặc nhận sau này không thể chối bỏ việc đã gửi hoặc nhận thông tin.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>1.2 Tổng quan về thuật toán AES</b>

<i><b>1.2.1 Giới thiệu về chuẩn mã hóa AES</b></i>

AES (viết tắt của từ tiếng anh: Advanced Encryption Standard, hay Tiêu chuẩn mã hóa nâng cao) là một thuật tốn mã hóa khối được chính phủ Hoa Kỳ áp dụng làm tiêu chuẩn mã hóa.

Thuật tốn được xây dựng dựa trên Rijndael Cipher phát triển bởi 2 nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen.

AES làm việc với các khối dữ liệu 128bit và độ dài khóa 128bit, 192bit hoặc 256bit. Các khóa mở rộng sử dụng trong chu trình được tạo ra bởi thủ tục sinh khóa Rijndael.

Hầu hết các phép toán trong thuật toán AES đều thực hiện trong một trường hữu hạn của các byte. Mỗi khối dữ liệu đầu vào 128bit được chia thành 16byte, có thể xếp thành 4 cột, mỗi cột 4 phần tử hay một ma trận 4x4 của các byte, nó gọi là ma trận trạng thái.

Tùy thuộc vào độ dài của khóa khi sử dụng 128bit, 192bit hay 256bit mà thuật toán được thực hiện với số lần lặp khác nhau.

Mô tả khái quát giải thuật AES:

a. Mở rộng khóa - Các khóa phụ dùng trong các vịng lặp được sinh ra từ khóa chính AES sử dụng thủ tục sinh khóa Rijndael.

b. Vòng khởi tạo: AddRoundKey - Mỗi byte trong state được kết hợp với khóa phụ sử dụng XOR.

c. Vịng lặp chính:

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

- SubBytes—bước thay thế phi tuyến tính, trong đó mỗi byte trong state được thay thế bằng một byte khác sử dụng bảng tham chiếu

- ShiftRows—bước đổi 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

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>Hình 1.1 Sơ đồ các bước xử lí của AES</b>

Ưu điểm giải thuật AES:

- Độ bảo mật cao: AES được coi là một trong những giải thuật mã hóa an tồn và khó bị đánh đố hiện nay, vì nó sử dụng một loạt các phép tốn phức tạp để mã hóa dữ liệu, làm cho nó khó bị tấn cơng bằng các phương pháp tấn công phổ biến như tấn công brute-force.AES được sử dụng để mã hóa các thơng tin mật đến tuyệt mật.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

- Tốc độ nhanh: AES có tốc độ mã hóa rất nhanh, do đó nó thích hợp cho việc mã hóa dữ liệu lớn và nhiều ứng dụng yêu cầu tính nhanh và hiệu quả của giải thuật.

- Dễ triển khai: AES được xây dựng trên các phép toán đơn giản, cho phép nó được triển khai dễ dàng trên các thiết bị có tài nguyên hạn chế, như điện thoại di động và máy tính nhúng.

- Hỗ trợ đa nền tảng: AES được hỗ trợ trên nhiều nền tảng, bao gồm phần mềm, phần cứng, và các thiết bị di động.

- Được chấp nhận rộng rãi: AES được sử dụng rộng rãi trong nhiều ứng dụng bảo mật, bao gồm truyền thông, ngân hàng, và các ứng dụng máy tính khác. Điều này giúp đảm bảo tính tương thích và đáng tin cậy của giải thuật. Nhược điểm của giải thuật AES:

- Tốn nhiều tài nguyên tính tốn: AES sử dụng nhiều phép tốn phức tạp để mã hóa dữ liệu, điều này có thể tốn nhiều tài ngun tính tốn và thời gian.

- Có thể bị tấn công bởi các kỹ thuật tấn công lựa chọn bên trong (side-channel attacks): Các kỹ thuật tấn cơng này khơng dựa trên việc giải mã khóa, mà dựa trên thông tin được thu thập từ các kênh phụ như dịng điện, sóng radio, hoặc thời gian thực thi mã hóa.

- Khơng hồn tồn chống lại tấn công từ điển (dictionary attacks): Các tấn công từ điển có thể sử dụng danh sách các khóa phổ biến hoặc các từ khóa để thử mã hóa dữ liệu. Mặc dù độ dài khóa AES là rất lớn, nhưng nếu khóa được chọn khơng đủ mạnh, nó có thể bị tấn công bởi các tấn công từ điển.

- Khơng hồn tồn chống lại tấn cơng bằng lực brute-force: Dù khóa AES có độ dài lớn, tuy nhiên nếu tấn công bằng lực brute-force được thực hiện đúng cách, nó vẫn có thể tìm ra khóa đúng với thời gian đủ lâu.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<i><b>1.2.2 Quá trính mã hóa với AES</b></i>

Vịng lặp chính của AES thực hiện các hàm sau: SubBytes(), ShiftRows(), MixColumns() và AddRoundKey(). Một cách đơn giản hơn để xem thứ tự hàm AES là: Trộn từng byte (SubBytes), trộn từng hàng (ShiftRows), trộn từng cột (MixColumns) và mã hóa (AddRoundKey).

<i>1.2.2.1 Hàm AddRoundKey</i>

Hàm AddRoundKey là một trong những phương thức cơ bản trong q trình mã hóa AES (Advanced Encryption Standard). Phương thức này thực hiện việc kết hợp dữ liệu đầu vào với khóa để tạo ra đầu ra của mỗi vịng mã hóa.

Trong q trình mã hóa AES, dữ liệu đầu vào sẽ được chia thành các khối 128 bit và khóa được chia thành các khối 128 bit tương ứng. Khi thực hiện AddRoundKey, các bit của mỗi khối dữ liệu đầu vào sẽ được XOR với các bit của khối khóa tương ứng. Điều này sẽ tạo ra một khối dữ liệu đầu ra mới, có cùng độ dài và cấu trúc với khối dữ liệu đầu vào.

Quá trình này sẽ được lặp lại trong mỗi vịng mã hóa, với khóa được cập nhật sau mỗi vịng. Việc kết hợp dữ liệu đầu vào với khóa sẽ làm cho các khối dữ liệu đầu vào trở nên khó đốn và an tồn hơn. Điều quan trọng cần lưu ý là AddRoundKey là một phương thức đối xứng, có nghĩa là nếu ta sử dụng cùng

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Mục đích của AddRoundKey: thêm khóa vịng vào dữ liệu đầu vào trước khi thực hiện các phép biến đổi phức tạp khác trong quá trình mã hóa làm cho q trình mã hóa AES trở nên an tồn và khó bị tấn cơng.

<i>1.2.2.2 Thuật tốn sinh khóa (Key Expansion)</i>

Thuật tốn sinh khóa của AES nhận một khóa mã hóa K sau đó thực hiện một thủ tục sinh khóa để sinh một dãy các khóa cho việc mã hóa. Thủ tục này sẽ sinh tổng số Nb*(N<small>r</small>+1) word, thủ tục sử dụng một tập khởi tạo Nb word và mỗi một lần lặp trong số N<small>r</small> lần sẽ cần tới Nb word của dữ liệu khóa. Dãy khóa kết quả là một mảng tuyến tính các word 4-byte được ký hiêụ là [w<small>i</small>] trong đó 0  i < Nb(N<small>r</small>+1).

Mục đích của Expand key: dùng để chống lại known-plaintext attack - Biết một số bít của khóa hay khóa con cũng khơng thể tính các bít cịn lại. - Khơng thể tính ngược: biết một khóa con cũng khơng thể tính lại các khóa con trước đó.

- Tính khuếch tán: một bít của khóa chính tác động lên tất cả các bít của các khóa con

<i>1.2.2.3 Hàm SubBytes</i>

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.

SubBytes thao tác trên mỗi byte trong trạng thái một cách độc lập .

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>Hình 1.2 Bảng S-box của mã hóa AES</b>

Phép thay thế này có thể đảo ngược bằng cách sử dụng bảng Inverse Sbox,

sử dụng hệt như bảng Sbox thường.

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<b>Hình 1.3 Bảng Inverse S-Box</b>

Mục đích của SubBytes: Bảng S-box dùng để chống lại hình thức tấn cơng known-plaintext. 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.

<i>1.2.2.4 Hàm ShiftRows</i>

Hàm ShiftRows trong mã hóa AES là một phần trong giai đoạn pha trộn (MixColumns và ShiftRows) của q trình mã hóa AES. Phương thức này hốn đổi vị trí của các byte trong từng hàng của ma trận State, tạo ra một ma trận mới. Thao tác Shift rows thực hiện hoán vị các byte trong ma trận state theo cách thức sau:

- Dòng thứ nhất giữ nguyên

- Dòng thứ 2 dịch vòng trái 1 byte - Dòng thứ 3 dịch vòng trái 2 byte

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Việc dịch chuyển các byte này tạo ra một sự "điều chỉnh" trong ma trận, tăng tính ngẫu nhiên và độ phức tạp của quá trình mã hóa.

Mục đích của ShiftRows : Xáo trộn các byte để tạo các cột khác nhau trước khi sử dụng cột cho thao tác MixColumns.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Mục đích của MixColums : Việc nhân mỗi cột với đa thức a(x) và modulo n(x) là 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 Mix columns kết hợp với ShiftRows đảm bảo rằng sau một vài vòng biến đổi, 128 bít trong kết quả đều phụ thuộc vào tất cả 128 bít ban đầu. Điều này tạo ra tính khuếch tán (diffusion) cần thiết cho mã hóa.

<i><b>1.2.3 Q trình giải mã với AES</b></i>

AES là hệ mã đối xứng nên các bước của q trình giải mã chính là các bước ngược lại với các bước của quá trình mã hóa.

Để giải mã một bản mã được mã hóa AES, cần phải hoàn tác từng giai đoạn của hoạt động mã hóa theo thứ tự ngược lại mà chúng đã được áp dụng. Ba giai đoạn giải mã như sau:

- Đảo ngược vòng cuối: AddRoundKey – InvShiftRows – InvSubBytes - Đảo ngược các vịng lặp chính: AddRoundKey – InvMixColumns – InvShiftRows – InvSubBytes

- Đảo ngược vòng khởi tạo: AddRoundKey

<i>1.2.3.1 Hàm InvShiftRows</i>

Hàm InvShiftRows là một phương thức trong q trình giải mã AES, nó được sử dụng để đảo ngược các phép dịch hàng (ShiftRows) được sử dụng

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Mục đích của phương thức InvShiftRows là để đưa các giá trị trong các hàng về vị trí ban đầu của chúng. Cụ thể, quá trình giải mã InvShiftRows thực hiện việc dịch các hàng ngược trở lại vị trí ban đầu của chúng. Điều này được thực hiện bằng cách dịch phần tử trong hàng lên hoặc xuống một số bước tương ứng với chỉ số của hàng đó. Chẳng hạn, hàng thứ hai sẽ được dịch sang phải một phần tử, hàng thứ ba sẽ được dịch sang phải hai phần tử, hàng thứ tư sẽ được dịch sang phải ba phần tử.

Cụ thể, quá trình InvShiftRows được thực hiện như sau: - Hàng thứ nhất giữ nguyên

- Dịch hàng thứ hai một phần tử sang phải. - Dịch hàng thứ ba hai phần tử sang phải. - Dịch hàng thứ tư ba phần tử sang phải.

Sau khi thực hiện phương thức InvShiftRows, các giá trị trong các hàng sẽ được đưa về vị trí ban đầu của chúng, đồng thời chuỗi dữ liệu đã được giải mã sẽ được truyền tiếp cho phương thức InvMixColumns để thực hiện bước giải mã tiếp theo.

<i>1.2.3.2 Hàm InvSubBytes</i>

Hàm này là hàm ngược của hàm SubBytes(), hàm sử dụng nghịch đảo của biến đổi Affine bằng cách thực hiện nhân nghịch đảo trên GF (2<small>8</small>).

Phép biến đổi được sử dụng trong hàm là:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b>Hình 1.4Bảng thay thế cho hàm InvSubBytes</b>

<i>1.2.3.3 Hàm InvMixColumns</i>

Hàm InvMixColumns là một bước trong quá trình giải mã AES. Nó đảo ngược phép trộn MixColumns trong q trình mã hóa AES bằng cách áp dụng một ma trận khác gọi là ma trận InvMixColumn để giải mã dữ liệu. Cụ thể, mỗi cột của khối 16 byte sẽ được nhân với ma trận InvMixColumn để đảo ngược phép trộn MixColumns. Ma trận InvMixColumn được xây dựng dựa trên ma trận MixColumn bằng cách thực hiện một số phép tính như phép nhân

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<b>CHƯƠNG 2. ỨNG DỤNG VIẾT CHƯƠNG TRÌNH MÃ HĨA VÀ GIẢIMÃ AES BẰNG C#</b>

<b>2.1 Q trình mã hóa</b>

<i><b>2.1.1 Hàm SubBytes</b></i>

<b>Hình 2.5 Hàm SubBytes</b>

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<i><b>2.1.2 Hàm ShiftRows</b></i>

<b>Hình 2.6 Hàm ShiftRows</b>

<i><b>2.1.3 Hàm MixColumns</b></i>

<b>Hình 2.7 Hàm MixColumns</b>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<i><b>2.1.4 Hàm AddRoundKey</b></i>

<b>Hình 2.8 Hàm AddRoundKey</b>

<i><b>2.1.5 Hàm Key Expansion</b></i>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b>Hình 2.9 Hàm Key Expansion2.2 Quá trình giải mã</b>

<i><b>2.2.1 Hàm InvShiftRows()</b></i>

<b>Hình 2.10 Hàm InvShiftRows</b>

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<i><b>2.2.2 Hàm InvSubBytes()</b></i>

<b>Hình 2.11 Hàm InvSubBytes</b>

<i><b>2.2.3 Hàm InvMixColumns()</b></i>

<b>Hình 2.12 Hàm InvMixColumns</b>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>2.3 Kết quả thực nghiệm và đánh giá</b>

<i><b>2.3.1 Kết quả thực nghiệm</b></i>

● Input: Đoạn dữ liệu được nhập từ bàn phím tối thiểu 15 chữ số/chữ cái

<small>●</small> Key: <small>MDEyMzQ1Njc4OWFiY2VkZQ== (128bit định dạng base 64)</small>

<small> MDEyMzQ1Njc4OWFiY2VkZTAxMjM0NTY3 ( 192 bit định dạng base 64) MDEyMzQ1Njc4OWFiY2VkZTAxMjM0NTY3ODlhYmNlZGU= (256 bit địnhdạng base 64)</small>

● Out put: đoạn dữ liệu đã được mã hóa

Thời gian mã hóa và thời gian giải mã được tính bằng đơn vị: s

-Mã hóa và Giải mã:

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<i><b>2.3.2 Đánh giá</b></i>

Kết quả đạt được:

- Tìm hiểu và nắm chắc kiến thức tổng quan về mật mã AES.

- Ôn tập, củng cố kiến thức về mơn học cũng như về ngơn ngữ lập trình

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>TÀI LIỆU THAM KHẢO</b>

</div>

×