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

Nghiên cứu thuật toán mật mã AES và cài đặt mô phỏng AES128

30 820 19

Đ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 30
Dung lượng 800,6 KB
File đính kèm Source_code.rar (537 KB)

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

Nội dung

Ngày nay, với việc xuất hiện của máy tính, các tàiliệu văn bản và các thông tin quan trọng đều đã được số hóa và xử lý trên máy tính vàđược truyền đi trong môi trường mạng, đây là một mô

Trang 1

Mục lục

MỤC LỤC 1

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

DANH MỤC HÌNH ẢNH 4

LỜI NÓI ĐẤU 5

CHƯƠNG 1: TỔNG QUAN VỀ THUẬT TOÁN MÃ HÓA AES 6

1.1 LỊCH SỬ PHÁT TRIỂN 6

1.2 CẤU TRÚC AES 6

1.3 CÁC PHÉP TOÁN TRÊN BYTE 8

1.3.1 Cách biểu diễn của byte 8

1.3.2 Phép cộng 2 byte 8

1.3.3 Phép nhân 2 byte 8

1.3.4 Phép toán Xtime 8

1.4 HÀM MỞ RỘNG KHÓA 9

1.4.1 Hàm RotWord 11

1.4.2 Hàm SubWord 11

1.4.3 Ví dụ chi tiết về hàm tạo khóa: 11

1.5 MÃ HÓA 13

1.5.1 Hàm SubBytes 14

1.5.2 Hàm ShiftRows 16

1.5.3 Hàm MixColumns 17

1.5.4 Hàm AddRoundKey 19

1.6 GIẢI MÃ 20

1.6.1 Hàm InvShiftRows 21

Trang 2

1.6.3 Hàm InvMixColumns 22

CHƯƠNG 2: PHÂN TÍCH - CÀI ĐẶT THUẬT TOÁN AES 128 23

2.1 PHÂN TÍCH - THIẾT KẾ CHƯƠNG TRÌNH 23

2.1.1 Yêu cầu bài toán 23

2.1.2 Phân tích - cài đặt thuật toán 23

2.1.3 Một số đoạn mã của chương trình 24

2.1.4 Thực thi chương trình 26

2.2 PHƯƠNG PHÁP KIỂM TRA TÍNH ĐÚNG ĐẮN 27

KẾT LUẬN – HƯỚNG PHÁT TRIỂN 29

TÀI LIỆU THAM KHẢO 30

Trang 3

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

DES Data Encryption Standard

AES Advanced Encryption Standard

NIST National Institute of Standards and Technology

Trang 4

DANH MỤC HÌNH ẢNH

Hình 1: Cấu trúc AES 8

Hình 2: Nguyên lý hoạt động của AES 128bit 8

Hình 3: Sơ đồ thuật toán mở rộng khóa 10

Hình 4: Sơ đồ thuật toán mã hóa AES 128bit 14

Hình 5: Ma trận biến đổi SubByte 15

Hình 6: Bảng tra S-box 16

Hình 7: Hoạt động của hàm ShiftRow 17

Hình 8: Sơ đồ hoạt động của hàm MixColumns 19

Hình 9: Sơ đồ thuật toán giải mã AES 128bit 21

Hình 10: Hoạt động của hàm InvShiftRow 22

Hình 11: Bảng S-box ngược 23

Hình 12: Đoạn mã của hàm AddRoundKey 25

Hình 13: Đoạn mã hàm Xtime 25

Hình 14: Đoạn mã mã hóa AES 128bit 26

Hình 15: Đoạn mã ShiftRow 26

Hình 16: Đoạn mã tạo RoundKey 26

Hình 17: Khởi động chương trình 27

Hình 18: Kết thúc chương trình 28

Trang 5

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 như thế nào để cóthể đảm bảo an toàn bí mật cho các dữ liệu, văn bản quan trọng, đặc biệt là trong nhữnglĩnh vực như: quân sự, ngoại giao Ngày nay, với việc xuất hiện của máy tính, các tàiliệu văn bản và các thông tin quan trọng đều đã được số hóa và xử lý trên máy tính vàđược truyền đi trong môi trường mạng, đây là một môi trường không an toàn khi truyền

