Mã hóa AES bằng VHDK

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

docx26 trang | Chia sẻ: lvcdongnoi | Lượt xem: 5198 | Lượt tải: 2download
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:

  • docxM ha AESVHDL.docx
  • docxcodeVHDL.docx