Các khóa của mỗi chu kỳ (RoundKey) được phát sinh từ khóa chính. Quy trình
phát sinh khóa cho mỗi chu kỳ gồm 2 giai đoạn::
1. Mở rộng khóa chính thành bảng khóa mở rộng,
2. Chọn khóa cho mỗi chu kỳ từ bảng khóa mở rộng.
* Xây dựng bảng khóa mở rộng
Bảng khóa mở rộng là mảng 1 chiều chứa các từ (có độ dài 4 byte), được ký hiệu
là w[Nb*(Nr + 1)]. Hàm phát sinh bảng khóa mở rộng phụ thuộc vào giá trị Nk,
tức là phụ thuộc vào độ dài của mã khóa chính.
Hàm SubWord(W) thực hiện việc thay thế (sử dụng S-box) từng byte thành phần
của từ 4 byte được đưa vào và trả kết quả về là một từ bao gồm 4 byte kết quả sau
khi thực hiệc việc thay thế.
26 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 5198 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Mã hóa AES bằng VHDK, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Mã hóa Advanced Encryption Standard sử dụng VHDL
Nhóm 2: Trần Đình Cường
Nguyễn Đức Hân
Trần Trung Quang
Mục lục
Lời mở đầu
Chương 1: Phương pháp mã hóa Rijndael
Mã hóa Rijndael
Quá trình mã hóa
Phép biến đổi SubBytes
Phép biến đổi ShiftRows
Phép biến đổi MixColumns
Thao tác AddRoundKey
Quá trình giải mã
Phép biến đổi InvShiftRows
Phép biến đổi InvSubBytes
Phép biến đổi InvMixColumns
Kết luận
Ví dụ
Chương 2: VHDL sử dụng AES
2.1 Tổng quan về ngôn ngữ VHDL
2.2 Phân tích thiết kế
2.3 Kết quả mô phỏng
2.4 Kết luận
2.5 Hướng phát triển
2.6 Nhận xét và phân công nhóm .
Lời mở đầu:
Trong đồ án chúng ta tìm hiểu về phương pháp mã hóa Rịjndael và sử dụng VHDL để lập trình mô phỏng mã hóa AES trên FPGA.
Do tốc độ tính toán của máy tính ngày càng tăng cao thuật toán DES trở nên không an toàn ( năm 1999 một mạng máy tính gồm 100.000 máy có thể giải mã một thư tín mã hóa DES chưa đầy 24 giờ). Vì thế Công nghệ Hoa Kỳ chọn thuật toán thay thế DES và đã chính thức chọn Rijndael trở thành chuẩn mã hóa nâng cao AES (Advanced Encryption Standard) từ ngày 02 tháng 10 năm 2000.
Ưu điểm của AES:
Chúng em đã không đủ thời gian load đoạn mã DES để chạy thử thời gian thực hiện thuật toán nhưng theo tài liệu thì mã hóa AES 10 vòng nhanh gấp 3 lần thuật toán DES.
Mức độ an toàn AES đã khắc phục được điểm yếu của thuật toán Square (tiền thân của AES) bị phá bởi phương pháp thám mã phân tích do KNUDSENT khảo sát.
Bảng tra và phép thế trong AES có tính chất phi thuyến mạnh dẫn đến mức độ phân tán thông tin phức tạp cũng tăng độ an toàn cho thuật toán.
Việc sử dụng các hằng số Rcon[i ] trong bước sinh key mới được thay đổi ứng với mỗi chu kỳ giúp hạn chế khả năng tính đối xứng trong thuật toán.
Những ưu điểm này đã giúp cho AES trở thành thuật toán rất mạnh và đầy triển vọng nếu được triển khai trên các mạch cứng số . Trước khi tìm hiểu cách thực hiện thuật toán trên FPGA , chúng ta cùng tìm hiểu cơ sở và các bước của thuật toán mã hóa này .
Chương 1: Phương pháp mã hóa Rijndael
1.1 Mã hóa Rijndael
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 tiếp
theo. 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. Mã khóa chính (Cipher Key)
cũng được biểu diễn dưới dạng một ma trận gồm 4 dòng và Nk cột với Nk bằng
với độ dài của khóa 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.
1.2 Quá trình mã hóa
Quy trình mã hóa Rijndael sử dụng bốn phép biến đổi chính:
1. AddRoundKey: cộng (⊕) mã khóa của chu kỳ vào trạng thái hiện hành. Độ
dài của mã khóa của chu kỳ bằng với kích thước của trạng thái.
2. SubBytes: thay thế phi tuyến mỗi byte trong trạng thái hiện hành thông qua
bảng thay thế (S-box).
3. MixColumns: trộn thông tin của từng cột trong trạng thái hiện hành. Mỗi cột
được xử lý độc lập.
4. 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ố khác nhau.
Mỗi phép biến đổi thao tác trên trạng thái hiện hành 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.
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 so 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 lại 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.
2. Nr – 1 chu kỳ mã hóa bình thường: mỗi chu kỳ bao gồm bốn bước biến đổi
liên tiếp nhau: SubBytes, ShiftRows, MixColumns, và AddRoundKey.
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.
Trong thuật toán dưới đây, mảng w[] 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.
Hình 1 : Quá trình mã hóa
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 (dùng bảng thay thế (S-box) )
Hình 2: Thao tác Subbytes tác động trên từng bytes của trạng thái.
Hình 3: Bảng thay thế S-box cho giá trị {xy} ở dạng thập lục phân.
1.2.2 Phép biến đổi ShiftRows
Trong thao tác biến đổi ShiftRows, mỗi dòng của trạng thái hiện hành được dịch
chuyển xoay vòng đi một số vị trí.
Byte Sr,c tại dòng r cột c sẽ dịch chuyển đến cột (c - shift(r, Nb)) mod Nb hay:
Sr,c'=Sr,(c - shift(r, Nb)) mod Nb với 0 < r < 8 và 0 ≤ c < Nb
Giá trị di số shift(r, Nb) phụ thuộc vào chỉ số dòng r và kích thước Nb của khối dữ liệu.
Hình 3: giá trị di số shift(r, Nb)
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 GF(28). Thực hiện phép nhân
S'(x) = a(x)S(x) Với a(x) ={03}x3+ {01}x2+ {01}x+ {02}
Thao tác được thể hiện dưới dạng ma trận sau:
S0,c'S1,c'S2,c'S3,c'=02030101010203010103010102030102S0,cS1,cS2,cS3,c
Hình4: Thao tác MixColumns tác động lên mỗi cột của trạng thái
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 (Round Key) 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 (Cipher Key) 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.
S0,c'S1,c'S2,c'S3,c'=S0,cS1,cS2,cS3,c⨁wround*Nb+c
với 0≤ c ≤Nb
Thao tác biến đổi ngược của AddRoundKey cũng chính là thao tác
AddRoundKey.
Hình 5: Thao tác AddRoundKey tác động lên mỗi cột của trạng thái
1.2.4 Phát sinh khóa của mỗi chu kỳ
Các khóa của mỗi chu kỳ (RoundKey) được phát sinh từ khóa chính. Quy trình
phát sinh khóa cho mỗi chu kỳ gồm 2 giai đoạn::
1. Mở rộng khóa chính thành bảng khóa mở rộng,
2. Chọn khóa cho mỗi chu kỳ từ bảng khóa mở rộng.
* Xây dựng bảng khóa mở rộng
Bảng khóa mở rộng là mảng 1 chiều chứa các từ (có độ dài 4 byte), được ký hiệu
là w[Nb*(Nr + 1)]. Hàm phát sinh bảng khóa mở rộng phụ thuộc vào giá trị Nk,
tức là phụ thuộc vào độ dài của mã khóa chính.
Hàm SubWord(W) thực hiện việc thay thế (sử dụng S-box) từng byte thành phần
của từ 4 byte được đưa vào và trả kết quả về là một từ bao gồm 4 byte kết quả sau
khi thực hiệc việc thay thế.
Hàm RotWord(W) thực hiện việc dịch chuyển xoay vòng 4 byte thành phần (a, b,
c, d) của từ được đưa vào. Kết quả trả về của hàm RotWord là một từ gồm 4 byte
thành phần là (b, c, d, a)
Các hằng số của mỗi chu kỳ hoàn toàn độc lập với giá trị Nk và được xác định
bằng Rcon[i] = (RC[i], {00}, {00}, {00}) với RC[i] ∈ GF(28) và thỏa:
RC[1]=1 ({01})
RC[i] =x ({02})•(RC[i-1]) = xi-1
Khóa mở rộng được xác định như sau
Từ W[0] đến W[Nk-1] lấy từ Key ban đầu
Nk-1 < i < Nb*(Nr + 1) tính theo công thức
word temp = w[i - 1]
temp = SubWord(RotWord(temp)) xor Rcon[i / Nk]
w[i] = w[i - Nk] xor temp
Xác định khóa của chu kỳ
Khóa của chu kỳ thứ i được xác định bao gồm các từ (4 byte) có chỉ số từ Nb*i
đến Nb*(i+1) - 1của bảng mã khóa mở rộng. Như vậy, mã khóa của chu kỳ thứ
i bao gồm các phần tử w[Nb*i],w[Nb*i+1],…,w[Nb*(i+1) -1].
Hình 6: Bảng mã khóa mở rộng và cách xác định mã khóa của chu kỳ
(Nb = 6 và Nk = 4)
1.3 Quy trình giải mã
Quy trình giải mã được thực hiện qua các giai đoạn sau:
1. Thực hiện thao tác AddRoundKey đầu tiên .
2. Nr − 1 chu kỳ giải mã bình thường: mỗi chu kỳ bao gồm bốn bước biến đổi
liên tiếp nhau: InvShiftRows, InvSubBytes, AddRoundKey, InvMixColumns.
3. Thực hiện chu kỳ giải mã cuối cùng. Trong chu kỳ này, thao tác
InvMixColumns được bỏ qua.
Hình 7: Quá trình giải mã
1.3.1 Phép biến đổi InvShiftRows
Hình 8 : Thao tác InvShiftRows tác động lên từng dòng của
trạng thái hiện hành.
InvShiftRows chính là phép biến đổi ngược của phép biến đổi ShiftRows. Dòng
đầu tiên của trạng thái sẽ vẫn được giữ nguyên trong khác ba dòng cuối của trạng
thái sẽ được dịch chuyển xoay vòng theo chiều ngược với phép biến đổi
ShiftRows với các di số Nb–shift (r, Nb) khác nhau.
1.3.2 Phép biến đổi InvSubBytes
Phép biến đổi ngược của thao tác SubBytes sử dụng bảng thay thế nghịch đảo của S-box trên GF(28), ký hiệu là S-box-1
Hình 9: Bảng thay thế s-box-1cho giá trị {xy} ở dạng thập lục phân.
1.3.3 Phép biến đổi InvMixColumns
InvMixColumns là biến đổi ngược của phép biến đổi MixColumns. Mỗi cột của trạng thái hiện hành được xem như đa thức s(x) bậc 4 có các hệ số thuộc
GF(28) và được nhân với đa thức a-1(x) ={0b}x3+ {0d}x2+ {09}x+ {0e}
được sử dụng trong phép biến đổi MixColumns.
S0,c'S1,c'S2,c'S3,c'=0e0b0d09090e0b0d0d0b090d0e0b090eS0,cS1,cS2,cS3,c 0≤ c ≤Nb
1.4 Kết luận
Khả năng an toàn
Việc sử dụng các hằng số khác nhau ứng với mỗi chu kỳ giúp hạn chế khả năng tính đối xứng trong thuật toán. Sự khác nhau trong cấu trúc của việc mã hóa và giải mã đã hạn chế được các khóa “yếu” như trong phương pháp DES . Ngoài ra, thông thường những điểm yếu liên quan đến mã khóa đều xuất phát từ sự phụ thuộc vào giá trị cụ thể của mã khóa của các thao tác phi tuyến như trong phương pháp IDEA (International Data Encryption Algorithm). Trong các phiên bản mở rộng, các khóa được sử dụng thông qua thao tác XOR và tất cả những thao tác phi tuyến đều được cố định sẵn trong S-box mà không phụ thuộc vào giá trị cụ thể của mã khóa. Tính chất phi tuyến cùng khả năng khuếch tán thông tin trong việc tạo bảng mã khóa mở rộng làm cho việc phân tích mật mã dựa vào các khóa tương đương hay các khóa có liên quan trở nên không khả thi .
Đối với phương pháp vi phân rút gọn, việc phân tích chủ yếu khai thác đặc tính tập trung thành vùng của các vết vi phân trong một số phương pháp mã hóa. Trong trường hợp thuật toán Rijndael với số lượng chu kỳ lớn hơn 6, không tồn tại phương pháp công phá mật mã nào hiệu quả hơn phương pháp thử và sai . Tính
chất phức tạp của biểu thức S-box trên GF(28) cùng với hiệu ứng khuếch tán giúp cho thuật toán không thể bị phân tích bằng phương pháp nội suy( theo tài liệu [2]) .
1.5 Ví dụ
Sơ đồ ở dạng thập lục phân cho mã hóa AES mảng state . Đầu vào Nb=4 và khóa Nk=4.
Input = 3243f6a8885a308d313198a2e0370734
Key = 2b7e151628aed2a6abf7158809cf4f3c
Chương 2 VHDL sử dụng AES
2.1. Tổng quan về ngôn ngữ VHDL
VHDL là công cụ để mô hình hóa phần cứng phần cứng .
Một chương trình viết bằng ngôn ngữ VHDL là một chương trình có cấu
trúc Top-Down. Để mô tả một hệ thống lớn ta tiến hành chia nhỏ hệ thống đó ra
theo các nhóm nhỏ hơn có các đặc điểm chung nhất. Rồi lại tiếp tục chia nhỏ các
nhóm nhỏ hơn đó cho tới khi trở về thành các phần tử đơn giản thuận lợi cho
việc viết mã mô tả cho đối tượng đó. Ta có thể gom những phần tử đơn giản đó
lại thành một đối tượng thư viện để thuận lợi sử dụng trong các thiết kế sau.
Ngôn ngữ VHDL có các đơn vị thiết kế là: Entity, Architecture,
Configuration, Package, Package Body, Library. Chúng được chia làm hai loại:
Primary (không phụ thuộc vào các đơn vị thiết kế khác) và Secondary (phụ
thuộc vào các đơn vị thiết kế Primary).
Cấu trúc của một chương trình viết bằng VHDL bao gồm phần khai báo
Entity và thân chương trình Architecture. Trong Architecture sẽ có các
Process và các lệnh nằm ngoài các Process. Các lệnh nằm trong Process sẽ
được thực hiện tuần tự còn các lệnh nằm ngoài Process sẽ được thực hiện đồng
thời. Ngôn ngữ mô tả phần cứng VHDL còn hỗ trợ rất nhiều các cấu trúc lệnh và
các tiến trình đặc thù để quá trình mô tả phần cứng có thể diễn ra thuận lợi và
chặt trẽ.
Chúng em lựa chọn FPGA vì đây là thiết bị số có những ưu điểm khả trình , dễ dàng trong quá trình kiểm thử , và tối ưu hóa mã , khả năng xử lý song song nhanh . Đặc biệt FPGA có thể đóng vai trò prototyping các thiết kế , trước khi chuyển sang thành các mạch số chuyên dụng .
2.2 Phân tích thiết kế
Mã hóa/ Giải mã
State data out 128 bit
En=1 hay 0
Clk
Mã khóa mở rộng
Round 128 key_in
key
Thiết kế trên Chip FPGA của Xilinx
Ban đầu chúng em sử dụng trên chip mặc định của ISE 8.2i
Family Spartan3
Device XC3S200
Package FT256
Speed -4
Kết quả mô phỏng Entity Byte_sub số Slices là 1024 chiếm 53%, số LUTs là 2048 chiếm 53%, số IOBs là 258 chiếm 149 %
Số IOBs lớn hơn số lượng có của chip dòng Spartan3
Sau đó phải lựa chọn dòng chip mạnh hơn
Family Virtex4
Device XC4VFX12
Package FF668
Speed -12
Kết quả mô phỏng Entity sub_bytes số Slices là 1024 chiếm 18%, số LUTs là 2048 chiếm 18%, số IOBs là 258 chiếm 80%
Kết quả mô phỏng Entity shift_row : số Slices là 0, số Slice Flip Flops là 128 chiếm 1%, số IOBs là 258 chiếm 80 %.
Kết quả mô phỏng Entity mix_column : số Slices là 131 chiếm 2%, số LUTs là 244 chiếm 2%, số IOBs là 258 chiếm 80%
Trong đồ án có sử dụng các hàm
BYTE_SUB thay thế phi tuyến mỗi byte trong biến state độ dài 128 bit ( 16byte) thông qua bảng thay thế (S-box).
SHIFT_ROW dịch chuyển xoay vòng từng dòng của biến state
MIX_COLUMN trộn thông tin của từng cột trong biến state
ADD_ROUNDKEY cộng mã khóa của chu kỳ vào biến state
INV_BYTE_SUB thay thế phi tuyến mỗi byte trong biến state thông qua bảng thay thế (S-box-1)
INV_SHIFT_ROW dịch chuyển xoay vòng từng dòng của biến state
INV_MIX_COLUMN trộn thông tin của từng cột trong biến state
Tương ứng là các Entity sử dụng các funtion trên
Entity BYTE_SUB thực hiện bước subbyte , đây cũng là entity tốn nhiều dung lượng chip nhất , do kích thước của bảng tra .
Entity SHIFT_ROW thực hiện bước shiftRows
Entity MIX_COLUMN thực hiện bước mixcolumn
Entity KEY_GEN thực hiện sinh mảng Key
Entity INV_BYTE_SUB thực hiện bước invsubbyte
Entity INV_SHIFT_ROW thực hiện bước invshiftrow
Entity INV_MIX_COLUMN thực hiện bước invmixcolumn
Cấu trúc của code VHDL
Xây dựng thư viện Rijndael
Thư viện Rijndael : Vì khối mã hóa / giải mã gồm 4 entity nối tiếp với nhau , chúng đều có truy nhập đến các kiểu dữ liệu chung , đặc biệt là bảng tra S_box nên cần 1 package để tiện cho việc ghép nối các entity sau này . Package rijndael_package gồm các funtion và các kiểu dữ liệu lưu trữ trong thư viện. Các Entity đều sử dụng use work.rijndael_package.all;
Sau khi khai báo các funtion trong Package Rijndael tiếp đến phần Packagebody gồm các funtion .
Thiết kế các Entity xử lý cho các bước mã hóa
Thiết kế các Entiy thực hiện các bước mã hóa. Sau đó tổng hợp các Entity bằng cách port map các chân vào ra, đầu ra của các entity liên kết với nhau , ví dụ đầu ra của Entity sub_byte là đầu vào của Entity shift_row.
2.3 Kết quả mô phỏng
Kết quả mô phỏng cho một vòng mã hóa gồm các bước ADD_ROUNDKEY , BYTE_SUB, SHIFT_ROW, MIX_COLUMN . Thời gian mã hóa cho mỗi chu kỳ đầy đủ 4 bước là khoảng 450 ns.
entity byte_sub
entity shift_row
entity mix_column
entity key_gen
entity inv_byte_sub
entity inv_shift_row
entity inv_mix_column
2.3 Kết luận
Ta đã sử dụng phần mềm Xilinx ISE 8.2i để mô phỏng được thuật toán AES . Kết quả mô phỏng trên các entity là chính xác . Trong thiết kế đã cố gắng khai thác tính song song :
Trong thao tác tra bảng S_box , đã tiến hành đồng thới với 16 Byte dữ liệu
Tách quá trình sinh Key ( Key_Gen ) độc lập với quá trình mã hóa , trao đổi thông tin qua tín hiệu Round .
Nhược điểm : Số lượng chân vào ra là lớn nên phải sử dụng những dòng chip lớn (Family Virtex4). Đó một phần là do kích thước của bảng tra , một phần khác là do nhóm để đơn giản trong thiết kế , đã chọn các entity có quá nhiều đầu vào I/O song song ( 128 bit với các hàm như Sub_byte , và 258 đầu vào đối với entity tổng ) .
Vấn đề về bảo mật key,Trong thiết kế , Key được đưa vào trực tiếp , chưa đảm bảo an toàn thông tin .
2.4 Hướng phát triển
Sản phẩm nếu chuyển thành mạch cứng có thể ứng dụng trong truyền tin , mã hóa dữ liệu trước khi truyền đi và bên nhận sẽ có bộ phận giải mã tín hiệu để khôi phuc thông tin gốc . Thiết bị có thể phối hợp với các thiết bị mạng để tạo nên mạng riêng ảo ( VPN) . Ứng dụng vào trong khóa số dùng để mã hóa khóa, tăng khả năng bảo mật của khóa.
Code cần được tối ưu hóa nhiểu hơn , để giảm số lượng I/O đầu vào . Có thể đê ra giải pháp , tạo một module truyền-nhận nối tiếp ở đầu vào và đầu ra của FPGA , sau đó lưu các khối dữ liệu vào RAM , như vậy , các khối mã hóa sẽ xử lý dữ liệu nội bộ trong FPGA . Bảng tra có thể đặt trong ROM ngoài để tiết kiệm không gian nhớ .
Trong tương lai , các vấn đề về bảo mật Key mã hóa cần được cân nhắc , ví dụ , tạo một phần cứng để lưu Key dạng USB .
2.5 , Nhận xét về nhóm và phân công trong nhóm
AES là một phương pháp mã hóa 1 chiều rất phổ biến hiện nay , với câu trúc khá đơn giản về mặt toán học , AES đã được thể hiện dưới nhiều ngôn ngữ và phần mềm khác nhau , trong đó các đoạn code cũng như giả mã C là phổ biến nhất . Nhận thấy việc lập trình AES trên FPGA , nếu thực hiện từ bước đầu sẽ mất quá nhiều thời gian so với thời lượng 15 tuần của môn học , nên nhóm đã lựa chọn giải pháp : tham khảo thư viện sẵn có , và áp dụng các bản lập trình trên ngôn ngữ C để hoàn thành các Entity cũng như các Function . Cụ thể , nhóm đã phát triển từ một thư viện rinjadael , bao gồm bảng tra S_box , các hàm Byte_sub , inv_byte_sub , shift_row_func , và inv_shift_row_func . Tuy nhiên , 2 hàm trong thư viện mix_column , inv_mix_column , roundkey_gen hoạt động không tốt , vì vậy , nhóm em đã tổ chức viết lại các hàm này , đặc biệt 2 hàm Mix_column và inv_mix_column có gọi đến 2 hàm POLY_MULTD_FUNCT và POLY_MULTE_FUNCT được viết dựa trên chương trình C .
Về phân công công việc :
Việc Download các tài liệu và tìm hiểu cơ sở toán học của thuật toán , phân tích giải thuật được giao cho Trần Trung Quang
Viết lại các function roundkey_gen , entity tổng hợp , kiểm thử , viết báo cáo nhận xét cho entity và báo cáo tổng hợp – Nguyễn Đức Hân
Viết lại các function POLY_MULTD_FUNCT và POLY_MULTE_FUNCT , Mix_column và inv_mix_column – Trần Đình Cường .
Reference
Mã hóa và ứng dụng – Ts Dương Anh Đức và Ths Trần Minh Triết –Khoa công nghệ thông tin , đại hoc khoa học tự nhiên TPHCM
www.fpgaworld.com
Bruce Schneier (1995), Applied Cryptography: Protocols, Algorithms, and Source Code in C, 2nd Edition, John Wiley & Sons, Inc.
Các file đính kèm theo tài liệu này:
- M ha AESVHDL.docx
- codeVHDL.docx