Thiết kế Phần Cứng Tăng Tốc NTT Cho Thuật Toán Mã Hóa Sau Lượng Tử CRYSTALS-Kyber

MỤC LỤC

1 MỞ ĐẦU

Nhiều nghiên cứu về mã hoá lượng tử gần đây cũng chọn ASIC, FPGA dưới dạng độc lập hoặc làm các nhân tính toán phụ đảm nhận việc tính toán cho các giải thuật đặc biệt cho các kiến trúc CPU như RISC-V, ARM, x86_64,… mà trong đó, FPGA là một nền tảng được sử dụng rất nhiều trong các nghiên cứu và đánh giá sức mạnh giải thuật cũng như ứng dụng tăng tốc bằng phần cứng. Ứng dụng việc giảm tải các quy trình tính toán phức tạp của phần mềm bằng bộ tăng tốc tính toán phần cứng NTT cho Kyber có thể áp dụng rộng rãi dưới nhiều hình thức như tích hợp phần cứng tính toán chuyên biệt thành một phần của vi xử lý hoặc tách ra đảm nhiệm như một vi xử lý phụ độc lập đảm nhiệm việc tính toán chuyên biệt.

2 TỔNG QUAN

Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (National Institute of Standards and Technology – NIST) đã trình bày dự thảo tiêu chuẩn chuẩn hoá của Cơ chế mã hoá Khoá dựa trên lưới module (Module-Lattice-Based Key- Encapsulation Mechanism – MLBKEM) trong Tiêu chuẩn xử lý thông tin Liên Bang (Federal Information Processing Standards - FIPS) 203[1]. Không giống như cơ chế mã hoá đường cong Elliptic (Elliptic Curve Cryptography – ECC) hay Rivest-Shamir-Adleman (RSA), các phương pháp tính toán chủ yếu theo tuyến tính, NTT có thể thực hiện song song hoá trong việc tính toán để có thể tăng thông lượng (throughput).

3 NHỮNG NGHIÊN CỨU LÝ THUYẾT

Lý thuyết về CRYSTALS-Kyber

Kể từ công trình ban đầu của của Regev, hiệu quả thực tế của các lược đồ mã hoá LWE đã được cải thiện bằng cách quan sát thấy bí mật trong LWE có thể đến từ sự phân bố giống nhiễu và nhận thấy các lược đồ “tương tự LWE” có thể xây dựng một ma trận hình vuông (chứ không phải hình chữ nhật) làm khoá công khai. Một cải tiến khác là áp dụng một ý tưởng ban đầu sử dụng trong hệ thống mật mã NTRU để xác định các bài toán Ring-LWE và Modul-LWE sử dụng các vành đa thức thay vì số nguyên. Cho việc triển khai và đánh giá phần mềm, Scott và cộng sự [24] chỉ ra các điểm chi tiết để thích nghi từ một bản tham chiếu triển khai (phần mềm) C của PQC.

Ở đây sử dụng phiên bản Tích chập bọc âm (Negative Wrap Convolution – NWC) của thuật toán NTT để ngăn chặn việc bao hàm các hệ số zero- padding trong đa thức đầu vào 𝑓 và 𝑔 cho NTT và INTT [4].

Hình 3.4 Quá trình encryption/decryption của kyber
Hình 3.4 Quá trình encryption/decryption của kyber

Phép nhân module Montgomery

Rút gọn Barrett là một thuật toán rút gọn modulo, được giới thiệu vào năm 1986 bởi P.D. Thuật toán này được thiết kế để tối ưu hoá phép tính modulo khi số chia 𝑞 là hằng số. Ý tưởng chung của Barrett reduction algorithm là sử dụng một hàm xấp xỉ nguyên để ước lượng.

Thuật toán này có thể được áp dụng cho các số nguyên lớn, hoặc cho các số nguyên nhỏ hơn nhưng có số mũ cao.

4 TRIỂN KHAI CRYSTALS-KYBER TRÊN ARM

Mã nguồn CRYSTALS-Kyber

Ngoài ra, chương trình còn kiểm tra xem các khoá không thể được giải mã chính xác bằng cách sử dụng khoá bí mật ngẫu nhiên hoặc văn bản mã hoá trong đó một byte ngẫu nhiên duy nhất bị biến dạng ngẫu nhiên để kiểm tra các lỗi nhỏ của bảo mật CCA. + test_vectors: tạo ra 10000 bộ vector kiểm tra chứa các khoá, ciphertexts và share secrets key được xuất ra dưới dạng hex. Các byte ngẫu nhiên bắt buộc đến từ việc mở rộng xác định đơn giản của một seed cố định được xác định trong test_vector.c.

