Hiệu năng mã hóa với tập lệnh AES-NI

3 12 0
Hiệu năng mã hóa với tập lệnh AES-NI

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài báo này giới thiệu tập lệnh hợp ngữ trong một số dòng vi xử lý Intel thế hệ mới cho phép tăng đáng kể tốc độ mã hóa, giải mã với thuật toán AES. Các tác giả sẽ làm rõ những điểm đặc biệt khi sử dụng một trong số các lệnh đó để mở rộng khóa; đây là vấn đề chưa được trình bày trong các tài liệu về tập lệnh này. Mời các bạn cùng tham khảo!

HộiHội Thảo Quốc Tử, Truyền ThôngvàvàCông CôngNghệ Nghệ Thông (ECIT 2015) Thảo QuốcGia Gia2015 2015về Điện Điện Tử, Truyền Thơng Thơng Tin Tin (ECIT 2015) Hiệu Năng Mã Hóa Với Tập Lệnh AES-NI Nguyễn Tuấn Anh#, Lương Thế Dũng#, Nguyễn Thị Trang* # Khoa An tồn thơng tin – Học viện Kỹ thuật mật mã Khoa Công nghệ thông tin – Học viện Cơng nghệ bưu viễn thơng Email: tuananh1982act@gmail.com, thedungluong@gmail.com, trangmamcnttptit11@gmail.com * Abstract— Bài báo giới thiệu tập lệnh hợp ngữ số dòng vi xử lý Intel hệ cho phép tăng đáng kể tốc độ mã hóa, giải mã với thuật tốn AES Các tác giả làm rõ điểm đặc biệt sử dụng số lệnh để mở rộng khóa; vấn đề chưa trình bày tài liệu tập lệnh Đồng thời, báo giới thiệu kết thực nghiệm tốc độ mã hóa, giải mã mà tác giả đạt nghiên cứu tập lệnh nói Một kết quan trọng mà tác giả thu chênh lệch không đáng kể tốc độ mã hóa, giải mã sử dụng tập lệnh nói để viết chương trình cho tảng 32 bit tảng 64 bit thể viết chương trình mã hóa/giải mã AES với tốc độ cao hẳn so với cài đặt mềm thơng thường Đến có nhiều ứng dụng thư viện mật mã có khả làm việc với tập lệnh Danh sách cụ thể ứng dụng thư viện tham khảo [3] II Tập lệnh AES-NI bao gồm lệnh hợp ngữ, có lệnh để mã hóa, lệnh để giải mã lệnh để tạo khóa vịng Hai lệnh để mã hóa AESENC AESENCLAST Trong lệnh AESENCLAST để mã hóa vịng cuối cùng, lệnh AESENC để mã hóa vịng tất vòng lại Tương tự, hai lệnh để giải mã AESDEC AESDECLAST Trong đó, lệnh AESDECLAST thực giải mã vòng cuối cùng, lệnh AESDEC thực giải mã vòng tất vịng cịn lại Hai lệnh để tạo khóa vịng AESKEYGENASSIST AESIMC Trong đó, AESKEYGENASSIST sử dụng để tạo khóa vịng mã hóa, tức để mở rộng khóa (key expansion), cịn AESIMC sử dụng để tạo khóa giải mã AES hỗ trợ hai phương án giải mã Phương án thứ vòng phải đảo trật tự phép biến đổi SubBytes, ShiftRow, MixColumn, AddRoundKey Trong trường hợp này, khóa giải mã khóa giải mã (nhưng dùng với trật tự đảo ngược) Phương án thứ hai giữ nguyên trật tự phép biến đổi vòng, bên cạnh việc sử dụng khóa vịng với trật tự đảo ngược cần thực biến đổi định lên khóa vịng mã hóa để thu khóa vịng giải mã Phép biến đổi khóa vịng thực lệnh AESIMC Bên cạnh tập lệnh đây, Intel đưa vào lệnh PCLMULQDQ (Carry-Less Multiplication) cho phép thực phép nhân trường hữu hạn hạng tử 64 bit Lệnh sử dụng để cài đặt cách hiệu thuật toán AES chế độ Galois Counter Mode (AES-GCM) [4] Cú pháp chức lệnh AES-NI trình bày tài liệu [5] Intel Tuy nhiên cách thức sử dụng lệnh mã hóa, giải mã đơn giản, rõ ràng lệnh tạo khóa vịng AESKEYGENASSIST lại rối rắm, khó hiểu Có lẽ người lập trình mong đợi lần gọi lệnh AESKEYGENASSIST thu khóa vịng, tức có tính trọn vẹn lệnh cịn lại Tuy nhiên thực tế khơng Dù kích thước giá trị đầu lệnh 128 bit để tạo khóa vịng 128 bit cần gọi lệnh sau loạt lệnh khác Trong tài liệu [5], Intel đưa đoạn mã để thực sinh khóa vịng mà hồn tồn khơng giải thích chất chúng; không đề cập đến việc sử dụng lệnh khác (sau Keywords- AES-NI, cứng hóa AES, tăng tốc mã hóa I GIỚI THIỆU Như biết, mật mã công cụ quan trọng hàng đầu lĩnh vực an tồn thơng tin Nếu xét riêng lĩnh vực công nghệ thông tin viễn thơng nhiệm vụ đảm bảo an tồn thơng tin khơng thể đạt khơng có mật mã Tuy nhiên, việc áp dụng thao tác mật mã vào q trình xử lý thơng tin làm chậm đáng kể trình Do vậy, bên cạnh việc nghiên cứu xây dựng hệ mật tốt việc nghiên cứu giải pháp cải thiện hiệu làm việc hệ mật có ý nghĩa to lớn an tồn thơng tin Vào ngày 02/01/1997, Viện tiêu chuẩn kỹ thuật quốc gia Mỹ (NIST) khởi động chương trình xây dựng chuẩn mật mã để thay cho chuẩn mật mã lúc DES [1] Trong đó, NIST xác định việc xây dựng chuẩn mật mã dựa vào công sức cộng đồng quốc tế thông qua việc tổ chức thi để tìm thuật tốn mật mã tốt Đồng thời, NIST đặt yêu cầu bắt buộc ứng viên thuật tốn họ miễn phí cho người dùng chọn làm chuẩn Đến ngày 02/10/2000, NIST cơng bố thuật tốn Rijndael chọn làm chuẩn mật mã mới, gọi AES (Advanced Encryption Standard); chuẩn ban hành thức NIST vào năm 2001 [2] Đến nay, AES hỗ trợ hầu hết sản phẩm có chức mật mã Mặc dù AES cho có hiệu thực thi cao đặt phần mềm phần cứng, dù tốc độ mã hóa/giải mã phần mềm nhiều so với phần cứng chuyên dụng Tuy vậy, phần cứng mật mã chuyên dụng lại đắt đỏ linh hoạt hẳn so với phần mềm Vào năm 2008, hãng sản xuất vi xử lý Intel đưa giải pháp cho phép dung hòa ưu, nhược điểm cài đặt cứng cài đặt mềm AES, tập lệnh AES-NI (AES New Instructions) bao gồm lệnh hợp ngữ hỗ trợ số dòng vi xử lý Intel AMD Bằng việc sử dụng tập lệnh này, người ta có ISBN: 978-604-67-0635-9 TẬP LỆNH AES-NI 327 327 HộiHội Thảo Quốc Gia 2015 Công CôngNghệ NghệThông Thông (ECIT 2015) Thảo Quốc Gia 2015vềvềĐiện ĐiệnTử, Tử,Truyền TruyềnThông Thông TinTin (ECIT 2015) lệnh AESKEYGENASSIST) để đạt mục đích sinh khóa vịng Ví dụ, dựa mã nguồn CyaSSL [6], sử dụng 10 lệnh để thay cho 20 lệnh mà Intel đề xuất [5]: aeskeygenassist xmm1, xmm2, 01h pshufd xmm1, xmm1, 0FFh movdqu xmm3, xmm2 pslldq xmm3, pxor xmm2, xmm3 pslldq xmm3, pxor xmm2, xmm3 pslldq xmm3, pxor xmm2, xmm3 pxor xmm2, xmm1 Chức lệnh AESKEYGENASSIST Intel giải thích [5] đoạn giả mã sau: AESKEYGENASSIST xmm1, xmm2/m128, imm8 Tmp := xmm2/LOAD(m128) X3[31-0] := Tmp[127-96]; X2[31-0] := Tmp[95-64]; X1[31-0] := Tmp[63-32]; X0[31-0] := Tmp[31-0]; RCON[7-0] := imm8; xmm1 := [Rot (SubWord (X3))  RCON, SubWord (X3), Rot (SubWord (X1))  RCON, SubWord (X1)] Theo đó, biểu diễn 128 bit đầu vào (xmm2) dạng từ 32 bit (w0, w1, w2, w3) đầu (xmm1) có dạng (w4, w5, w6, w7) Trong đó, theo u cầu AES khóa vịng tương ứng phải có dạng (w4w0, w4w0w1, w4w0w1w2, w4w0w1w2w3) Như vậy, để thu khóa vịng cần thiết sau gọi lệnh AESKEYGENASSIST cần phải thực thêm lệnh khác để đưa đầu dạng mong đợi - Lệnh pshufd đưa xmm1 dạng (w4, w4, w4, w4) - Cặp lệnh (pslldq, pxor) thứ đưa xmm2 dạng (w0, w0w1, w1w2, w2w3) - Cặp lệnh (pslldq, pxor) thứ hai đưa xmm2 dạng (w0, w0w1, w0w1w2, w1w2w3) - Cặp lệnh (pslldq, pxor) thứ ba đưa xmm2 dạng (w0, w0w1, w0w1w2, w0w1w2w3) - Lệnh pxor cuối đưa xmm2 dạng (w4w0, w4w0w1, w4w0w1w2, w4w0w1w2 w3) Và khóa vịng cần có Câu hỏi đặt Intel không thiết kế lệnh AESKEYGENASSIST để thực tất thao tác đây? Có lẽ AES hỗ trợ kích thước khóa khác nhau, thủ tục mở rộng khóa có khác định cho ba kích thước khóa Mặt khác, người ta phải thực lần mở rộng khóa cho phiên mã hóa/giải mã, tốc độ thực thi mở rộng khóa khơng thực quan trọng III HIỆU NĂNG MÃ HÓA, GIẢI MÃ Để đánh giá hiệu mã hóa, giải mã sử dụng tập lệnh AES-NI, chúng tơi viết chương trình mã hóa, giải mã sử dụng tập lệnh với hai phiên khác nhau: cho tảng 32 bit cho tảng 64 bit Cả hai phiên thực mã hóa, giải mã theo chế độ ECB với AES-128 Nguyên mẫu hàm mã hóa cho hai phiên có dạng: void aes128_encrypt_ecb(unsigned char* buf, unsigned char *expanded_key, int block_num) Trong tham số buf trỏ đến vùng đệm chứa liệu cần mã hóa, mã ghi lên vùng đệm này; tham số expanded _key trỏ đến khóa vịng mã hóa; tham số block_num cho biết kích thước liệu tính theo khối (16 bytes) Hàm mã hóa có cú pháp hoàn toàn tương tự Sở dĩ cần viết chương trình với hai phiên 32 bit 64 bit lý sau Các lệnh AES-NI chủ yếu thực ghi XMM 128 bit Khi viết chương trình cho tảng 64 bit, người lập trình sử dụng 16 ghi (XMM0-XMM15) Trong trường hợp đó, nạp sẵn tất khóa vịng vào ghi này, sau khối mã hóa/giải mã khóa chứa sẵn ghi; tức cho dù có khối liệu vùng đệm phải thực lần việc nạp khóa vịng từ nhớ vào ghi Điều giúp giảm thiểu thời gian truy xuất khóa vịng Trong trường hợp viết chương trình cho tảng 32 bit, có số 16 ghi (XMM0XMM7) sử dụng Do đó, nạp sẵn phần khóa vịng; khóa cịn lại phải nạp từ nhớ cần sử dụng để mã hóa khối Trong phần sử dụng chương trình cài đặt AES ngơn ngữ C++ tối ưu hóa khơng sử dụng AES-NI để so sánh hiệu với chương trình sử dụng AES-NI nói Việc thử nghiệm tiến hành máy có cấu hình: Intel Core i5-3210M 2,5GHz, RAM 4GB, Windows 64-bit.Kết thử nghiệm mã hóa 10 GB liệu với kích thước vùng đệm khác thể Hình Trong đó, trục hồnh kích thước vùng đệm tính số khối, khối 16 bytes; trục tung tốc độ mã hóa tính MB/s Hình Tốc độ mã hóa AES Có thể dễ dàng nhận thấy chương trình mã hóa sử dụng tập lệnh AES-NI cho tốc độ cao hẳn so với chương trình mã hóa khơng sử dụng tập lệnh Cụ thể, chương trình mã hóa không sử dụng tập lệnh AES-NI đạt tốc độ 155 MB/s, 328 328 Thảo Quốc Gia 2015vềvềĐiện ĐiệnTử, Tử,Truyền TruyềnThông Thông TinTin (ECIT 2015) HộiHội Thảo Quốc Gia 2015 Công CôngNghệ NghệThông Thông (ECIT 2015) chương trình mã hóa sử dụng tập lệnh AES-NI đạt tốc độ 2040 MB/s cho phiên 32 bit tốc độ 2120 MB/s cho phiên 64 bit Mặt khác, kết thử nghiệm cho thấy chênh lệch tốc độ mã hóa phiên 32 bit phiên 64 bit không dự kiến Trước thử nghiệm, chúng tơi dự kiến rằng, phiên 64 bit phải nạp khóa vịng từ nhớ lần nhất, phiên 32 bit số khóa vịng phải nạp từ nhớ mã hóa khối, tốc độ phiên 64 bit phải lớn đáng kể so với phiên 32 bit Tuy nhiên, thấy Hình 1, chênh lệch tốc độ hai phiên khơng nhiều Điều giải thích chế nhớ đệm (cache) vi xử lý đại Intel Theo đó, có khóa vịng khơng nạp vào ghi lưu sẵn nhớ cache, việc nạp khóa vịng thực từ nhớ cache khơng phải từ RAM, chênh lệch tốc độ hai phiên không nhiều Tương tự trên, thử nghiệm việc giải mã thu kết Hình thước vùng đệm vào khoảng 60 khối, tức 960 byte Như vậy, để đạt tốc độ mã hóa, giải mã cao nhất, nên sử dụng vùng đệm có kích thước tối thiểu KB Đây giá trị nhỏ so với kích thước vùng đệm sử dụng thực tế IV KẾT LUẬN Tập lệnh AES-NI dòng vi xử lý đời Intel AMD cho phép đạt tốc độ mã hóa giải mã AES cao hẳn so với cài đặt thuật tốn sử dụng lệnh tính tốn đa dụng Cụ thể, máy tính có CPU Intel Core i5-3210M 2,5 GHz, RAM 4GB Windows 64-bit, chúng tơi đạt tốc độ mã hóa 2120 MB/s tốc độ giải mã 1950 MB/s Để đạt tốc độ mã hóa giả mã cao nhất, cần sử dụng vùng đệm có kích thước tối thiểu KB Phần mềm viết cho tảng 64 bit có lợi so với phần mềm viết cho tảng 32 bit số lượng ghi XMM để nạp trước khóa vịng; nhiên lợi khơng mang lại khác biệt tốc độ Do vậy, phát triển phần mềm có chức mật mã (và có sử dụng AES-NI) khơng cần phải xây dựng hai phiên 32 bit 64 bit muốn đạt tốc độ mã hóa/giải mã cao tảng 64 bit; thay vào đó, cần xây dựng phiên 32 bit đủ TÀI LIỆU THAM KHẢO [1] [2] [3] Hình Tốc độ giải mã AES [4] Trong trường hợp này, tốc độ giải mã chương trình có sử dụng tập lệnh AES-NI cao hẳn so với chương trình khơng sử dụng tập lệnh Cụ thể, chương trình khơng sử dụng tập lệnh AES-NI đạt tốc độ 146 MB/s chương trình có sử dụng tập lệnh đạt tốc độ 1880 MB/s (đối với phiên 32 bit) 1950 MB/s (đối với phiên 64 bit) Điều cho thấy chênh lệnh tốc độ phiên 32 bit phiên 64 bit không nhiều Cũng từ Hình Hình thấy tốc độ mã hóa giải mã sử dụng tập lệnh AES-NI phụ thuộc rõ rệt vào kích thước vùng đệm Nếu kích thước vùng đệm khối, tương đương 16 byte, tốc độ mã hóa giải mã đạt khoảng 500 KB/s Nếu tăng kích thước vùng đệm tốc độ mã hóa, giải mã tăng theo; tốc độ cực đại đạt kích [5] [6] [7] [8] [9] 329 329 Mitchell C Richards, "AES: The Making of a New Encryption Standard, SANS Institute," Tech Rep 2001 Advanced Encryption Standard (AES), NIST std FIPS PUB 197, 2001 AES Instruction Set [Online] Available: https://en.wikipedia.org/wiki/AES_instruction_set#Libraries Shay Gueron , Intel® Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode - Rev 2.02 [Online] Available: https://software.intel.com/en-us/articles/intel-carry-less-multiplicationinstruction-and-its-usage-for-computing-the-gcm-mode/ Intel Advanced Encryption Standard (AES) New Instructions Set, Intel, 2012 AES Implementation in CYASSL [Online] Available: https://github.com/cyassl/cyassl/blob/master/ctaocrypt/src/aes_asm.s Manley, Raymond, and David Gregg, "A program generator for intel AES-NI instructions," Progress in Cryptology-INDOCRYPT 2010 Springer Berlin Heidelberg, 2010, pp.311-327 Bharata Rao Inline assembly for x86 in Linux [Online] Available: http://www.ibm.com/developerworks/library/l-ia/ Reducing the Impact of Misaligned Memory Accesses [Online] Available: https://software.intel.com/en-us/articles/reducing-the-impactof-misaligned-memory-accesses ... phiên mã hóa/ giải mã, tốc độ thực thi mở rộng khóa khơng thực quan trọng III HIỆU NĂNG MÃ HĨA, GIẢI MÃ Để đánh giá hiệu mã hóa, giải mã sử dụng tập lệnh AES-NI, viết chương trình mã hóa, giải mã. .. tung tốc độ mã hóa tính MB/s Hình Tốc độ mã hóa AES Có thể dễ dàng nhận thấy chương trình mã hóa sử dụng tập lệnh AES-NI cho tốc độ cao hẳn so với chương trình mã hóa khơng sử dụng tập lệnh Cụ thể,... lệnh AES-NI cao hẳn so với chương trình khơng sử dụng tập lệnh Cụ thể, chương trình không sử dụng tập lệnh AES-NI đạt tốc độ 146 MB/s chương trình có sử dụng tập lệnh đạt tốc độ 1880 MB/s (đối với

Ngày đăng: 27/04/2022, 10:15

Hình ảnh liên quan

Hình 1. Tốc độ mã hóa bằng AES. - Hiệu năng mã hóa với tập lệnh AES-NI

Hình 1..

Tốc độ mã hóa bằng AES Xem tại trang 2 của tài liệu.
Hình 2. Tốc độ giải mã bằng AES. - Hiệu năng mã hóa với tập lệnh AES-NI

Hình 2..

Tốc độ giải mã bằng AES Xem tại trang 3 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan