Tải bản đầy đủ (.docx) (51 trang)

Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1022.93 KB, 51 trang )

ĐỒ ÁN TỐT NGHIỆP

Thiết kế bộ mã hóa / giải mã DES trên
nền tảng công nghệ FPGA

1


MỤC LỤC

2


DANH MỤC CÁC HÌNH VẼ

3


DANH MỤC CÁC BẢNG BIỂU

4


DANH MỤC CÁC TỪ VIẾT TẮT
AES

Advanced Encryption Standard

CPLD
DES
FIPS



Complex Programmable Logic Device
Data Encryption Standard
Federal Information Processing Standards

HDL
LSB
MSB
NBS
NIST
NSA

Hardware Description Language
Least Significant Bit
Most Significant Bit
National Bureau of Standard
National Institute of Standards and Technology
National Security Agency

PAL

Phase Alternative Line

PLA

Programmable Logic Array

RTL
UART
VHDL

VHSIC

Register Transfer Level
Universal Asynchronous Receiver - Transmitter
VHSIC hardware description language
Very High Speed Integrated Circuit

5


Trang 6/46

CHƯƠNG 1. GIỚI THIỆU CHUNG
1.1 Giới thiệu chung
DES là một phương pháp mật mã hóa được FIPS (tiêu chuẩn xử lý thông tin
liên bang Hoa Kỳ) chọn làm chuẩn chính thức năm 1976. Sau đó chuẩn này được sử
dụng rộng rãi trên thế giới. Ngay từ đầu, thuật toán đã gây ra rất nhiều tranh cãi, do
nó bao gồm các thành phần thiết kế mật, độ dài khóa tương đối ngắn, và những nghi
ngờ về cửa sau để cơ quan an ninh quốc gia Hoa Kỳ (NSA) có thể bẻ khóa. Do đó,
DES đã được các giới nghiên cứu xem xét rất kỹ lưỡng, việc này đã thúc đẩy hiểu
biết hiện đại về mật mã khối (block cipher) và các phương pháp thám mã tương
ứng.
1.2 Lịch sử
Khởi nguyên thuật toán đã có từ đầu thập niên năm 1970. Vào năm 1972, sau
khi tiến hành các nghiên cứu về nhu cầu an toàn máy tính của chính phủ Hoa
Kỳ, cục tiêu chuẩn liên bang Hoa Kỳ (National Bureau of Standard - NBS), hiện
nay đã được đổi tên thành Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa
Kỳ (National Institute of Standards and Technology - NIST), đã nhận ra nhu cầu về
một tiêu chuẩn của chính phủ dùng để mật mã hóa những thông tin mật/nhạy cảm.
Vào ngày 15 tháng 5 năm 1973, sau khi tham khảo với NSA, NBS đưa ra kêu gọi

thiết kế một thuật toán mã hóa có thể đáp ứng được những tiêu chuẩn nghiêm ngặt.
Tuy nhiên không có đề xuất nào đáp ứng được các yêu cầu đề ra. Ngày 27 tháng
8 năm 1974, NBS đã đưa ra kêu gọi lần thứ hai. Lần này công ty IBM đưa ra một đề
xuất có thể chấp nhận được. Đề xuất này được phát triển trong những năm 1973 1974 dựa trên thuật toán đã có từ trước - thuật toán mật mã Lucifer của Horst
Feistel.
1.3 Hướng nghiên cứu
Mật mã đã được con người sử dụng từ rất lâu đời. Các hình thức mật mã sơ khai
đã được tìm thấy từ khoảng bốn nghìn năm trước trong nền văn minh của Ai Cập cổ
đại. Trải qua hàng nghìn năm lịch sử, mật mã đã được sử dụng rộng rãi ở khắp mọi

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 7/46

nơi trên thế giới từ Đông sang Tây để giữ bí mật cho việc giao lưu thông tin trong
các lĩnh vực hoạt động giữa con người và các quốc gia, đặc biệt trong các lĩnh vực
quân sự, ngoại giao, chính trị. Mật mã trước hết là một loại hoạt động thực tiễn, nội
dung chính chủ yếu là để giữ bí mật thông tin. Vì vậy, tôi đã có ý tưởng làm đề tài
này.

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 8/46