dữ liệu Do đó cần có một yêu cầu về việc có một giải pháp để bảo vệ an toàn cho dữliệu, thông tin nhạy cảm, quan trọng là ngày càng cấp thiết Môn học mật mã sẽ giúpcho chúng ta nghiên cứu được những thuật toán mã hóa quan trọng, giúp chúng ta có thểđảm bảo an toàn cho dữ liệu của chúng ta

Trang 6

CHƯƠNG 1: TỔNG QUAN VỀ THUẬT TOÁN MÃ HÓA AES

Do tốc độ tính toán của máy tính ngày càng tăng cao thuật toán DES trở nênkhông an toàn ( năm 1999 một mạng máy tính gồm 100.000 máy có thể giải mã mộtthư tín mã hóa DES chưa đầy 24 giờ) Vì thế Công nghệ Hoa Kỳ chọn thuật toán thaythế DES

Năm 1997 NIST (trước đây là NBS) thông báo một cuộc thi tìm kiếm thuật toánthay thế DES và tổ chức cuộc hội thảo công khai về các tiêu chí cho chuẩn mã hóa nângcao Độ dài khóa là quan trọng nhất Một hội đồng đặc biệt nhóm họp năm 1996 chorằng 90 bit là độ dài khóa tối thiểu để đảm bảo an ninh dữ liệu trong vòng 20 năm NISTyêu cầu cao hơn và quyết định độ dài khóa tối thiếu là 128bit Nhiều thuật toán được gửiđến, các hội đồng xét tuyển đã được thành lập và làm việc qua nhiều vòng Cuối cùng,chọn được 5 thuật toán có mức an toàn cao: RC6, MARS, Rijndael, Twofish, Spent

Vào ngày 2-10-2000, NIST công bố người chiến thắng cho mục tiêu này là đềxuất Rijndael, do Joan Daemen và Vincent Rijmen của Bỉ thiết kế Thiết kế của họ làđơn giản và hợp lý, không dựa trên kiến trúc của DES (DES sử dụng mạng Feistel,Rijndael sử dụng mạng thay thế hoán vị) Cuối cùng, Rijndael được chọn vì nó có sự kếthợp tốt nhất về an toàn, về kịch bản thực hiện, hiệu quả và khả năng thực hiện Người tatin rằng thuật toán này có thể an toàn trên 20 năm Niềm tin này dựa trên không giankhóa của Rijndael rất lớn và các “Thuẫn” của nó chống lại được các cuộc tấn công nổitiếng đã biết

Mặc dù 2 tên AES và Rijndael vẫn thường được gọi thay thế cho nhau nhưngtrên thực tế thì 2 thuật toán không hoàn toàn giống nhau AES chỉ làm việc với các khối

dữ liệu (đầu vào và đầu ra) 128 bit và khóa có độ dài 128,192 hoặc 256 bít trong khiRijndael có thể làm việc với dữ liệu và khóa có độ dài bất kỳ là bội số của 32bit nằmtrong khoảng từ 128 đến 256 bít Khối bổ sung và chiều dài khóa trong Rijndael khôngđược đánh giá trong tiến trình lựa chọn AES, do đó chúng không được thông qua trongcác tiêu chuẩn FIPS hiện hành

AES là một mã khối khóa- lặp: Nó bao gồm việc áp dụng lặp một ánh xạ vòngtrên trạng thái Số các vòng được ký hiệu bởi Nr và phụ thuộc vào độ độ dài khóa

Trang 8

1.3 CÁC PHÉP TOÁN TRÊN BYTE

1.3.1 Cách biểu diễn của byte

Cho byte b7b6b5b4b3b2b1b0 ta sẽ có 3 các biểu diễn nó và chọn một cách tự do giữacác biểu diễn này:

 Một byte là xâu bit có độ dài 8 bit; ví dụ: 10111011;

 Một byte có thể được viết như 2 kí tự hexa như BF;

 Một byte có thể được viết như một đa thức modulo 2 bậc <= 7 như: x7 + x3 +x +1( đây là biểu diễn của xâu bit 10001011)

