Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code) Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code) Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code) Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code) Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code) Thiết kế bộ mã hóa và giải mã DES trên nền tảng công nghệ FPGA (có code)
Trang 1Thiết kế bộ mã hóa / giải mã DES trên
nền tảng công nghệ FPGA
Trang 5CPLD Complex Programmable Logic Device
DES Data Encryption Standard
FIPS
HDL
Federal Information Processing Standards
Hardware Description Language
LSB Least Significant Bit
MSB Most Significant Bit
NBS National Bureau of Standard
NIST National Institute of Standards and TechnologyNSA
PAL
PLA
RTL
National Security Agency
Phase Alternative Line
Programmable Logic Array
Register Transfer Level
UART Universal Asynchronous Receiver - TransmitterVHDL VHSIC hardware description language
VHSIC Very High Speed Integrated Circuit
Trang 6CHƯƠ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 tinliê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 nghingờ 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ểubiế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
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 HorstFeistel
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
Trang 7nơi trên thế giới từ Đông sang Tây để giữ bí mật cho việc giao lưu thông tin trongcá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ựcquâ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ộidung chính chủ yếu là để giữ bí mật thông tin Vì vậy, tôi đã có ý tưởng làm đề tàinày.
Trang 8CHƯƠ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 raXilinx 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ỉ đạtvà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ốcphò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ìnhphầ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ó
Trang 9Hì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áckhối khác nhau, một số trong đó chỉ được dùng cho các chức năng cụ thể, như cáckhố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ớinhau để 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
Trang 10trong 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 cungcấ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ốihơ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ữngthà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úcI/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-Cthường được sử dụng để lập trình FPGA Verilog và VHDL phát triển như là mộtchuẩ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
Trang 112.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
Trang 12CHƯƠNG 1 THIẾT KẾ HỆ THỐNG2.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
Trang 13Hì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ụngmộ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ậttoá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 (28bits) rồi đem lần lượt C0 và D0 xoay trái như bảng 3-2 Sau đó thu được C1 (28bits) và D1 (28 bits) từ xoay trái C0 và D0, tiếp theo ghép C1 và D1 lại thành 56
Trang 14bits sau đó nghịch đảo hoán vị 2 (PC-2) như bảng 3-3 sẽ tìm được Key thứ 1 (48bits), 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 (48bits) cứ như thế 14 lần nữa sẽ tìm được đủ 16 Key
Trang 16Hì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,
Trang 17mỗ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 6bits ngõ vào thu được 4 bits ngõ ra, sau đó ghép 8 thành phần 4 bits sau khi tra bảng3-6 lại thu được 32 bits, đem 32 bits đó đi hoán vị P theo bảng 3-7 thu được 32 bitshoá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
Trang 18Bảng 3-4: Hoán vị ban đầu IP [1]
Trang 22Bảng 3-8: Nghịch đảo hoán vị ban đầu IP-1 [1]
Trang 23Hình 3-12: Sơ đồ khối mã hóa DES
2.4.4 Sơ đồ nguyên lý tìm Key input
Trang 24Hình 3-13: Sơ đồ nguyên lý tìm Key input [1]
Trang 252.4.5 Sơ đồ nguyên lý mã hoá DES
Hình 3-14: Sơ đồ nguyên lý mã hoá DES [1]
Trang 262.4.6 Lưu đồ giải thuật tìm Key input
Hình 3-15: Lưu đồ giải thuật tìm Key
Mã hóa DES cần tìm ra 16 Key, j = 1 khi ở vòng 1, 2, 9, 16, các vòng cònlại thì j = 2
Trang 272.4.7 Lưu đồ giải thuật mã hoá DES
Hình 3-16: Lưu đồ giải thuật mã hoá DES
Trang 282.5 Giải mã DES
Thuật toán giải mã hoàn toàn giống với thuật toán mã hóa, ngoại trừ các Keyđược sử dụng theo thứ tự ngược lại Khi các Key mã hóa cho mỗi vòng là K1, K2, , K16, Key giải mã cho mỗi vòng là K16, K15, , K1 Do đó, cùng một thuậttoán làm việc cho cả hai mã hóa và giải mã
2.5.1 Sơ đồ khối
Hình 3-17: Sơ đồ khối giải mã DES
2.5.2 Sơ nguyên lý giải mã DES
Trang 29Hình 3-18: Sơ đồ nguyên lý giải mã DES [1]
Trang 302.5.3 Lưu đồ giải thuật giải mã DES
Hình 3-19: Lưu đồ giải thuật giải mã DES
Trang 31CHƯƠNG 3 PHƯƠNG THỨC TRUYỀN GIỮA PC VÀ FPGA KIT
3.1 RS232 Cable
RS232 là một chuẩn giao tiếp dùng để truyền thông tin giữa các thiết bị vớikhoảng cách lên đến 20 m Hay còn gọi là truyền UART Thường là một mạch tíchhợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và nhữngthiết bị ngoại vi
3.1.1 Cấu tạo
Các chân của cổng RS232 có thể có 9 chân hoặc 25 chân tùy theo mỗi loại mà
nó có các đặc tính khác nhau, tuy nhiên đa số các các board FPGA hiện nay sử dụngloại 9 chân nhờ các đặc tính đơn giản và dễ sử dụng
Trang 32• Chân GND: Ground.
Hình 4-2: Cơ chế truyền cổng RS232 [3]
3.1.2 Cơ chế truyền dữ liệu
Bên truyền truyền bit 0 (bit “start”) trước khi truyền một byte dữ liệu, bênnhận nhờ vậy biết được khi nào dữ liệu truyền đến
Tiến hành truyền 1 byte dữ liệu
Sau khi truyền xong một byte dữ liệu thì bên truyền truyền bit 1 (bit stop)
để báo cho bên nhận biết đã kết thúc việc truyền 1 byte
Cấu hình các thông số cần thiết cho việc truyền dữ liệu qua RS232: Như speed(số bit truyền trong 1 giây), data bits (số bit dữ liệu), parity (bit chẵn lẻ), stop bits(số bit stop), flow control
Để bắt đầu cho việc truyền dữ liệu bằng UART, một START bit được gửi đi, sau
đó là các bit dữ liệu và kết thúc quá trình truyền là STOP bit
Hình 4-3: Khung truyền nhận dữ liệu [4]
Trang 33Khi ở trạng thái chờ mức điện thế ở mức 1 Khi bắt đầu truyền START bit sẽchuyển từ 1 xuống 0 để báo hiệu cho bộ nhận là quá trình truyền dữ liệu sắp xảy ra.Sau START bit là đến các bit dữ liệu D0-D7 Sau khi truyền hết dữ liệu thì đến bitParity để bộ nhận kiểm tra tính đúng đắn của dữ liệu truyền Cuối cùng là STOPbit là 1 báo cho thiết bị rằng các bit đã được gửi xong Thiết bị nhận sẽ tiến hànhkiểm tra khung truyền nhằm đảm báo tính đúng đắn của dữ liệu.
Các thông số cơ bản trong truyền nhận UART:
• Baund rate (tốc độ baund): Khoảng thời gian dành cho 1 bit được
truyền Phải được cài đặt giống nhau ở gửi và nhận
• Frame (khung truyền): Khung truyền quy định về số bit trong mỗi lần
truyền
• Start bit: là bit đầu tiên được truyền trong 1 Frame Báo hiệu cho
thiết bị nhận có một gói dữ liệu sắp được truyền đến Bit bắt buộc
• Data: dữ liệu cần truyền Bit có trọng số nhỏ nhất LSB được truyền
trước sau đó đến bit MSB
• Parity bit: kiểm tra dữ liệu truyền có đúng không.
• Stop bit: là 1 hoặc các bit báo cho thiết bị rằng các bit đã được gửi
xong Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm bảotính đúng đắn của dữ liệu Bit bắt buộc
Trang 34CHƯƠNG 4 KẾT QUẢ MÔ PHỎNG VÀ THỰC TẾ
4.1 Kết quả mô phỏng tìm Key
Trang 354.2 Kết quả mô phỏng mã hóa DES
• CIPHER_OUTPUT = fd9cba5d26331f38 như hình 5-2
Chu kỳ mã hóa được thực trong khoảng 16 xung CLK
Hình 5-2: Kết quả mô phỏng mã hóa DES
Trang 364.3 Kết quả mô phỏng giải mã DES
• CIPHER_OUTPUT = 785ac3a4bd0fe12d như hình 5-3
Chu kỳ mã hóa được thực trong khoảng 16 xung CLK
Hình 5-3: Kết quả mô phỏng giải mã DES
Trang 374.4 Kết quả thực tế
Hình 5-4: Kết quả thực tế mã hoá data mã Hex
Hình 5-5: Kết quả thực tế giải mã data mã Hex
Trang 38Hình 5-6: Kết quả thực tế mã hoá data mã Ascii
Hình 5-7: Kết quả thực tế giải mã data mã Hex
CHƯƠNG 5 KẾT LUẬN
Trang 395.1 Kết luận
Tôi đã trình bày hoàn tất các quá trình thực hiện đồ án Sau khi hoàn thành xong
đồ án, tôi hiểu thêm về giải thuật mã hóa và giải mã DES, ngôn ngữ Verilog, phầnmềm Quartus và Matlab Đây là một đề tài có ứng dụng rất thiết trong việc bảo mậtthông tin dữ liệu
Total logic elements: 8,504/15,408 (55 %)
• Total combinational functions: 8,042/15,408 (52 %)
• Dedicated logic registers: 2,256/15,408 (15 %)
Total pins: 3/166 (2 %)
5.3.2 Công suất ước tính
Tổng công suất nhiệt tiêu tán: 79.24 mW
5.4 Hướng phát triển
Mã AES được phát triển từ DES, mã DES là 64 bits đầu vào ra, mã AESnâng cấp lớn hơn thành 128 bits đầu vào ra
Sử dụng giao thức truyền Ethernet
Cải thiện tốc độ xử lý và hiệu suất
5.5 Ứng dụng
Ứng dụng trong các văn bản trong giao dịch ngân hàng sử dụng các tiêu chuẩnđược hiệp hội các ngân hàng Mỹ phát triển DES được sử dụng để mã hóa những sốnhận dạng cá nhân (Pins) và các văn bản về tài khoản được máy thu ngân tự độngthực hiện (ATMs)…
5.6 Ưu nhược điểm
Trang 40 Ưu điểm
•Thuật toán được định nghĩa đầy đủ, dễ hiểu
•Mạch hoạt động chính xác tuyệt đối
•Tiết kiệm điện năng
•Tốc độ mã hóa dữ liệu nhanh chóng
Nhược điểm
•Kích cỡ khóa nhỏ nên chưa đủ an toàn
Trang 41TÀI LIỆU THAM KHẢO
Trang 43assign key = {rx_data[120:127], rx_data[112:119], rx_data[104:111], rx_data[96:103],
rx_data[88:95], rx_data[80:87], rx_data[72:79], rx_data[64:71]};
always @ (posedge CLOCK_50)
begin
Trang 44if(temp == 1) begin tx_data <= CIPHER_TEXT[0:7];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==2) begin
tx_data <= CIPHER_TEXT[8:15];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==3) begin
tx_data <= CIPHER_TEXT[16:23];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==4) begin
tx_data <= CIPHER_TEXT[24:31];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==5) begin
tx_data <= CIPHER_TEXT[32:39];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==6) begin
tx_data <= CIPHER_TEXT[40:47];
Trang 45tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==7) begin
tx_data <= CIPHER_TEXT[48:55];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp ==8) begin
else
begin tx_start <= 'b0;
btn_flag <= btn_flag + 1'b1;
tx_data <= 64'h00;
end end//while
if(temp1 == 1) begin tx_data <= PLAIN_TEXT[0:7];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp1 ==2) begin
tx_data <= PLAIN_TEXT[8:15];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp1 ==3) begin
tx_data <= PLAIN_TEXT[16:23];
tx_start <= 'b1;
Trang 46btn_flag <= 0;
end else if(temp1 ==4) begin
tx_data <= PLAIN_TEXT[24:31];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp1 ==5) begin
tx_data <= PLAIN_TEXT[32:39];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp1 ==6) begin
tx_data <= PLAIN_TEXT[40:47];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp1 ==7) begin
tx_data <= PLAIN_TEXT[48:55];
tx_start <= 'b1;
btn_flag <= 0;
end else if(temp1 ==8) begin
else
begin tx_start <= 'b0;
btn_flag <= btn_flag + 1'b1;
tx_data <= 64'h00;
end end//while
Trang 47IP ip(PLAIN_TEXT,L0,R0);
KEY_TOP
key(PLAY_STOP,KEY,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7,KEY8,KEY9,KEY10,KE Y11,KEY12,KEY13,KEY14,KEY15,KEY16);