CHƯƠNG 2. TỔNG QUAN VỀ FPGA VÀ NGÔN NGỮ VERILOG
2.1 Tổng quan về FPGA
2.1.1 Khái niệm về FPGA
FPGA (Field-Programmable Gate Array) là vi mạch dùng cấu trúc mảng phần

tử logic mà người dùng có thể lập trình được. Vi mạch FPGA được cấu thành từ các
bộ phận sau:





Các khối logic cơ bản lập trình được (logic block).
Hệ thống mạch liên kết lập trình được.
Khối vào/ra (IO Pads).
Phần tử thiết kế sẵn khác như DSP slice, RAM, ROM, nhân vi xử lý.

2.1.2 Lịch sử ra đời của FPGA
FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công ty ra
Xilinx vào năm 1984, kiến trúc mới của FPGA cho phép tích hợp số lượng tương
đối lớn những phần tử bán dẫn vào một vi mạch so với kiến trúc trước đó là CPLD.
FPGA có khả năng chứa tới từ 100.000 đến vài tỷ cổng logic, trong khi CPLD chỉ
chứa từ 10.000 đến 100.000 cổng logic, đối với PAL, PLA còn thấp hơn nữa chỉ đạt
vài nghìn đến 10.000.
2.1.3 Ứng dụng
Ứng dụng của FPGA bao gồm: mật mã học, xử lý tín hiệu số DSP, vũ trụ, quốc
phòng, các hệ thống hàng không, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ
thống điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mô hình
phần cứng máy tính...
2.1.4 Cấu trúc một FPGA
Dưới đây là 1 chip FPGA điển hình và từng khối của nó.

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA



Trang 9/46

Hình 2-1: Cấu trúc tổng thế một FPGA [5]

 Khối logic có thể tái cấu hình
Mục đích của việc lập trình khối logic trong FPGA là để cung cấp các tính toán
và những phần tử nhớ cơ bản được sử dụng trong hệ thống số. Một phần tử logic cơ
bản bao gồm một mạch tổ hợp có thể lập trình, một Flip-Flop hoặc một chốt (latch).
Ngoài những khối logic cơ bản đó, nhiều chip FPGA hiện nay gồm một hỗn hợp các
khối khác nhau, một số trong đó chỉ được dùng cho các chức năng cụ thể, như các
khối bộ nhớ chuyên dụng, các bộ nhân hoặc các bộ ghép kênh. Tất nhiên, cấu hình
bộ nhớ được sử dụng trên tất cả các khối logic để điều khiển những chức năng cụ
thể của mỗi phần tử bên trong khối đó.
 Kết nối có thể lập trình
Các liên kết trong một FPGA dùng để liên kết những khối logic và I/O lại với
nhau để tạo thành một thiết kế. Bao gồm có các bộ ghép kênh, các transistor và
cổng đệm ba trạng thái. Nhìn chung, các transistor và bộ ghép kênh được dùng

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 10/46

trong một cụm logic để kết nối các phần tử logic lại với nhau, trong khi đó cả ba
đều được dùng cho những cấu trúc định tuyến bên trong FPGA. Một số FPGA cung
cấp nhiều kết nối đơn giản giữa những khối logic, một số khác cung cấp ít kết nối
hơn nên định tuyến cũng phức tạp hơn.
 Khối I/O khả trình
I/O cung cấp giao tiếp giữa những khối logic và kiến trúc định tuyến đến những
thành phần bên ngoài. Một trong các vấn đề quan trọng nhất trong thiết kế kiến trúc

I/O là việc lựa chọn những tiêu chuẩn điện áp cung cấp và điện áp tham chiếu sẽ
được hỗ trợ.
2.1.5 Ngôn ngữ mô tả phần cứng
Ngôn ngữ mô tả phần cứng bao gồm Verilog, VHDL, Handle-C và System-C
thường được sử dụng để lập trình FPGA. Verilog và VHDL phát triển như là một
chuẩn công nghiệp và hai ngôn ngữ này là phổ biến nhất hiện nay. Altera Quartus và
Xilinx ISE đều hỗ trợ Verilog và VHDL.
2.2 Ngôn ngữ Verilog
2.2.1 Khái niệm
Verilog là một ngôn ngữ mô tả phần cứng được sử dụng trong việc thiết kế các
hệ thống số và các mạch tích hợp.

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 11/46

