Tải bản đầy đủ (.pdf) (8 trang)

Mật mã ứng dụng trong an toàn thông tin (3)

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 (1.18 MB, 8 trang )

04.10.2019

1

Giới thiệu AES

MẬT MÃ ỨNG DỤNG TRONG
AN TỒN THƠNG TIN

2

Cấu trúc của AES

Bài 03. Chuẩn mã khối tiên tiến và chuẩn
đệm

3

Cài đặt AES

4

Đệm cho mã khối

Giới thiệu chung về AES

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

Lịch sử ra đời (1/2)
• DES khơng cịn an tồn
• Năm 1997: NIST phát động cuộc thi tìm
kiếm hệ mật làm chuẩn mới
• u cầu đối với thuật tốn ứng viên:
– được mô tả công khai
– là mã khối
– hỗ trợ nhiều kích thước khóa khác nhau
– cài đặt tốt trên phần cứng và phần mềm
– miễn phí cho mọi mục đích sử dụng

Giới thiệu chung về AES








4

Giới thiệu chung về AES

Lịch sử ra đời (2/2)
Tổng cộng có 21 ứng viên
Sau vịng 1 (1998): có 15 đạt u cầu
Sau vịng 2 (1999): cịn 5 thuật tốn, gồm
MARC (IBM), RC6 (RSA), Rijndael
(Daemon và Rijmen), Serpent (Anderson)
và Twofish (Schneier)
SauMARC,
chung kết
(2000):
Rijndael
thắng!
RC6,
Serpent,
Twofish

thể2001:
coi làBan
tốt hành
ngang
ngửaAES.
với AES!
Năm
chuẩn
5


Đặc điểm của thuật tốn
• Rijndael
– Kích thước khối: 128, 160, 192, 224, 256
– Kích thước khóa: 128, 160, 192, 224, 256
– Số vịng lặp:
10, 11, 12, 13, 14

• AES
– Kích thước khối: 128
– Kích thước khóa: 128, 192, 256
– Số vòng lặp:
10, 12, 14
6

1


04.10.2019

Giới thiệu chung về AES

Giới thiệu chung về AES

Độ an tồn của AES
• Chưa có tấn cơng hiệu quả lên thuật
tốn AES
• Chỉ có tấn cơng kênh kề (side channel) lên
cài đặt thuật tốn.








Phần mềm sử dụng AES
7z, WinRAR, WinZIP
NTFS (EFS)
BitLocker, VeraCrypt, DiskCryptor
IPsec, KeePass
WPA

7

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

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

9

Cấu trúc của AES

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:

• Tiêu chuẩn FIPS 197: Advanced
Encryption Standard

• Tiêu chuẩn TCVN 7816-2007: Kỹ thuật
mật mã – Các thuật tốn mật mã – Thuật
tốn mã hóa dữ liệu AES
11

x0
x1
x2
x3

x4
x5
x6
x7

x8
x9
x10
x11

x12
x13
x14
x15

12

2



04.10.2019

Cấu trúc của AES

Cấu trúc của AES
• SubBytes

KLen

128

192

256

Nr

10

12

14

13

14

Cấu trúc của AES

Cấu trúc của AES


y ൌ ‫ି ݔܣ‬ଵ ൅ ܾ

SubBytes(0x53) = ?
SubBytes(0xFA) = ?

15

Cấu trúc của AES

16

Cấu trúc của AES

• SubBytes

• ShiftRows

17

18

3


04.10.2019

Cấu trúc của AES

Cấu trúc của AES

• MixColumns

sc′ = C ⋅ sc
 s0′ c   02
 s′  
 1c  =  01
 s′2c   01
  
 s3′ c   03

03 01 01   s0c 
 
02 03 01   s1c 

01 02 03   s2c 
  
01 01 02   s3c 
20

19

Cấu trúc của AES

Cấu trúc của AES
• AddRoundKey

21

22


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
23

24

4


04.10.2019

Cấu trúc của AES
• Mã hóa
Add → (Nr-1)x{Sub,Shift,Mix,Add} → {Sub,Shift, Add}

1

Giới thiệu AES

• Giải mã xi

2


Cấu trúc của AES

3

Cài đặt AES

4

Đệm cho mã khố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)

25

Cài ñặt AES

Cài ñặt AES

Test vector
• Khi cài đặt một thuật tốn mật mã,
chương trình mã hóa được, giải mã được
chưa hẳn đã là cài đặt đúng!
• Cần kiểm tra tính đúng đắn bằng việc sử
dụng các test vector.
• Ví dụ với AES-128

K = 2b7e151628aed2a6abf7158809cf4f3c
p = 6bc1bee22e409f96e93d7e117393172a
c = 3ad77bb40d7a3660a89ecaf32466ef97 27







Cài đặt theo mơ tả trong chuẩn
Đa phần các phép tính thực hiện trên số 8
bít, khơng khai thác được tính năng của vi
xử lý 32 bít
Tốn ít bộ nhớ
Phù hợp cho vi xử lý 8 bít, như trong các
hệ thống nhúng (embeded systems)
Đối với hệ thống 32 bít thì cần có cài cách
cài đặt hiệu quả hơn
28

