Quy trỡnh mó húa

Một phần của tài liệu Tìm hiểu mật mã hộp trắng (whitebox cryptography) và ứng dụng trong hệ thống thu phát thông tin số (Trang 31 - 43)

6. í nghĩa khoa học và thực tiễn của đề tài

2.1.2.Quy trỡnh mó húa

Phƣơng phỏp mó húa Rijndael bao gồm nhiều bƣớc biến đổi đƣợc thực hiện tuần tự, kết quả đầu ra của bƣớc biến đổi trƣớc là đầu vào của bƣớc biến đổi sau. Kết quả trung gian giữa cỏc bƣớc biến đổi đƣợc gọi là trạng thỏi (state).

Một trạng thỏi cú thể đƣợc biểu diễn dƣới dạng một ma trận gồm 4 dũng và Nb cột với Nb bằng với độ dài của khối chia cho 32.

Trong một số tỡnh huống, ma trận biểu diễn một trạng thỏi hay mó khúa cú thể đƣợc khảo sỏt nhƣ mảng một chiều chứa cỏc phần tử cú độ dài 4 byte, mỗi phẩn tử tƣơng ứng với một cột của ma trận.

Số lƣợng chu kỳ, ký hiệu là Nr, phụ thuộc vào giỏ trị của Nb và Nk theo cụng thức Nr = max{Nb, Nk} + 6

Hỡnh 2.1. Biểu diễn dạng ma trận trạng thỏi (Nb = 6) và mó khúa (Nk = 4)

Quy trỡnh mó húa Rijndael sử dụng bốn phộp toỏn biến đổi chớnh 1. AddRoundKey

2. SubBytes 3. MixColumns 4. ShiftRows

Mỗi phộp biến đổi thao tỏc trờn trạng thỏi hiện hành - ký hiệu là S. Kết quả S’ của mỗi phộp biến đổi sẽ trở thành đầu vào của phộp biến đổi kế tiếp trong quy trỡnh mó húa.

Hỡnh 2.2Quy trỡnh mó húa Rijndael

Trƣớc tiờn, toàn bộ dữ liệu đầu vào đƣợc chộp vào mảng trạng thỏi hiện hành. Sau khi thực hiện thao tỏc cộng mó khúa đầu tiờn, mảng trạng thỏi sẽ đƣợc trải qua Nr = 10, 12 hay 14 chu kỳ biến đổi (tựy thuộc vào độ dài của mó khúa chớnh cũng nhƣ độ dài của khối đƣợc xử lý). Nr – 1 chu kỳ đầu tiờn là cỏc chu kỳ biến đổi bỡnh thƣờng và hoàn toàn tƣơng tự nhau, riờng chu kỳ biến đổi cuối cựng cú sự khỏc biệt với Nr – 1 chu kỳ trƣớc đú. Cuối cựng, nội dung của mảng trạng thỏi sẽ đƣợc chộp lại vào mảng chứa dữ liệu đầu ra.

Quy trỡnh mó húa Rijndael đƣợc túm tắt nhƣ sau

1. Thực hiện thao tỏc AddRoundKey đầu tiờn trƣớc khi thực hiện cỏc chu kỳ mó húa.

3. Thực hiện chu kỳ mó húa cuối cựng trong chu kỳ này thao tỏc MixColumns đƣợc bỏ qua.

Thuật toỏn dƣới đõy, mảng Key[] chứa bảng mó khúa mở rộng; mảng in[] và out[] lần lƣợt chứa dữ liệu vào và kết quả ra của thuật toỏn mó húa.

Cipher (byte in[4 * Nb], byte out[4 * Nb], word Key[Nb * (Nr + 1)]) begin

byte state[4, Nb] state = in

AddRoundKey(state, Key[0]) for round = 1 step 1 to Nr – 1

SubBytes(state) ShiftRows(state) MixColumns(state) AddRoundKey(state, Key[round]) end for SubBytes(state) ShiftRows(state) AddRoundKey(state, Key[Nr]) end

Hỡnh 2.3Thuật toỏn Mó húa và giải mó Rijndael 2.1.2.1. Phộp biến đổi SubBytes

Thao tỏc biến đổi SubBytes là phộp thay thế cỏc byte phi tuyến và tỏc động một cỏch độc lập lờn từng byte trong trạng thỏi hiện hành. Bảng thay thế (S-box) cú tớnh khả nghịch và quỏ trỡnh thay thế 1 byte x dựa vào S-box bao gồm 2 bƣớc:

1. Xỏc định phần tử nghịch đảo .