1.3.2 Phép cộng 2 byte

Ta sử dụng a để kí hiệu 1 byte, độc lập với biểu diễn đa thức Phép cộng 2 byteab đạt được bằng cách cộng các đa thức của chúng theo modulo 2

Ví dụ:

Byte 01000101 có dạng hex là 45, dạng đa thức là x6 + x2 + 1

Byte 01111000 có dạng hex là 78, dạng đa thức là x6 + x5 + x4 + x3

Phần tử 4575 là:

(x6 + x2 + 1) + (x6 + x5 + x4 + x3) = x5 + x4 + x3 + x2 +1 mod 2, và dạng hexa là 3D(00111101)

Chú ý: phép toán  làm cho B thành nhóm giao hoán với phần tử không là 00.Phép toán này tương ứng với phép XOR trên các xâu bit

Trang 9

Giả sử a = a7x7 + a6x6 + …+ a1x + a0 = a(x)  a7a6…a1a0

a.02 = a(x).x mod m(x) = (a7x8 + a6x7 + …+ a1x2 + a0x) mod m(x)

Có 2 trường hợp xảy ra:

1) Nếu a7 = 0 thi a.02 = a6x7 + …+ a1x2 + a0x = a6…a1a00 Nghĩa là a.02 nhậnđược từ a nhờ phép dịch trái 1 bit: a.02 = shift(a)

2) Nếu a7 = 1 thì a.02 = (a7x8 + a6x7 + …+ a1x2 + a0x) mod m(x)

= (x8 + a6x7 + …+ a1x2 + a0x) + m(x)

= (a6x7 + …+ a1x2 + a0x) + (x4 + x3 + x + 1)

 a6a5…a1a00  00011011 = shift(a)  1B Nghĩa làphép a.02 lúc này sẽ nhận được nhờ phép dịch trái 1 bit sau đó xor với{1B}

Key input

Key = w[0]w[1]w[2]w[3]

W[i] = x XOR w[i-4]

W[i] = x XOR w[i-4]

i<44

Kết thúc

Đúng Sai

Hình 3: Sơ đồ thuật toán mở rộng khóa

Đối với thuật toán mã hóa AES 128 độ dài khóa ban đầu là 16 byte và 16 bytenày sẽ được chia ra làm 4 cột, mỗi cột chứa 4 byte Ví dụ ta có khóa key =

Trang 10

2b7e151628aed2a6abf7158809cf4f3c = w0 w1 w2 w3 Như vậy ta sẽ chi khóa trên thành

Mỗi giá trị W sẽ tương ứng với mỗi cột trong trạng thái

Hàm mở rộng khóa thực hiện 40 vòng lặp với i chạy từ 4->43, tương ứng với mỗivòng lặp thì sẽ sinh ra 1 giá trị W và tương ứng với 4 giá trị W liên tiếp nhau tạo nênmột khóa vòng (RoundKey), vì vậy sau khi hàm mở rộng khóa thực hiện xong ta sẽ cóthêm 10 khóa vòng

Qui tắc thực hiện của hàm mở rộng khóa như sau:

iv Gán x = x XOR Rcon[i/4]

v Gán w[i] = x XOR w[i-4]

vi I = I + 1vii I = 44  kết thúc

c Sai (i không chia hết cho 4)

Trang 11

SubByte sẽ được trình bày ở mục Mã hóa Điểm khác biệt là hàm SubWord sẽ chỉ thay

thế các byte ở cột cuối của trạng thái cũ để sử dụng làm cột đầu tiên của trạng thái mới

1.4.3 Ví dụ chi tiết về hàm tạo khóa:

Ban đầu ta có Key:

Trang 12

A0 88 23 2AF

A

54 A3 6C

FE 2C 39 76

Trang 13

17 B