Cài đặt AES

Cài đặt AES
• Xét ej là kết quả mã hóa cột thứ j

Cài đặt cho hệ thống 32 bít
• Xét một vịng của AES, ký hiệu

T


a – giá trị đầu vào của vòng (round) đó
b – trạng thái sau SubBytes
c – trạng thái sau ShiftRows
d – trạng thái sau MixColumns
e – trạng thái sau AddRoundKey, tức là đầu ra
k – khóa vịng

e j = ( e0, j , e1, j , e2, j , e3, j )
 e0, j  02
e  
 1, j  =  01
 e2, j   01
  
 e3, j   03

03
02
01
01

01
03
02
01

01  c0, j   k0, j 
   
01  c1, j   k1, j 
+

03 c2, j   k2, j 
   
02   c3, j   k3, j 

• Ký hiệu sj là cột thứ j của ma trận s.
29

30

5


04.10.2019

Cài ñặt AES
c0, j   b0, j   S [a0, j ] 
c   b
 

 1, j  =  1, j +1mod Nb  =  S [a1, j +1 ]  ;
c2, j  b2, j + 2 mod Nb   S [a2, j + 2 ]
  
 

 c3, j   b3, j +3mod Nb   S [a3, j +3 ] 
e0, j  02
e  
 1, j  =  01
e2, j   01
  

 e3, j   03

j + k mod Nb

Cài ñặt AES
e0, j   S [a0, j ] • 02   S [a0, j +1 ] • 03
 e   S [a ]   S [a ] • 2 
0, j
0, j +1
 1, j  = 
⊕

e2, j   S [a0, j ]   S [a0, j +1 ] 
  
 

 e3, j   S [a0, j ] • 03  S [a0, j +1 ] 

j+k

 S[a0, j + 2 ]   S[a0, j +3 ]   k0, j 
 S [a
  S[a
 k 
0, j + 2 ] • 03 
0, j + 3 ] 
1, j
⊕
⊕
⊕ 

 S [a0, j + 2 ] • 02   S [a0, j +3 ] • 03  k2, j 

 
  
 S[a0, j + 2 ]   S [a0, j +3 ] • 02   k3, j 

03 01 01  S[a0, j ]   k0, j 

  
02 03 01  S [a1, j +1 ]   k1, j 
+
01 02 03  S[a2, j + 2 ]  k2, j 
  

01 01 02   S [a3, j +3 ]   k3, j 

31

Cài ñặt AES

32

Cài đặt AES

 S [ x] • 02 
 S [ x] • 03
 S [ x] 


 ; T [ x] =  S [ x] • 2  ;

T0 [ x] = 
1
 S [ x] 
 S[ x] 




 S [ x] • 03
 S[ x] 

e j = T0 [a0, j ] ⊕ T1[a1, j +1 ] ⊕ T2 [a2, j + 2 ] ⊕ T3 [a3, j + 3 ] ⊕ k j

 S [ x] 
 S [ x] 
 S[ x] • 03


 ; T3[ x] =  S [ x]  ; x = 0x00..0xFF
T2 [ x] = 
 S[ x] • 02 
 S[ x] • 03




S
[
x
]



 S[ x] • 02 

Mỗi bảng Ti có 256 phần tử 32 bít
ứng với 256 giá trị 8 bít của x

Xây dựng 4 bảng tra T0, T1, T2, T3

Tồn bộ phép mã hóa đã chuyển
thành phép tra bảng và XOR trên
số 32 bít!

33

Cài đặt AES

34

Cài đặt AES

• Tốc độ cài đặt mềm

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ã
35

36

6


04.10.2019

Cài đặt AES

Cài đặt AES
• Tốc độ cài đặt khi có AES-NI

Kết luận
Việc cài đặt một thuật tố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!
38

37

Chuẩn ñệm cho mã khối

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

Đệm (padding) là gì?
Tại sao cần đệm?

40

Chuẩn đệm cho mã khối

Chuẩn ñệm cho mã khối

None

None padding
and
Zero padding

Zeros


PKCS7

Đệm

Why are they possible?
ANSIX923

ISO10126

41

42

7


04.10.2019

Chuẩn ñệm cho mã khối

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

ISO10126 Padding
- byte cuối:
tổng số byte đệm

- các byte còn lại: ngẫu nhiên

11

AA

11

22

33

44

55

66

77

88

99

AA

AA

11


22

33

44

55

66

77

88

99

AA

4B

1F

A2

11

2E

06


69

32

0A

B9

F1

16

EA

08

22

33

44

55

66

77

88


99

11

22

33

44

55

66

77

88

11

22

33

44

55

66


77

88

11

22

33

44

55

66

77

88

88

11

22

33

44


55

66

77

88

11

22

33

44

55

66

77

99

00

00

00


00

00

00

00

00

00

00

00

00

06

08

43

44

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

11

22

33

44

55

66

77

88

11

22

33


44

55

66

77

88

08

08

06

08

06

08

06

08

06

08


06

08

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

06

08

45

8




×