2. Áp dụng phộp biển đổi affine (trờn GF( ). Đối với (giả sử

cú biểu diễn nhị phõn là { }).

=

Hay

Với là bit thứ I của {63} hay {01100011}.

Hỡnh 2.5 Bảng thay thế S-box qua phộp biến đổi SubBytes

Vớ dụ nếu giỏ trị {x,y} cần thay thế là {53} thỡ giỏ trị thay thế S- box({xy}) đƣợc xỏc định bằng cỏch lấy giỏ trị tại dũng 5 cột 3 trong hỡnh 2.5. Nhƣ vậy S-box({xy}) = {ED}

Phộp biến đổi SubBytes đƣợc thể hiện dƣới dạng mó giả

SubBytes (byte state[4,Nb]) Begin For r = 0 to 3 For c = 0 to Nb – 1 State[r,c] = Sbox[state[r,c]] End for End for End

2.1.2.2. Phộp biến đổi ShiftRows (adsbygoogle = window.adsbygoogle || []).push({});

Hỡnh 2.6Thao tỏc ShiftRows tỏc động trờn từng dũng của trạng thỏi

Byte tại dũng r cột c sẽ đƣợc dịch chuyển đến cột (c – shift(r,Nb))

mod Nb hay

Giỏ trị số shift(r,Nb) phụ thuộc vào cỏc chỉ số dũng r và kớch thƣớc Nb của khối dữ liệu.

shift(r,Nb) r 1 2 3 Nb 4 1 2 3 6 1 2 3 8 1 3 4 Hỡnh 2.7Giỏ trị di số shift(r,Nb)

Phộp biến đổi ShiftRows đƣợc thể hiện dƣới dạng mó giả

ShiftRows(byte state[4,Nb]) Begin Byte t[Nb] For r = 1 to 3 For c = 0 to Nb - 1 t[c] = state[r, c + h[r,Nb]) mod Nb End for End for For c = 0 to Nb - 1 state[r, c] = t[c] End for End

Vớ dụ: Ma trận trạng thỏi dạng 4 x 4 cú cỏc bytes 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16.

Dạng ma trận nhƣ sau:

Ma trận ban đầu Ma trận sau chuyển đổi 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 1 5 9 13 6 10 14 2 11 15 3 7 16 4 8 12

2.1.2.3. Phộp biến đổi MixColumns

Trong thao tỏc biến đổi MixColumns, mỗi cột của trạng thỏi hiện hành đƣợc biểu diễn dƣới dạng đa thức s(x) cú cỏc hệ số trờn .

Thực hiện phộp nhõn

Với

Thao tỏc này đƣợc thể hiện ở dạng ma trận nhƣ sau

Trong đoạn mó chƣơng trỡnh dƣới đõy, hàm FFmul(x,y) thực hiện phộp nhõn (trờn trƣờng ) hai phần tử x và y với nhau

MixColumns(byte state[4, Nb]) Begin Byte t[4] For c = 0 to Nb - 1 For r = 0 to 3 t[r] = state[r,c] End for For r = 0 to 3 state[r,c] = FFmul(0x02, t[r]) xor FFmul(0x03, t[(r+1) mod 4]) xor

t[(r+2) mod 4] xor t[(r+3) mod 4] End for End for end Vớ dụ: cho ma trận trạng thỏi là: b1 b5 b9 b13 b2 b6 b10 b14 b3 b7 b11 b15 b4 b8 b12 b16

Phộp biến đổi MixColumns sẽ thực hiện qua 2 bƣớc Bƣớc 1. Nhõn ma trận với ma trận

1 2 3 1 b2 = (b1*1) xor (b2*2) xor (b3*3) xor (b4*1) 1 1 2 3 b3 = (b1*1) xor (b2*1) xor (b3*2) xor (b4*3) 3 1 1 2 b4 = (b1*3) xor (b2*1) xor (b3*1) xor (b4*2)

Bƣớc 2. Thực hiện phộp nhõn trong GF bằng việc thực hiện thay thế trong bảng mó húa E.

Kết quả của phộp nhõn đơn giản là kết quả của một tra cứu của bảng L, sau đú là tra cứu bảng E.

2.1.2.4. Thao tỏc AddRoundKey

Phƣơng phỏp Rijndael bao gồm nhiều chu kỳ mó húa liờn tiếp nhau, mỗi chu kỳ cú một mó khúa riờng cú cựng kớch thƣớc với khối dữ liệu đang đƣợc xử lý và đƣợc phỏt sinh từ mó khúa chớnh cho trƣớc ban đầu. Mó khúa của chu kỳ cũng đƣợc biểu diễn bằng một ma trận gồm 4 dũng và Nb cột. Mỗi cột của trạng thỏi hiện hành đƣợc XOR với cột tƣơng ứng của mó khúa của chu kỳ đang xột

Thao tỏc biến đổi ngƣợc của AddRoundKey cũng chớnh là thao tỏc AddRoundKey.

Trong đoạn chƣơng trỡnh dƣới đõy, hàm xbyte(r,w) thực hiện việc lấy byte thứ r trong phần tử w

AddRoundKey(byte state[4, Nb], word rk[]) //rk = w + round + Nb

Begin

For c = 0 to Nb - 1 For r = 0 to 3

state[r,c] = state[r,c] xor xbyte(r, rk[c]) End for (adsbygoogle = window.adsbygoogle || []).push({});

End for end

Với i = round*Nb

Hỡnh 2.9Cỏc thao tỏc AddRoundKey tỏc động lờn mỗi cột của trạng thỏi

Một phần của tài liệu Tìm hiểu mật mã hộp trắng (whitebox cryptography) và ứng dụng trong hệ thống thu phát thông tin số (Trang 31 - 43)