Như vậy ta đã tính được RoundKey(1) Với cách tính tương tự ta sẽ tính đượccác RoundKey tiếp theo Trong bài báo cáo này chúng ta đi nghiên cứ về AES 128bittức là sử dụng khóa có độ dài 128 bit vì vậy tổng cộng ta sẽ có 10 vòng lặp như phíatrên để tao ra 10 RoundKey

Mã hóa AES sử dụng dữ liệu đầu vào và key ở dạng Hex, vì thế bản rõ và keyphải được chuyển đổi từ hệ ACSII sang hệ hex sau đó được chuyển về dạng state (trạngthái) Đối với thuật toán mã hóa AES 128bits, dữ liệu đầu vào và dữ liệu đầu ra đượcbiểu diễn bởi các state, mỗi state là các mảng byte 2 chiều với 4 dòng và Nb cột ( vớiAES Nb = 4) Khóa cũng tương tự được biểu diễn bởi mảng byte 2 chiều với 4 dòng và

Nk cột (với AES 128 Nk = 4)

Input

AddRoundKey(0) i=1

Hình 4: Sơ đồ thuật toán mã hóa AES 128bit

Quá trình mã hóa gồm các bước như sau:

1 Khởi động vòng lặp

Trang 14

a AddRoundKey – mỗi cột của state đầu tiên lần lượt được kết hợp vớikhóa con theo tứ tự từ đầu dãy Phép toán kết hợp được sử dụng làphép xor.

2 Vòng lặp: Đối với AES 128 sẽ bao gồm 9 vòng lặp

a SubBytes – là một phép thế phi tuyến trong đó mỗi byte trong state sẽđược thay thế bằng một byte khác theo bảng tra S-box

b ShiftRows – dịch vòng , các hàng trong state

c MixColumns – quá trình trộn, làm việc theo các cột của state theo mộtphép biến đổi tuyến tính

d AddRoundKey – Mỗi cột của state lần lượt được kết hợp với khóavòng của mỗi vòng lặp

Thực hiện phép thế byte sao cho mỗi byte của trạng thái được biến đối tất định

và độc lập với các byte khác trong trạng thái Điều này cho phép tính toán song song, và

sự độc lập này cũng phi cấu trúc trong thực hiện giải mã với cùng thiết kế Đặc biệt, mỗibyte của trạng thái được biến đổi tại chỗ qua 2 phép toán

1 Byte ai,j được biến đỏi thành nghịc đảo của nó với phép nhân trên trườngGF(28), byte {00} giữ nguyên không thay đổi

2 Byte kết quả được biến đổi bởi ánh xạ affine

Hình 5: Ma trận biến đổi SubByte

Trang 15

SubBytes có thể được thực hiện thông qua một bảng tra S-box Tương ứng vớimỗi byte trong state ta sẽ thay thế bằng một byte khác dựa vào bảng S-box Để hiểu rõhơn ta sẽ đi ra ví dụ sau.

Hình 6: Bảng tra S-box

Ban đầu ta sẽ có một state sau:

19 a0 9a e93d f4 c6 f8e3 e2 8d 48

E F1 E5 30

Trang 16

1.5.2 Hàm ShiftRows

Thực hiện việc biến đổi trên các dòng của trạng thái Dòng đầu tiên không thayđổi, tất cả các dòng khác bị dịch trái vòng theo byte Dòng thứ 2 hai bị dịch vòng trái 1byte, dòng thứ 3 bị dịch vòng trái 2 byte và dòng cuối cùng bị dịch vòng trái 3 byte

Hình 7: Hoạt động của hàm ShiftRow

Ví dụ: ban đầu ta có trạng thái sau

E

F1 E5 30Hàng thứ nhất ta không thực hiện chuyển

Hàng thứ 2 thực hiện dịch vòng trái 1 byte ta được kết quả sau

B

F B4 41 27Hàng thứ 3 ta thực hiện dịch vòng trái 2 byte thu được kết quả sau

5D

52

11

98

Hàng thứ 4 ta thực hiện dịch vòng trái 3 byte thu được kết quả sau

