1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

29 3 0

Đ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

Tiêu đề Viết chương trình mã hóa và giải mã bằng AES
Tác giả Trần Xuân Nghĩa, Ngô Xuân Trọng, Nguyễn Quang Huy
Người hướng dẫn TS. Nguyễn Đào Trường
Trường học Học viện Kỹ thuật mật mã
Chuyên ngành Cơ sở An toàn và Bảo mật Thông tin
Thể loại Bài tập môn học
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 29
Dung lượng 1,81 MB

Nội dung

Trang 1

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

KHOA CÔNG NGHỆ THÔNG TIN

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

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

Người hướng dẫn: TS Nguyễn Đào Trường

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

Trang 2

Hà Nội, 2024

Trang 3

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

Trang 4

1.2 Tổng quan về thuật toán AES 5

1.2.1 Giới thiệu về chuẩn mã hóa AES 5

1.2.2 Quá trính mã hóa với AES 9

1.2.3 Quá trình giải mã với AES 14

CHƯƠNG 2 ỨNG DỤNG VIẾT CHƯƠNG TRÌNH MÃ HÓA VÀ GIẢI MÃ AES

Trang 5

LỜI NÓI ĐẦU

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 toà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 toà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ó luôn 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 quá 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#.

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

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

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 quý thầy cô để chúng em hoàn thành sản phẩm của mình.

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

Trang 6

DANH MỤC TỪ VIẾT TẮT

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

Trang 7

DANH MỤC HÌNH VẼ

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

Trang 8

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

Mật mã học (Cryptography) là ngành khoa học nghiên cứu về việc đảm bảo an toàn thông tin Mật mã học gắn liền với quá 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.

Trang 9

1.2 Tổng quan về thuật toán AES

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

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 toá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 toá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:

Trang 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

Trang 11

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

Ư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 toàn và khó bị đánh đố hiện nay, vì nó sử dụng một loạt các phép toá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

Trang 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 toán: AES sử dụng nhiều phép toán phức tạp để mã hóa dữ liệu, điều này có thể tốn nhiều tài nguyên tính toá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 hoàn toà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 hoàn toà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

Trang 13

1.2.2 Quá trính mã hóa với AES

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).

1.2.2.1 Hàm AddRoundKey

Hàm AddRoundKey là một trong những phương thức cơ bản trong quá 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 quá 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ó đoán và an toà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

Trang 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 quá trình mã hóa AES trở nên an toàn và khó bị tấn công.

1.2.2.2 Thuật toán sinh khóa (Key Expansion)

Thuật toá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*(Nr+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ố Nr 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à [wi] trong đó 0  i < Nb(Nr+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

1.2.2.3 Hàm 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.

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

Trang 15

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

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.

Trang 16

Hình 1.3 Bảng Inverse S-Box

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.

1.2.2.4 Hàm ShiftRows

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 quá trình mã hóa AES Phương thức này hoá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

Trang 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.

Trang 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.

1.2.3 Quá trình giải mã với AES

AES là hệ mã đối xứng nên các bước của quá 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

1.2.3.1 Hàm InvShiftRows

Hàm InvShiftRows là một phương thức trong quá 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

Trang 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.

1.2.3.2 Hàm InvSubBytes

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 (28).

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

Trang 20

Hình 1.4Bảng thay thế cho hàm InvSubBytes

1.2.3.3 Hàm InvMixColumns

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 quá 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

Trang 21

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

2.1 Quá trình mã hóa

2.1.1 Hàm SubBytes

Hình 2.5 Hàm SubBytes

Trang 22

2.1.2 Hàm ShiftRows

Hình 2.6 Hàm ShiftRows

2.1.3 Hàm MixColumns

Hình 2.7 Hàm MixColumns

Trang 23

2.1.4 Hàm AddRoundKey

Hình 2.8 Hàm AddRoundKey

2.1.5 Hàm Key Expansion

Trang 24

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

2.2.1 Hàm InvShiftRows()

Hình 2.10 Hàm InvShiftRows

Trang 25

2.2.2 Hàm InvSubBytes()

Hình 2.11 Hàm InvSubBytes

2.2.3 Hàm InvMixColumns()

Hình 2.12 Hàm InvMixColumns

Trang 26

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

2.3.1 Kết quả thực nghiệm

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

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

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

● 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ã:

Trang 27

2.3.2 Đánh giá

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

Trang 28

TÀI LIỆU THAM KHẢO

Ngày đăng: 24/04/2024, 13:01

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

TÀI LIỆU LIÊN QUAN

w