Thuật tốn Rijndael

Một phần của tài liệu Luận văn:Nghiên cứu và xây dựng ứng dụng bảo mật trên PDA docx (Trang 27 - 32)

Tháng 11/2001, NIST cơng bố tài liệu FIPS-197, cơng nhận Rijndael là thuật tốn đại diện cho chuẩn mã hĩa mở rộng AES.[17] Rijndael đã vượt qua 4 thuật tốn ứng viên cịn lại (RC6, MARS, SERPENT, TWOFISH) để trở thành chuẩn mã hĩa quy ước mới nhất hiện nay. Thuật tốn Rijndael do hai nhà khoa học Vincent Rijmen và Joan Daeman cung cấp.

Phương pháp Rijndael mã hĩa theo khối. Kích thước khối và kích thước khĩa thay đổi linh hoạt 128, 192, 256 bit nhờ vậy Rijndael thích hợp với nhiều hệ thống mã hĩa khác nhau từ các máy tính cá nhân đến smart-cards.

Thuật tốn Rijndael được xem là thuật tốn cĩ độ an tồn rất cao và cĩ nhiều

ưu điểm nhưng với sự phát triển mạnh mẽ của ngành cơng nghiệp máy tính khơng loại trừ nguy cơ thuật tốn Rijndael bị phá vỡ. Do đĩ hiện nay các nhà khoa học

đang tìm cách cải tiến mở rộng thuật tốn Rijndael để tăng độ an tồn. Các phiên bản mở rộng 256/384/512-bit[1][2][3][4][5] và phiên bản mở rộng 512/768/1024-bit

đều được xây dựng trên cở sở lý thuyết của thuật tốn Rijndael nguyên thủy nhưng cĩ khả năng xử lý khĩa và khối dữ liệu lớn hơn nhiều lần so với phiên bản gốc.[7]

Đơn vị thơng tin được xử lý trong thuật tốn Rijndael là byte. Mỗi byte cĩ thể được biểu diễn bằng nhiều cách khác nhau: dạng nhị phân

({b7b6b5b4b3b2b1b0}), dạng thập lục phân ({h1h0}) hay dạng đa thức cĩ các hệ số nhị phân å = 7 0 i i ix b .

Các thao tác tính tốn của thuật tốn AES được thực hiện trên các ma trận hai chiều gọi là trạng thái (state). Mỗi state gồm 4 hàng Nb cột trong đĩ Nb là kết quả

của phép chia kích thước khối dữ liệu cho 32. Đối với AES, Nb = 4.

Khĩa cũng được biểu diễn dưới dạng ma trận hai chiều gồm 4 hàng Nk cột trong đĩ Nk là kết quả chia kích thước khĩa cho 32. Mỗi chu kỳ mã hĩa / giải mã sử

KHOA CNTT –

ĐH KHTN

chu kỳ. Hàm phát sinh bảng mã khĩa mở rộng (KeyExpansion) phụ thuộc vào giá trị Nk, chi tiết hàm KeyExpansion được mơ tả trong phụ lục A.

Ý nghĩa

STT Tên

Phiên bản nguyên thủy Phiên bản mở rộng

1 AddRoundKey Thực hiện việc cộng mã khĩa của chu kỳ vào trạng thái hiện hành.

2 SubBytes Thay thế phi tuyến từng byte trong trạng thái hiện hành. Dùng bảng thay thế SBox.

3 InvSubBytes Phép biến đổi ngược của SubBytes.

4 MixColumns Trộn thơng tin từng cột trong trạng thái hiện hành. 5 InvMixColumn

s

Phép biến đổi ngược của MixColumn.

6 ShiftRows Dịch chuyển xoay vịng từng dịng của trạng thái hiện hành với di số tương ứng khác nhau.

7 InvShiftRows Phép biến đổi ngược của ShiftRows.

Mã khĩa chính. Được biểu diễn bằng ma trận: 8 K 4 dịng ´Nk cột 8 dịng ´Nk cột Trạng thái. Được biểu diễn bằng một ma trận : 9 State 4 dịng ´Nb cột 8 dịng ´Nb cột

Số lượng cột trong trạng thái. Nb Ỵ{4,6,8}. (AES: Nb = 4)

9 Nb

Nb = độ dài khối / 32 Nb = độ dài khối / 64 Số lượng các từ 32bit trong Mã khĩa chính K.

NkỴ{4,6,8} 10 Nk

Nk = Độ dài khĩa / 32 Nk = Độ dài khĩa / 64 11 Nr Số lượng chu kỳ. Nr = max(Nb, Nk) + 6 (adsbygoogle = window.adsbygoogle || []).push({});

12 RotWord Dịch chuyển xoay vịng 4 bytes thành phần của từ 32 bit. 13 SubWord Nhận vào một từ 4 byte. Áp dụng phép thay thế dựa vào

