Professional Documents
Culture Documents
Mật mã UD. AT. Bài 03. Chuẩn mã khối và chuẩn đệm
Mật mã UD. AT. Bài 03. Chuẩn mã khối và chuẩn đệm
7
Giới thiệu chung về AES
Phần mềm sử dụng AES
• 7z, WinRAR, WinZIP
• NTFS (EFS)
• BitLocker, VeraCrypt, DiskCryptor
• IPsec, KeePass
• WPA
8
Giới thiệu chung về AES
Thư viện lập trình mật mã
• C: OpenSSL, CryptoAPI
• C++: Bortan, Crypto++
• C#/.NET: .NET Framework, Bouncy Castle
• Java: JCE, Bouncy Castle
• Python: PyCrypto
• JavaScript: SJCL, AES-JS
9
1 Giới thiệu AES
2 Cấu trúc của AES
3 Cài đặt AES
4 Đệm cho mã khối
Cấu trúc của AES
11
Cấu trúc của AES
• Dữ liệu (input, intermediate state, output,
round keys) trong AES là ma trận kích
thước 4xNb = 4x4
• Nạp dữ liệu x0x1x2...x15 vào ma trận:
x0 x4 x8 x12
x1 x5 x9 x13
x2 x6 x10 x14
x3 x7 x11 x15
12
Cấu trúc của AES
13
Cấu trúc của AES
• SubBytes
14
Cấu trúc của AES
−1
y=𝐴𝑥 +𝑏
15
Cấu trúc của AES
SubBytes(0x53) = ?
SubBytes(0xFA) = ?
16
Cấu trúc của AES
• SubBytes
17
Cấu trúc của AES
• ShiftRows
18
Cấu trúc của AES
• MixColumns
19
Cấu trúc của AES
sc C sc
s0 c 02 03 01 01 s0 c
s s
1 c 01 02 03 01 1c
s2 c 01 01 02 03 s2 c
s
3c 03 01 01 02 s3c
20
Cấu trúc của AES
21
Cấu trúc của AES
• AddRoundKey
22
1.4. KeyExpansion
• Thuật toán mở rộng khóa của AES nhận một khóa mã hóa K sau đó
thực hiện sinh một dãy các khóa cho việc mã hóa.
Round Word
Trước vòng lặp w0 w1 w2 w3
1 w4 w5 w6 w7
2 w8 w9 w10 w11
… …
Nr w4Nr w4Nr+1w4Nr+2w4Nr+3
9/5/2013 23
1.4. KeyExpansion
9/5/2013 25
1.4. KeyExpansion()
Ví dụ
• Khóa K = 36 8a c0 f4 ed cf 76 a6 08 a3 b6 78 31 31
27 6e
w0 w1 w2 w3 Rcon[4/4] w[4-4]
01 36
36 ed 08 31
00 8a
8a cf a3 31
00 c0
c0 76 b6 27
00 f4
f4 a6 78 6e
RotWord SubWord
31 c7 01 c6 36 f0
27 S - Box cc 00 cc 8a 46
6e 9f 00 9f c0 5f
31 00 c7 33
c7 f4
9/5/2013 26
1.4. KeyExpansion
Mỗi khóa vòng ở vòng thứ Chỉ cần thay 1 bit trong khóa
Rcon cũng khác
i phụ thuộc phi tuyến vào cũng dẫn đến thay đổi hoàn
nhau cho mỗi vòng.
khóa vòng ở vòng thứ i-1 toàn cấu trúc khóa vòng.
w0 w1 w2 w3
w3 T w4 T w5 T w6 T w7
w7 T w8 T w9 T w10 T w11
9/5/2013 28
Cấu trúc của AES
• Mỗi phép biến đổi trong AES đều có phép
biến đổi ngược: InvSubBytes,
InvShiftRows, InvMixColumns,
AddRoundKey
• Pha giải mã giống như pha mã hóa,
nhưng sử dụng các phép biến đổi ngược
và trật tự đảo ngược các khóa vòng
• Có hai cấu trúc giải mã: giải mã xuôi và
giải mã ngược
29
30
Cấu trúc của AES
• Mã hóa
Add → (Nr-1)x{Sub,Shift,Mix,Add} → {Sub,Shift, Add}
• Giải mã xuôi
Add→(Nr-1)x{IShift,ISub,Add,IMix}→{IShift,ISub,Add}
• Giải mã ngược
Add→(Nr-1)x{ISub,IShift,IMix,Add}→{ISub,IShift,Add}
RoundKey’ = Inv (RoundKey)
31
Bài tập
• Key in English: Thats my Kung Fu (16
ASCII characters, 1 byte each)
Translation into Hex:
32
• Plaintext in English: Two One Nine Two
(16 ASCII characters, 1 byte each)
Translation into Hex:
38
Cài đặt AES
39
Cài đặt AES
e0, j S [a0, j ] 02 S [a0, j 1 ] 03
e S [a ] S [a ] 2
1, j 0, j 0, j 1
e2, j S [a0, j ] S [a0, j 1 ]
e3, j S [a0, j ] 03 S [a0, j 1 ]
S [a0, j 2 ] S [a0, j 3 ] k0, j
S[a
0, j 2 ] 03 S [a0, j 3 ] k1, j
S [a0, j 2 ] 02 S [a0, j 3 ] 03 k2, j
S [a0, j 2 ] S [a0, j 3 ] 02 k3, j
42
Cài đặt AES
• Tốc độ cài đặt mềm
43
Cài đặt AES
Tập lệnh AES-NI
• Các vi xử lý đời mới của Intel (Core i5 trở
lên) và AMD hỗ trợ tập lệnh đặc biệt để
cài đặt AES, gọi là AES-NI
• AES-NI gồm 6 lệnh
AESENC và AESENCLAST: mã hóa 1 vòng
AESDEC và AESDECLAST: giải mã 1 vòng
AESKEYGENASSIST: tạo khóa vòng
AESIMC: tạo khóa vòng giải mã
44
Cài đặt AES
• Tốc độ cài đặt khi có AES-NI
45
Cài đặt AES
Kết luận
Việc cài đặt một thuật toán mật
mã đòi hỏi phải nghiên cứu kỹ
lưỡng để đảm bảo an toàn và
đạt được hiệu năng thực thi cao!
46
1 Giới thiệu AES
2 Cấu trúc của AES
3 Cài đặt AES
4 Đệm cho mã khối
Chuẩn đệm cho mã khối
48
Chuẩn đệm cho mã khối
None
PKCS7 Zeros
Đệm
ANSIX923 ISO10126
49
Chuẩn đệm cho mã khối
None padding
and
Zero padding
Why are they possible?
50
Chuẩn đệm cho mã khối
ANSIX923 Padding
- byte cuối: tổng số byte đệm
- các byte còn lại: 0
11 22 33 44 55 66 77 88 99 AA
11 22 33 44 55 66 77 88 99 AA 00 00 00 00 00 06
11 22 33 44 55 66 77 88
11 22 33 44 55 66 77 88 00 00 00 00 00 00 00 08
51
Chuẩn đệm cho mã khối
ISO10126 Padding
- byte cuối: tổng số byte đệm
- các byte còn lại: ngẫu nhiên
11 22 33 44 55 66 77 88 99 AA
11 22 33 44 55 66 77 88 99 AA 4B 1F A2 11 2E 06
11 22 33 44 55 66 77 88
11 22 33 44 55 66 77 88 69 32 0A B9 F1 16 EA 08
52
Chuẩn đệm cho mã khối
PKCS7 Padding
Mỗi byte đệm: tổng số byte đệm
11 22 33 44 55 66 77 88 99 AA
11 22 33 44 55 66 77 88 99 AA 06 06 06 06 06 06
11 22 33 44 55 66 77 88
11 22 33 44 55 66 77 88 08 08 08 08 08 08 08 08
53
1 Giới thiệu AES
2 Cấu trúc của AES
3 Cài đặt AES
4 Đệm cho mã khối