Sử dụng Time Step Counter (TSC) hoặc Performance Measurement Counters (PMC) để đo hiệu suất (cho CPU x86).

Từ kiến trúc X86 đến ARM

Sử dụng Time Step Counter (TSC) hoặc Performance Measurement Counters (PMC) để đo hiệu suất (cho CPU x86). 25 architecture instruction set) cần có một số chỉnh sửa mã nguồn để có thể biên dịch và thực thi đầy đủ trên HPS. Mã nguồn tham chiếu của CRYSTALS-Kyber sử dụng rdpmc (Read Performance Monitoring Counters) hoặc rdtsc (Read Time Stamp Counters) làm bộ đếm để thực hiện việc đánh giá hiệu năng của chương trình. Hai bộ đếm này là hai bộ đếm 64-bit được cung cấp sẵn bởi bộ đếm hiệu suất của các CPU x86_64 của Intel/AMD với mục đích là đếm các giá trị đo lường hiệu suất hay đo lường thời gian giữa các sự kiện trong mã máy.

Đối chiếu với ARM Cortex-A9, nó cũng cung cấp bộ đếm 32-bit có tính năng tương tự gọi là pmccntr (Performance Monitor Cycle Counter), thay thế việc sử dụng rdpmc/rdtsc bằng pmccntr sẽ có thể giải quyết được vấn đề không tương thích khi biên dịch mã nguồn tham chiếu của CRYSTALS-Kyber trên Arm-Cortex A9.

Cycle Count Register (PMCCNTR)

PMCCNTR (Performance Monitor Cycle Counter) là một thanh ghi đặt biệt trong quản lý hiệu suất của Coprocessor trong ARM, được dung để đo lường số lượng chu kỳ xung nhịp (clock cycles) đã trôi qua từ khi bắt đầu đo lường cho đến thời điểm hiện tại. Từ kết quả thực thi trên phần mềm trên Bảng , có thể dễ dàng nhận thấy tính toán việc tính toán Kyber trên vi xử lý Arm Cortex-A9 nói riêng và trên kiến trúc ARM nói chung sẽ đòi hỏi khối lượng thực thi lớn hơn nhiều so với kiến trúc x86_64. Ngoài việc khác biệt về phân khúc CPU (CPU máy tính cá nhân hiệu suất cao và CPU máy tính nhúng) gây ra sự chênh lệch về số chu kì cần thực thi cho phép toán, thì sự chênh lệch này còn do sự khác biệt về kiến trúc vi xử lý.

Do đó, bộ tăng tốc phần cứng hiệu quả cho NTT/INTT là rất hứa hẹn cho việc giảm tải khối lượng tính toán của phần mềm và tăng tốc độ tính toán tổng thể cho mã hoá lượng tử CRYSTALS-Kyber, đặc biệt là đối với các vi xử lý năng lượng thấp.

5 THIẾT KẾ PHẦN CỨNG HIỆU QUẢ CHO NTT VÀ INTT THEO THAM SỐ KYBER

Signed Barrett reduction 1: Input: 𝐶 (16 bit signed), 𝑣

Ta có thể tránh sự chậm chạp của phép chia và thay vào đó thực hiện phép rút gọn modulo này bằng thuật toán rút gọn Barrett. Từ những thông số đã cho, sẽ thực hiện tính toán trước một số yếu tố bằng cách sử dụng phép chia, sau đó tính toán 𝑎𝑏 𝑚𝑜𝑑 𝑛 còn lại chỉ liên quan đến phép nhân, phép trừ và dịch bit.