SBox cho từng byte. Trả về từ 4 byte đã được thay thế. 14 XOR Phép tốn Exclusive-OR

KHOA CNTT –

ĐH KHTN

Bảng 2-1: Các hàm và ký hiệu sử dụng trong phương pháp Rijndael. 2.2.2.1. Quy trình mã hĩa Rijndael:

· 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.

· Nr–1 chu kỳ mã hĩa bình thường: mỗi chu kỳ bao gồm 4 bước biến đổi liên tiếp nhau: SubBytes, ShiftRows, MixColumns, và AddRoundKey.

· 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.

v Thuật tốn mã hĩa Rijndael :

· Dữ liệu vào:

inputBlock: khối dữ liệu cần mã hĩa.

inputBlockSize: kích thước khối dữ liệu cần mã hĩa. cipherKey: khĩa chính.

cipherKeySize: kích thước khĩa chính.

· Dữ liệu ra:

outputBlock: khối dữ liệu đã được mã hĩa.

Thuật tốn 2.1: Thuật tốn mã hố theo phương pháp Rijndael.

state = inputBlock

cycleCount = max(inputBlockSize, cipherKeySize) + 6 AddRoundKey(state, createCycleKey(cipherKey, 1)) For i = 1 to cycleCount - 1 do

SubBytes(state) ShiftRows(state) MixColumns(state)

AddRoundKey(state, createCycleKey(cipherKey, i)) end for

SubBytes(state) ShiftRows(state)

AddRoundKey(state, createCycleKey(cipherKey, cycleCount)) outputBlock = state

KHOA CNTT –

ĐH KHTN

2.2.2.2. Quy trình giải mã Rijndael

Quy trình giải mã cĩ thể được thực hiện theo với trình tự các phép biến đổi ngược hồn tồn tương đương với quy trình mã hĩa[8]. Các thao tác ShiftRows, MixColumns, SubBytes lần lượt được thay thế bằng các thao tác InvShiftRows, InvMixColumns, InvSubBytes.

Quá trình giải mã được tĩm tắt như sau:

· Thực hiện AddRoundKey (adsbygoogle = window.adsbygoogle || []).push({});

· Thực hiện Nr-1 chu kỳ giải mã bình thường, mỗi chu kỳ gồm 4 bước biến

đổi liên tiếp sau: InvShiftRows, InvSubBytes, AddRoundKey, InvMixColumns.

· Thực hiện chu kì mã hĩa cuối cùng, giống Nr-1 chu kỳ trên nhưng bỏ qua bước InvMixColumns.

KHOA CNTT – ĐH KHTN v Thuật tốn giải mã Rijndael · Input: inputBlock: khối dữ liệu cần giải mã. inputBlockSize: kích thước khối dữ liệu cần giải mã. cipherKey: khĩa chính.

cipherKeySize: kích thước khĩa chính.

· Output:

outputBlock: khối dữ liệu đã được giải mã.

Thuật tốn 2.2: Thuật tốn giải mã theo phương pháp Rijndael. 2.2.2.3. Đánh giá phương pháp Rijndael

Phương pháp Rijndael cĩ các ưu điểm sau[8]:

· Mã chương trình ngắn gọn, ít tốn bộ nhớ nên dễ dàng áp dụng vào các thiết bị cĩ lượng bộ nhớ giới hạn như thẻ thơng minh.

· Quá trình mã hĩa và giải mã cĩ thể chạy tốt trên các hệ thống xử lý song song.

· Kích thước khối dữ liệu linh hoạt 128 / 192 / 256 bit, cĩ thể thay đổi cho phù hợp từng hệ thống cụ thể

state = inputBlock

cycleCount = max(inputBlockSize, cipherKeySize) + 6

AddRoundKey(state, createCycleKey(cipherKey, cycleCount)) For i = cycleCount - 1 to 1 do

InvShiftRows(state) InvSubBytes(state)

AddRoundKey(state, createCycleKey(cipherKey, i)) MixColumns(state) end for InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, createCycleKey(cipherKey, 1)) outputBlock = state

KHOA CNTT –

ĐH KHTN

.Phương pháp Rijndael vẫn cịn một số hạn chế:

· Thời gian giải mã dài hơn thời gian mã hĩa.

· Bảng Sbox của quá trình giải mã và quá trình mã hĩa khác nhau nên cần tốn bộ nhớđể lưu.

· Khơng tận dụng được các đoạn mã của quá trình mã hĩa vào quá trình giải mã. Điều này dẫn đến hạn chế khi cài đặt phương pháp Rijndael sử dụng phần cứng thiết bị.

Một phần của tài liệu Luận văn:Nghiên cứu và xây dựng ứng dụng bảo mật trên PDA docx (Trang 27 - 32)