Giáo trình An toàn và bảo mật thông tin - Đại học Hàng Hải
Với dạng tấn công chủ động (active attack): kẻ địch là một thế lực trong mạng,
nắm nhiều khả năng và phƣơng tiện để có thể chủ động tấn công can thiệp, gây ảnh
hƣởng phức tạp đến giao thức. Nó có thể đóng giả với một cái tên khác can thiệp vào
giao thức bằng những thông báo kiểu mới, xoá bỏ những thông báo đang phát trên
đƣờng truyền, thay thế thông báo thật bằng thông báo giả, ngắt ngang các kênh thông tin
hay sửa chửa vào các kho thông tin trên mạng. Các khả năng khác nhau này là phụ thuộc
vào tổ chức mạng và vai trò của kẻ địch trên mạng.
Kẻ tấn công trong tấn công thụ động (Eve) chỉ cố gắng thu lƣợm thông tin từ các
bên tham gia giao thức, thông qua thu nhập các thông báo truyền tin giữa các bên để
phân tích giải mã. Trong khi đó, kẻ tấn công chủ động (Mallory) có thể gây ra các tác hại
rất phức tạp đa dạng. Kẻ tấn công có thể có mục đích đơn thuần là tóm đƣợc tin mà nó
quan tâm, nhƣng ngoài ra nó có thể gây ra các phá hoại khác nhƣ phá hoại đƣờng truyền
truy nhập vào những hệ thống thông tin mà chỉ dành cho những ngƣời có đủ thẩm quyền.
Kẻ địch trong tấn công chủ động thật sự rất nguy hiểm, đặc biệt là trong các giao
thức mà các bên khác nhau không nhất thiết phải tin nhau. Hơn nữa phải nhớ rằng kẻ
địch không phải chỉ có thể là những kẻ xa lạ bên ngoài mà nó có thể là một cá nhân hợp
pháp trong hệ thống, thậm chí ngay chính là ngƣời quản trị mạng. Ngoài ra còn có thể có
nhiều cá nhân liên kết với nhau thành một nhóm kẻ địch, làm tăng lên sự nguy hiểm cho
giao thức.
Một điều cũng có thể xảy ra là Mallory lại chính là đối tác trong giao thức. Anh ta có
thể có hành động lừa dối hoặc là không chịu tuân theo giao thức. Loại kẻ địch này đƣợc
là kẻ lừa đảo (cheater). Kẻ lừa đảo thuộc loại thụ động thì có thể làm đúng theo giao thức
nhƣng lại cố tình thu nhặt thêm thông tin từ các bên đối tác hơn là đƣợc phép theo qui
định. Kẻ lừa đảo chủ động thì phá vỡ giao thức trong một cố gắng lừa dối. Rất khó để giữ
an toàn cho một giao thức nếu nhƣ phần lớn các bên tham gia đều là những kẻ lừa đảo
chủ động, tuy nhiên đôi khi ngƣời ta cũng có các biện pháp để các bên hợp pháp có thể
dò ra đƣợc sự lừa đảo đang diễn ra. Tất nhiên các giao thức cũng cần phải đƣợc bảo vệ
để chống lại những kẻ lừa đảo loại thụ động.
của word (SubWord()).
Chú ý là thủ tục mở rộng khóa đối với các khóa có độ dài 256 hơi khác so với thủ
tục cho các khóa có độ dài 128 hoăc̣ 192. Nếu Nk = 8 và i – 4 là một bội số của Nk thì
SubWord() sẽ đƣợc áp dụng cho w[i-1] trƣớc khi thƣ̣c hiêṇ phép XOR bit.
2.5.4.3. Thuâṭ toán giải mã
Thuâṭ toán giải mã khá giống với thuâṭ toán mã hóa về măṭ cấu trúc nhƣng 4 hàm
cơ bản sƣ̉ duṇg là các hàm ngƣợc của các hàm trong thuâṭ toán giải mã . Đoaṇ giả mã
cho thuâṭ toán giải mã nhƣ sau:
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
byte state[4,Nb]
state = in
Chƣơng III: Các hệ mã khóa bí mật
65
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) // See Sec. 5.1.4
for round = Nr-1 step -1 downto 1
InvShiftRows(state) // See Sec. 5.3.1
InvSubBytes(state) // See Sec. 5.3.2
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
InvMixColumns(state) // See Sec. 5.3.3
end for
InvShiftRows(state)
InvSubBytes(state)
AddRoundKey(state, w[0, Nb-1])
out = state
end
2.5.4.3.1. Hàm InvShiftRows()
Hàm này là hàm ngƣợc của hàm ShiftRows () . Các byte của ba hàng cuối của
mảng trạng thái sẽ đƣợc dịch vòng với các vị trí dịch khác nhau . Hàng đầu tiên không bị
dịch, ba hàng cuối bi ̣dic̣h đi Nb – shift(r, Nb) byte trong đó các giá tri ̣shift (r, Nb) phụ
thuôc̣ vào số hàng nhƣ trong phần 5.1.2.
Cụ thể hàm này tiến hành xử lý sau:
'
,( ( , ))mod , 0 4,0 ( 4)r c shift r Nb Nb r cs s r c Nb Nb
Hình minh họa:
Chƣơng III: Các hệ mã khóa bí mật
66
Hình 3.13: Hàm InvShiftRows() của AES
2.5.4.3.2. Hàm InvSubBytes()
Hàm này là hàm ngƣợc của hàm SubBytes (), hàm sử dụng nghịch đảo của biến đổi
Affine bằng cách thƣ̣c hiêṇ nhân nghic̣h đảo trên GF(28).
Bảng thế đƣợc sƣ̉ duṇg trong hàm là:
Bảng 3.28: Bảng thế cho hàm InvSubBytes()
2.5.4.3.3. Hàm InvMixColumns()
Hàm này là hàm ngƣợc của hàm MixColumns (). Hàm làm việc trên các cột của
mảng trạng thái , coi mỗi côṭ nhƣ là môtô đa thƣ́c 4 hạng tử đƣợc mô tả trong phần 4.3.
Các cột đƣợc xem là các đa thức trên GF (28) và đƣợc nhân theo modulo x 4+1 với môṭ đa
thƣ́c cố điṇh là a-1(x):
a-1(x) = {0b}x3 + {0d}x2 + {09}x + {0e}
Và có thể mô tả bằng phép nhân ma trâṇ nhƣ sau:
s‟(x) = a-1(x)s(x):
'
0, 0,
'
1, 1,
'
2, 2,
'
3, 3,
0 0 0 09
09 0 0 0
0 09 0 0
0 0 09 0
c c
c c
c c
c c
e b dS S
e b dS S
d e bS S
b d eS S
trong đó 0 c < Nb.
Kết quả là bốn byte trong mỗi côṭ sẽ đƣợc thay thế theo công thƣ́c sau:
'
0, 0, 1, 2, 3,({0 } ) ({0 } ) ({0 } ) ({09} )c c c c cs e s b s d s s
'
1, 0, 1, 2, 3,({09} ) ({0 } ) ({0 } ) ({0 } )c c c c cs s e s b s d s
Chƣơng III: Các hệ mã khóa bí mật
67
'
2, 0, 1, 2, 3,({0 } ) ({09} ) ({0 } ) ({0 } )c c c c cs d s s e s b s
'
3, 0, 1, 2, 3,({0 } ) ({0 } ) ({09} ) ({0 } )c c c c cs b s d s s e s
2.5.4.3.4. Hàm nghịch đảo của hàm AddRoundKey()
Thâṭ thú vi ̣là hàm này tƣ̣ bản thân nó là nghic̣h đảo của chính nó là do hàm chỉ có
phép toán XOR bit.
2.5.4.3.5. Thuâṭ toán giải mã tƣơng đƣơng
Trong thuâṭ toán giải mã đƣợc trình bày ở trên chúng ta thấy thƣ́ tƣ̣ của các hàm
biến đổi đƣợc áp duṇg khác so với thuâṭ toán mã hóa trong khi daṇg của danh sách khóa
cho cả 2 thuâṭ toán vẫn giƣ̃ nguyên. Tuy vâỵ môṭ số đăc̣ điểm của AES cho phép chúng ta
có một thuật toá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âṭ toán mã hóa (tất nhiên là thay các biến đổi bằng các hàm ngƣợc của chúng ). Điều
này đạt đƣợc bằng cách thay đổi danh sách khóa.
Hai thuôc̣ tính sau cho phép chúng ta có môṭ thuâṭ toán giải mã tƣơng đƣơng:
1. Các hàm SubBytes () và ShiftRows() hoán đổi cho nhau ; có nghĩa là một biến
đổi SubBytes () theo sau bởi môṭ biến đổi ShiftRows () tƣơng đƣơng với môṭ biến đổi
ShiftRows() theo sau bởi môṭ biến đổi SubBytes (). Điều này cũng đúng với các hàm
ngƣợc của chúng
2. Các hàm trộn cột – MixColumns() và InvMixColumns () là các hàm tuyến tính
đối với các côṭ input, có nghĩa là:
InvMixColumns(state XOR Round Key) = InvMixColumns(state) XOR
InvMixColumns(Round Key).
Các đặc điểm này cho phép thứ tự của các hàm InvSubBytes() và InvShiftRows() có
thể đổi chỗ. Thƣ́ tƣ̣ của các hàm AddRoundKey() và InvMixColumns() cũng có thể đổi chỗ
miễn là các côṭ của danh sách khóa giải mã phải đƣợc thay đổi bằng cách sƣ̉ duṇg hàm
InvMixColumns().
Thuâṭ toán giải mã tƣơng đƣơng đƣợc thƣ̣c hiêṇ bằng cách đ ảo ngƣợc thứ tự của
hàm InvSubBytes () và InvShiftRows (), và thay đổi thứ tự của AddRoundKey () và
InvMixColumns() trong các lần lăp̣ sau khi thay đổi khóa cho giá tri ̣round = 1 to Nr-1 bằng
cách sử dụng biến đổi InvMixColumns (). 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.
Thuâṭ toán giải mã tƣơng đƣơng cho môṭ cấu trúc hiêụ quả hơn so với thuâṭ toán
giải mã trƣớc đó.
Đoaṇ giả mã cho thuâṭ toán giải mã tƣơng đƣơng:
EqInvCipher(byte in[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)])
begin
byte state[4,Nb]
Chƣơng III: Các hệ mã khóa bí mật
68
state = in
AddRoundKey(state, dw[Nr*Nb, (Nr+1)*Nb-1])
for round = Nr-1 step -1 downto 1
InvSubBytes(state)
InvShiftRows(state)
InvMixColumns(state)
AddRoundKey(state, dw[round*Nb, (round+1)*Nb-1])
end for
InvSubBytes(state)
InvShiftRows(state)
AddRoundKey(state, dw[0, Nb-1])
out = state
end
Các thay đổi sau cần thực hiện trong thuật toán sinh khóa để thuật toán trên có th ể
hoạt động đƣợc:
for i = 0 step 1 to (Nr+1)*Nb-1
dw[i] = w[i]
end for
for round = 1 step 1 to Nr-1
InvMixColumns(dw[round*Nb, (round+1)*Nb-1]) // note change of type
end for
2.6. Các cơ chế, hình thức sử dụng của mã hóa khối (Mode of Operation)
2.6.1. Các hình thức sử dụng
Nhƣ chúng ta đã biết c ác mã hóa khối mã hóa các khối thông tin có độ dài cố định,
chẳng hạn DES với các khối bit 64, sử dụng khóa là xâu bít có độ dài bằng 56. Tuy nhiên
để sử dụng các hệ mã này trên thực tế vẫn cần có một qui điṇh về qui cách sƣ̉ duṇg
chúng để mã hóa các dữ liệu cần mã hóa. Cách thức sử dụng một thuật toán mã hóa khối
trong thực tế đƣợc gọi là Mode of Use hay Mode Of Operation. Có 4 hình thức sử dụng
các hệ mã khối đƣợc định nghĩa trong các chuẩn ANSI (ví dụ ANSI X3.106-1983 dành
cho DES). Dƣ̣a vào viêc̣ xƣ̉ lý dƣ̃ liêụ input của hê ̣mã ngƣời ta chia thành hai loaị cơ chế
sử dụng các hệ mã khối sau:
1. Các chế độ khối (Block Mode): xử lý các thông điệp theo các khối (ECB, CBC)
2. Các chế độ luồng, dòng (Stream Modes): xử lý các thông điệp nhƣ là một
luồng bit/byte (CFB, OFB).
Các chế độ khối thƣờng đƣợc sử dụng để mã hóa các dữ liệu mà ch úng ta biết
trƣớc về vi ̣trí , đô ̣lớn trƣớc khi mã hóa (chẳng haṇ nhƣ các file , các email trƣớc khi cần
Chƣơng III: Các hệ mã khóa bí mật
69
gƣ̉i đi ) trong khi các chế đô ̣luồng thƣờng đƣợc sƣ̉ duṇg cho viêc̣ mã hóa các dƣ̃ liêụ
không đƣợc biết trƣớc về đô ̣lớn c ũng nhƣ vị trí chẳng hạn nhƣ các tín hiệu gửi về từ vệ
tinh hoăc̣ các tín hiêụ do môṭ bô ̣cảm biến đoc̣ tƣ̀ bên ngoài vào.
Chú ý: DES, 3DES, AES (hay bất kỳ một thuật toán mã hóa khối nào khác) tạo
thành một khối xây dựng cơ bản. Tuy nhiên để sử dụng chúng trong thực tế, chúng ta
thường cần làm việc với các khối lượng dữ liệu không thể biết trước được, có thể chúng là
một khối dữ liệu sẵn sàng ngay cho việc mã hóa(khi đó việc sử dụng mã hóa theo cơ chế
khối là phù hợp), hoặc có thể chỉ được một vài bit, byte tại một thời điểm (khi đó sử dụng
chế độ dòng là phù hợp). Vì thế các cơ chế sử dụng mã khối được trình bày trong phần
này là riêng cho DES nhưng cũng đươc̣ áp duṇg tương tự cho các hê ̣mã khối khác.
2.6.2. Cơ chế bảng tra mã điêṇ tƣ̉ ECB (Electronic CodeBook Book)
Thông điệp cần mã hóa đƣợc chia thành các khối độc lập để mã hóa, mỗi khối bản
mã là kết quả của việc mã hóa riêng biệt khối bản rõ tƣơng ứng với nó và độc lập với khối
khác. Cách làm việc này giống nhƣ chúng ta thay thế các khối bản mã bằng các khối bản
rõ tƣơng ứng nên có tên gọi là bảng tra mã điện tử.
P = P1P2PN
Mã hóa: Ci = DESK(Pi), kết quả bản mã là C = C1C2..CN. Quá trình giải mã tiến hành
ngƣợc laị: Pi = DES
-1
K(Ci).
Mã hóa
P
P1 P2 Pn
C1 C2 Cn
E E E
C
K Giải mã
C
C1 C2 Cn
P1 P2 Pn
D D D
P
K
Hình 3.14: Cơ chế ECB
ECB là chế độ sử dụng đơn giản và dễ cài đặt nhất, đƣợc sử dụng khi chỉ một khối
đơn thông tin cần đƣợc gửi đi (chẳng hạn nhƣ một khóa session đƣợc mã hóa bằng cách
dùng một khóa chính).
Do trong ECB các khối bản rõ đƣợc mã hóa độc lập nên làm nảy sinh một số nhƣợc
điểm sau: các lặp lại của thông điệp có thể đƣợc thể hiện trên bản mã, nghĩa là nếu có
các bản rõ giống nhau thì tƣơng ứng các bản mã giống nhau , điều này đăc̣ biêṭ thể hiêṇ
rõ với các dữ liệu lặp lại nhiều chẳng hạn nhƣ các dữ liệu hình ảnh. Viêc̣ để lô ̣tính lăp̣ laị
của bản rõ có thể dẫn tới các tấn công theo phƣơng pháp phân tích thống kê . Hơn nƣ̃a
các bản mã có thể bị giả mạo bằng cách thêm một số khFile đính kèm:
VN_DH_HangHai_GT_an_toan_bao_mat_thong_tin.pdf