Montgomery reduction 1: Input: 𝐶 (32 bit signed), 𝑣

    Bên cạnh đó điều này còn có nghĩa là khi triển khai thực tế phần cứng kết hợp với phần mềm, ta có thể thay thế trực tiếp API NTT/INTT trên phần mềm bằng cách đưa dữ liệu vào khối phần cứng và lấy dữ liệu từ khối phần cứng này ra mà không cần thêm các thay đổi về các bộ rút gọn modulo trên phần mềm nữa. So sánh thiết kế được đề xuất với các tài liệu tham khảo hiện có về các bộ tăng tốc NTT/INTT dựa trên một số tiêu chí chính bao gồm cấu hình (Butterfly Unit), sử dụng tài nguyên (LUTs, FFs, DSPs, BRAM) và tốc độ hoạt động. Thiết kế được đề xuất trong phạm vi luận văn này (với cấu hình 2 BU), cung cấp một số lượng LUT thấp hơn so với các thiết kế khác trong khi vẫn duy trì sử dụng hợp lý các FF và BRAM, việc sử dụng nhiều khối DSP hơn do việc phải thực hiện tính toán với dữ liệu là số nguyên (âm/dương) khiến thiết kế phải sử dụng nhiều khối DSP hơn do các thuật toán rút gọn với phần tử số nguyên tương đối phức tạp hơn so với số nguyên dương trong các thiết kế khác.

    Thiết kế cũng đề xuất ghép các dữ liệu ngừ vào từ cỏc dữ liệu 16 bit thành cỏc cặp dữ liệu 32 bit để cú thể tối ưu trong việc sử dụng 2 BU cũng như giảm tải ROM lưu trữ dữ liệu (So với cấu hình 1BU) Có thể thêm nhiều FF và giai đoạn pipeline để cải thiện hiệu suất trong các ứng dụng nơi tốc độ là quan trọng.

    Hình 5.10 Tài nguyên tiêu thụ trên Xilinx Artix-7
    Hình 5.10 Tài nguyên tiêu thụ trên Xilinx Artix-7

    6 KẾT LUẬN VÀ KIẾN NGHỊ NHỮNG NGHIÊN CỨU TIẾP THEO

    Kiến nghị những nghiên cứu tiếp theo

    Trong những nghiên cứu tiếp theo, việc mở rộng cấu hình BU lên 2x2, 4x2, 4x4, 4x8 là có ý nghĩa thực tiễn quan trọng, việc này giúp giảm số chu kỳ tính toán và tăng hiệu quả hoạt động của NTT và INTT. Các hướng tối ưu khác cho mã hoá CRYSTALS-Kyber khác có thể cân nhắc là: tối ưu hàm băm Keccak sử dụng cho phiên bản thông thường (không phải 90s). Điều này góp phần tạo nên một phần cứng xử lý các tác vụ tính toán nặng riêng biệt cho CRYSTALS-Kyber, từ đó giảm thời gian tính toán.

    48 Bộ tăng tốc NTT/INTT có thể mở rộng cho họ mã hoá lattice based khác như CRYSTALS-Dilithium, NTRU với các thông số khác nhưng cơ bản là vẫn dựa trên tính chất của NTT/INTT.

    8 TÀI LIỆU THAM KHẢO

    Fazio, “FPGA based technical solutions for high throughput data processing and encryption for 5G communication: A review,” TELKOMNIKA (Telecommunication Computing Electronics and Control), vol. Elkalashy, “Smart integration of drive system for induction motor applications in electric vehicles,” International Journal of Power Electronics and Drive Systems (IJPEDS), vol. Shaby, “An efficient and effective energy harvesting system using surface micromachined accelerometer,” International Journal of Power Electronics and Drive Systems (IJPEDS), vol.

    Joshi, “RACE: RISC- V SoC for En/decryption Acceleration on the Edge for Homomorphic Computation,” in Proceedings of the ACM/IEEE International Symposium on Low Power Electron ics and Design, ser.

    9 PHỤ LỤC

    Kernel

    55 bộ đếm pmccntr ở trờn, việc truyền data giữa 2 lừi của ARM Cortex-A9 là khụng cần thiết, do mó nguồn Kyber chỉ chạy đơn lừi nờn chỉ cần kớch hoạt pmccntr trờn tất cả cỏc lừi. Gói này có thể tải xuống bằng trình quản lý gói của Linux, nhưng vì bước này khác nhau đối với mỗi phiên bản phân phối Linux, nên cách đơn giản nhất là tải nó về từ Linaro. Thay đổi thứ hai mà chúng ta nên thực hiện có thể được tìm thấy trong Enable the block layer là Support for large (2TB+) block devices and files.

    Để xây dựng Kernel module, cần xây dựng mã nguồn C với nội dung cần thiết bên dưới để kích hoạt các counter cần thiết trong PMC.

    Hình 9.1 Giao diện cửa sổ cấu hình kernel
    Hình 9.1 Giao diện cửa sổ cấu hình kernel