2.2.2 Cấu trúc chương trình dùng ngôn ngữ Verilog
module tên chương trình (tên biến I/O);
input [msb: lsb] tên biến;
output [msb: lsb] tên biến;
reg [msb: lsb] tên biến reg;
wire [msb: lsb] tên biến wire;
// Khai báo khối always, hoặc khối initial.
… các lệnh …
endmodule

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA



Trang 12/46

CHƯƠNG 1. THIẾT KẾ HỆ THỐNG
2.3 Sơ đồ khối hệ thống

Hình 3-1: Sơ đồ khối hệ thống

2.3.1 Lưu đồ giải thuật truyền TX

Hình 3-2: Lưu đồ giải thuật truyền UART

2.3.2 Lưu đồ giải thuật nhận RX

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 13/46

Hình 3-3: Lưu đồ giải thuật nhận UART

2.4 Mã hoá DES
DES là một mật mã khối đối xứng, hoạt động trên những khối 64 bits sử dụng
một khóa 56 bits. DES mã hóa dữ liệu trong các khối 64 bits. Đầu vào của thuật
toán là một khối 64 bits và đầu ra từ thuật toán là một khối 64 bits của bản mã sau
16 vòng của các hoạt động giống nhau. Chiều dài khóa là 56 bits bằng cách loại bỏ
8 bits chẵn lẻ, bỏ qua 8 bits từ khóa 64 bits nhất định.
2.4.1
Các bảng của thuật toán tìm Key
Đầu vào của khóa là 64 bits tiếp đó nghịch đảo hoán vị 1 (PC-1) như bảng 3-1.
Sau đó ta được 56 bits sau hoán vị 1 ta đem chia làm 2 nửa C0 (28 bits) và D0 (28

bits) rồi đem lần lượt C0 và D0 xoay trái như bảng 3-2. Sau đó thu được C1 (28
bits) và D1 (28 bits) từ xoay trái C0 và D0, tiếp theo ghép C1 và D1 lại thành 56

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 14/46

bits sau đó nghịch đảo hoán vị 2 (PC-2) như bảng 3-3 sẽ tìm được Key thứ 1 (48
bits), cứ như thế lấy C1 và D1 lần lượt đi xoay trái thu được C2 và D2, rồi ghép C2
và D2 lại thành 56 bits sau đó nghịch hoán vị 2 (PC-2) sẽ tìm được Key thứ 2 (48
bits) cứ như thế 14 lần nữa sẽ tìm được đủ 16 Key.
Bảng 3-1: Nghịch đảo hoán vị 1 (PC-1) [1]

Code:
reg [1:56] OUT_PC1;
assign C0 = OUT_PC1[1:28];
assign D0 = OUT_PC1[29:56];
always @ (KEY)
begin
OUT_PC1[1] <= KEY[57];
OUT_PC1[2] <= KEY[49];
OUT_PC1[3] <= KEY[41];
……………………………
OUT_PC1[56] <= KEY[4];
end

Hình 3-4: Waveform nghịch đảo hoán vị 1 (PC-1)
Bảng 3-2: Xoay trái [1]


Code:
assign C1 = {C0[2:28],C0[1]};
assign C2 = {C1[2:28],C1[1]};
Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 15/46

………………………………….
assign C16 = {C15[2:28],C15[1]};
assign D1 = {D0[2:28],D0[1]};
assign D2 = {D1[2:28],D1[1]};
………………………………….
assign D16 = {D15[2:28],D15[1]};
PC2 pc21(PLAY_STOP,C1,D1,KEY1);
PC2 pc22(PLAY_STOP,C2,D2,KEY2);
………………………………………………
PC2 pc216(PLAY_STOP,C16,D16,KEY16);

Hình 3-5: Waveform xoay trái

Bảng 3-3: Nghịch đảo hoán vị 2 (PC-2) [1]

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 16/46

Code:
wire [1:56] SHIFT;

assign SHIFT = {Ci[1:28],Di[1:28]};
reg [1:48] SUBKEY;
always @ (PLAY_STOP or SHIFT)
begin
if ( PLAY_STOP == 0 )
begin
SUBKEY[1] <= SHIFT[14];
SUBKEY[2] <= SHIFT[17];
……………………………..
SUBKEY[48] <= SHIFT[32];
end
else
begin
SUBKEY[1:48] <= 48'bZ;
end
end

Hình 3-6: Waveform nghịch đảo hoán vị 2 (PC-2)

