Kỹ thuật điện tử<br />
<br />
NGHIÊN CỨU XÂY DỰNG KIẾN TRÚC HỆ MẬT<br />
IDEA TRÊN FPGA<br />
<br />
Phạm Thành Công1*, Nguyễn Ngọc Thái1,<br />
Phùng Thị Thu Phương1, Bùi Văn Tuân2<br />
<br />
Tóm tắt: IDEA là một thuật toán mã hóa khối lặp đi lặp lại với dữ liệu có chiều<br />
dài 64-bit bằng khóa có chiều dài 128-bit. IDEA kết hợp nhiều yếu tố để tăng độ an<br />
toàn và khả năng thực hiện. Từ khi được công bố đến nay, thuật toán này luôn là đối<br />
tượng nghiên cứu của các nhà phân tích, thám mã và tính đến thời điểm hiện tại,<br />
không ai có thể khẳng định độ chắc chắn của mã cũng như sự thành công của quá<br />
trình tấn công thám mã. Quá trình mã hóa qua tám vòng có cấu trúc phức tạp. Giải<br />
mã được thực hiện theo cách thức giống như mã hóa một lần với khóa giải mã được<br />
tính toán từ những khóa mã.<br />
Việc hiện thực hóa cấu trúc IDEA trên phần cứng đáp ứng được cho các ứng<br />
dụng yêu cầu thông lượng cao đang là một trong những lĩnh vực được tích cực<br />
nghiên cứu ở nhiều cơ sở nghiên cứu khoa học lớn trên thế giới. Trong bài báo này,<br />
chúng tôi xin trình bày một giải pháp thực hiện hệ mật IDEA xây dựng trên chip<br />
FPGA Spartan6, so sánh với các kiến trúc thực hiện trên các phần cứng khác đã<br />
được công bố trên thế giới và đưa ra những kết luận quan trọng để có thể ứng dụng<br />
kiến trúc này trong thực tế.Mục tiêu bài báo tập trung vào hướng ứng dụng kỹ thuật<br />
điện tử hiện đại, nền công nghệ và nguồn linh kiện trong nước để sử dụng phần cứng<br />
thực thi một trong những bài toán mã hóa, làm cơ sở nghiên cứu tiếp theo.<br />
Từ khóa: Mã hóa, IDEA, FPGA Spartan6.<br />
<br />
1. ĐẶT VẤN ĐỀ<br />
Trong nội dung bài báo này, ta nghiên cứu kiến trúc của hệ mật IDEA, phân tích<br />
các thành phần và đưa ra các giải pháp thực thi trên phần cứng. Cấu trúc của hệ<br />
mật IDEA như sau: Các vòng trong thuật toán IDEA sử dụng 3 phép toán chính:<br />
<br />
<br />
<br />
<br />
Hình 1. Kiến trúc PIPELINE cho 1 vòng mã hóa.<br />
<br />
<br />
<br />
266 P.T.Công, N.N.Thái, P.T.T.Phương, B.V.Tuân, “Nghiên cứu xây dựng … trên FPGA.”<br />
Thông tin khoa học công nghệ<br />
<br />
<br />
Phép XOR theo bit ký hiệu là<br />
Phép cộng hai số nguyên lấy modulo 2^16(65536) với đầu vào và các đầu ra là<br />
số nguyên không dấu 16 bít ký hiệu là<br />
Phép nhân hai số nguyên lấy modulo 2^16+1 với đầu vào và các đầu ra là số<br />
nguyên không dấu 16 bít ký hiệu là<br />
Các phép toán này đều thỏa mãn các tính chất sau:<br />
Không có 2 phép toán nào thỏa mãn luật phân phối:<br />
a ( b c ) ≠ (a b) (b c)<br />
Không có 2 phép toán nào thỏa mãn luật kết hợp<br />
a ( b c ) ≠ (a b) c<br />
Sử dụng 3 phép toán này tạo nên sự biến đổi phức tạp từ dữ liệu đầu vào làm<br />
cho việc thăm dò, thống kê, thám mã trở nên khó khăn so với việc chỉ sử dụng 1<br />
phép toán đơn lẻ.<br />
IDEA sử dụng khóa 128 bit(có độ dài gấp đôi kích thước khóa của mã DES) vì<br />
vậy, nó có khả năng chống các cuộc tấn công tốt hơn DES rất nhiều. IDEA sử<br />
dụng phép toán đại số hoàn toàn và như vậy tránh được việc sử dụng bất kỳ các<br />
bảng tra cứu hoặc S-boxes. Điểm mấu chốt tạo nên sức mạnh của IDEA chính là<br />
các phép toán nhân modulo của nó.<br />
Các bước thực hiện mã hóa IDEA như sau: Bản tin 64-bit được chia thành 4<br />
phần (mỗi phần có kích thước 16 bit), ký hiệu là P1 đến P4. Như vậy, P1 đến P4 là<br />
đầu vào cho các vòng đầu tiên của thuật toán, có 8 vòng như vậy. Trong mỗi vòng,<br />
có 6 khóa nhỏ (mỗi khóa nhỏ có kích thước 16 bit) đều được tạo ra từ khóa nguồn<br />
128 bit ban đầu. Những khóa nhỏ được áp dụng cho 4 khối đầu vào P1 đến P4.<br />
Như vậy, cho vòng 1 có 6 khóa nhỏ từ K1 đến K6.<br />
<br />
<br />
<br />
<br />
Hình 2. Cấu trúc một vòng mã hóa sử dụng các khóa nhỏ<br />
(Các khóa được kí hiệu dưới dạng toán tử).<br />
Cho vòng 2, có các khóa K7 đến K12. Cuối cùng, chúng ta sẽ sử dụng những<br />
khoá từ K43 đến K48. Bước cuối cùng bao gồm một bộ chuyển đổi đầu ra sử dụng<br />
4 khóa nhỏ. Vấn đề đặt ra là phải nhúng được toàn bộ cấu trúc phức tạp này vào<br />
một phần cứng để có thể đáp ứng được những dịch vụ có thông lượng cao. Trên<br />
<br />
<br />
<br />
Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san Viện Điện tử, 10 - 2015 267<br />
Kỹ thuật điện tử<br />
<br />
thế giới đã có nhiều nghiên cứu ứng dụng, thực hiện bài toán này trên nhiều hệ<br />
phần cứng và cho ra rất nhiều kết quả xuất sắc. Nội dung nghiên cứu của chúng tôi<br />
là thực thi bài toán này với phần cứng tự thiết kế chế tạo để minh chứng khả năng<br />
thực hiện với điều kiện trong nước. Tức là, nội dung tập trung nghiên cứu ở đây trình<br />
bày nhằm đưa ra giải pháp phù hợp giữa kỹ thuật, công nghệ và kinh phí với những<br />
yêu cầu cụ thể để đáp ứng một dịch vụ sử dụng hệ mật thông lượng cao.<br />
<br />
<br />
<br />
<br />
Hình 3. Cấu trúc hệ mã hóa IDEA.<br />
2. BÀI TOÁN VÀ ĐIỂM MẤU CHỐT TÁC ĐỘNG TỚI THÔNG LƯỢNG<br />
Ở đây chúng ta tiếp tục phân tách các bước trong việc thực hiện các vòng mã và<br />
giải mã thành các kiến trúc nhỏ để thực hiện trên các lõi core và làm cơ sở để kiến<br />
trúc phần cứng FPGA, từ đó đưa ra điểm mấu chốt trong kiến trúc phần cứng ảnh<br />
hưởng đến thông lượng của thiết bị sau khi được xây dựng.<br />
6 khóa nhỏ ban đầu K1 đến K6 được tạo ra từ khóa 128 bit ban đầu. Kể từ khi<br />
khóa nhỏ gồm 16 bit mỗi, trên 128 bit ban đầu, 96 bit đầu tiên được sử dụng cho<br />
các vòng đầu tiên. Như vậy, ở cuối của vòng đầu tiên, bit 97-128 của khóa nguồn<br />
không được dùng. Tại vòng hai, 32 bit chưa sử dụng của vòng đầu tiên được sử<br />
dụng. Để tạo ra các phần còn lại của khóa nhỏ cho vòng thứ hai, bắt buộc phải sử<br />
dụng hơn 64 bit. Điều này đạt được bằng cách thay đổi các khóa ban đầu còn tròn<br />
25 bit. Còn lại, khóa điều chỉnh - khóa biến đổi đầu ra sử dụng để tạo ra các phần<br />
còn lại của 4 khóa con tương tụ như cách như các khóa tròn đầu tiên được tạo ra.<br />
<br />
KHÓA NGUỒN<br />
<br />
<br />
<br />
<br />
K1(bits1- K2(bits17- K6(bits81- CD(bits97-<br />
16) 32) 96) 128)<br />
<br />
<br />
Hình 4. Phân tách khóa nguồn thành các khóa con.<br />
<br />
<br />
268 P.T.Công, N.N.Thái, P.T.T.Phương, B.V.Tuân, “Nghiên cứu xây dựng … trên FPGA.”<br />
Thông tin khoa học công nghệ<br />
<br />
Trong mỗi vòng của 8 vòng thuật toán, các chuỗi sự kiện sau được thực hiện:<br />
1. Nhân * P1 và K1<br />
2. Cộng * P2 và K2<br />
3. Cộng * P3 và K3<br />
4. Nhân * P4 và K4<br />
5. XOR kết quả của bước 1 và bước 3<br />
6. XOR kết quả của bước 2 và bước 4<br />
7. Nhân * kết quả của bước 5 với K5<br />
8. Cộng * kết quả của bước 6 và bước 7<br />
9. Nhân * kết quả của bước 8 với K6<br />
10.Cộng * kết quả của bước 7 và bước 9<br />
11. XOR kết quả của bước 1 và bước 9<br />
12. XOR các kết quả ở bước 3 và bước 9<br />
13. XOR kết quả của bước 2 và bước 10<br />
14. XOR kết quả của bước 4 và bước 10<br />
Chuỗi các sự kiện tiếp theo trong bước biến đổi đầu ra:<br />
1. Hợp * R1 và K1<br />
2. Thêm * R2 và K2<br />
3. Thêm * R3 và K3<br />
4. Hợp * R4 và K4 Hình 5. Các chi tiết của mỗi vòng.<br />
Như vậy, ở đây ta thấy rằng, quá trình mã và giải mã đều trải qua nhiều vòng<br />
với cấu trúc tuy lặp lại nhưng lại rất tốn thời gian thực hiện, và chính điều này đã<br />
dẫn tới làm giảm thông lượng đường truyền khi thực hiện trên các hệ vi xử lý<br />
thông thường. Toàn bộ hệ mật thuật toán đều rất rõ ràng và căn bản, tức là ko thể<br />
tìm ra những giải thuật về mặt lập trình phần cứng để tăng tốc độ tính toán, như<br />
vậy, mấu chốt ở đây là lựa chọn phần cứng để nhúng toàn bộ cấu trúc này vào.<br />
3. KẾT QUẢ THỰC HIỆN<br />
Trong phần nghiên cứu này, nhóm thiết kế và chế tạo phần cứng sử dụng phần<br />
mềm thiết kế mạch Altium Designer, phần mềm lập trình ISE của Xilinx và phần<br />
mềm theo dõi và giả lập đường truyền tự viết trên ngôn ngữ C++ chạy trên nền<br />
Window với máy tính thông thường. Trung tâm tính toán lựa chọn Chip Spartan 6<br />
để thực hiện, toàn bộ phần truyền thông được truyền tải trên giao diện Ethernet với<br />
phương án thử nghiệm như sau:<br />
<br />
<br />
<br />
Thiết Thiết<br />
bị 1 bị 2<br />
Máy tính Máy tính<br />
1 2<br />
Ethernet Ethernet Ethernet<br />
Hình 6. Phương án thử nghiệm đánh giá.<br />
<br />
<br />
Tạp chí Nghiên cứu KH&CN quân sự, Số Đặc san Viện Điện tử, 10 - 2015 269<br />
Kỹ thuật điện tử<br />
<br />
Phương án thử nghiệm đánh giá là sử dụng hai máy tính thông thường chạy một<br />
ứng dụng trao đổi thông tin trên đường ethernet. Ở giữa hai máy tính là hai thiết bị<br />
mã và giải mã IDEA. Quá trình truyền thông sử dụng kết quả thu nhận trên phần<br />
mềm để lưu lại thông lượng của đường truyền làm cơ sở đánh giá kết quả thiết kế.<br />
Các thiết kế phần cứng cụ thể như sau:<br />
3V3<br />
<br />
U1B<br />
R1 105 A13<br />
IO_L1P_1 U1A<br />
U1C 10K<br />
70 CCLK 104 A14 144 HSW 10K R2<br />
IO_L1P_CCLK_2 IO_L1N_VREF_1 IO_L1P_HSWAPEN_0<br />
143 A7<br />
69 M0 R3 4K7 102 D3 IO_L1N_VREF_0<br />
IO_L1N_M0_CMPMISO_2<br />
67 PC18<br />
3V3<br />
R4 IO_L32P_1 142 A8<br />
IO_L2P_CMPCLK_2 101 D2 IO_L2P_0<br />
66 PC17 10K IO_L32N_1 141 A9 GND<br />
IO_L2N_CMPMOSI_2 100 PB19 IO_L2N_0<br />
IO_L3P_D0_DIN_MISO_MISO1_2<br />
65 MISO IO_L33P_1 140 OE<br />
64 MOSI 99 PB18 IO_L3P_0<br />
BANK 1<br />
IO_L33N_1<br />
BANK 2<br />
<br />
<br />
<br />
<br />
IO_L3N_MOSI_CSI_B_MISO0_2 139 D6<br />
<br />
<br />
<br />
<br />
BANK 0<br />
62 PC16 98 PB17 IO_L3N_0<br />
IO_L12P_D1_MISO2_2<br />
61 PC15 GND IO_L34P_1 138 D7<br />
IO_L12N_D2_MISO3_2 97 PB16 IO_L4P_0<br />
60 M1 R5 4K7 IO_L34N_1 137 A4<br />
IO_L13P_M1_2 GND 95 PB15 IO_L4N_0<br />
59 PC14 IO_L40P_GCLK11_1 134 A3<br />
IO_L13N_D10_2 IO_L34P_GCLK19_0<br />
58 PC13 94 PB14 133 A2<br />
IO_L14P_D11_2<br />
57 PC12 IO_L40N_GCLK10_1 IO_L34N_GCLK18_0<br />
132 A1<br />
IO_L14N_D12_2 93 PB13 IO_L35P_GCLK17_0<br />
56 PC11 IO_L41P_GCLK9_IRDY1_1 131 A0<br />
IO_L30P_GCLK1_D13_2<br />
55 PC10 92 PB12 IO_L35N_GCLK16_0<br />
IO_L30N_GCLK0_USERCCLK_2 IO_L41N_GCLK8_1 127 CE1<br />
51 PC9 88 PB11 IO_L36P_GCLK15_0<br />
IO_L31P_GCLK31_D14_2<br />
50 CLK50M IO_L42P_GCLK7_1 126 WE<br />
IO_L31N_GCLK30_D15_2 87 PB10 IO_L36N_GCLK14_0<br />
48 PC7 IO_L42N_GCLK6_TRDY1_1 IO_L37P_GCLK13_0<br />
124 CE2<br />
IO_L48P_D7_2<br />
47 PC6<br />
85 PB9 123 A19<br />
IO_L48N_RDWR_B_VREF_2 IO_L43P_GCLK5_1 IO_L37N_GCLK12_0<br />
46 PC5 84 PB8 121 A18<br />
IO_L49P_D3_2 IO_L43N_GCLK4_1 IO_L62P_0<br />
IO_L49N_D4_2<br />
45 PC4 3V3 83 PB7 120 A17<br />
44 PC3 IO_L45P_1 IO_L62N_VREF_0<br />
IO_L62P_D5_2 82 PB6 119 A16<br />
IO_L62N_D6_2<br />
43 PC2 IO_L45N_1 IO_L63P_SCP7_0<br />
118 A15<br />
41 PC1 R6 81 PB5 IO_L63N_SCP6_0<br />
IO_L64P_D8_2 IO_L46P_1 117 D0<br />
IO_L64N_D9_2<br />
40 PC0 10K 80 PB4 IO_L64P_SCP5_0<br />
39 INIT_B IO_L46N_1 116 D1<br />
IO_L65P_INIT_B_2 79 PB3 IO_L64N_SCP4_0<br />
38 CSO_B IO_L47P_1 115 A20<br />
IO_L65N_CSO_B_2 78 PB2 IO_L65P_SCP3_0<br />
IO_L47N_1 IO_L65N_SCP2_0<br />
114 A10<br />
XC6SLX9-3TQG144C C1 75 PB1 112 A11<br />
10uF IO_L74P_AWAKE_1 IO_L66P_SCP1_0<br />
74 PB0 111 A12<br />
R7 IO_L74N_DOUT_BUSY_1 IO_L66N_SCP0_0<br />
10K<br />
XC6SLX9-3TQG144C XC6SLX9-3TQG144C<br />
<br />
3V3<br />
GND<br />
<br />
<br />
<br />
<br />
Hình 7. Sơ đồ nguyên lý những khối chính trong mạch xử lý trung tâm.<br />
Trong phần này chỉ mô tả sơ bộ thiết kế, trọng tâm chủ yếu là kết quả đạt được<br />
so sánh với các kiến trúc tương đương đã được thực hiện. Kết quả có thể chưa đạt<br />
được những thông số xuất sắc, nhưng là cơ sở để khẳng định khả năng thực thi các<br />
bài toán tương tự.<br />
2<br />
1<br />
80<br />
<br />
<br />
<br />
79<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
2<br />
1<br />
2<br />
<br />
<br />
<br />
<br />
5<br />
<br />
<br />
<br />
<br />
4<br />
6<br />
<br />
<br />
<br />
<br />
3<br />
78<br />
<br />
<br />
<br />
77<br />
<br />
<br />
<br />
<br />
3<br />
<br />
<br />
<br />
4<br />
4<br />
7<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
76<br />
<br />
<br />
<br />
75<br />
<br />
<br />
<br />
<br />
5<br />
<br />
<br />
<br />
6<br />
8<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
74<br />
<br />
<br />
<br />
73<br />
<br />
<br />
<br />
<br />
7<br />
<br />
<br />
<br />
8<br />
1<br />
<br />
<br />
<br />
<br />
4<br />
<br />
<br />
<br />
<br />
2<br />
72<br />
<br />
<br />
<br />
71<br />
<br />
<br />
<br />
<br />
10<br />
9<br />
1<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
3<br />
1<br />
70<br />
<br />
<br />
<br />
69<br />
<br />
<br />
<br />
<br />
11<br />
<br />
<br />
<br />
12<br />
68<br />
<br />
<br />
<br />
67<br />
<br />
<br />
<br />
<br />
13<br />
<br />
<br />
<br />
14<br />
2<br />
<br />
<br />
<br />
<br />
3<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
66<br />
<br />
<br />
<br />
65<br />
<br />
<br />
<br />
<br />
15<br />
<br />
<br />
<br />
16<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
1<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
2<br />
64<br />
<br />
<br />
<br />
63<br />
<br />
<br />
<br />
<br />
17<br />
<br />
<br />
<br />
18<br />
1<br />
2<br />
62<br />
<br />
<br />
<br />
61<br />
<br />
<br />
<br />
<br />
19<br />
<br />
<br />
<br />
20<br />
2<br />
1<br />
<br />
<br />
<br />
<br />
1<br />
60<br />
<br />
<br />
<br />
59<br />
<br />
<br />
<br />
<br />
2<br />
<br />
<br />
<br />
<br />
21<br />
<br />
<br />
<br />
22<br />
2<br />
58<br />
<br />
<br />
<br />
57<br />
<br />
<br />
<br />
<br />
23<br />
<br />
<br />
<br />