Tải bản đầy đủ - 0 (trang)
3 Quá trình mã hóa bằng thuật toán AES

3 Quá trình mã hóa bằng thuật toán AES

Tải bản đầy đủ - 0trang

Chương 3: Thuật tốn mã hóa AES



Q trình mã hóa AES

Cipher (input, output, roundkey)

begin

state = input

round = 0

AddRoundKey (state, roundkey[round])

for round = 1 to 9 in steps of 1

SubBytes(state)

ShiftRows(state)

MixColumns(state)

AddRoundKey(state,roundkey[round])

end for



Chương 3: Thuật tốn mã hóa AES

SubBytes(state)

ShiftRows(state)

AddRoundKey(state, roundkey[round+1])

output = state

end

Q trình mã hóa của AES bao gồm 4 thủ tục biến đổi byte cơ bản:

1. Kết hợp khóa vòng: AddRoundKey()

Mỗi byte của mảng State được kết hợp với mỗi byte của khóa vòng, các khóa

vòng được tạo ra từ q trình mở rộng khóa.

2. Thay thế Byte: SubBytes()

Đây là phép thế, trong đó mỗi byte sẽ được thay thế bằng một byte khác theo

bảng tra gọi là Hộp-S.

3. Thay đổi hàng: ShiftRows()

Thực hiện dịch vòng sang trái các hàng trong State.

4. Trộn dữ liệu: MixColumns()

Trộn dữ liệu bên trong mỗi cột của mảng State để tạo ra cột mới bằng cách

nhân với một đa thức cho trước a(x).

Tại vòng cuối cùng của q trình mã hóa sẽ khác các vòng trước đó, cụ thể là

biến đổi MixColumns() được thay thế bằng biến đổi AddRoundKey().

3.3.2



Thủ tục biến đổi SubBytes()



Với thủ tục SubBytes, mỗi byte trong state được thay thế với các byte khác,

sử dụng một bảng look-up thường được gọi là hộp S. Hộp S được tạo ra bắt nguồn

từ phép nghịch đảo trong trường hữu hạn GF(2 8), có tính chất phi tuyến. Hàm này

chỉ duy nhất cung cấp tính phi tuyến cho loại mã hóa này. Hộp-S được xây dựng

trên việc hợp thành của 2 thủ tục biến đổi là:

1. Đầu tiên tìm phần tử nghịch đảo trong trường hữu hạn GF(2 8) với phần tử

{00} được ánh xạ đến chính nó. Đa thức tối giản p(x) = (x 8 + x4 + x3 + x + 1) được

sử dụng để xây dựng trường hữu hạn GF(28) này.

2. Tiếp theo áp dụng biến đổi affine(trên GF(2)), được mô tả như sau:

b'i = bi  b(i+4)mod8  b(i+5)mod8  b(i+6)mod8  b(i+7)mod8  ci



Chương 3: Thuật tốn mã hóa AES

với 0 i  8 , bi là bit thứ i của byte b, và c i là bit thứ i của byte c với giá trị

{63} hay {01100011}.

Trong dạng ma trận, phần tử biến đổi affine của Hộp-S có thể được biểu thị

như sau:

b0' 

 '  1

b1  1

b '  

 2  1

b3'  1

 '  

b4  1

 '  0

b5  

b '   0

 6  0

b7'  



0

1

1

1

1

1

0

0



0

0

1

1

1

1

1

0



0

0

0

1

1

1

1

1



1

0

0

0

1

1

1

1



1

1

0

0

0

1

1

1



1

1

1

0

0

0

1

1



1  b0  1 

 

1  b1  1 

1  b2  0

   

1  b3  0



0  b4  0

   

0  b5  1 

0 b6  1 

   

1  b7  0



Mặc dù hộp S có thể được tính tốn nhưng cơng việc đơn giản trên có thể

được thay thế bằng một bảng có sẳn được lưu trong bộ nhớ.

Hình bên dưới mô tả thủ tục biến đổi SubBytes() trên State thơng qua Hộp-S.

Hộp-S sử dụng cho q trình này gọi là Hộp-S thuận.



Hình 3.2. Thủ tục biến đổi SubBytes()

Dựa vào hàm s_box_gen để xây dựng hàm sub_bytes

>>function bytes_out = sub_bytes(bytes_in, s_box)

>>



bytes_out = s_box(bytes_in+1);



Hộp S thuận được sử dụng bằng cách tương ứng với các giá trị x và y để đưa ra một

kết quả duy nhất.



Chương 3: Thuật toán mã hóa AES



3.3.3



Thủ tục biến đổi ShiftRows()



Với thủ tục biến đổi ShiftRows, mỗi hàng chuyển tuần tự với một số lượng

bước là cố định. Đặc biệt, các phần tử của hàng đầu tiên sẽ khơng thay đổi vị trí,

hàng thứ hai dịch sang trái một cột, hàng thứ ba dịch sang trái hai cột, hàng cuối

cùng sẽ dịch sang trái ba cột. Thao tác này nhằm đảm bảo mỗi cột của bảng đầu ra

đều được tạo thành từ các cột của bảng trạng thái đầu vào. Hình bên dưới biểu diễn

thủ tục biến đổi ShiftRows()



Hình 3.3. Thủ tục biến đổi ShiftRows()

3.3.4



Thủ tục biến đổi MixColumns()



Với thủ tục biến đổi MixColumns, mỗi cột được chuyển đổi tuyến tính bằng

cách nhân nó với một ma trận trong trường hữu hạn. Chính xác hơn mỗi cột được

xem như một đa thức trong trường GF(2 8) và được nhân modulo (x4+1) với một