2.4.2
Các bảng của thuật toán mã hóa DES
Đầu vào là 64 bits Plaintext input, sau đó hoán vị ban đầu IP theo bảng 3-4
được 64 bits đem chia làm 2, 32 bits đầu là L0 và 32 bits sau là R0, từ R0 có thể tìm
được L1 = R0 theo công thức Li = Ri-1 (0 < i < 17). Từ R0 (32 bits) mở rộng thành
48 bits theo bảng 3-5. Sau đó đem 48 bits mở rộng từ R0 Xor với Key thứ 1 thu
được 48 bits, tiếp theo ta chia 48 bits thu được từ Xor giữa R0 và Key thành 8 phần,

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA



Trang 17/46

mỗi phần 6 bits, rồi đem 8 thành phần đó lần lượt vào tra bảng 3-6 mỗi thành phần 6
bits ngõ vào thu được 4 bits ngõ ra, sau đó ghép 8 thành phần 4 bits sau khi tra bảng
3-6 lại thu được 32 bits, đem 32 bits đó đi hoán vị P theo bảng 3-7 thu được 32 bits
hoán vị P1. Sau đó R1 (32 bits) được tìm từ việc L0 Xor với 32 bits hoán vị P1. Cứ
tiếp tục như thế 15 lần nữa sẽ tìm được R16 và L16, sau đó ghép R16 (32 bits) và
L16 (32 bits) thành 64 bits rồi đem nghịch đảo hoán vị ban đầu IP-1 theo bảng 3-8
sẽ thu được ngõ ra Ciphertext output.

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 18/46

Bảng 3-4: Hoán vị ban đầu IP [1]

Code:
reg [1:64] OUT_L0R0;
assign L0 = OUT_L0R0[1:32];
assign R0 = OUT_L0R0[33:64];
always @ (PLAIN_TEXT)
begin
OUT_L0R0 [1] <= PLAIN_TEXT [58];
OUT_L0R0 [2] <= PLAIN_TEXT [50];
………………………………………...
OUT_L0R0 [64] <= PLAIN_TEXT [7];
end

Hình 3-7: Waveform hoán vị ban đầu IP


Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 19/46

Bảng 3-5: Mở rộng R [1]

Code:
always @ (R0)
begin
ER0[1] <= R0[32];
ER0[2] <= R0[1];
…………………..
ER0[47] <= R0[32];
ER0[48] <= R0[1];
end

Hình 3-8: Waveform mở rộng R

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 20/46

Bảng 3-6: Sboxes [1]

Code:
assign S_SELECT = {S[1],S[6],S[2:5]};
always @ (S_SELECT)

begin
case (S_SELECT)
6'b000000: S_OUTPUT <= 4'hE;
6'b000001: S_OUTPUT <= 4'h4;
…………………………………..
6'b111111: S_OUTPUT <= 4'hD;
default: S_OUTPUT <= 4'h0;
endcase
end

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 21/46

Hình 3-9: Waveform Sbox5
Bảng 3-7: Hoán vị P [1]

Code:
always @ ( S_OUTPUT )
begin
P_OUT[1] <= S_OUTPUT[16];
P_OUT[2] <= S_OUTPUT[7];
…………………………………..
P_OUT[32] <= S_OUTPUT[25];
end

Hình 3-10: Waveform hoán vị P

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA



Trang 22/46

Bảng 3-8: Nghịch đảo hoán vị ban đầu IP-1 [1]

Code:
assign CIPHER_TEMP = {R16,L16};
always @ (L16 or R16)
begin
CIPHER_TEXT[1] <= CIPHER_TEMP[40];
CIPHER_TEXT[2] <= CIPHER_TEMP[8];
……………………………………………….
CIPHER_TEXT[64] <= CIPHER_TEMP[25];
end

Hình 3-11: Waveform nghịch đảo hoán vị ban đầu IP-1

2.4.3 Sơ đồ khối

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 23/46

Hình 3-12: Sơ đồ khối mã hóa DES

2.4.4 Sơ đồ nguyên lý tìm Key input

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA



Trang 24/46

Hình 3-13: Sơ đồ nguyên lý tìm Key input [1]

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


Trang 25/46

2.4.5 Sơ đồ nguyên lý mã hoá DES

Hình 3-14: Sơ đồ nguyên lý mã hoá DES [1]

Thiết kế bộ mã hóa / giải mã DES trên nền tảng công nghệ FPGA


×