Trang 17

4 8B

F B4 41 275

D

52 11 98

30 AEF1 E5

1.5.3 Hàm MixColumns

Phép biến đổi mỗi cột của trạng thái độc lập với các cột khác Giả sử c(x) là một

đa thức cố định có bậc 3: c(x) = c0 + c1x + c2x2 + c3x3

Giả sử a(x) và b(x) là hai đa thức biến với các hệ số ci và di một cách tương ứng

(với 1<=i<=4) Chúng ta rút ra biểu diễn ma trận của biến đổi mà nhận đầu vào là các hệ

số của đa thức sinh a và sinh các hệ số của đa thức b = c x a như là đầu ra Ta có:

b=c a=(c¿¿0+c1x +c2x2

+c3x3)×(a¿¿0+a1x +a2x2

+a3x3)≡(b¿¿0+b1x +b2x2

+b3x3)mod (x4+1)¿ ¿ ¿

Trang 18

Hình 8: Sơ đồ hoạt động của hàm MixColumns

Để hiểu rõ hơn về phép Mixcolumns ta sẽ đi vào ví dụ sau:

Ban đầu ta có trạng thái

D

4 E0 B8 1EB

Trang 19

Từ đó ta có: X1 =

1011.0011Xor 1101.1010Xor 0101.1101Xor 0011.0000

= 0000.0100 = 04

 X1 = 04Kết quả của phép nhân thu về được cột đầu tiên của trạng thái mới Và cứ tiếptục thực hiện hết 4 cột của trạng thái ban đầu ta sẽ thu về được trạng thái mới sau:

1.5.4 Hàm AddRoundKey

Trong phép biến đổi này, trạng thái được thay đổi bằng cách kết hợp nó với khóavòng bằng phép toán XOR Từ kết quả của phép Mixcolumn ta thực hiện XOR trạngthái đó với RoundKey tương ứng Sau khi kết thúc AddRoundKey thì kết quả của vòngAddRoundKey trước sẽ làm input của vòng lặp tiếp sau đó

Trang 20

1.6 GIẢI MÃ

Input

AddRoundKey(10) i=9 i>0

InvSubBytes InvShiftRows

InvMixColumns AddRoundKey(i)

i = i - 1

InvSubBytes InvShiftRows

AddRoundKey(0) Output

Đúng

Sai

Hình 9: Sơ đồ thuật toán giải mã AES 128bit

Quá trình mã hóa được thực hiện như sau:

a InvShiftRows – là quá trình ngược so với hàm ShiftRows

b InvSubBytes – Mỗi byte trong trạng thái sẽ được thay thế bằng mộtbyte mới, byte mới này được tra theo bảng tra S-box nghịch đảo

c AddroundKey – tương tự phép AddRoundKey khi mã hóa, mỗi trạngthái của mỗi vòng sẽ được XOR với khóa vòng tương ứng

d InvMixColumns – là hàm ngược của MixColumns thực hiện biến đổicột của trạng thái

3 Vòng lặp cuối:

Trang 21

1 byte, dòng thứ 3 bị dịch vòng phải 2 byte và dòng cuối cùng bị dịch vòng phải 3 byte.

Hình 10: Hoạt động của hàm InvShiftRow

Trang 23

CHƯƠNG 2: PHÂN TÍCH - CÀI ĐẶT THUẬT TOÁN AES 128

2.1.1 Yêu cầu bài toán

 Chương trình nhận đầu vào từ file “input.txt”, xuất kết quả ra 2 file “encrypt.txt”

và “decrypt.txt” Tất cả các file này nằm trong cùng thư mục với file chương trình Dữ liệu trong các file được biểu diễn dưới dạng chuỗi hex

2.1.2 Phân tích - cài đặt thuật toán

