Tải bản đầy đủ (.doc) (18 trang)

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 trong ngày càng trở nên cấp thiết

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 (370.55 KB, 18 trang )

Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

LỜI NĨI ĐẦU
Từ trước cơng ngun 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à mặc định là khơng an toàn. Do đó 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
trong ngày càng trở nên cấp thiết. An toàn bảo mật thông tin là môn học đảm bảo cho
mục đích này. Khó có thể thấy một ứng dụng Tin học có ích nào lại khơng sử dụng các
thuật tốn mã hóa thơng tin.

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Phần 1: Tổng quan về bài toán
Trong mật mã học, 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 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. Giớng như tiêu chuẩn tiền nhiệm DES, AES được kỳ
vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng. AES được chấp
thuận làm tiêu chuẩn liên bang bởi Viện công nghệ và tiêu chuẩn quốc gia Hoa Kỳ
(NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm


Thuật tốn được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent
Rijmen. Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES.
Rijndael được phát âm là "Rhine dahl" theo phiên âm quốc tế.
Quá trình phát triển
Thuật tốn được dựa trên bản thiết kế Square có trước đó của Daemen và Rijmen; cịn
Square lại được thiết kế dựa trên Shark.
Khác với với DES sử dụng mạng Feistel, Rijndael sử dụng mạng thay thế-hoán vị. AES
có thể dễ dàng thực hiện với tớc độ cao bằng phần mềmhoặc phần cứng và khơng địi hỏi
nhiều bộ nhớ. Do AES là một tiêu chuẩn mã hóa mới, nó đang được triển khai sử dụng
đại trà.
Mơ tả bài toán
Mặc dù 2 tên AES và Rijndael vẫn thường được gọi thay thế cho nhau nhưng trên thực tế
thì 2 thuật tố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 bít và khóa có độ dài 128, 192 hoặc 256 bít trong khi Rijndael 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 32 bít nằm trong khoảng từ
128 tới 256 bít. Các khóa con sử dụng trong các chu trình được tạo ra bởi q trình tạo
khóa con Rijndael. Mỗi khóa con cũng là một cột gồm 4 byte. 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 128 bit đầu vào được chia thành 16 byte (mỗi byte 8 bit),có thể xếp thành 4 cột, mỗi
cột 4 phần tử hay là một ma trận 4x4 của các byte,nó được gọi là ma trận trạng thái, hay
vắn tắt là trạng thái (tiếng Anh: state, trang thái trong Rijndael có thể có thêm cột) . Trong
q trình thực hiện thuật toán các toán tử tác động để biến đổi ma trận trạng thái này.
Trong phạm vi bài tập, chúng em sẽ tìm hiểu về thuật tốn AES với dữ liệu đầu
vào là 128 bit và sử dụng khóa 128bit.

Viện Đại học Mở Hà Nội

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



Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Phần 2: Mã Hóa AES
Nguyên tắc
Mã hóa AES sử dụng dữ liệu đầu vào và key là hệ Hex, vì thế bản rõ và key phải được
chuyển đổi từ hệ ASCII sang hệ Hex.
Tùy thuộc vào độ dài của key khi sử dụng 128bit, 196bit và 256 bit mà AES có các cách
mã hóa với sớ lần lặp khác nhau. Cụ thể

AES 128
AES 196
AES 256

Độ dài khóa(Nk)
4
6
8

Kích thước khới (Nb)
4
4
4

Sớ lần lặp
10
12
14


Các bước thực hiện
Khởi động vòng lặp
AddRoundKey — Mỗi cột của trạng thái đầu tiên lần lượt được kết hợp với một khóa con
theo thứ tự từ đầu dãy khóa.
Vịng lặp
SubBytes — đây là phép thế (phi tuyến) trong đó mỗi byte trong trạng thái
sẽ được thế bằng một byte khác theo bảng tra (Rijndael S-box)
ShiftRows — dịch chuyển, các hàng trong trạng thái được dịch vịng theo sớ bước
khác nhau.
MixColumns — quá trình trộn làm việc theo các cột trong
khới theo một phép biến đổi tún tính.
AddRoundKey
Vịng lặp ći
SubBytes
ShiftRows
AddRoundKey

Mã hóa key
Sau mỗi vịng lặp, đến bước AddRoundKey, kết quả sẽ được (+) 1 khóa round key. Vậy
Round key được tính như thế nào. Phần này chúng ta sẽ tìm hiểu về cách mã hóa Round
key

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES


Ta có key ban đầu:
2b
7e
15
16

28
Ae
D2
A6

Ab
F7
15
88

09
Cf
4f
3c

Để thực hiện việc tính Round key(1). Đầu tiên ta sẽ lấy cột cuối cùng của key ban đầu.
Đảo bit đầu tiên x́ng dưới
09
Cf
4f
3c
Thành
Cf

4f
3c
09
Sau đó ta đi so sánh với bảng S-box

Cụ thể ta có: Cf=8a
4f=84
3c=eb
09=01

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

8a
84
Eb
01
Tiếp theo ta lấy cột từng cột của Key cũ(+)kết quả trên (+) Rcon
Với Rcon=
01
00
00
00
2b

8a
01
A0
7e
84
00
Fa
(+)
(+)
=
15
Eb
00
Fe
16
01
00
17
Sau khi tính ta có cột thứ 1 của Round key(1)
A0
Fa
Fe
17
Tiếp tục ta sẽ lấy cột thứ 2 của key (+) cột thứ nhất của RoundKey(1) nhưng khơng cộng
với Rcon, ta có cơt thứ 2 của RoundKey(1)
A0 88
Fa 54
Fe 2c
17 bl
Tiếp tục, ta lại lấy cột thứ 3 của key (+) cột thứ 2 của RoundKey (1) ta được cột

thứ 3 của Roundkey(1)
A0 88 23
Fa 54 A3
Fe 2c 39
17 bl 39
Tiếp tục, ta lại lấy cột thứ 4của key (+) cột thứ 3 của RoundKey (1) ta được cột thứ 4 của
Roundkey(1)
A0 88 23 2a
Fa 54 A3 6c
Fe 2c 39 76
17 bl 39 05
Roundkey(1)

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Ći cùng ta RoundKey(1). Tương tự ta sẽ tính các RoundKey tiếp. Trong bài này ta sử
dụng khóa 128b nên sẽ có 10 lần lặp. vì thế ta sẽ có 10 Roundkey
F2 7a 59
C2 96 35
95 B9 80
F2 43 7a
Roundkey(2)
3d 47 1e

80 16 23
47 Fe 7e
7d 3e 44
Roundkey(3)
Ef A8 B6
44 52 71
A5 5b 25
41 7f 3b
Roundkey(4)
D4 8c Ca
D1 83 F2
C6 9d B8
F8 87 Bc
Roundkey(5)
6d 11 Db
88 0b F9
A3 3e 86
7a Fd 41
Roundkey(6)
4e 5f 84
54 5f A6
F7 C9 4f
0e F3 B2
Roundkey(7)

Viện Đại học Mở Hà Nội

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

73

59
F6
7f
6d
7a
88
3b
Db
0b
Ad
00
11
F9
15
bc
Ca
00
93
fd
4e
A6
Dc
4f


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Ea B5 31

D2 8d 2b
73 Ba F5
21 D2 60
Roundkey(8)

7f
8d
29
2f

Ac 19 28
77 Fa D1
66 dc 29
F3 21 41
Roundkey(9)

57
5c
00
6e

D0 C9 E1
14 Ee 3f
F9 25 0c
A8 89 C8
Roundkey(10)

B6
63
0c

A6

Khởi động vòng lặp
Vd: cho Plantext và Key sau khi chuyển đổi sang ASCII
Chuyển đổi từ bản rõ (hệ ASCII sang hệ Hex)
(Plan text)
32
88
31
E0
43
5a
31
37
F6
30
98
07
A8
8d
A2
34
Chuyển đổi key(hệ ASCII sang hệ Hex)
(key)
2b
28
7e
Ae
15
D2

16
A6

Ab
F7
15
88

09
Cf
4f
3c

Bước 1: Add Round Key
Ta thực hiện lấy Plan text (+) Key
Vd: 32 (+) 2b
Biến đổi 32 về hệ hex= 0011 0010

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Biến đổi 2b về hệ hex= 0010 1011
0011 0010
(+)

0010 1011
______________
(=) 0001 1001
Cách tính: ta lấy từng số cộng với nhau. Nếu 2 số bằng nhau (đều là số 0 hay số 1) thì kết
quả sẽ là 0, cịn 2 sớ khác nhau kết quả là số 1
Từ kết quả 0001 1001 ta biến đổi về hệ 16 thì kết quả là 19

Từ đó ta có bảng
19
3d
E3
Be

A0
F4
E2
2b

9a
C6
8d
2a

E9
F8
48
08

Tiếp theo, bắt đầu vào vịng lặp
Vòng lặp

B1: SubBytes
Từ bảng trên ta đem so sánh với bảng S-Box

Với giá trị 19, ta tìm đến hàng 1 (1x) cột 9 (x9) ta được giá trị “d4”
Với giá trị 3d, ta tìm đến hang 3 (3x) cột d (xd) ta được giá trị “27”
Tương tự với các giá trị cịn lại ta có bảng
D4
E0
Viện Đại học Mở Hà Nội

B8

1e

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

27
11
ae

Bf
98
F1

B4

5d
E5

41
52
30

B2.Shiftrows
Từ bảng thu được sau khi thực hiện SubBytes, ta thực hiện bước 2. Bước 2 sẽ thực
hiện chuyển các bit tại các hàng về sau theo thứ tự:
Hàng thứ 1 không chuyển
Hàng thứ 2 chuyển bit đầu tiên về vị trí bit ći cùng, các bit cịn lại sẽ đẩy lên trên.
27 bf
B4 41
bf
B4 41 27
Hàng thứ 3 chuyển bit đầu tiên về vị trí của bit cuối cùng,các bit cịn lại sẽ được đẩy lên.
Sau đó lại thực hiện việc chuyển 1 lần nữa
11 98 5d 52
98

5d

52

11

5d 52 11 98
Tương tự như vậy,hàng thứ 4 sẽ thực hiện chuyển vị trí bit đầu tiên xuống bit cuối
cùng và lặp lại 2 lần

ae F1 E5 30
F1

E5

30

ae

E5

30

ae

F1

30 ae
Sau khi thực hiện chuyển bit, ta có kết quả
D4
E0
bf
B4
5d
52
30
ae

F1


E5

B8
41
11
F1

1e
27
98
E5

B3.Mix Column
Sau khi thực hiện việc chuyển bit, ta có bảng kết quả
D4
E0
B8
1e
bf
B4
41
27
Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES


5d
52
11
98
30
ae
F1
E5
Trong bước Mix Column, ta sẽ thực hiện việc nhân các cột của bảng kết quả với ma trận
mặc định (như hình vẽ).

Cụ thể như sau:
Cột thứ 1:
D4
Bf
5d
30

Ta sẽ lấy cột nhân với hàng theo quy tắc
(D4.02) xor (bf.03) xor (5d.01)xor(30.01)=X1
Tính (D4.02)
Biến đổi D4 về hệ Hex:D4=11010100
Với số nhân là “02”, ta có cách thực hiện như sau
Ta sẽ thêm sớ “0” vào cuối cùng của dãy sau khi chuyển về hệ Hex, vì thế dãy sớ
của chúng ta sẽ biến đổi. Cụ thể trong trường hợp này, số “1” đầu tiên của dãy sẽ bị loại
bỏ
D4=10101000
Sau đó, chúng ta sẽ lấy kết quả sau khi thêm bit nhân với dãy bit (00011011)
10101000

Xor
00011011
=

10110011

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Sau đó chúng ta tiếp tục tính (bf.03)
Trong trường hợp sớ nhân là “03”, ta có:
03=02+01
Từ đó (bf.03)=(bf.02) xor (bf.01)
Với (bf.02) ta thực hiện tương tự như tính (D4.02)
Bf=10111111
Dịch bit: bf=01111110
01111110
Xor
00011011
=

01100101

Với (bf.01)=bf=10111111

Từ đó ta có (bf.03)=(bf.02)xor(bf.01)
01100101
Xor
10111111
=

11011010

Tương tự ta có

(5d.01)=01011101
(30.01)=00110000

Từ đó:
X1= (D4.02) xor (bf.03) xor (5d.01)xor(30.01)
1011 0011
Xor
1101 1010
Xor
0101 1101
Xor
0011 0000
X1= 0000 0100=04
Tiếp tục với đến hết ta có :

Viện Đại học Mở Hà Nội

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



Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

D4
Bf
5d
30

=

04
66
81
E5

Sau khi thực hiện xong bước MixColumn, ta có kết quả
D4
bf
5d
30

E0
B4
52
ae

B8
41
11

F1

1e
27
98
E5

=

04
66
81
E5

E0
Cb
19
9a

B4. AddRound Key
Từ kết quả của bảng MixColumn, ta (+) RoundKey tương ứng(Trong vòng
sẽ +() RoundKey(1) và tương tự với các vòng lặp còn lại)
04 E0 48 28
A4
68
A0 88 23 2a
66 Cb F8 06
Fa 54 A3 6c
9c
9f

=
81 19 D3 26
7f
35
Fe 2c 39 76
17 bl 39 05
E5 9a 7a 4c
F2
2b

48
F8
D3
7a

28
06
26
4c

lặp thứ nhất
6b
5b
Ea
43

02
6a
50
49


Roundkey(1)

Sau khi kết thúc AddRoundKey, vòng lặp thứ 2 bắt đầu
Input sẽ là kết quả của vịng Addroundkey trước:
Vịng Lặp Ći
Như đã trình bày, với khóa k=128b, mã hóa AES sẽ thực hiện 9 vòng lặp bao gồm 4
bước.
Đến vòng lặp thứ 10(vịng ći), AES sẽ chỉ thực hiện 3 bước
SubBytes
ShiftRows
AddRoundKey
Trong vịng lặp ći sẽ bỏ đi bước MixColumn

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Kết thúc vòng 10,ta sẽ thu được kết quả:
39
02
25
dc
84
09

1d
Fd

Viện Đại học Mở Hà Nội

dc
11
85
97

19
6a
0b
32

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Phần 3: Giải mã
Thuật tốn giải mã được trình bày như sơ đồ ban đầu ta đã thấy thứ tự các hàm biến đổi
được áp dụng khác so với thuật toán mã hóa trong khi dạng của danh sách khóa 2 thuật
tốn vẫn giữ ngun. Tuy vậy, một sơ đặc điểm của AES cho phép chúng ta có một thuật
tốn giải mã tương đương có thứ tự áp dụng các hàm biến đổi giớng với thuật tốn mã
hóa ( tất nhiên là biến đổi bằng cách làm ngược cảu chúng). Điều này làm được bằng
cách thay đổi sách khóa.
1. Add Round Key:


Ví dụ:
Bản khóa:
39
25
84
1d

02
dc
09
Fd

dc
11
85
97

19
6a
0b
32

D0
14
F9
A8

C9
Ee

25
89

E1
3f
0c
C8

B6
63
0c
A6

E9
31
7d
B5

Cb
32
2c
72

3d
2e
89
5f

Af
09

07
94

Round key 10:

Kết quả:

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

2. InvShiftRows ()

Đây là quá trình ngược lại so với quá trình ShiftRows()
Ví dụ:

Ban đầu:
E9
31
7d
B5

Cb
32
2c

72

3d
2e
89
5f

Af
09
07
94

E9
31
7d
72

Cb
32
2c
5f

3d
2e
89
95

Af
09
07

B5

E9
31
89
72

Cb
32
07
5f

3d
2e
7d
95

Af
09
2c
B5

E9
09
89
72

Cb
31
07

5f

3d
32
7d
95

Af
2e
2c
B5

Trạng thái 1(xoay 1 byte)

Trạng thái 2(xoay 2 byte):

Kết quả(xoay 3 byte):

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

3. InvSubBytes ()
Quá trình Process InvSubBytes tương tự với SubBytes, nhưng các bảng được sử dụng
khác nhau. Bảng được sử dụng là các bảng S-Box nghịch đảo:


Ví dụ:

Ban đầu:
E9
09
89
72

Cb
31
07
5f

3d
32
7d
95

Af
2e
2c
B5

Eb
40
F2
1e

59

2e
38
84

8b
A1
13
E7

1b
C3
42
D2

Kết quả sau khi so bảng:

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

4. InvAddRows ()
Ban đầu
Eb
40
F2

1e

59
2e
38
84

8b
A1
13
E7

1b
C3
42
D2

47
37
94
Ed

40
D4
E4
A5

A3
70
3a

A6

4c
9f
42
bc

Kết quả:

Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

4. InverseMixCollums ()
Hàm này là hàm ngược của hàm MixColum. Hàm này làm việc trên các cột của mảng
trạng thái, coi mỗi cột như là một mô tô đa thức 4 hạng tử. Các cột được xem là các đa
thức trên GF(28) và được nhân theo modulo x4+1 với 1 đa thức cố định là a-1(x):
a-1(x)= {0b}x-3 + {0d}x-3+{09}x + {0e}
Và có thể mơ ta bằng phép nhân ma trận như sau:
S’(x)= a-1(x) xor s(x)

Trong đó 0Kết quả là 4 byte trong mỗi cột được thay thế bằng công thức sau:

Ví dụ:


Viện Đại học Mở Hà Nội

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


Nhóm 2 – Tin0310B1

Đề 2- Thuật tốn mã hóa AES

Ban đầu:
47
37
94
Ed

40
D4
E4
A5

A3
70
3a
A6

4c
9f
42
bc


Tiến hành:
dòng

Cột
Tất cả các cột được thực hiện cùng 1 cách như trên và kết quả thu được như sau:
87
6e
46
A6

F2
4c
E7
8c

4d
90
4a
D8

97
Ec
C3
95

Làm tương tự với các vòng lặp theo sơ đồ mã hóa và giải mã, kết quả ći cùng sau vịng
lặp thứ 10 là bản rõ như sau:
32
43

F6
A8

Viện Đại học Mở Hà Nội

88
5a
30
8d

31
31
98
A2

E0
37
07
34

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



×