Mã hĩa Advanced Encryption Standard si dung VHDL Nhĩm2: Trần Đình Cường Nguyễn Đức Hân Trần Trung Quang Mục lục Lời mở đầu Chương I: Phương pháp mã hĩa Rijndael 1.1 Mã hĩa Rijndael 1.2 Quá trình mã hĩa
1.2.1 Phép biến đổi SubBytes 1.2.2 Phép biến đổi ShiftRows
1.2.3 Phép biến đổi MixColumns
1.2.4 Thao tác AddRoundKey
1.3 Quá trình giải mã
1.3.1 Phép biến đổi InvShiftRows
1.3.2 Phép biến đổi InvSubBytes
Trang 2Lờ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 tốn của máy tính ngày càng tăng cao thuật tốn DES trở nên
khơng an tồ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
tố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ển của AES:
e _ 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 tốn nhưng theo tai liéu http://www.wattpad.com/137120?p=14
thì mã hĩa AES 10 vịng nhanh gấp 3 lần thuật tốn DES
° Mức độ an tồn AES đã khắc phục được điểm yếu của thuật tố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
e _ 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 tồn cho thuật tốn e _ Việc sử dụng các hằng số Reon[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 tốn
Những ưu điểm này đã giúp cho AES trở thành thuật tốn rất mạnh và đây triển
Trang 3Chương 1: Phương pháp mã hĩa Rijndael
1.1 Mã hĩa Rindael
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 goi la trang thai (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 dong va Nb
cột với Nb bằng với độ dài của khối chia cho 32 Ma khéa chinh (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ĩ độ đà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 cua 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: dich 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
Trang 4biế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, tồ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à hồn tồ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—Il 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— I 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, va AddRoundKey
3 Thực hiện chu kỳ mã hĩa cuối cùng: trong chu ky nay thao tac MixColumns
được bỏ qua
Trong thuật tốn dưới đây, mảng w[] chứa bảng mã khĩa mở rộng; mảng ïn[]
Trang 5AđdRounđKay(State,RoundKey) wl i= ByteSub(State) ShiftRow(State) MixColumn¢State) 2 w[*NI| Š AddRoundKey(State,RoundKey) = RHR > 2 Z ByteSub(State) ShiftRow(State) AddRoundKey(State, RoundKey)
Hình 1 : Qua trinh ma hoa
1.2.1 Phép bién doi SubBytes
Thao tac biến đổi SubBytes là phép thay thé cac 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 hanh (dung bang thay thé (S-box) )
Trang 7
1.2.2 Phép biến đổi ShiftRows
Trong thao tác biến đổi ShitRows, 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 „ tại dịng r cột c sẽ dịch chuyển đến cột (c - shift(, Nb)) mod Nb hay: ,= « CG ) voi0<r<8 va0<c<Nb Giá trị đi sé shift(r, Nb) phụ thuộc vào chỉ số dong r va kich thước Nb của khối dữ liệu shift(r, Nb) Nb 6 1 4 ] 1 8 1
Hình 3: gid tri di sé shifi(r, Nb)
1.2.3 Phép bién doi MixColumns
Trong thao tac 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(2 ) Thực hiện phép nhân
(x) = a(x)@S(x) Voi a(x) ={03} + {01} + {01}x+r {02}
Trang 8© a(x} Ẩ Ta ' '
Sop] “Ge for |S03 z So | Š0z loa |Soa So} Ste fia |i 5 S [So | She ha [Sa
L O i ; :
San| Š2- [a2 |#23 3 |Eio |5; faa |523
S30 53, 32 | $33 539 | 55, faa [33
Hinh4: Thao tac MixColumns tac động lên mỗi cột của trang thai 1.2.4 Thao tac 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:
Trang 9j =round *Nb " Ẩn, ' Soc + Sop 0p p 1S; |Š01 Ste 3 03 8ø 00 |Êml[| |& B |Ê03 nT a Pa - St, - %ø lai P——‡£” 5o |SM|}_——|5¿ w, |v, Mì ' iS L @® i aa 143 ' ‘ Ss '
S20 |S | 2 Paa 84p |SA| 22 |Êa3
53o |Êz1 | 33¿ ƑA3 Sp |Sa | Ša„ [833
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 l 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á tri 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, đ) của từ được đưa vào Kết qua trả về của hàm RotWord là một từ gồm 4 byte
thành phần là (b, c, đ, a)
Trang 10Cac hang số của mỗi chu kỳ hồn tồn độc lập với giá trị Nk và được xác định
bằng Rcon[ï] = (RC[i], {00}, {00}, {00}) với RC[i] GF(2 ) và thỏa:
RCH]E1 (01))
RCH] =x ({02;)*(RCI-1]) =
Khĩa mở rộng được xác định như sau
- Tir W[0] đến W[Nk-1] lay tr Key ban dau
- Nk-1 <i<Nb*(Nr+ I) tính theo cơng thức
word temp = w[I - l]
temp = SubWord(RotWord(temp)) xor Rcon[ï / Nk] w[1] = w[i - Nk] xor temp
e Xac dinh khĩa của chu kỳ
Khĩa của chu kỳ thứ ¡ được xác định bao gồm các từ (4 byte) cĩ chỉ số từ Nb*i
đến Nb*(i+1) - Icủa bảng mã khĩa mở rộng Như vậy, mã khĩa của chu kỳ thứ
¡ bao gồm các phan tt w[Nb*i],w[Nb*i+1], ,w[Nb*(i+1) -1] Wo} 1] W2] 3) Wa) Ws] We |W) Wg) Wd | Wi) Wii] Mia] Wis] Wis] Wis] Wie] Wiz] - Mã khĩa chu kỳ 0 Mã khĩa chu kỳ I Mã khĩa chu kỳ 2 Hình 6: Đả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
Trang 11InvMixColumns được bỏ qua w IN," Ny} AddRoundKey(State, InvRoundKey) InvByteSub(State) InvShitRow(State) InvMixColumn(State) AddRoundKey(State,invRoundKey) InvByteSub(State) InvShiftRow(State) AddRoundKey(State, InvRoundKey) Hình 7: Quá frình giải mã 1.3.1 Phép biến đối InvShiftRows s op |801 |%0,2 |%03
S10 |Ê1 |ÊL2 |ÊL3 ellie,
Trang 12Hinh 8 : Thao tac InvShiftRows tac động lên từng dịng của
trang thai hién hanh
InvShiftRows chính là phép biến đổi ngược của phép biến đổi ShitRows 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 ShifRows với các di số Nb-shift (r, Nb) khác nhau
1.3.2 Phép bién déi InvSubBytes
Trang 131.3.3 Phép bién doi 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(2 ) và được nhân với đathức (x)={0b} + {0d} + {09)x+ {0e}
được sử dụng trong phép biến đổi MixColumns ;ÍJ 00 0 09 , ,109 0 0 0 , ‘Fo o9 0 o | | 9S § 0 0 09 0 , 1.4 Kết luận Khả năng an tồ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 tố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 Ngồ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 kha 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 tố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
Trang 14chất phức tạp của biểu thức S-box trên GF(2 ) cùng với hiệu ứng khuếch tán giúp cho thuật tố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 = 3243f6a8885a308d3 I3 198a2e0370734 Key = 2b7el51628aed2a6abf7158809cf4f3c
Trang 15£1|c1|7c|5d a1|78|10l4c a1|78|10|4c 6d|11|db 6 0092| c8|b5 63|4f|e8|d5 4f|e8|d5 |63 £ 6£|4c| 8b|d5 a8/29|3d/03 3d|03|a8|29 55|e£f|32|0c £c|d£|23|fe £fe| fc|d£|23 7a|l£fd 26|3d|e8|fd £#7|27|9b|54 £7|27|9b|54 14|46|27|34 4e|5£f£|84|4e 3 0e|41|64|d2 ab| 83 |43|b5 83|43|b5 |ab 15|16|46|2a ® 54|5£|a6la6J _
2e|b7|72|8b 31|a9|4o|3d 40|3ad| 31 |a9 b5|15| 56|d8 £#7|c9|4£f|dc 17|7d|a9|25 £O |££ |d3|3£ 3f|fO|ff|d3 b£|ec|d7|43 Oe|f3|b2|4£ Sa|l9|a3|7a be | d4 |0a| da be | d4 | 0a |da 00|b1|54|fa ea|b5| 31|7£ 8 41|49|e0|§c 83|3b|e1|64 3b|e1|64|83 51|c8|76|1b e d2|8d| 2b|8d| _
42|dc|19|04 2c|86|d4|£2 d4 | £2|2c|86 2£f|89| 6d| 99 73|ba| £5|29 b1|1f|65|Oc c8 |c0 |4d|£e £e| c8|c0 |4d di|ff|cdlea 21|d2|60|2£f£ ea|O04| 65|85 87|£2|4d|97 87|f£2|4d|97 47|40|a3|4c ac|19|28|57 9 83|45|5d| 96 ec | 6e |4c|90 6e| 4c| 90 |ec 37|d4|70|9£ e 77|fa|d1|5c| _
5c|33| 98|bO 4alc3|46|e7 46|e7|4a|c3 94|e4| 3a|42 66|dc|29|00 £0|2d| ad|c5 8c|d8 |95|a6 a6|8c|d8 |95 edla5|a6|bc f3|21|41|6e eb| 59| 8b|1b e9|cb |3d|a£ e9|cb|3d|a£ d0 |c9| e1 |b6 10 40|2e|lallc3 09/31|32|2e 31|32|2e|09 14|ee|3£|63| _ £2|38|13|42 89|07|7d|2c 7d|2c|89|07 £9|25|Oc|Oc 1e|84|e7|d2 72|5f|94|b5 b5| 72|5£|94 a8|89|c8la6 output 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
tric Top-Down Dé mé ta 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
Trang 16
Cau tric Top - Down entity Full_Add Macro entity Half_Add Leaf Cell
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 ngồ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 ngồi Process sẽ được thực hiện đồng
thời Ngơn ngữ mơ ta 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à
Trang 17chat 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ế
State data out 128 bit
En=1 hay 0 Mã hĩa/ Giải mã Clk Round 128 key_in key Mã khĩa mở rộng
Thiết kế trên Chip FPGA của Xilinx
Ban đầu chúng em sử đụ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 %
Trang 18Số IOBs lớn hơn số lượng cĩ của chip dịng Spartan3 a0 Sources for| Synthesis: ¥| Number of[LUTs —_¥] Hierarchy [byte subt > (09 we3s200-4256 8 fig|eFbsbyte_sub - top_aes_RTL (byte_ sub1.vF| L ra Timing Constraints 1+ D Pinout Report © Dy clock Report
oe IBI|Í[ — Di Ptace and Route Messages | Sources snapshots | [Ư) Lbvaies E D Trưng Messages
Project Properties
21] © Enable Enhanced Design Summ _|
Processes: ^ F CO Enable Message Filtering “1 Display Incremental Messsages
[Enhanced Design Summary Contents | & Show Pattition Data > D Show Enors T=) Add Existing Source
FT Create New Source 4 Design tities xi Sau đĩ phải lựa chọn dịng chip mạnh hơn Family Virtex4 Device XC4VFX12 Package FF668 Speed -12 os ng SS Enrore .” — | 82 ere thi2 1228.33
Number of 4 input LUTs 2048 3840 53% Number of bonded IOBs 258 173 149% Number of GCLKs 1 8 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% Sources for| Syrthesis: v | Number of] LUIs | Hierarchy I Ế]bxe se (%-[X3 ¡be sub -top aes,RTL [byte_sub†.vF| + 2 Summary ro Propetties FL 1Timing Constraints LIPmoa Repott
& D) Clock Report
ors and Warnings ) Synthesis Messages + BB Translation Messages ~ [Map Messages } L)Place and Route Messages FL Timing Messages Project Properties
| @ Enable Enhanced Design sine F 1 Enable Message Fitering
C- Diplaylncremertal Messsages
[Enhanced Design Summary Contents
Trang 19Két qua m6 phong Entity shift_row : sé Slices 1a 0, sé Slice Flip Flops là 128
chiếm 1%, số IOBs 1a 258 chiếm 80 %
_^I J[ 35 FPGA Design Summary
eon Overview [shit_romise | +2) Summary ath Ỉ F Lii08 Propetties 7 FD Timing Constraints F BDPnoutRepot —[eck Repot | Etos and Warings Synthesis Messages LD Translation Messages [MapMessages [Place and Route Messages es = [TimmngMessages
SSeS qed Enable Enhanced Design Summ:
- Dl Enable Fier Number of Sices
No flow available [ee “C1 Display incremental Messsages ||] | Number ene earn epee of Sice Fip Flops 128 10944 s| 8| |8
the Di 2usssg Co | & Show Pattition Data Nưnber oí bonded I0Bs 28 380
© D0 Show Enors «|| | Number of GLK | 1 3 |
Két qua m6 phong Entity mix_column : sé Slices la 131 chiếm 2%, số LUTs là
244 chiém 2%, s6 IOBs 1a 258 chiếm 80% 1 [| FPGA Design Summary Sources for] Synthesis x] Number off LUTs IIH Z5Design Overview Hierarchy F Summary FS] mix_column i L108 Properties bị Ch xcdvix 2121668 & Li Timing Constraints L [N9 mix_column - top_aes_ATL (mix_columi| ff -~ (2) Pinout Report = L ~D) Clock Report Errors and Wamings Bone — thi2 |) Synthesis Messages 12:51:28 2010 fF D Translation Messages FL) Map Messages } LiPlace and Route Messages ‘No partition information was found + [Timing Messages sz Project Properties ^ Gg Sources Snapshots | [P) Libraties
21} Enable Enhanced Design Sum - |
Processes: +L Enable Message Fitering a |_ Available | UHmaian
FED Add Existing Source “1 Display Incremental Messsages Number of Slices 131 5472
Enhanced Design Summary Contents | Number of 4 input LUTs 244 | 10944
TD Create New Source
i + aa [EM ShowPartion Data T Nưnbet oí bondedI0B: is 28 320 W
YB Design Uiites LD Show Etrors Is sẽ ĩ
Ki 1 gIÌ T1 sewzreas jn dell [Member of SLs a
Trong đồ án cĩ sử dụng các hàm
BYTE_SUB thay thé phi tuyến mỗi byte trong biến state độ dai 128 bit ( 16byte)
thơng qua bảng thay thế (S-box)
SHIFT_ROW dịch chuyên xoay vịng từng địng của bién state MIX_COLUMN trộn thơng tin của từng cột trong biến state
Trang 20
ADD_ROUNDKEY cộng mã khĩa của chu kỳ vào biến state
INV_BYTE_SUB thay thé phi tuyén mdi byte trong bién state thơng qua bảng
thay thế(_ — )
INV_SHIFT_ROW dich chuyén xoay vong tig dong cua 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 SHIEFT_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
Entty INV_SHIFT ROW thực hiện bước Invshiftrow Entty 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 I package đề tiện cho việc ghép nối các entity sau nay Package
rijndael_package gém cac funtion và các kiêu dữ liệu lưu trữ trong thư viện Các Entity déu str dung use work.rijndael_package.all;
Sau khi khai bao cac funtion trong Package Rijndael tiép dén phan Packagebody gom cac funtion
Trang 21Thiế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
cach port map cdc chan vào ra, đầu ra của các entity liên kết với nhau , ví dụ đầu ra cua Entity sub_byte 1a đầ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
ISE - E:\ise\AES1\AES1 ise - [Simulation]
[iQ File Edit View Project Source Process Test Bench Simulation Window Help
inaNZ#ZjšlIx fA x| 2 œÍ 3Í © 32 »x @Í Bì [[2xjIse 5 m H2 MljđA iã[mee=xe0els xỈ|| 2 ef ar el | Hee SH oH Olle E) =5%| 45% % % 9 XỈ|[Í đế 4 222230 a 6b yšJn00 - Now: 675 ns 0ns 135 270ns 405 540ns : 1 tot i SL Ì L1 1 Ỉ LS 4 ! Mark 1 J l J | J l J L Sst 0 Qlen 0 3i 8X state[127:0] 128' (2800 128°:3243F6A8885A308D31 31 98A2E0370734 —————— - |:¿(.s(1:0 128' đ28n00 X 128112B7E151628AED2ABABF7158809CF4F3C 2] & Heataoutti 27:0) 129 ( 128hUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU: X5E0CB19! Š Fie Edit View Project Source Process TestBench Simulation Window Help
JnaHø[ưšilIx à đ x|ø2 &[B|J22 3» ®[ m[[Alla 3 m m2 w|laaậ[ ————— xi9
[ef Fa # % s % 3t|l@ @|lE s=[= 3> 5 >[ 4 34x x 9 XI † s3 223⁄X[Đua 6b gi]ốn š
xd
oe a Se secon lệ | At poy a Pa a |
IrEbmam— I tc 0 i
E- €]xc35200-4f256 ll} ast 0
al [ee ei ave Tia # @state[127:0] 128" 128'.193DE3BEADF4E2289ACB8D2AE9F84808
Bg Sources Ay ener #¡ 8€ b[127:0] 128 128D42711AEEOBF 98F 1B8B45DE51E415230
entity shift_row
Trang 22
Xilinw - ISE - E:\ise\shift_row\shift_row-.ise - [Simulation]
1G File Edit View Project Source Process Test Bench Simulation Window Help
Ja3NĐ#| 5| tà ä x[ø œ[ 8|J22 Ð 3 »x @[ Bì Í[Allle ä m mịI 2£ [law NE
lea a (ere eS Olle =l=2 = eel facra(2exx 0 Gr zo 7
ad
Bố censia BỊ eee ae = Nor i 200 400 ns 600 800 ns
Fait row “Mak 0
‡c35200-4ft256 - mm ast 0
[aH a) sf |] © Ketaters27:0) 12 128ID42711AEEDBF 98F 1BBB45DE51E415230,
Dunas [ | = QKdataouttt27:0) 128 QX_ 128HD4BFSD30E0B452AEB84i1IFIiE2/98E5 7
entity mix_column
[Foes tune aiid Coty [a File Edit View Project Source Process Test Bench Simulation Window Help JjaĐø [Š|Iw à đ x| 9 œ[ |2 © 3 »x #| R [[2Alllsa 5 m mỊ||2 Xe || lif í# 6 [@ 3t $% % 34|I@ @lllS =[= > 5s 3[4+ 3xx 9 x|l† |2 2x[Ø ‹ Sĩ > 5 |[r0 „ 2d Sources for| Behavioral =] Number of [UT= = AC00%T Now: 200 0 800 80 tens rs Ị ee LÍ Pye F Mok 0 | J | | Ê-C1xc%20040258 Uist 0
+ Sea eee) 8 8€stale[l2701_ 128 C 128HD4BF5D30EDB452AEBB4I1IFIIE2/88E5
BH TESET |2 8Xeaounzro, 129 @28nU,X 128n048881E5E0©B198A48F8D37A28082040
entity key_gen
IEixilinx - 1E - E:\ise\key_gen\key_gen.se - [Simulation]
1G File Edit View Project Source Process TestBench Simulation Window Help
Ja32Hø[ư|Jx Ð ä x[s œÍ [J2 © x #[ 8 JAjj s_n B2 w[laa a[—_— —— xjJjg| —-
Jorg Ga 26% 20119 Oll; Eg|=°35%|4s+4 +» 9Xili h5 22243, a6 00 : ee = ee peel pr B 44ns 66 88ns [IFElaen ĐWroundkey[12 128' (eno, 1282B7E151828AED2ABABF7158809CF4F3C Sexe j|] ® Kroungos) 2 Co X 1 al ESRI fa ti (SE Trị a # MK dataouti 27:0) 128° @2enU.X 128hA0FAFE1788542CB123A339392A6C7605 i Sources Snapshots |_[Ð Libraies entity inv_byte_sub
ES Xilinx - 1SE - E:\ise\int_byte_sub\int_byte_sub.ise - [Simulation]
[i File Edt View Project Source Process Test Bench Simulation Window Help
a Enea eee OOsneilaw Ao!
figd GRRE Ole S(SLEZlAAAH OMT ACA SHR Ow Gd zl -
Trang 23entity inv_shift_row
[iQ File Edit View Project Source Process Test Bench Simulation Window Help
toe ee ee ee ee eee ee OO) 2 |) OO i FI
[EZ Z2AAAH OBER CAZLEH OG Fito: Sources for| Behavioral] Number of [ LUT= ee la To ie ` ms ea 6= a6nni 666p T- ỂlÏinv_shữt ton Mak 0 Sr (3 xc3s200-41, 3t 0
& ie %@(sialell2701 128 428ND) 1281ID4BF5D30E0B452AEB84111F11E2788E5 aE ES # QC dataout{t27:0) 126' (2anuX 128hD42711AEEDBF 98F 188B45DE51E415230
entity inv_mix_column
[File Edit View Project Source Process Test Bench Simulation Window Help
JD3BZ[ưs[Jx tà â x[ø &[5iJ22 3» @[R[[Allle 3 miJ< w|l#@iã[ ——————5TIs (ir er fa [ESE SEE HO Oll= 2S2(444% Ow PACAP OX G Gd mịn Đ„ 24 x ze Now: Sources for] Behavioral _] Number of:] LUT =: 110ïns nine # đa 88 88ns pee ee Se FB Jinv_mix_column ek 0 E- £lxc3z200-4f256 Uist 0
& Fijieavhd © Mstatet27:0) 128' 428n0.X 17281046681 E5E0CB199A48F8D37A2806264C og 5 he & RK dataout{1 27:0) 128' đ28hU.X: 128hID4BF5D30E0B452AEB84111F11E2798E5
2.3 Kết luận
Ta da sir dung phan mém Xilinx ISE 8.2i để mơ phỏng được thuật tố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 bang S_box , da tiền hành đồng thới với 16 Byte dữ liệu - Tach qua trình sinh Key (Key Gen) doc 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 tồn thơng tin
Trang 24
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 dé 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ố luong I/O dau vao Co thé dé
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 đữ 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 ngồi để tiết kiệm khơng gian nhớ
Trong tương lai , cac van dé vé bao mat Key ma hoa cần được cân nhắc , ví dụ ,
tạo một phan cig dé lu Key dang 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 | chiều rất phổ biến hiện nay , với câu trúc khá đơn giản về mặt tốn học , AES đã được thẻ hiện đướ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 1Š 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 đê hồ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ở tốn học của thuật tốn , phân
Trang 25- 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
Trang 26Reference
1 http://vi.wikipedia.org/wiki/AES
2 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 3 www.fpgaworld.com
4 Bruce Schneier (1995), Applied Cryptography: Protocols,