Các khái niệm và ký hiệu Các khái niệm và định nghĩa được sử dụng để trình bày về chuẩn mã hóa cao cấp: Biến đổi Affine Phép biến đổi bao gồm phép nhân với ma trận sau đó là phép cộng c
Trang 1TRƯỜNG ĐẠI HỌC VINH
KHOA ĐIỆN TỬ - VIỄN THÔNG
ĐỒ ÁN
TỐT NGHIỆP ĐẠI HỌC
Đề tài:
XÂY DỰNG MÃ HÓA AES BẢO MẬT
THÔNG TIN TRÊN NỀN FPGA
Người hướng dẫn : ThS Nguyễn Anh Quỳnh Sinh viên thực hiện : Trần Văn Huân
Trang 2MỤC LỤC
CÁC TỪ VIẾT TẮT TRONG ĐỒ ÁN 4
DANH MỤC HÌNH VẼ 5
DANH MỤC BẢNG BIỂU 7
LỜI MỞ ĐẦU 8
Chương 1 Phương pháp mã hóa AES 1.1 Giới thiệu về chuẩn mã hóa nâng cao AES 10
1.2 Các khái niệm và định nghĩa 11
1.2.1 Các khái niệm và ký hiệu 11
1.2.2 Các hàm và các tham số của thuật toán AES 12
1.3 Một số khái niệm toán học AES 14
1.3.1 Phép cộng 14
1.3.2 Phép nhân 14
1.3.3 Đa thức với hệ số trên GF(2 ) 16
1.4 Quy trình mã hóa AES 17
1.4.1 Phép biến đổi SubBytes 20
1.4.2 Phép biến đổi ShiftRows 22
1.4.3.Phép biến đổi MixColumns 23
1.4.4 Thao tác AddRoundKey 24
1.4.5 Thuật toán sinh khóa (Key Expansion) 25
1.5 Quy trình giải mã AES 27
1.5.1 Phép biến đổi InvShifRows 28
1.5.2 Phép biến đổi InvSuBytes 28
1.5.3 Phép biến đổi InvMixColumns 30
1.5.4 Thuật toán giải mã tương đương 33
Trang 3Chương 2 TỔNG QUAN VỀ FPGA VÀ VHDL
2.1 Tổng quan về FPGA 33
2.2 Ứng dụng của FPGA 34
2.3 Kiến trúc FPGA 34
2.3.1 Kiến trúc của chíp FPGA 34
2.3.2 Đặc điểm hoạt động của FPGA 37
2.4 Thiết kế và lập trình FPGA 40
2.4.1 Thiết kế sử dụng sơ đồ 41
2.4.2 Sử dụng ngôn ngữ HDL 43
2.5 Virtex-4 LC System Board 44
2.5.1 Giới thiệu chung 44
2.5.2 Các chức năng của bo phát triển 46
Chương 3 MÃ HÓA AES TRÊN NỀN FPGA 3.1 Sơ đồ tổng quan của hệ thống AES 50
3.1.1 Mô tả lưu đồ tổng quát của bộ mã hóa và giải mã AES 50
3.1.2 Sơ đồ thuật toán khối Data của bộ mã hóa 51
3.1.3 Sơ đồ thuật toán của khối KeyExpansion 52
3.1.4 Sơ đồ thuật toán khối CPU 53
3.1.5 Sơ đồ thuật toán khối Data của bộ giải mã AES 53
3.2 Thiết kế chi tiết các khối chức năng của bộ mã hóa 54
3.2.1 Khối AddRoundKey 54
3.2.2 Khối SubByte 56
3.2.3 Khối ShiftRow 56
3.2.4 Khối MixColumn 58
3.3 Thiết kế các khối chức năng của bộ giải mã 60
Trang 43.3.1 Nhân với 09h 61
3.3.2 Phép nhân với 0Bh 61
3.3.2 Phép nhân với 0Dh 61
3.3.3 Phép nhân với 0Eh 62
3.4 Thiết kế chi tiết cho khối KeyExpansion 63
3.4.1 Khối RotWord 63
3.4.2 Khối SubWord 64
3.4.3 Khối Rcon 64
3.4.4 Khối KeyStorage 65
3.4.5 Khối DemuxKey 66
3.5 Khối diều khiển bộ giải mã và bộ giao tiếp với máy tính 67
3.5.1 Khối CPU - điều khiển bộ giải mã 67
3.5.2 Khối giao tiếp với máy tính 69
KẾT LUẬN 71
TÀI LIỆU THAM KHẢO 73
Trang 5
CÁC TỪ VIẾT TẮT TRONG ĐỒ ÁN
Từ viết tắt Nghĩa tiếng Anh Nghĩa tiếng Việt
FPGA Field Programmable Gates Array Mảng cổng lập trình
được dạng trường
ASIC Application Specific Integrated
Circuit
Vi mạch tích hợpchuyên dụngCPLD Complex Programmable Logic
Device
Linh kiện (thiết bị)lôgic phức hợp có thể
lập trình
AES Advanced Encryption Standard
SRAM Static Random Memory Access Ram tĩnh
HDL Hardware Description Language Ngôn ngữ mô tả phần
Circuits Các mạch tích hợp tốc
độ cao
PLD Programmable Logic Device
GPIO General Purpose IO Các chân vào ra thông
DES Data Encryption Standard
Tiêu chuẩn mã hóa dữ
liệu
Trang 6DANH MỤC HÌNH VẼ
Hình 1.1 Các trạng thái của AES 18
Hình 1.2 Thao tác SubBytes tác động trên từng byte của trạng thái 21
Hình 1.3 Thao tác ShiftRows tác động trên từng dòng của trạng thái 22
Hình 1.4 Hàm ShiffRows() 23
Hình 1.5 Thao tác MixColumns tác động lên mỗi cột của trạng thái 24
Hình 1.6 Thao tác AddRoundKey tác động lên mỗi cột của trạng thái 25
Hình 1.7 SubWord 26
Hình 1.8 RotWord 26
Hình 1.9 Thao tác InvShiftRows tác động lên từng dòng của trạng thái hiện hành 28
Hình 2.1 Kiến trúc FPGA 29
Hình 2.2 Logic block 35
Hình 2.3 Vị trí các chân của Logic block 36
Hình 2.4 Kết nối các khối logic 37
Hình 2.5 Kết nỗi các khối logic với các chân I/O của FPGA 38
Hình 2.6 Các đường kết nối chuyên dụng tốc dộ cao 38
Hình 2.7 FPGA kết hợp với RAM trong 39
Hình 2.8 RAM hai cổng 39
Hình 2.9 Quá trình thiết kế PLD 42
Hình 2.10 Thiết kế bộ nhân sử dụng Sơ đồ và ngôn ngữ VHDL 43
Hình 2.11 Bo mạch Virtex-4 LC 46
Hình 2.12 Sơ đồ khối chức năng của Virtex-4 LC 47
Hình 2.13 Cổng cấu hình và nạp chương trình cho Virtex-4 47
Hình 2.14 Giao tiếp giữa Virtex-4 và cổng RS232 49
Hình 3.1 Sơ đồ khối tổng quát hệ thống AES 50
Hình 3.2 Sơ đồ thuật toán Khối data của bộ mã hóa 51
Hình 3.3 Sơ đồ thuật toán Khối KeyExpansion 52
Trang 7Hình 3.4 Sơ đồ thuật toán khối CPU 53
Hình 3.5 Sơ đồ thuật toán khối giải mã - Dạng 1 54
Hình 3.6 Khối AddRoundKey 55
Hình 3.7 Sơ đồ thuật toán khối giải mã - Dạng 2 55
Hình 3.8 Khối SubByte 56
Hình 3.9 Khối ShiftRow 57
Hình 3.10 Khối MixColumn 58
Hình 3.11 Khối Xtime 59
Hình 3.12 Phép biến đổi theo dòng 60
Hình 3.13 Khối SubMixColumn 61
Hình 3.14 Khối nhân 09h 61
Hình 3.15 Khối nhân 0Bh 62
Hình 3.16 Khối nhân 0Dh 62
Hình 3.17 Phép nhân 0Eh 63
Hình 3.18 Khối InverseMixColumn 63
Hình 3.19 Sơ đồ khối KeyExPansion 63
Hình 3.20 Khối RotWord 64
Hình 3.21 Khối SubWord 65
Hình 3.22 Khối Rcon 66
Hình 3.23 Khối KeyStorage 66
Hình 3.24 Khối DemuxKey 67
Hình 3.25 Khối CPU 67
Hình 3.26 Giản đồ thời gian điều khiển vòng key 68
Hình 3.27 Giản đồ thời gian điều khiển vòng data 68
Hình 3.28 Sơ đồ khối giao tiếp với máy tính 70
Trang 8DANH MỤC BẢNG BIỂU
Bảng 1.1 Quy ước một số từ viết tắt và thuật ngữ của AES 12
Bảng 1.2 Các hàm, ký hiệu và các tham số của thuật toán AES 13
Bảng 1.3 Bảng độ dài khóa của AES 19
Bảng 1.4 Bảng thế S-Box của AES 22
Bảng 1.5 Bảng thế cho hàm InvSByte 29
Bảng 2.1 Sơ đồ chân LED 48
Bảng 2.2 Sơ đồ phím bấm 48
Bảng 2.3 Sơ đồ công tắc 48
Bảng 2.4 Giao tiếp với RS232 48
Bảng 2.5 Màn hình LCD 49
Trang 9LỜI MỞ ĐẦU
Ngày nay, các ứng dụng mã hóa và bảo mật thông tin đang được sửdụng ngày càng phổ biến trong các lĩnh vực khác nhau trên thế giới, từ các lĩnhvực an ninh, quân sự, quốc phòng cho đến các lĩnh vực dân sự như thương mạiđiện tử, ngân hàng… Với sự phát triển ngày càng nhanh chóng của Internet vàcác ứng dụng giao dịch điện tử trên mạng, nhu cầu bảo vệ thông tin trong các hệthống và ứng dụng điện tử ngày càng được quan tâm và có ý nghĩa hết sức quantrọng Các ứng dụng mã hóa thông tin cá nhân, trao đổi thông tin kinh doanh,thực hiện các giao dịch điện tử qua mạng đã trở nên gần gũi và quen thuộc vớimọi người Cùng với sự phát triển của khoa học máy tính và Internet, các nghiêncứu và ứng dụng của các chuẩn mã hóa ngày càng trở nên đa dạng hơn, Có rấtnhiều chuẩn mã hóa đang được áp dụng trên thế giới như RSA, SHA, RC4/RC5,DES, Triple-DES, và nhìn chung các chuẩn mã hóa chỉ có hiệu lực trong mộtkhoảng thời gian nhất định Chuẩn mã hóa AES được viện tiêu chuẩn công nghệQuốc gia Hoa Kì NIST thông qua năm 2001 để thay thế cho DES có nguy cơ bịsụp đổ Công nghệ mã hóa có thể được thực hiện trên phần mềm, trên phần cứnghoặc kết hợp cả phần cứng và phần mềm Các bộ mã hóa thực hiện trên phầncứng có khả năng chống tấn công cao hơn so với phần mềm do đó nó ngày càngtrở nên phổ biến trên thế giới Mục đích của đồ án là sử dụng vi mạch khả trìnhFPGA để thực thi bộ mã hóa tiêu chuẩn nâng cao AES FPGA được ứng dụngđiển hình trong các lĩnh vực như: xử lý tín hiệu số, xử lý ảnh, thị giác máy, nhậndạng giọng nói, mã hóa, mô phỏng (emulation)
Nội dung đồ án bao gồm 3 chương:
Chương 1 Chuẩn mã hóa nâng cao AES
Chương 2 Tổng quan về FPGA và VHDL
Trang 10 Chương 3 Mã hóa AES trên nền FPGA
FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến trúc của
nó yêu cầu một lượng rất lớn xử lý song song, đặc biết là mã hóa và giải mã.FPGA là một công nghệ ngày càng được phát triển trong khắp các lĩnh vực côngnghệ do các ưu điểm nổi trội của nó mang lại
Em xin chân thành cảm ơn thầy giáo Th.s Nguyễn Anh Quỳnh đã giúp
đỡ em tận tình trong quá trình thực hiện đồ án này
Vinh, tháng 1 năm 2012 Trần Văn Huân
Trang 11
Chương 1 CHUẨN MÃ HÓA NÂNG CAO AES 1.1 Giới thiệu về chuẩn mã hóa nâng cao AES
Chuẩn mã hóa dữ liệu cao cấp AES (Advanced Encryption Standard) làmột hệ mã khóa bị mật có tên là Rijdael (do hai nhà mật mã học người Bỉ làJoan Daemen và Vincent Rijmen đưa ra và trở thành chuẩn từ năm 2002) chophép xử lý các khối dữ liệu input có kích thước 128 bit sử dụng các khóa có độdài 128, 192 hoặc 256 bit Hệ mã Rijdael được thiết kế để có thể làm việc vớicác khóa và các khối dữ liệu có độ dài lớn hơn tuy nhiên khi được chọn là mộtchuẩn do Ủy ban tiêu chuẩn của Hoa Kỳ đưa ra năm 2001, nó được qui định chỉlàm việc với các khối dữ liệu 128 bit và các khóa có độ dài 128, 192 hoặc 256bit (do đó còn đặt cho các tên AES-128, AES-192, AES-256 tương ứng với độdài khóa sử dụng) Chuẩn AES bao gồm các yêu cầu sau:
Thuật toán mã hóa theo khối 128 bit
Chiều dài khóa 128 bit, 192 bit và 256 bit
Không có khóa yếu
Hiệu quả trên hệ thống Intel Pentium Pro và trên các nền phần cứng vàphần mềm khác
Thiết kế dễ dàng (hỗ trợ chiều dài khóa linh hoạt, có thể triển khai ứngdụng rộng rãi trên các nền và các ứng dụng khác nhau)
Thiết kế đơn giản: phân tích đánh giá và cài đặt dễ dàng
Chấp nhận bất kỳ chiều dài khóa lên đến 256 bit
Mã hóa dữ liệu thấp hơn 500 chu kỳ đồng hồ cho mỗi khối trênIntel Pentium, Pentium Pro và Pentium II đối với phiên bản tối ưu củathuật toán
Có khả năng thiết lập khóa 128 bit (cho tốc độ mã hóa tối ưu) nhỏ hơnthời gian đòi hỏi để mã hóa các khối 32 bit trên Pentium, Pentium Pro vàPentium II
Trang 12 Không chứa bất kỳ phép toán nào làm nó giảm khả năng trên các bộ vi xử
lý 8 bit, 16 bit, 32 bit và 64 bit
Không bao hàm bất kỳ phần tử nào làm nó giảm khả năng của phần cứng
Thời gian mã hóa dữ liệu rất thấp dưới 10/1000 giây trên bộ vi xử lý 8 bit
Có thể thực hiện trên bộ vi xử lý 8 bit với 64 byte bộ nhớ RAM
1.2 Các khái niệm và định nghĩa
1.2.1 Các khái niệm và ký hiệu
Các khái niệm và định nghĩa được sử dụng để trình bày về chuẩn mã hóa cao cấp:
Biến đổi Affine Phép biến đổi bao gồm phép nhân với ma trận sau
đó là phép cộng của một vectơBit Một số nhị phân nhận giá trị 0 hoặc 1
Block Một dãy các bit nhị phân tạo thành input, output,
trạng thái (state) và các khóa sử dụng tại các vòng lặp (Round Key) của hệ mã Độ dài của dãy (khối)
là số lượng các bit mà nó chứa Các khối cũng có thể được xem là một dãy các byte
Cipher key Khóa của hệ mã, có thể được biểu diễn dưới dạng
một mảng 2 chiều gồm 4 hàng và Nk cột
Inverse Cipher Thuật toán giải mã
Thủ tục sinh khóa (key
Expansion)
Thủ tục được sử dụng để sinh ra các khóa sử dụng tại các vòng lặp của thuật toán mã hóa, giải mã từ khóa chính ban đầu
Round Key Là các giá trị sinh ra từ khóa chính bằng cách sử
dụng thủ tục sinh khóa Các khóa này được sử dụng tại các vòng lặp của thuật toán
Trạng thái (state) Các giá trị mã trung gian có thể biều diễn dưới dạng
một mảng 2 chiều gồm 4 hàng và Nb cộtS-box Một bảng phi tuyến được sử dụng trong thủ tục sinh
Trang 13khóa và trong các biến đổi thay thế các byte để thực hiện các thay thế 1-1 đối với một giá trị 1 byte
Word Một nhóm 32 bit có thể được xem như 1 đơn vị tính
toán độc lập hoặc là một mảng 4 byteBảng 1.1 Quy ước một số từ viết tắt và thuật ngữ của AES
1.2.2 Các hàm và các tham số của thuật toán AES
Các tham số thuật toán, các ký hiệu và các hàm sử dụng trong mô tả thuật toán :
AddRoundkey() Hàm biến đổi được sử dụng trong thuật toán mã hóa và giải
mã trong đó thực hiện phép toán XOR bit giữa một trạng tháitrung gian (state) và một khóa của vòng lặp (Round key) Kích thước của một Round key bằng kích thước của trạng thái (chẳng hạn với Nb = 4 độ dài của một Round Key sẽ là
128 bit hay 16 byte)InvMixcolumns() Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm
ngược của hàm MixColumns()InvShiftRows() Hàm biến đổi trong thuật toán giải mã, là hàm ngược của
hàm ShiftRows()InvSubBytes() Hàm biến đổi trong thuật toán giải mã, là hàm ngược của
hàm SubBytes()
MixColumns() Hàm biến đổi trong thuật toán mã hóa nhận tất cả các cột của
một trạng thái (state) và trộn với dữ liệu của nó (không phụ thuộc lẫn nhau) để nhận được một cột mới
Nb Số lượng các cột (là các Word 32 bit) tạo thành một trạng
thái, Nb = 4
Nk Số lượng các word 32 bit tạo thành khóa mã hóa K (Nk và
Nb (là các giá trị cố định) (Nr = 10, 12 hoặc 14 tương ứng với các giá trị khác nhau của Nk)
Rcon[] Mảng Word hằng số sử dụng trong các vòng lặp
RotWord() Hàm sử dụng trong thủ tục sinh khóa nhận một word 4 –
Trang 14byte và thực hiện một hoán vị vòngShiftRows() Hàm sử dụng trong quá trình mã hóa, xử lý các trạng thái
bằng cách dịch vòng ba hàng cuối của trạng thái với số lần dịch khác nhau
SubBytes() Hàm sử dụng trong quá trình mã hóa, xử lý các trạng thái
bằng cách sử dụng một bảng thế phi tuyến các byte (S-box) thao tác trên mỗi byte một cách độc lập
Subword() Hàm sử dụng trong thủ tục sinh khóa nhận một word input
4-byte và sử dụng một S–box trên mỗi giá trị 4-4-byte này để thuđược 1 word output
XOR Phép toán or bit tuyệt đối
⊕ Phép or bit tuyện đối
⊗ Phép nhân hai đa thức (mỗi đa thức có bậc < 4) modulo cho
đa thức ( x +1)
Phép nhân trên trường hữu hạn
Bảng 1.2 Các hàm, ký hiệu và các tham số của thuật toán AES
1.3 Một số khái niệm toán học
Đơn vị thông tin được xử lý trong thuật toán AES là byte Mỗi bytexem như một phần tử của trường Galois GF(2) được trang bị phép cộng (ký hiệu
⊕) và phép nhân (ký hiệu •) Mỗi byte có thể được biểu diễn bằng nhiềucách khác nhau: dạng nhị phân (b b b b b b b b), dạng thập lục phân (hh) hay
dạng đa thức có các hệ số nhị phân b x
1.3.1 Phép cộng
Phép cộng hai phần tử trên GF(2) được thực hiện bằng cách “cộng” (thựcchất là phép toán XOR, ký hiệu ⊕) các hệ số của các đơn thức đồng dạng củahai đa thức tương ứng với hai toán hạng đang xét Như vậy, phép cộng và phéptrừ hai phần tử bất kỳ trên GF(2 ) là hoàn toàn tương đương nhau Nếu biểu diễn
Trang 15lại các phần tử thuộc GF(2 ) dưới hình thức nhị phân thì phép cộng giữa {a a a a
a a a a }với{ b b bb b b b b } là {c c c c c c c c } với c = a b, 0≤ i ≤ 7
Ví dụ : ‘57’+‘83’ = “01010111”"10000011” = “11010100” = ‘D4’.1.3.2 Phép nhân
Khi xét trong biểu diễn đa thức, phép nhân trên GF(2 ) (ký hiệu •) tươngứng với phép nhân thông thường của hai đa thức đem chia lấy dư (modulo) chomột đa thức tối giản bậc 8 Đa thức được gọi là tối giản khi và chỉ khi đa thứcnày chỉ chia hết cho 1 và chính mình Đa thức tối giản được chọn là :
Trang 16là xtime() Phép nhân với các lũy thừa của x có thể được thực hiện bằng cách ápdụng nhiều lần thao tác xtime() Kết quả của phép nhân với một giá trị bất kỳđược xác định bằng cách cộng () các kết quả trung gian này lại với nhau Khi
đó, việc thực hiện phép nhân giữa hai phần tử a, b bất kỳ thuộc GF(2 ) có thểđược tiến hành theo các bước sau:
1 Phân tích một phần tử (giả sử là a) ra thành tổng của các lũy thừa của 2
2 Tính tổng các kết quả trung gian của phép nhân giữa phần tử còn lại (là b)với các thành phần là lũy thừa của 2 được phân tích từ a
nhau: a( x ) + b( x ) = (a b ) x
Trang 17Phép nhân giữa a(x) với b(x) được thực hiện thông qua hai bước Trước tiên,
thực hiện phép nhân thông thường c(x) = a( x )b( x ).
c( x ) = c x +c x +c x +c x +c x +c x +c
Với c = a • b c = a • ba •b c =a•b a•ba•b
c= a• ba •b a•ba•b c = a•b a •b a •b
c = a •ba•b c = a •b
Rõ ràng là c( x ) không thể được biểu diễn bằng một từ gồm 4 byte Đa thức c( x ) có thể được đưa về một đa thức có bậc nhỏ hơn 4 bằng cách lấy c(x) modulo cho một đa thức bậc 4 Đa thức bậc 4 được chọn là M( x ) = x +1 Do x mod( x +1) = x nên kết quả d(x) = a( x )b( x ) được xác định bằng d( x ) = d x +d x +d x +d
Với d = a •b a•ba •b a•b
d = a•b a •ba•b a •b d = a •b a•ba •b a •b d = a•b a•ba•b a •b
Trong trường hợp đa thức a( x ) cố định, phép nhân d(x) = a( x )b( x ) có thể được biểu diễn dưới dạng ma trận như sau
3 2 1 0 d d d d = 0 1 2 3 3 0 1 2 2 3 0 1 1 2 3 0 a a a a a a a a a a a a a a a a 3 2 1 0 b b b b
Phép nhân với x Xét đa thức b( x ) = b x +b x +b x +b
Kết quả của phép nhân c(x) = b( x ) x được xác định bằng
c( x )= b x +b x +b x +b
Phép nhân với x tương đương với phép nhân ở dạng ma trận như đã trình bày ở phần trên với các giá trị a= a = a = {00} và a = {01}
3 2 1 0 c c c c = 1 00 01 00 00 00 00 01 00 00 00 00 01 01 00 00 00 b b
Trang 18Như vậy, phép nhân với x hay các lũy thừa của x sẽ tương ứng với phép dịch
chuyển xoay vòng các byte thành phần trong một từ Trong thuật toán AES cần
sử dụng đến đa thức x (a = a = a ={00}và a ={01}) trong hàm RotWord nhằm
xoay vòng 4 byte thành phần của một từ được đưa vào Như vậy, nếu đưa vào
từ gồm 4 byte [b , b , b , b ] thì kết quả nhận được là từ gồm 4 byte [b , b , b , b]
1.4 Quy trình mã hóa AES
Phương pháp mã hóa AES bao gồm nhiều bước biến đổi được thực hiệntuầ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ếptheo 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 hàng cácbyte với Nb bằng với độ dài của khối block chia cho 32 Mảng trạng thái ký
hiệu là s trong đó mỗi byte của mảng có 2 chỉ số hàng r (0 < r < 4 ) và cột c (0 <
c < Nb ) Với thuật toán AES thì độ dài của input block, output block và State là
128 bit Nên Nb = 4 (đây chính là số cột – số từ 32 bit) trong State Mã khóachí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
Tại thời điểm bắt đầu input của thuật toán mảng các byte in, in,…in đượccopy vào mảng trạng thái theo qui tắc được minh họa bằng hình vẽ:
s s0,1 s0,2 s0,3
0 , 1
s s1,1 s1,2 s1,3
0 , 2
s s2,1 s2,2 s2,3
0 ,
3
s s3 , 1 s3,2 s3,3
Trang 19State sang đầu ra out[r + 4c] = s[r, c] với 0 r 4 à 0v c Nb
Với thuật toán AES thì độ dài của input block, output block và State là 128 bit
Do đó Nb = 4 (đây chính là số cột – số từ 32 bit) trong State Theo chuẩn AES,
độ dài của từ khóa K có thể là 128, 192,hoặc 256 bit Độ dài của Key tương ứng
là Nk = 4,6, hoặc 8 ( chính số cột của từ khóa ), số vòng thực hiện mã hóa dữ liệu
của thuật toán sẽ phụ thuộc vào độ lớn của từ khóa Số vòng quay kí hiệu là Nr, với Nr = 10 khi Nk = 4, Nr = 12 khi Nk = 6, và Nr = 14 khi Nk = 8 Ta có
bảng độ dài khóa của AES
Key Length
(Nk words)
Block Size
(Nb words)
Number ofRounds
Trang 20cũ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 vòng cuối cùng có một sựkhác biệt so với các vòng trên đó là không thực hiện MixColumns() 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 đượ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ỳ
Trang 21AddRoundKey() Vòng cuối cùng, bộ mã hóa chỉ thực hiện SubBytes(),ShiftRows() và AddRoundKey() mà không thực hiện MixColumns().
1.4.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 hai bước:
1 Xác định phần tử nghịch đảo x ∈ GF(2 ) Quy ước {00} = {00}.
2 Áp dụng phép biến đổi affine (trên GF(2)) đối với x (giả sử x có biểu diễn nhị phân là { x x x x x x x x }):
1 1 1 1 1 0 0 0
0 1 1 1 1 1 0 0
1 0 0 0 1 1 1 1
1 1 0 0 0 1 1 1
1 1 1 0 0 0 1 1
1 1 1 1 0 0 0 1
7 5 3 0
7 5 3 1
x x x x
y y y y
Hay y = x x xx x c
với c là bit thứ i của {63}, 0 ≤ i ≤ 7
Hình 1.2 Thao tác SubBytes tác động trên từng byte của trạng thái
Tuy nhiên việc tính toán subbyte với các phép biến đổi nói trên là rất phức tạpkhi thực hiện trên phần cứng Người ta đã chứng minh được rằng phép biến đổiSubbyte là khả nghịch có nghĩa là: Với một byte A cho trước tồn tại một và chỉ
Trang 22một byte Y thỏa mãn B = subbyte(A) Do đó người ta đã đưa ra phương phápánh xạ đầu vào của phép biến đổi subbyte qua một bảng S-box (xây dựng theocác phép biến đổi trên) để tìm đầu ra Hình 1.2 thể hiện bảng thay thế S-boxđược sử dụng trong phép biến đổi SubBytes ở dạng thập lục phân.
Ví dụ: nếu giá trị {xy} 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 của Bảng Như vậy,S-box ({xy}) = {ed}
Bảng 1.4 Bảng thế S-Box của AES
1.4.2 Phép biến đổi ShiftRows
Hình 1.3 Thao tác ShiftRows tác động trên từng dòng của trạng thái
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 S tại dòng r cột c sẽ dịchchuyển đến cột (c - shift(r, Nb)) mod Nb hay:
Trang 23S,r,c= S
Thao tác này sẽ chuyển các byte tới các vị trí thấp hơn trong các hàng, trong khibyte thấp nhất sẽ được chuyển lên đầu hàng Giá trị di số shift(r, Nb) phụ thuộcvào chỉ số dòng r khối dữ liệu Tất các mô tả có thể minh họa qua hình dưới
Hình 1.4 Hàm ShiffRows()
1.4.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(2 ) Thực hiện phép
c c c c
s s s s
s s s s
, 3 , 2 , 1 , 0
, 3 , 2 , 1 , 0 ,
02 01 01 03
03 02 01 01
01 03 02 01
01 01 03 02
Trang 24
Hình 1.5 Thao tác MixColumns tác động lên mỗi cột của trạng thái
1.4.4 Thao tác AddRoundKey
Thuật toán AES 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à Nbcộ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óacủa chu kỳ đang xét:
s,0 ,c,s,1 ,c,s,2 ,c,s,3 ,c s0c,s1,c,s2,c,s3,cw round*Nbc với 0 c < Nb Trong đó [w] là các word của khóa và round là lần lặp tương ứng với qui ước 0
≤ round ≤ N Trong thuật toán mã hóa phép cộng khóa vòng khởi tạo xảy ra vớiround = 0 trước khi các vòng lặp của thuật toán được thực hiện HàmAddRoundKey() được thực hiện trong thuật toán mã hóa khi 1≤ round≤N Việcthực hiện của hàm này có thể minh họa hình vẽ trong đó l = round*Nb Thao tácbiến đổi ngược của AddRoundKey cũng chính là thao tác AddRoundKey
Trang 25Hình 1.6 Thao tác AddRoundKey tác động lên mỗi cột của trạng thái
1.4.5 Thuật toán sinh khóa (Key Expansion)
Thuật toán sinh khóa của AES nhận một khóa mã K sao đó thực hiện mộtthủ tục sinh khóa để sinh một dãy các khóa cho việc mã hóa Thủ tục sẽ sinhtổng số Nb*(Nr + 1) word, thủ tục sử dụng một tập hợp khởi tạo Nb word vàmỗi một lần lặp lại trong số Nr lần sẽ cần tới word của dữ liệu khóa Dãy khóakết quả là một mảng tuyến tính các word 4- byte được ký hiệu là [w] trong đó 0≤
i < Nb(Nr +1) Sự mở rộng khóa thành được mô tả qua đoạn mã sau:
KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)
temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]
else if (Nk > 6 and i mod Nk = 4)
temp = SubWord(temp)end if
w[i] = w[i-Nk] xor temp
i = i + 1
Trang 26end while
end
Subword là một hàm nhận input 4 - byte áp dụng bảng thế s - box lên input đểnhận được một word output Thực hiện thế byte bằng bảng S-box đối với cácbyte trong từ ( Phép biến đổi này tương tự SubByte( ) )
diễn dưới dạng {02} trên GF(2) và bắt đầu từ 1)
Theo đoạn mã trên chúng ta có thể nhận thấy rằng Nk word của khóa kết quả sẽđược điền khóa mã hóa Các word sau đó w[i] sẽ bằng XOR với word đứngtrước nó w[i - 1] với w[i - Nk] Với các word ở vị trí cho Nk một biến sẽ đượcthực hiện với w[i - 1] trước khi thực hiện phép XOR bit, sau đó là phép XORvới một hằng số Rcon[i] Biến đổi này gồm một phép dịch vòng các byte củamột word (RotWord(), sau đó là áp dụng một bảng tra lên tất cả 4 byte của wordSubWord()
Trang 27Trên đây là các phép biến đổi cho quá trình mã hóa, tiếp theo ta sẽ xem xétcác phép biến đổi sử dụng trong quá trình giải mã Đó là các phép biến đổi:InverseSubByte(), InverseShiftRows(), InverseMixCoulums(), AddRoundKey()
1 5 Quy trình mã hóa
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 trước khi thực hiện các chu kỳgiải mã
2 Nr − 1 chu kỳ giải mã bình thường: mỗi chu kỳ bao gồm bốn biến đổi liêntiếp nhau: InvShiftRows, InvSubBtes, 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
Đoạn mã cho thuật toán giải mã như sau:
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
Trang 281.5.1 Phép biến đổi InvShifRows
Hình 1.9 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 đổiShiftRows Dòng đầu tiên của trạng thái sẽ vẫn được giữ nguyên, ba dòng cuốicủ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 Các byte ở cuối dòngđược đưa vòng lên đầu dòng trong khi các byte còn lại có khuynh hướng dichuyển về cuối dòng
c r
s Nb Nb
1.5.2 Phép biến đổi InvSuBytes
Phép biến đổi ngược của thao tác SubBytes, ký hiệu là InvSubBytes, sửdụng bảng thay thế nghịch đảo của S-box trên GF(2 ), ký hiệu là S-box Quátrình thay thế 1 byte y dựa vào S- box bao gồm hai bước sau:
1 Áp dụng phép biến đổi affine (trên GF(2)) sau đối với y (có biểu diễn nhị phân là {y y y y y y y y }) :
0 1 0 1 0 0 1 0
0 0 1 0 1 0 0 1
1 0 0 1 0 1 0 0
0 1 0 0 1 0 1 0
0 0 1 0 0 1 0 1
1 0 0 1 0 0 1 0
0 1 0 0 1 0 0 1
1 0 1 0 0 1 0 0
7 5 3 1 7
5 3 1
y y y y x
x x x
Hay
x = y y (i+5)mod8 y d , với d là bit thứ i của giá trị {05},0 ≤ i ≤ 7
Trang 29Rõ ràng đây chính là phép biến đổi affine ngược của phép biến đổi affine ởbước 1 của S-box.
1 Gọi x là phần tử thuộc GF(2 ) có biểu diễn nhị phân là { x x x x x x x
x } Xác định phần tử nghịch đảo x ∈ GF(2 ) với quy ước {00}= {00}
Bảng thể hiện bảng thay thế nghịch đảo được sử dụng trong phép biến đổiInvSubBytes
Bảng 1.5 Bảng thế cho hàm InvSBytes
1.5.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(2 ) và được nhân với đa thức a ( x ) là nghịch đảo của đa thức a( x ) (modulo M( x )) được sử dụng trong phép biến đổi MixColumns
a ( x ) = {0b} x + {0d} x + {09} x + {0e}
) ( ) (
c c c c
s s s s
e d b
b e d
d b e d b e
s s s s
, 3 2 , 1 0
, 3 , 2 , 1 , 0 ,
0 09 0 0
0 0 09 0
0 0 0 09
09 0 0 0
với 0 ≤ c < Nb
Trang 30Kết quả là bốn byte trong mỗi cột sẽ được thay thế theo công thức sau:
b s
e s
s,1 ,c({09} 0,c)({0 } 1,c)({0 } 2,c)({0 } 3,c)
s b s
e s
s b
s,2 ,c ({ 0 } 0,c) ({ 09 } 1,c ({ 0 } 2,c) ({ 0 } 3,c)
) } 0 ({
) } 09 ({
) } 0 ({
) }
c c
1.5.4 Thuật toán giải mã tương đương
Trong thuật toán giải mã được trình bày ở trên chúng ta thấy thự tự củacác hàm biến đổi được áp dụng khác so với thuật toán mã hóa trong khi dạngcủa danh sách khóa cho cả 2 thuật toán vẫn giữ nguyên Tuy vậy một số đặcđiểm của AES cho phép chúng ta có một thuật toán giải mã tương đương có thự
tự áp dụng các hàm biến đổi giống với thuật toán mã hóa (tất nhiên là thay thếcác biến đổi bằng các hàm ngược của chúng) Điều này đạt được bằng cách thayđổi danh sách khóa Hai thuộc tính sau cho chúng ta một thuật toán giải mãtương đương:
1. Các hàm SuBytes() và ShitRows() hoán đổi cho nhau: có nghĩa là mộtphép biến đổi SubByte theo sau bởi điến đổi ShiftRows() tương đương với mộtbiến đổi ShiftRows() theo sau bởi một biến đổi SubByte() Điều này cũng đúngvới các hàm ngược của chúng
2. Các hàm trộn cột InvMixColumns và MixColumns() là các hàm tuyếntính đối với các cột input có nghĩa là:
InvMixcolumns( state XOR Round Key) = InvMixColumns(state) XOR
InvMixColumns(Round Key)
Các đặc điểm này cho phép thứ tự của các hàm InvSubBytes() và InvShiftRows()
có thể đổi cho Thứ tự của các hàm AddRoundKy() và InvMixColumns() cũng cóthể đổi chổ miễn là các cột của danh sách khóa giải mã phải được thay đổi bằngcách sử dụng hàm InvMixColumns()
Thuật toán giải mã tương đương được thực hiện bằng cách đảo ngược thứ thựcủa hàm InvSubBytes() và InvShifRows(), và thay đổi thứ tự của hàmAddRoundKey() và InvMixColumns() trong các lần lặp sau khi thay đổi cho giá trị
Trang 31round = 1 to N - 1 bằng cách sử dụng biến đổi invMixcoulumns() Các word đầutiên và cuối cùng của danh sách khóa không bị thay đổi khi ta áp dụng phường phápnày Thuật toán giải mã tương đương cho một cấu trúc hiệu quả hơn so với thuậttoán giải mã trước đó
Đoạn giải mã như sau:
EqInvCipher(byte in[4*Nb], byte out[4*Nb], word dw[Nb*(Nr+1)])
Trang 32
Chương 2 TỔNG QUÁT VỀ FPGA VÀ VHDL 2.1 TỔNG QUÁT về FPGA
FPGA (Field Programable Gate Arrays) là một thiết bị bán dẫn bao gồm cáckhối logic lập trình được gọi là "Logic Block", và các kết nối khả trình Các khốilogic có thể được lập trình để thực hiện các chức năng của các khối logic cơ bảnnhư AND, XOR, NOT, OR hoặc các chức năng kết hợp phức tạp hơn nhưdecoder hoặc các phép tính toán học Trong hầu hết các kiến trúc FPGA, cáckhối logic cũng bao gồm cả các phần tử nhớ Đó có thể là các Flip-Flop hoặcnhững bộ nhớ hoàn chỉnh hơn Các kết nối khả trình cho phép các khối logic có
Trang 33thể nối với nhau theo thiết kế của người xây dựng hệ thống, giống như một bảngmạch khả trình
Một kiến trúc khác tương tự nhưng đơn giản hơn FPGA là CPLD( Complex Programable Logic Device) Thực chất đây là tiền thân của FPGA.Năm 1984, Ross Freeman, một đồng sáng lập của Xilinx đã phát minh ra FPGA.FPGA và CPLC đều bao gồm một số lượng khá lớn các phần tử logic khả trình.Mật độ cổng logic (Logic Gate) của CPLD nằm trong khoản từ vài nghìn chođến 10 nghìn cổng Trong khi đó FPGA thông thường chứa từ 10 nghìn chođến vài triệu cổng Khác biệt cơ bản giữa FPGA và CPLD là ở kiến trúc củachúng CPLD có một kiến trúc bị giới hạn trong một hoặc một vài dãy logic khảtrình cùng với một lượng nhỏ thanh ghi định thời Do đó nó kém linh hoạt hơn,nhưng lại có ưu điểm là khả năng dự đoán trễ lớn hơn và tỉ lệ logic-kết nối caohơn Ngược lại, trong kiến trúc của FPGA lại có sự trội hơn về số lượng kết nối Điều này làm cho nó trở nên linh hoạt hơn ( về số lượng thiết kế được thực thibên trong) nhưng cũng đồng nghĩa với việc phức tạp hơn trong quá trình thiết
kế Một khác biệt đáng chú ý nữa giữa FPGA và CPLD là : hầu hết các FPGAhiện nay đều có các phần tử chức năng tích hợp cao hơn ( như bộ cộng, nhântích hợp), và bộ nhớ tích hợp
Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từngphần Có nghĩa là cho phép một phần của thiết kế được cấu hình lại trong khinhững thiết kế khác vẫn tiếp tục hoạt động Một ưu điểm khác của FPGA, làngười thiết kế có thể tích hợp vào đó các bộ xử lý mềm hay vi xử lý tích hợp.Các vi xử lý này có thể được thiết kế như các khối logic thông thường, mà mãnguồn do các hãng cung cấp, thực thi các lệnh theo chương trình được nạp riêngbiệt, và có các ngoại vi được thiết kế linh động ( khối giao tiếp UART, vào/ra đachức năng GPIO, ethernet ) Các vi xử lý này cũng có thể được lập trình lạingay trong khi đang chạy
2.2 Ứng dụng
Trang 34FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệusố,xử lý ảnh, thị giác máy, nhận dạng giọng nói, mã hóa, mô phỏng FPGAđặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến trúc của nó yêu cầumột lượng rất lớn xử lý song song, đặc biết là mã hóa và giải mã FPGA cũngđược sử dụng trong những ứng dụng cần thực thi các thuật toán như FFT,nhân chập (convolution), thay thế cho vi xử lý.
Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởicác hãng như :Xilinx, Altera, Actel, Atmel Trong đó Xilinx và Altera là 2hãng hàng đầu Xilinx cung cấp phần mềm miễn phí trên nền Windows,Linux, trong khi Altera cung cấp những công cụ miễn phí trên nền Windows,Linux và Solaris
2.3 Kiến trúc PFGA
2.3.1 Kiến trúc của chip FPGA
Kiến trúc bao gồm một mảng các khối logic và các kênh định tuyến.Mỗi hàng hay cột được đệm đày bởi 2 đệm I/O Tất cả các kênh định tuyến
Trang 35Khối logic chuẩn của FPGA gồm một bảng tìm kiếm 4 đầu vào (LUT) vàmột flip-flop, như được biểu diễn ở hình 2.2 Khối logic chỉ có một đầu ra, đầu
ra này có thể là đầu ra LUT đã đăng kí hoặc không đăng kí Khối Logic có 4 đầuvào của LUT và một đầu vào xung Clock Vì xung clock thông thường đượcđịnh tuyến thông qua một mạng định tuyến đặc biệt nên nó được điều khiểnkhác so với các tín hiệu còn lại Vị trí các chân của khối logic của FPGA đượcbiểu diễn dưới đây
Hình 2.2 Logic blockMỗi đầu vào có khả năng truy nhập từ một chân của khối logic khi chânđầu ra có thể kết nối tới các dây định tuyến trong cả hai kênh bên phải và bêndưới của khối logic.( Hình 2.3 )
Hình 2.3 Vị trí các chân của Logic block
Trang 36Mỗi chân đầu ra của khối logic có thể kết nối tới bất kì đoạn đi dây nào trongcác kênh gần với nó
Tương tự đệm I/O có thể kết nối tới bất kì đoạn đi dây nào trong các kênhgần với nó Ví dụ một đệm I/O tại đầu của chip có thể kết nối ngay lập tức tớibất kì dây W nào (trong đó W độ rộng kênh) trong kênh nằm ngang bên dưới nó Việc định tuyến FPGA không được phân đoạn (Hình 2.5) Mỗi đoạn đidây chỉ bắc cầu qua một khối logic trước khi nó kết thúc trong hộp chuyểnmạch Bằng cách mở một số các chuyển mạch có khả năng lập trình trong hộpchuyển mạch, các đường dẫn dài hơn có thể được tạo
Mỗi khi một kênh nằm dọc và một kênh nằm ngang giao nhau thì có một hộpchuyển mạch Trong kiến trúc này khi một dây đi vào hộp chuyển mạch thì có 3chuyển mạch có khả năng lập trình cho phép nó kết nối tới 3 dây khác trongđoạn kênh gần đó Mô hình hoặc topo của các chuyển mạch được sử dụng trongkiến trúc này là một tôpô của hộp chuyển mạch cơ sở bán dẫn hoặc vùng Trongtôpô hộp chuyển mạch này, một dây trong tuyến số 1 chỉ kết nối tới các dâytrong tuyến số 1 trong các đoạn kênh gần đó, các dây trong tuyến số 2 chỉ kếtnối tới các dây trong tuyến số 2 trong các đoạn kênh gần đó, Hình 2.6 mô tảcác kết nối trong hộp chuyển mạch
Các chân của FPGA được chia làm hai loại Chân chuyên dụng và chân I/
O thông thường Khoảng 20% đến 30 % số chân của FPGA là chân chuyêndụng Các chân chuyên dụng của FPGA chia làm ba loại nhỏ như sau :
Các chân nguồn ;
Các chân cấu hình, dùng để download chương trình xuống chip FPGA;
Các đầu vào chuyên dụng hoặc các chân xung clock Các chân này đểđiều khiển các khối chức năng trong FPGA;
Còn lại là các chân I/O thông thường Người dùng có toàn quyền lập trìnhcho các chân này, có thể cấu hình chúng thành đầu vào, đầu ra hoặc đầu vào ra.2.3.2 Đặc điểm hoạt động của FPGA