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 4 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

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

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 tinChuyê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

MỤC LỤC

LỜI NÓI ĐẦU 1

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

DANH MỤC HÌNH VẼ 3

CHƯƠNG 1 TỔNG QUAN 4

1.1 Tổng quan về mật mã học 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 BẰNG C# 17

2.1 Quá trình mã hóa 17

2.1.1 Hàm SubBytes 17

2.1.2 Hàm ShiftRows 17

2.1.3 Hàm MixColumns 18

2.1.4 Hàm AddRoundKey 19

2.1.5 Hàm Key Expansion 19

2.2 Quá trình giải mã 20

2.2.1 Hàm InvShiftRows() 20

2.2.2 Hàm InvSubBytes() 20

2.2.3 Hàm InvMixColumns() 21

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

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

2.3.2 Đánh giá 22

TÀI LIỆU THAM KHẢO 24

PHỤ LỤC 25

Toàn bộ mã nguồn 25

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àomộ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ựcchất đều là những hoạt động thu thập, xử lý, lưu trữ và trao đổi thông tin Trongbố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 trongmọ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ìnhlà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áokhô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 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

Hình 1.3 Bảng Inverse S-Box 15

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

Hình 2.1 Hàm SubBytes 20

Hình 2.2 Hàm ShiftRows 20

Hình 2.3 Hàm MixColumns 21

Hình 2.4 Hàm AddRoundKey 21

Hình 2.5 Hàm Key Expansion 22

Hình 2.6 Hàm InvShiftRows 23

Hình 2.7 Hàm InvSubBytes 23

Hình 2.8 Hàm InvMixColumns 24

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 đảmbả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áttriể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 đốixứ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ổibậ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 đượcphép

- Tính toàn vẹn (integrity): thông tin không thể bị thay đổi mà không bị pháthiện

- Tính xác thực (authentication): người gửi (hoặc người nhận) có thể chứngminh đúng họ

- Tính chống chối bỏ (non-repudiation): người gửi hoặc nhận sau này khôngthể 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êuchuẩ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, 192bithoặc 256bit Các khóa mở rộng sử dụng trong chu trình được tạo ra bởi thủ tụcsinh 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ộttrường hữu hạn của các byte Mỗi khối dữ liệu đầu vào 128bit được chia thành16byte, 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ácbyte, 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óachí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óaphụ 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 đượcthay 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 antoà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ôngphổ biến như tấn công brute-force.AES được sử dụng để mã hóa các thông tinmậ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 choviệ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ủagiả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

- 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 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,

(side-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ấncô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 đượcchọ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 đúngcá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àmAES 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ựchiệ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áckhối 128 bit và khóa được chia thành các khối 128 bit tương ứng Khi thựchiện AddRoundKey, các bit của mỗi khối dữ liệu đầu vào sẽ được XOR vớicá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 ramớ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ướckhi 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ệnmộ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ỗimộ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ếtquả 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 contrướ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áckhó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 độclập đến từng byte trong trạng thái hiện hành Phép biến đổi SubBytes được thựchiện bằng cách tra cứu bảng thay thế (S-box) với tham số đầu vào là các bytetrong 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 InverseSbox,

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

Trang 16

Thao tác Shift rows thực hiện hoán vị các byte trong ma trận state theocá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 nhautrướ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à modulon(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àivò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ácbướ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 Bagiai đ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 –

Trang 19

Mục đích của phương thức InvShiftRows là để đưa các giá trị trong cáchàng về vị trí ban đầu của chúng Cụ thể, quá trình giải mã InvShiftRows thựchiệ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 đượcthự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ướctương ứng với chỉ số của hàng đó Chẳng hạn, hàng thứ hai sẽ được dịch sangphả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ướcgiải mã tiếp theo

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ó đảongược phép trộn MixColumns trong quá trình mã hóa AES bằng cách áp dụngmộ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 để đảongược phép trộn MixColumns Ma trận InvMixColumn được xây dựng dựatrê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ẢI

MÃ 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 Expansion 2.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 định dạ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

https://text.123docz.net/document/10029861-bai-tap-mon-hoc-viet-chuong-[5] ma-aes-128.html

https://nguyenquanicd.blogspot.com/2019/10/aes-bai-2-ly-thuyet-ve-giai-[6] Lê Nguyễn Tố Quỳnh, bài luận "thiết kế lõi chuẩn mã hóa nâng cao 128", 07/2019

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