Với yêu cầu đề ra của bài toán là nhận đầu vào từ 1 file “input.txt” với nội dungcủa file “input.txt” đó là: dòng 1 ghi khóa, dòng 2 ghi khối dữ liệu và cả 2 dòng này sẽđược biểu diễn dưới dạng chuỗi Hex Vì thế bước đầu tiền chúng ta cần thiết kế mộtchương trình con tách độ dài của khối dữ liệu thành từng khối 128bit vì thuật toán mãhóa AES chỉ nhận khối dữ liệu đầu vào có độ dài 128bit Sau đó, viết đoạn mã đểchuyển từ một chuỗi Hex về một state (trạng thái) là một ma trận 4x4 và ta sẽ biểu diễn

ma trận này dưới dạng mảng 2 chiều

Sau khi đã xử lí được chuỗi hex của khóa và dữ liệu chuyển về state chúng ta sẽ

sử dụng khối dữ liệu này để làm việc Công việc mã hóa của AES phụ thuộc vào cáchàm như: SubByte, ShiftRow, Mixcolumn và AddRoundkey vì thế ta cần thiết kế nhữnghàm này theo như yêu cầu ở bước mã hóa của Chương 1 Kèm theo thiết kễ module mã

Trang 24

hóa thì ta cũng cần thiết kế hàm tạo Key để sinh ra các khóa vòng để phục vụ cho quátrình AddRoundKey, việc thiết kế hàm tạo Key này đã được phân tích rõ ở chương 1.

Quá trình giải mã chúng ta thiết kế tương tự quá trình mã hóa với các hàm ngượcnhư InvSubyte, InvShiftRox, InvMixcolumn

Cuối cùng sau khi đã thiết kế đầy đủ các module cũng như các hàm để phục vụcho quá trình mã hóa cũng như giải mã thì ta sẽ dựa vào sơ đồ mã hóa và sơ đồ giải mã(hình 2) để thực hiện cũng như lắp ghép các đoạn mã lại thành một chương trình hoànchỉnh

2.1.3 Một số đoạn mã của chương trình

Dưới đây là một số đoạn mã của chương trình mã hóa AES 128bit

Hình 12: Đoạn mã của hàm AddRoundKey

Hình 13: Đoạn mã hàm Xtime

Trang 25

Hình 14: Đoạn mã mã hóa AES 128bit

Hình 15: Đoạn mã ShiftRow

Trang 26

2.1.4 Thực thi chương trình

Chương trình được viết bằng ngôn ngữ lập trình python nên tên file chương trình

sẽ có dạng “tenfile.py” Chúng ta sẽ cần phải cài đặt python lên để chương trình có thểhoạt động

Sau khi đã cài đặt python, chúng ta sẽ mở file chương trình bằng IDLE củapython Chương trình nhận dữ liệu đầu vào từ file “input.txt” nên ta sẽ cần tạo file đó và

để cùng thư mục với mã nguồn Sau đó sẽ thêm khóa vào dòng đầu tiên của file và thêmkhối dữ liệu vào dòng thứ 2, cả 2 đều được biểu diễn dưới dạng kí tự hex

Công việc chuẩn bị xong ta sẽ chạy chương trình bằng cách nhấn F5 Chươngtrình chạy dưới dạng console và đưa ra thông báo như hình dưới

Hình 17: Khởi động chương trình

Do chương trình được thiết kế thêm chế độ mã hóa ECB nên chúng ta sẽ chọn số

1 để mã hóa dưới chế độ ECB và số 2 để mã hóa dưới chế độ CBC Các chế độ hoạtđộng của mã khối sẽ không được trình bày trong báo cáo này và chúng ta hoàn toàn cóthể tìm được trên mạng một cách dễ dàng Nếu ta nhập số 1 thì chương trình sẽ mã hóatheo ECB và đưa ra thông báo như hình bên dưới Còn nếu chúng ta nhập số 2 thì vì chế

độ mã hóa CBC sẽ cần 1 Init vector nên chương trình sẽ đưa ra dòng thông báo yêu cầunhập init vector và ta sẽ nhập dưới dạng kí tự hex Sau khi nhập xong chương trình sẽthực hiện mã hóa và đưa ra dòng thông báo thành công

Ngày đăng: 09/11/2017, 11:29

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