HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA: CƠNG NGHỆ THƠNG TIN
----------
BÁO CÁO MƠN HỌC
AN TỒN BẢO MẬT THƠNG TIN
Đề tài
“TÌM HIỂU GIẢI THUẬT MÃ HĨA KHĨA BÍ MẬT AES”
1
LỜI NÓI ĐẦU
Vào ngày 2 tháng 2 năm 1997, viện tiêu chuẩn và công nghệ
( NIST – National Institute of Standards and Technology) u cầu một
thuật tốn mã hóa chuẩn mới. Thuật tốn mã hóa trước đó DES khơng
cịn đảm bảo an tồn. DES là chuẩn mã hóa từ tháng 11 năm 1976 và
đã lộ rõ nhiều khuyết điểm. Năm 1998 DES đã bị phá sau bởi một máy
tính có tên gọi “DES Cracker “. Lựa chọn thay thế hiện tại khi đó là một
mã hóa chuẩn gọi là Triple DES ( 3DES ) và Internation Data Encryption
Algorithm ( IDEA ). Triple DES là thuật tốn mã hóa sử dụng 3 lần mã
hóa DES. Tuy nhiên, vấn đề đối với Triple DES và IDEA đó là quá chậm.
NIST muốn một thuật tốn cung cấp tốt sự mã hóa, bảo về và thực thi
nhanh, hiệu quả. Sau 3 năm NIST đã chọn thuật toán được tạo bởi 2
nhà khoa học máy tính Vincent Rijmen và Joan Daemen. Thuật tốn
được gọi là Rijndael.Vào ngày 26 tháng 11 năm 2011, The Federal
Information Processing Standard thơng báo thuật tốn Rijndael là một
chuẩn mã hóa mới. Và chuẩn mới được gọi với cái tên Advanced
Ecryption Standard ( AES ).
Khơng giống như q trình lựa chọn xử lý cho DES, các thuận toán
băm (SHA -1) và chữ ký số (DSA), NIST đã đưa ra AES là lựa chọn xử
lý hệ mã mở. Bất cứ ai cũng có thể tạo ra mật mã. Miễn là nó đáp ứng
được yêu cầu, dựa trên xem xét giá trị của nó. Cùng với lợi ích về mặt
an ninh, chi phí cho việc thực hiện thì hiện nay AES chính là chuẩn sử
dụng để mã hóa.
2
MỤC LỤC
LỜI NĨI ĐẦU...........................................................................................2
MỤC LỤC.................................................................................................3
I.
Giới thiệu về thuật tốn mã hóa AES.............................................4
1. Giới thiệu........................................................................................4
2. Q trình phát triển.......................................................................4
3. Cơ sở tốn học..............................................................................4
II.
Nghiên cứu về thuật tốn AES.....................................................5
1. Mơ tả thuật tốn.............................................................................5
2. Thuật tốn mã hóa.........................................................................7
2.1. Tạo round key:.........................................................................7
2.2. Vịng lặp..................................................................................11
2.3. Vịng lặp cuối.........................................................................18
3. Thuật tốn giải mã.......................................................................18
4. Nghiên cứu về độ an tồn...........................................................19
4.1. Khả năng bị tấn cơng.............................................................19
4.2. Cách phịng chống loại tấn công:........................................19
5. Ưu nhược điểm của mật mã AES...............................................19
5.1. Ưu điểm:.................................................................................19
5.2. Nhược điểm:...........................................................................20
KẾT LUẬN..............................................................................................21
TÀI LIỆU THAM KHẢO :........................................................................22
3
I.
Giới thiệu về thuật tốn mã hóa AES
1. Giới thiệu
- AES ( Advanced Encryption Standard ) hay còn gọi là tiêu
chuẩn mã hóa nâng cao 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 tiêu chuẩn
và công nghệ quốc gia Hoa Kỳ ( NIST ) sau một q trình
chuẩn hóa kéo dài 5 năm.
- Thuật tốn được thiết kế bởi 2 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.
2. Quá trình phát triển
- Thuật toán được dựa trên bản thiết kế Square có trước đó của
Daemen và Rijmen, cịn Square được thiết kế dựa trên Shark.
- Khác 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ềm hoặ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à.
3. Cơ sở toán học.
-
AES sử dụng trường hữu hạn Galois (GF(2 8)) để thực hiện các phép
toán: phép cộng, phép trừ, phép nhân, và phép chia. Các phần tử
của trường GF(28) được xem như là các đa thức.
4
II.
Nghiên cứu về thuật tốn AES
1. Mơ tả thuật tố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 hồn tồ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 (do đó còn đặt cho
nó các tên AES-128, AES-192, AES-256 tương đương với độ
dài khóa sử dụng). 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. Trong quá 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.
Biểu diễn ma trận Với 16 bytes b0, b1, …. b15
5
- Thuật toán AES được thực hiện bởi tuần tự gồm nhiều bước
biến đổi, kết quả đầu ra của phép biến đổi trước là đầu vào của
phép biến đổi tiếp theo. Kết quả trung gian của các phép biến
đổi chính là mảng trạng thái (state).
- Độ dài của khối dữ liệu đầu vào của AES là cố định. Tùy vào độ
dài khóa (Nk=4, 6, 8) ban đầu ta có số lần lặp (Nr = 10,12,14).
H1. Tổng quan các bước quá trình mã hóa và giải mã
6
2. Thuật tốn mã hóa
2.1. Tạo round key:
Với dữ liệu khóa đầu vào ln cố định 128 bit hoặc 192
bit hoặc 256 bit. Ở trong phạm vi bài nghiên cứu, chúng
ta chỉ nghiên cứu về các khóa có độ dài 128 bit. Với độ
dài như vậy, ta sắp xếp các khóa vào ma trận trạng thái
như sau:
- ví dụ với khóa: SOME 128 BIT KEY
S
O
1
B
K
M
2
I
E
E
8
T
Y
Với bài tốn khóa có độ dài 128 bit, q trình tạo round
key gồm 10 vịng với input của vịng Roundkey[1] là khóa
đầu vào, input của các vịng sau lấy output của vịng
trước đó.
* RoundKey[1]
Cipher key
Round[1]
S
O
1
B
K
M
2
I
E
E
8
T
Y
7
* Quá trình tạo roundkey cho RoundKey[1]:
o B1: "Tại cột đầu tiên của Round[1]" :
lấy cột cuối cùng của ma trận cipher key ra mà đẩy vị
trí cuối cùng trong cột lên đầu:
- vd:
K
E
Y
- code:
public void reverse(int index) {
int tmp = Var.roundKeyMatrix[0][index];
for (int i = 1; i < 4; i++) {
Var.roundKeyMatrix[i - 1][index] = Var.roundKeyMatrix[i]
[index];
}
Var.roundKeyMatrix[3][index] = tmp;
}
Sau đó cho từng hàng của cột này mã hóa bằng thay
thế thơng qua S - box. Trước khi sử dụng bằng hộp
thay thế, ta chuyển dạng text về hệ Hex.
- Kết quả sau khi mã hóa:
K
E
=> b3
=> 6e
Y
=> cb
=> b7
- code:
8
public int[] subs(int index) {
reverse(index);
int rotWord[] = new int[4];
for (int i = 0; i < 4; i++) {
int x = (int) Var.roundKeyMatrix[i][index] / 16;
int y = (int) Var.roundKeyMatrix[i][index] % 16;
rotWord[i] = Var.s_box[x][y];
}
unReverse(index);
return rotWord;
}
Sau khi có được cột đã mã hóa, sử dụng phép tốn
xor với một hằng số vịng (Rcon) , hằng số này là
khác biệt với mỗi vòng lặp:
- Ma trận Rcon trong thuật toán aes:
public static final int rcon[][]
={
{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b,
0x36},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00}
};
Cuối cùng, sử dụng phép toán xor với cột đầu tiên
của input(cipher key) và trước khi thực hiện tính
9
toán, ta chuyển về dạng ASCII rồi chuyển qua hệ
Hex để thực hiện phép tính XOR.
o B2, 3, 4: "Với các cột cịn lại (2, 3, 4)": Sử dụng phép
tốn xor với các tiếp theo của ma trận input (cipher key)
với cột trước đó của round[1] vừa được mã hóa.
- vd: (cột 2- roundkey[1]) = (cột 2 - cipherkey) xor (cột 1 - roundkey[1].
* RoundKey[2],[3],[4]....[10] : được tạo như RoundKey[1] với
input
là output của roundKey trước đó.
- Code tạo roundkey cho AES:
public void createRoundKey() {
int numRound = 0;
Var.roundKeyMatrix = new int[4][4 * (Var.numberRoundKey + 1)];
int dem = 4 * (Var.numberRoundKey + 1) - Var.Nk;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < Var.Nk; j++) {
Var.roundKeyMatrix[i][j] = Var.cipherKey[i][j];
}
}
for (int j = 0; j < dem; j++) {
if (j % Var.Nk == 0) {
10
int rotWord[] = subs(j + Var.Nk - 1);
for (int i = 0; i < 4; i++) {
Var.roundKeyMatrix[i][j + Var.Nk] = Var.roundKeyMatrix[i][j] ^
rotWord[i] ^ Var.rcon[i][numRound];
}
numRound++;
} else if (j % 4 == 0 && Var.numberRoundKey == 14) {
int rotWord[] = subs(j + Var.Nk - 1);
for (int i = 0; i < 4; i++) {
Var.roundKeyMatrix[i][j + Var.Nk] = Var.roundKeyMatrix[i][j] ^
rotWord[i];
}
} else {
for (int i = 0; i < 4; i++) {
Var.roundKeyMatrix[i][j + Var.Nk] = Var.roundKeyMatrix[i][j] ^
Var.roundKeyMatrix[i][j + Var.Nk - 1];
}
}
}
}
2.2. Vòng lặp
- SubBytes:
o đâ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).
o Sử dụng bảng S-Box để thế chỗ các vị trí tương ứng
trong ma trận trạng thái sau khi thực hiện phép xor với
key.
11
Bảng S-Box:
o Cách sử dụng bảng S-Box. Nếu chúng ta có một ký tự “D”,
trước tiên ta chuyển D về dạng Hex và có giá trị là 44 bằng
cách tra cứu bảng ASCII. Khi sử dụng bảng S-box, ký tự đầu
tiên trong hệ Hex tham chiếu đến các hàng của bảng hoặc
giá trị từ bên trái xuống. Ký tự thứ tham chiếu đến cột của
bảng S-Box Và giá trị trong hệ Hex là ‘1b’.
12
o Bảng S-box sinh ra từ “ modular arithmetic “ và một trường
Galois. Một trường Galois là một trường với một số hữu hạn
các phần từ. Các trường Galois là một trường lũy thừa của
một số nguyên. Đối với mỗi số nguyên luôn tôn tại đúng một
trường Galois. Với bảng S-box. GF(28) được chọn.
Code :
public void subBytes() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int x = (int) Var.cipherText[i][j] / 16;
int y = (int) Var.cipherText[i][j] % 16;
try{
Var.cipherText[i][j] = Var.s_box[x][y];
}catch(Exception e){
System.out.println(" Err " + x + " " +y);
}
}
}
}
- ShiftRows:
o 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.
o Các hàng được dịch vòng một số bước nhất định. Hàng
đầu được giữ nguyên. Mỗi byte của hàng thứ 2 được dịch
vòng trái một vị trí. Tương tự, các hàng thứ 3 và 4 được
dịch vịng 2 và 3 vị trí. Do vậy, mỗi cột khối đầu ra của
bước này sẽ bao gồm các byte ở đủ 4 cột khối đầu vào.
13
Code :
public void shiftOne(int a[]) {
int tmp = a[0];
for (int i = 1; i < 4; i++) {
a[i - 1] = a[i];
}
a[3] = tmp;
}
public void shiftRows() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < i; j++) {
shiftOne(Var.cipherText[i]);
}
}
}
- MixColumns:
o 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 tuyến tính.
o Bốn byte trong từng cột được kết hợp lại theo một phép
biến đổi tuyến tính khả nghịch. Mỗi khối 4 byte đầu vào sẽ
cho một khối 4 byte ở đầu ra với tính chất là mỗi byte ở
đầu vào đều ảnh hưởng tới cả 4 byte đầu ra. Cùng với
bước ShiftRows, MixColumns đã tạo ra tính chất khuếch
tán cho thuật toán. Mỗi cột được xem như một đa thức
14
trong
trường
thức
hữu
hạn
và
được
(modulo
nhân
).
với
Vì
đa
thế,
bước này có thể được xem là phép nhân ma trận trong
trường hữu hạn.
o Nói cách khác , MixColumns được thực hiện theo cơng
thức :
o Vậy thuật tốn được thực hiện cụ thể thế nào ,hãy xét ví
dụ sau :
15
o Khi đó a0 – a3 sẽ tương ứng với 04 đến e5 , b0 – b3
tương ứng với d4 – 30
o Ta xét b0 : b0 = {02.d4} ^ {03.bf} ^ {01.5d} ^ {01.30}
o Xét {02.d4}
Biến đổi d4 về hệ Hex : d4 = 1101 0100
Mặt khác, trong cuốn sách Cryptography and Network
Security đã từng đề cập với số nhân là 02 ta có thể
thực hiện như sau : “Dịch trái d4 1 bit sau khi chuyển
d4 về dạng Hex , sau đó nếu kết quả trước khi dịch bit
có bit ngồi cùng bên trái là 1 thì tiến hành XOR kết
quả với dãy 0001 1011”.
Cụ thể d4 = 1101 0100 , d4 << 1 = 1010 1000 , d4
XOR 0001 1011 = 1011 0011.
Vậy {02,d4} = 1011 0011.
o Xét {03.bf}
Ta có 03 = 02 + 01 => {03.bf} = {02.bf} ^ {01.bf}
Có bf = 1011 1111 => bf << 1 = 01111110
{01,bf} = bf = 1011 1111
{03.bf} = 01111110 XOR 0001 1011 XOR 1011 1111 =
1101 1010.
o Tương tự ta tính được {01.5d} = 0101 1101, {01.30} =
0011 0000
o Vậy b0 = 1011 0011 XOR 1101 1010 XOR 01011101
XOR 0011 0000 = 0000 0100 = 04
o Việc thực hiện tính b1,b2,b3 cũng tương tự như b0.
Code :
public void mixColumns() {
for (int k = 0; k < 4; k++) {
int a[] = new int[4];
16
//moi buoc lap tao nen 1 cot
for (int i = 0; i < 4; i++) {
int d = 0;
int t1 = 0, t2 = 0, t3 = 0, t4 = 0;
for (int j = 0; j < 4; j++) {
if (Var.mixColumnMatrix[i][j] == 2) {
t1 = Var.cipherText[j][k] << 1;
if (t1 > 256) {
t1 %= 256;
t1 = t1 ^ 27;
}
} else if (Var.mixColumnMatrix[i][j] == 3) {
t2 = Var.cipherText[j][k] << 1;
if (t2 > 256) {
t2 %= 256;
t2 = t2 ^ 27;
}
t2 = t2 ^ Var.cipherText[j][k];
} else if (Var.mixColumnMatrix[i][j] == 1 && d == 0) {
t3 = Var.cipherText[j][k];
d++;
} else if (Var.mixColumnMatrix[i][j] == 1 && d == 1) {
t4 = Var.cipherText[j][k];
}
}
int t = t1 ^ t2 ^ t3 ^ t4;
a[i] = t;
}
for (int j = 0; j < 4; j++) {
Var.cipherText[j][k] = a[j];
}
}
}
17
- AddRoundKey
Code :
public void addRoundKey() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
Var.cipherText[i][j] = Var.cipherText[i][j] ^ Var.roundKey[i][j];
}
}
}
2.3. Vòng lặp cuối
- SubBytes
- ShiftRows
- AddRoundKey
Tại chu trình cuối thì bước MixColumns khơng thực hiện.
3. Thuật tốn giải mã
- Giải mã Rijndael có 2 cách giải mã đó là giải mã trực tiếp và
giải mã bằng thuật toán giải mã tương đương.
- Giải mã trực tiếp: mọi biến đổi được dùng trong các phép tính
mã hóa là khả nghịch, cài đặt phép tính giải mã là giữ nguyên
các thứ tự các biến đổi đã dùng trong phép mã hóa, chỉ thay
các phép biến đổi bằng các biến đổi ngược của chúng.
- Giải mã tương đương: được thực hiện bằng cách đảo ngược
thứ tự của hàm SubBytes-1 () và ShiftRows-1 (), thay đổi thứ tự
của AddRoundKey(), MixColumns-1 () trong các lần lặp sau khi
thay đổi khóa cho giá trị Round =1 to N r-1 bằng cách sử dụng
biến đổi MixColumns(). Các word đầu tiên và cuối cùng của
danh sách khóa khơng bị thay đổi khi ta áp dụng phương pháp
này
18
4. Nghiên cứu về độ an toàn
4.1. Khả năng bị tấn cơng
- Định nghĩa: Tấn cơng kênh bên hay cịn gọi là tấn công kênh kề
là loại tấn công dễ thực hiện trong các loại tấn công mạnh
chống lại quá trình phát triển khai mã hóa, và mục tiêu của loại
tấn cơng này là phân tích các giao thức, modul, và các thiết bị
trong mỗi hệ thống
- Hình thức tấn công: tấn công kênh bên không tấn công trực tiếp
vào thuật tốn mã hóa, thay vào đó nó lại tấn cơng lên các hệ
thống thực hiện thuật tốn có sơ hở làm lộ dữ liệu.
4.2. Cách phòng chống loại tấn cơng:
Bởi vì các cuộc tấn cơng kênh bên dựa trên các mối quan hệ giữa
thơng tin rị rỉ thơng qua một kênh phụ và các dữ liệu bí mật, vì vậy
biện pháp đối phó thường là:
o Loại bỏ hoặc giảm việc phát tán các thơng tin đó.
o Loại bỏ các mối quan hệ giữa các thơng tin bị rị rỉ và các
dữ liệu bí mật, đó là làm cho các thơng tin bị rị rỉ khơng
liên quan, hay đúng hơn là khơng tương quan, đển các
dữ liệu bí mật, thường là thơng qua một số hình thức
ngẫu nhiên của các bản mã có thể biến đổi các dữ liệu
trong một cách mà có thể được hồn tác sau khi hoạt
động mật mã (ví dụ, giải mã) được hồn thành.
5. Ưu nhược điểm của mật mã AES
5.1. Ưu điểm:
- Trên các máy tính cá nhân, thuật tốn AES thực hiện việc xử lý
rất nhanh so với các phương pháp mã hóa khác .
19
- Trên cáchệ thống thẻ thông minh, phương pháp này càng phát
huy ưu điểm không chỉ nhờ vào tốc độ xử lý cao mà cịn nhờ
vào mã chương trình ngắn gọn, thao tác xử lý sử dụng ít bộ
nhớ.
- Ngồi ra, tất cả các bước xử lý của việc mã hóa và giải mã đều
được thiết kế thích hợp với cơ chế xử lý song song nên
phương pháp Rijndael càng chứng tỏ thế mạnh của mình trên
cáchệ thống thiết bị mới. Do đặc tính của việc xử lý thao tác
trên từng byte dữ liệu nên khơng có sự khác biệt nào được đặt
ra khi triển khai trên hệ thống big-endian hay little-endian.
- Xuyên suốt phương pháp AES, yêu cầu đơn giản trong việc
thiết kế cùng tính linh hoạt trong xử lý luôn được đặt ra và đã
được đáp ứng.
- Độ lớn của khối dữ liệu cũng như của mã khóa chínhcó thể tùy
biến linh hoạt từ 128 đến 256-bit với điều kiện là chia hết cho
32. Số lượng chu kỳ có thể được thay đổi tùy thuộc vào yêu
cầu riêng được đặt ra cho từng ứng dụng và hệ thống cụ thể.
5.2. Nhược điểm:
- Tuy có những ưu điểm lớn hơn so với những thuật tốn mã
hóa khác song AES cũng có những mặt tồn tại đáng lưu ý.
- Những điểm tồn tại của AES hầu hết đều lien quan đến quá
trình giải mã.
- Mã chương trình cũng như thời gian xử lý của việc giải mã
tương đối lớn hơn việc mã hóa, mặc dù thời gian này vẫn
nhanh hơn đáng kể so với một sô phương pháp khác.
- Trong q trình cài đặt , do q trình mã hóa và giải mã không
giống nhau nên không thể tận dụng lại tồn bộ đoạn chương
trình mã hóa cũng như các bảng tra cứu cho việc giải mã.
20