biểu thức cố định c(x) = 3x3 + x2 + x + 2. Ta đi đến biểu thức như sau:

s'(x)=a(x).s(x)mod(x4+1)

với



a(x)= {03}x3 + {01}x2 + {01}x + {02}



Chương 3: Thuật tốn mã hóa AES

Như mơ tả trong phần trên, phép tốn này có thể được viết như một phép nhân ma

trận như sau:

s'(x) = C(x)  s(x)

Với ma trận C(x) là

02

01

C (x) 

01



03



03 01 01

02 03 01

01 02 03



01 01 02



vậy ta sẽ có biểu thức như sau:

 s0' ,c  02

 '   H

 s1,c  01H

 '  

 s 2,c  01H

 s '  03 H

 3, c 



03 H



01H



02 H



03 H



01H



02 H



01H



01H



01H   s0,c 

 

01H   s1,c 

03 H   s 2,c 

 

02 H   s3,c 



với 0 c  10



kết quả phép nhân, bốn byte trong một cột được thay thế như sau:

s’0,c = ({02}  s0,c)  ({03}  s1,c)  s2,c  s3,c

s’1,c = s0,c  ({02}  s1,c)  ({03}  s2,c)  s3,c

s’2,c = s0,c  s1,c  ({02}  s2,c)  ({03}  s3,c)

s’3,c = ({03}  s0,c)  s1,c  s2,c  ({02}  s3,c)



Hình 3.4. Thủ tục biến đổi MixColumns()

3.3.5



Thủ tục biến đổi AddRoundKey()



Với thủ tục AddRoundKey, mỗi byte trong ma trận State được thực hiện phép

XOR với một khóa vòng, q trình xử lý AES thu được 11 khóa vòng từ các khóa

mã được phân phát trong kỹ thuật mã hóa. Việc phân phát các khóa mã là kết quả

của sự biến đổi các con số, chẳng hạn như hàm băm, và được thực hiện dựa trên dãy



Chương 3: Thuật tốn mã hóa AES

khóa bí mật ban đầu. 11 khóa vòng được tìm từ khóa mã bằng cách sử dụng giải

thuật tính tốn đơn giản.



Hình 3.5. Thủ tục biến đổi AddRoundKey()

Key Schedule: Các khóa con được tìm ra từ các khóa mật mã bằng cách nằm

giữa của key schedule với mỗi vòng tuỳ thuộc vào từ của khóa dữ liệu Nb. Đối với

khóa 128bit, key schedule hoạt động thực chất trên các khối 4 từ 32 bit. Round Key

bao gồm có hai thành phần: Key Expansion(khóa mở rộng) và Round Key Selection

(lựa chọn khóa vòng).



3.4



Q trình mở rộng khóa của AES

AES thực hiện một q trình mở rộng khóa từ khóa mật mã để tạo ra các khóa



mới gọi là khóa vòng. Q trình mở rộng khóa mang lại một chuỗi khóa có độ dài là

16 byte và sử dụng liên tục ma trận rcon và đồng thời dựa vào hộp S để tạo ra một

khóa có độ dài 176 byte, sẽ được sử dụng trong suốt q trình mã hóa và giải mã.

16 byte của vectơ khóa được xếp vào trong một ma trận khóa 4 x 4 như ban đầu

(k11,…, k44).

3.4.1



Các bước của q trình mở rộng khóa



Q trình Mở rộng khóa trong AES bao gồm các thủ tục biến đổi hướng byte

như sau:

1. Thiết lập dạng ma trận khóa khởi tạo:

Biến đổi vectơ Khóa đầu vào thành ma trận Khóa khởi tạo 4x4 byte.



Chương 3: Thuật tốn mã hóa AES

2. Hóan vị Từ: RotWord()

Thực hiện phép dịch vòng sang trái các byte của Từ đầu vào (4 byte)

thành Từ đầu ra (4 byte).

3. Thay thế Từ: SubByte()

Thực hiện phép thay thế các phần tử trong ma trận vào thành ma trận

ra thông qua hộp S(ta vẫn dùng hộp S thuận). Cách thức hoạt động vẫn giống như

trong việc mã hóa.

4. XOR với Từ hằng số vòng Rcon[r]

Mảng Từ hằng số vòng Rcon[r] là một mảng của các Từ-4 byte cho

trước. Trong mỗi Từ, byte đầu tiên là luỹ thừa của 2 và 3 byte còn lại tồn là các số

0. Các Từ này sẽ được tham gia trong quá trình mở rộng khóa bằng phép tốn XOR

với nó tại một số vòng thực hiện tương ứng.

5. XOR với Từ được tạo ra trước đó

Thực hiện phép tốn XOR với hai Từ được tạo ra trước đó để tạo nên Từ kết

quả tiếp theo.

3.4.2



Thiết lập ma trận khởi tạo



Hình 3.6 mơ tả cách thành lập ma trận khóa khởi tạo với độ dài khóa là 128

bit. Ta thấy 16 byte của vectơ khóa (dạng hàng) được chuyển thành ma trận 4x4.



Hình 3.6. Vectơ khởi tạo khóa dạng hàng chuyển thành ma trận khởi tạo khóa

3.4.3



Thủ tục biến đổi RotWord()



Thủ tục biến đổi RotWord() là một phép hóan vị Từ, tức là thực hiện một phép

dịch vòng sang trái các byte của Từ-4 byte. Hình 3.7 mơ tả thủ tục biến đổi

RotWord() của Từ đầu vào có dạng [b 1,b2,b3,b4] thành Từ đầu ra có dạng

[b2,b3,b4,b1].



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

3 Quá trình mã hóa bằng thuật toán AES

Tải bản đầy đủ ngay(0 tr)

×