1. Trang chủ
  2. » Luận Văn - Báo Cáo

thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber

74 11 0
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết Kế Bộ Tăng Tốc NTT Cho Mã Hoá Sau Lượng Tử Crystals-Kyber
Tác giả Nguyễn Hữu Toàn
Người hướng dẫn TS. Trần Hoàng Linh
Trường học Đại Học Quốc Gia Tp. Hcm Trường Đại Học Bách Khoa
Chuyên ngành Kỹ Thuật Điện Tử
Thể loại Luận Văn Thạc Sĩ
Năm xuất bản 2024
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 74
Dung lượng 2,63 MB

Cấu trúc

  • 1.1 Lý do chọn đề tài (14)
  • 1.2 Mục đích (16)
  • 1.3 Đối tượng và phạm vi nghiên cứu (17)
    • 1.3.1 Đối tượng nghiên cứu (17)
    • 1.3.2 Phạm vi nghiên cứu (17)
    • 1.3.3 Ý nghĩa khoa học (17)
    • 1.3.4 Ý nghĩa thực tiễn (17)
  • 2.1 Tình hình nghiên cứu trong và ngoài nước (19)
  • 2.2 Nhiệm vụ đề tài (21)
  • 3.1 Sơ bộ về mã hoá, mã hoá đối xứng và mã hoá bất đối xứng (23)
  • 3.2 Lý thuyết về CRYSTALS-Kyber (25)
  • 3.3 Number-Theoretic Transform (NTT) (29)
  • 3.4 Bộ cộng Brent-Kung (Brent-Kung Adder) (31)
  • 3.5 Rút gọn Barrett (32)
  • 3.6 Phép nhân module Montgomery (32)
  • 4.1 Intel (Altera) Cyclone V và HPS trên Cyclone V (34)
  • 4.2 Core Concepts và Boot Flow (35)
  • 4.3 Mã nguồn CRYSTALS-Kyber (36)
  • 4.4 Từ kiến trúc X86 đến ARM (36)
  • 4.5 Cycle Count Register (PMCCNTR) (37)
  • 4.6 Kết quả thực thi phần mềm trên HPS (39)
    • 5.1.1 Vị trí của dữ liệu được lưu trong RAM (43)
    • 5.1.2 Bộ tạo địa chỉ (Address Generator) (43)
    • 5.1.3 Giá trị twiddle factor (44)
    • 5.1.4 Thiết kế phần cứng của BU (44)
    • 5.1.5 Bộ cộng Brent-Kung 16 bit (46)
    • 5.1.6 Rút gọn Barrett với tham số Kyber (48)
    • 5.1.7 Rút gọn Montgomery trong Kyber (48)
    • 5.1.8 RAM và ROM (49)
  • 5.2 Kết quả tổng hợp và mô phỏng (49)
    • 5.2.1 Kết quả tổng hợp mạch trên Vivado (Xilinx Artix-7 XC7A200T) (49)
    • 5.2.2 Kết quả tổng hợp mạch trên Quartus (Cyclone V) (51)
    • 5.2.3 Kết quả mô phỏng QuestaIntel (52)
    • 5.2.4 Kết quả từ phần mềm Kyber (53)
  • 5.3 Đánh giá và bàn luận kết quả (56)
  • 6.1 Kết luận (59)
  • 6.2 Kiến nghị những nghiên cứu tiếp theo (59)
  • 9.1 Kernel (66)
    • 9.1.1 Kernel module cho pmccntr (66)
    • 9.1.2 Xây dựng lại kernel và kernel module (67)
  • 9.2 Các tiền xử lý cho NTT (70)
    • 9.2.1 Bảng dữ liệu twiddle factor (70)
    • 9.2.2 Bảng map vị trí dữ liệu 16 – 32 bit (71)
  • 9.3 Sơ đồ Netlist Viewer (73)

Nội dung

Luận văn này trình bày việc chỉnh sửa mã nguồn tham chiếu được công bố bởi nhóm nghiên cứu Kyber để có thể chạy và kiểm thử mã nguồn tham chiếu Kyber trên SoCFPGA Linux để có cái nhìn sơ

Mục đích

Lựa chọn Kyber làm tiêu chuẩn hóa vào năm 2022 phản ánh tiềm năng ứng dụng rộng rãi của Kyber và mã hóa sau lượng tử trong bảo mật thông tin Thiết kế và tiêu chuẩn mã hóa lượng tử tiếp tục được nghiên cứu và cải tiến để nâng cao bảo mật và hiệu suất Nghiên cứu này kiểm tra khả năng tương thích của CRYSTALS-Kyber khi chạy trên phần cứng Arm, nhấn mạnh nhu cầu phần cứng hóa các phép toán khi triển khai trên máy tính nhúng năng lượng thấp Nghiên cứu thiết kế phần cứng xử lý NTT và INTT trên FPGA, đánh giá kết quả và đưa ra các hướng phát triển trong tương lai.

Tình hình nghiên cứu trong và ngoài nước

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] Tiêu chuẩn quy định cơ một cơ chế đóng gói khoá (Key-Encapsulation Mechanism – KEM) sử sụng phương pháp module lưới (Module Lattice) gọi là ML-KEM, dựa trên thông số kỹ thuật của CRYSTALS-Kyber CRYSTALS-Kyber hay Kyber là một cơ chế đóng gói khoá module dựa trên lưới, yêu cầu việc nhân các đa thức trên một vòng đa thức[2] Rào cản chính trong hầu hết các triển khai của CRYSTALS-Kyber hiện tại là phương pháp nhân nhanh sử dụng Biến đổi số lý thuyết (Number Theoretic Transform – NTT) Triển khai của Kyber trên phần mềm cần lặp lại nhiều lần các biến đổi NTT thuận và nghịch (Inverse NTT – INTT) làm cho nó trở thành phần tốn thời gian nhất trong tính toán của Kyber [3] 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)

Các thiết kế phần cứng hiện tại của Kyber và các giải thuật mã hoá sau tượng tử (Post Quantum Cryptography – PQC) dựa trên lưới tương tự cố gắng cải thiện thuật toán bằng nhiều phương pháp Hai phương pháp chính để cải thiện hiệu suất NTT là cải tiến cấu trúc Butterfly Unit (BU) và giao tiếp giữa các giai đoạn của NTT, bao gồm việc lấy dữ liệu từ bộ nhớ và sắp xếp chúng theo thứ tự cho các giai đoạn NTT tiếp theo Zhang và cộng sự [3] hợp nhất quá trình tiền xử lý của NTT và sau xử lý của INTT với một BU tối ưu hoá cho các phép toán modular trên ước lượng mới số nguyên tố q (NEWHOPE prime q) Công trình [4] sử dụng phương pháp tương tự cho NTT và INTT với một thuật toán modular được điều chỉnh cho số nguyên tố Kyber được gọi là Exact KRED và một cấu hình BU 2x2 và độ phức tạp thấp Ye và cộng sự [5] cải thiện nghiên cứu của Zhang và cộng sự, đã cố định thuật toán giảm

8 số dư modulo (modular reduction) vào ước lượng mới số nguyên tố q Họ cũng giới thiệu một cấu trúc pipeline hoàn chỉnh giữa các giai đoạn của NTT và tính toán với lõi NTT Cấu trúc BP-NTT[6] sử dụng SRAM (Static Random Access Memory) và nhân modulo bit song song để cải thiện quá trình NTT của họ Rút gọn Barret là một thuật toán modulo phổ biến để tối ưu hoá BU [7] Fritzman và cộng sự [8] đã thảo luận về các cuộc tấn công kênh phụ khả năng có thể xảy ra trên phần cứng NTT và đề xuất một thiết kế tiết kiệm năng lượng với một bộ nhớ RAM đơn cổng (single-port RAM) Để tăng cường thông lượng dữ liệu, một kế hoạch truy cập bộ nhớ ping-pong được đề xuất trong [9]

Giải thuật tăng tốc bằng phần cứng có nhiều ứng dụng và áp dụng trên các nền tảng khác nhau như Xilinx FPGA (Xilinx Field Programmable Gate Array) và vi mạch tích hợp ứng dụng - ASIC (Application Specific Integrated Circuit) [10-13] Paludo và cộng sự [14] đã tích hợp BU vào một hệ thống RISC-V 5 tầng pipeline sẵn sàng hoạt động với linux Họ đánh giá hiệu suất trên cả FPGA và 28nm ASIC CoHA- NTT là kiến trúc nhân đa thức dựa trên NTT đầu tiên với khả năng cấu hình lại trong thời gian chạy và thời gian biên dịch [15] Geelen và cộng sự [16] giới thiệu một phần mở rộng kiến trúc tập lệnh (Instruction Set Architecture – ISA) mới vào kiến trúc RISC-V của họ để tích hợp NTT Kuang và cộng sự vector hoá thuật toán NTT để kết hợp nó tốt hơn với kiến trúc RISC-V của họ Chen và cộng sự [18] cải tiến NTT trong bộ xử lý của họ, tận dụng lợi ích của truy cập bộ nhớ kép (dual memory access) Việc tích hợp NTT qua các nền tảng khác nhau để hỗ trợ PQC mới đang phát triển [19-22]

Huang và cộng sự [30] đã thiết kế phần cứng tương tự cho CRYSTALS-Kyber, tăng tốc hiệu suất so với triển khai trên ARM Cortex-M4 [31] Nghiên cứu khác [32] đã trình bày thiết kế chống tấn công kênh ngoại đầu tiên cho CRYSTALS-Kyber trên phần cứng với hiệu suất đáng kể Ngoài ra, các nghiên cứu tối ưu thiết kế Kyber dựa trên phân tích phần mềm cũng đã mang lại hiệu quả tích cực.

Nhiệm vụ đề tài

Từ mục đích đã đề ra ở trên, các nhiệm vụ cần thực hiện của đề tài bao gồm: Nội dung 1: Tìm hiểu lý thuyết mã hoá bất đối xứng, mã hoá lượng tử CRYSTALS-Kyber, NTT/INTT và các thành phần toán học cần thiết cho thiết kế phần cứng NTT/INTT

Nội dung 2: Tìm hiểu cách sử dụng Linux trên HPS, thực hiện chỉnh sửa, biên dịch phần mềm tham chiếu của Kyber để kiểm tra hiệu suất phần mềm Kyber trên phần cứng HPS (ARM Cortex-A9) của Intel (Altera) Cyclone V

Nội dung 3: Xây dựng và thiết kế bộ tăng tốc phần cứng NTT (bao gồm NTT và INTT – Inverse NTT) theo các tham số Kyber, tổng hợp thiết kế và mô phỏng kiểm tra so sánh với kết quả NTT chạy được bằng mã nguồn Kyber Đánh giá, bàn luận về các thiết kế và kết quả

Nội dung 4: Kết luận và bàn luận hướng phát triển của nghiên cứu trong lương lai

Phần tiếp theo của luận văn sẽ trình bày các lý thuyết đề cập trong nội dung 1 Phần 4 của luận văn trình bày nội dung 2 Phần 5 của luận văn trình bày các thiết kết và kết quả trong nội dung 3 Kết luận và bàn luận hướng phát triển (nội dung 4) sẽ được học viên trình bày trong phần 6 Phần 7 là danh mục các công trình khoa học Phần 8 là danh mục tài liệu tham khảo và phần 9 là phụ lục

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

Sơ bộ về mã hoá, mã hoá đối xứng và mã hoá bất đối xứng

Mã hoá là một trong những lĩnh vực được quan tâm và phát triển từ rất lâu Sở dĩ mã hoá được quan tâm và nghiên cứu một cách mạnh mẽ với vô số phương thức mã hoá - giải mã khác nhau được nghiên cứu và phát triển hoàn thiện từng ngày là do nhu cầu bảo mật dữ liệu, mã hoá đảm bảo việc trao đổi dữ liệu chỉ để hai bên trao đổi có thể trao đổi thông tin có thể hiểu được Chung quy lại, mã hoá thực hiện việc thay đổi dữ liệu ban đầu thành một chuỗi dữ liệu khác mà không có ý nghĩa nếu không thực hiện quá trình giải mã Việc thực hiện mã hoá, giải mã tuân thủ các nguyên tắc toán học để chuỗi dữ liệu có thể bảo toàn nguyên vẹn sau khi thực hiện quy trình mã hoá - truyền tải - giải mã Việc mã hoá giải mã được yêu cầu sử dụng khoá (key) mã hoá Khoá mã hoá được phổ biến trước cho bên truyền và bên nhận hoặc thông qua một bên xác thực thứ ba để đảm bảo sự thấu hiểu giữa bên truyền và bên nhận về mã hoá và giải mã Mã hoá được coi là an toàn đảm bảo việc mã hoá được tiến hành một cách hợp lý và không thể giải mã được bằng cách đoán

Các thuật toán mã hoá hiện nay vô cùng đa dạng và phong phú với nhiều biến thể và ngày càng được cải thiện về hiệu suất cũng như tính bảo mật, được ứng dụng rộng rãi trong nhiều lĩnh vực Trong đó, mã hoá đối xứng (Symmetric Key Cryptography) và mã hoá bất đối xứng (Asymmetric Key Cryptography) là hai dạng mật mã được sử dụng trong việc mã hoá và giải mã

Mã hoá đối xứng sử dụng một khoá mật mã (Crypto Key) được chia sẻ giữa bên truyền tin và bên nhận tin để thông qua một thuật toán biết trước để bên truyền có thể mã hoá dữ liệu muốn gửi thành một dữ liệu mã hoá (Ciphertext), bên nhận có thể giải mã dữ liệu mã hoá thành dữ liệu ban đầu

Hình 3.1 Mã hoá đối xứng

Mã hoá bất đối xứng sử dụng một cặp khoá: khoá công khai (public key) và khoá bí mật (secret/private key) trong việc xử lý mã hoá và giải mã Public key sẽ được chia sẻ khi có yêu cầu, nếu bên gửi muốn gửi dữ liệu đến bên nhận thì sẽ yêu cầu public key của bên nhận, người gửi dùng public key này để mã hoá dữ liệu, chỉ người nhận có private key tương ứng mới giải mã được dữ liệu mã hoá Ngoài ra, một số thuật toán còn mở rộng theo chiều ngược lại (dữ liệu mã hoá bằng private key sẽ được chia sẻ cho mọi người, nếu mọi người có public key thì có thể giải mã được dữ liệu này) Ưu điểm của mã hoá bất đối xứng là có thể sử dụng trong môi trường phức tạp và dễ dàng trau đổi an toàn với nhau bằng cách chia sẻ public key của nhau Tuy nhiên, nhược điểm của phương pháp này là do thuật toán thường phức tạp hơn nên tốc độ giải mã chậm hơn và đòi hỏi tài nguyên tính toán nhiều hơn, vì vậy cần phải tối ưu bài toán về tính bảo mật, tài nguyên tính toán với thời gian thực hiện sao cho phù hợp

Hình 3.2 Mã hoá bất đối xứng

Lý thuyết về CRYSTALS-Kyber

CRYSTALS-Kyber là một phần của bộ mật mã gọi là Bộ công cụ mật mã cho lưới đại số (Cryptographic Suite for Algebraic Lattices – CRYSTALS) Mật mã dựa trên lưới được đặt trên cơ sở sự phức tạp của của giải quyết các vấn đề lưới, được cho là phức tạp ngay cả với máy tính lượng tử [23]

Thiết kế của Kyber bắt nguồn từ sơ đồ mã hoá dựa trên LWE (Learning with errors) của Regev 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 Chi tiết về Kyber có thể được tìm thấy trong nghiên cứu của của Bob và cộng sự [2] Kyber có hai phần: mã hóa công khai chống được phương pháp tấn công chọn văn bản hoặc CPAPKE, cơ chế đóng gói khóa bảo mật hoặc CCAKEM CPAPKE được bao gồm trong CCAKEM như một bước bắt buộc để tạo mã khóa và mã hóa cũng như giải mã Trong khi CPAPKE có ba bước khác nhau (tạo khóa, mã hóa và giải mã), cả ba bước đều yêu cầu một bước nhân đa thức lớn có độ phức tạp 𝑂(𝑛!) Về bản chất, CRYSTALS-Kyber hiểu đơn giản là mã hóa bất đối

14 xứng, bao gồm một phép toán có độ phức tạp lớn (MLWE) và giao thức trao đổi kết quả từ phép toán đó

Mã hoá dựa trên LWE:

Hình 3.3 Quá trình tạo khoá của CRYSTALS-Kyber

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

Các đa thức của Kyber được thể hiện dưới dạng các hệ số của đa thức, sắp sếp theo bậc trong ngôn ngữ lập trình thông thường Giải thuật tạo khoá, mã hoá và giải mã của Kyber như sau:

Trong thông số kỹ thuật [2], Kyber cung cấp 3 phiên bản KEM là: Kyber512, Kyber768 và Kyber1024 Ngoài ra họ cũng cung cấp các phiên bản 90s tương ứng: Kyber512-90s, Kyber768-90s và Kyber1024-90s Các phiên bản này thay thế việc sử dụng Keccak SHA3 bằng họ SHA2 Các tham số cho mỗi phiên bản của Kyber được liệt kê trong Error! Reference source not found., được công bố trong thông số kỹ t huật

Bảng 3.1 Thông số của các phiên bản Kyber

Algorithm 1 Kyber.CPA.KeyGen(): key generation

Algorithm 2 Kyber.CPA.Enc(𝑝𝑘 = (𝑡, 𝜌), 𝑚 ∈ ℳ): Encryption

Algorithm 3 Kyber.CPA.Dec(𝑠𝑘 = 𝐬, 𝑐 = (𝐮, 𝑣)): decryption

Number-Theoretic Transform (NTT)

Trong CRYSTALS-Kyber, Bos và cộng sự [2] sử dụng Biến đổi số lý thuyết (NTT) để nhân nhanh giữa các đa thức Nghịch đảo của NTT là INTT Với NTT và INTT, kết quả nhân của phương trình ℎ = 𝑓 ∗ 𝑔 có thể được tính bằng công thức (1) để cải thiện tốc độ nhân đa thức [2] 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] Dựa trên hai thuật toán trước đó từ [4], nghiên cứu này sử dụng phiên bản mới của thuật toán lai NTT/INTT trong Algorithm 4:

Algorithm 4 Hybrid NTT and INTT Algorithm

3: Input: Pre-computed twiddle factor 𝜁[𝑖] = 𝛾$%&'()(*+([𝑖]

4: Output: 𝑁𝑇𝑇(𝑎(𝑥)) for NTT; 𝐼𝑁𝑇𝑇1𝑎((𝑥)2 for INTT

Trong giai đoạn NTT, mỗi đơn vị tiền xử lý và hậu xử lý tương ứng cần hoạt động theo cấu hình Cooley - Turkey (CT) Đối với giai đoạn INTT, Gentleman - Sande (GS) là cấu hình cần thiết Quá trình xử lý dữ liệu NWC đòi hỏi cấu hình BU cân nhắc cả giai đoạn tiền xử lý và hậu xử lý Sơ đồ tại Hình 1 minh hoạ cấu hình BU cơ bản cho NWC trong giai đoạn NTT và INTT Cụ thể, Hình 1 là cấu trúc CT BU dành cho NTT, trong khi Hình 2 thể hiện cấu trúc GS BU.

Hình 3.5 Hai Butterfly Unit với thuật toán giảm độ phức tạp

(1) Cooley-Turkey Butterfly Unit và (2) Gentleman-Sande Butterfly Unit

Tuỳ thuộc vào số lượng phần tử của đa thức đầu vào mà NTT/INTT sẽ trải qua số tầng tính toán tương ứng:

Trong Hình , với 𝑛 = 8 số tầng tính toán cần tính là log + 𝑛 = 3 Với kết quả

𝑎s sau khi thực hiện NTT ở thứ tự bit reverse (đảo bit)

Bộ cộng Brent-Kung (Brent-Kung Adder)

Bộ cộng bổ sung sử dụng giải thuật carry-lookahead (CLA) có một biến thể của bộ cộng tiền tố song song (PPA) gọi là bộ cộng Brent-Kung (BKA) Sử dụng cấu trúc của bộ cộng này để cải thiện hiệu suất của phép cộng và trừ modulo BU Trái ngược với bộ cộng Kogge-Stone, nó có ít nghẽn về dây và đơn giản hơn về cấu trúc Nó được đề xuất lần đầu bởi Richard Peirce Brent và Hsiang Te Kung vào năm 1982 (KSA) [26]

Trong bộ cộng Brent-Kung, cờ nhớ được tính toán đồng thời, giảm thiểu thời gian hoạt động đáng kể Ngoài ra, cờ nhớ phải đi qua ít giai đoạn hơn, giảm tiêu thụ năng lượng Brent-Kung đã cách mạng hoá quá trình sinh và truyền các bit nhớ bằng cách giới thiệu một toán tử 𝑜 được định nghĩa như sau: (𝑎 & , 𝑏 & )𝑜(𝑎 + , 𝑏 + ) = (𝑎 & ∨ (𝑏 & ∧ 𝑎 + ), 𝑏 & ∧ 𝑏 + ), cùng với hàm (𝐺 7 , 𝑃 7 ) = (𝑔 & , 𝑝 & ) với 𝑖 = 1; và (𝑔 7 , 𝑝 7 )𝑜(𝐺 7 −

1, 𝑃 7 − 1) với 𝑖 = 2,3, … 𝑛 Có thế suy ra rằng 𝐺 7 trong hàm tương đương với 𝑐 7 Ngoài ra (𝐺 8 , 𝑃 8 ) có thể được viết không đệ quy là (𝑔 8 , 𝑝 8 )𝑜(𝑔 8%& , 𝑝 8%& )𝑜

… 𝑜(𝑔 & , 𝑝 & ) Lợi dụng tính kết hợp của toán tử 𝑜(𝐺𝑛, 𝑃𝑛), theo định nghĩa, có thể được tính toán trong một cấu trúc giống cây, tương tự Hình

Hình 3.7 Cấu trúc hình cây của bộ cộng Brent-Kung

Rút gọn Barrett

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 Barrett Một cách đơn giản để tính toán 𝑐 = 𝑎 𝑚𝑜𝑑 𝑞 là sử dụng một thuật toán chia nhanh 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 Sau đó, trừ đi một lần để thu được phần dư 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.

Phép nhân module Montgomery

Phép nhân module Montgomery là một phương pháp tính nhanh phép nhân modulo, được giới thiệu bởi nhà toán học Peter L Montgomery vào năm 1985 Phương pháp này dựa trên một biểu diễn đặc biệt của các số gọi là dạng Montgomery Thuật toán sử dụng dạng Montgomery của 𝑎 và 𝑏 để tính hiệu quả dạng Montgomery của 𝑎𝑏 𝑚𝑜𝑑 𝑁 Hiệu quả đến từ việc tránh các phép chia tốn kém Phép nhân modulo truyền thống giảm tích hai chiều 𝑎𝑏 bằng cách chia cho 𝑁 và chỉ giữ lại phần dư Phép chia này yêu cầu ước lượng và sửa chữa chữ số thương số Dạng Montgomery, ngược lại, phụ thuộc vào một hằng số 𝑅 > 𝑁 mà nguyên tố cùng nhau với 𝑁, và phép chia duy nhất cần thiết trong phép nhân Montgomery là phép chia cho 𝑅 Hằng số 𝑅 có thể được chọn sao cho phép chia cho 𝑅 là dễ dàng, cải thiện đáng kể tốc độ của thuật toán Trong thực tế, 𝑅 luôn là một lũy thừa của hai, vì phép chia cho các lũy thừa của hai có thể được thực hiện bằng cách dịch bit

4 TRIỂN KHAI CRYSTALS-KYBER TRÊN

Intel (Altera) Cyclone V và HPS trên Cyclone V

The Cyclone V SoC on the DE-10 Standard comprises two components: the Hard Processor System (HPS) and the FPGA The HPS architecture features a dual-core Arm Cortex-A9 processor, peripherals, and memory interfaces tightly coupled to the FPGA fabric.

HPS trên Cyclone V là một hệ thống bộ xử lý cứng (HPS) tích hợp một bộ xử lý kép lõi Arm Cortex-A9 với một số giao diện và bộ điều khiển ngoại vi HPS trên Cyclone V cho phép bạn tận dụng sức mạnh của bộ xử lý Arm và khả năng linh hoạt của FPGA trong một thiết bị duy nhất:

+ Hỗ trợ các giao diện bộ nhớ ngoài như DDR2, DDR3, LPDDR2

+ Hỗ trợ các giao diện ngoại vi như USB, Ethernet, SPI, I2C, UART, CAN, GPIO, QSPI, NAND, SD/MMC

+ Hỗ trợ các bộ xử lý tín hiệu số (DSP) biến độ chính xác để tăng tốc các ứng dụng xử lý tín hiệu

+ Hỗ trợ các cầu nối AXI để kết nối HPS với FPGA và các thiết bị ngoài + Hỗ trợ các module quản lý đồng hồ, reset, nguồn, scan, debug, và trace

Hình 4.1 Sơ đồ khối đơn giản của Cyclone V

Core Concepts và Boot Flow

Mọi thiết kế embedded Linux dựa trên Altera (Intel) SoC sẽ tuân theo một quy trình tương tự để khởi động:

Hình 4.2 Altera (Intel) SoC boot flow

Như có thể thấy ở trên, phần đầu tiên được chạy khi khởi động là Boot ROM, sau đó tải PreLoader lên, sau đó là U-boot rồi cuối cùng là Linux Chuỗi phần mềm này được gọi là “luồng khởi động – boot flow” và đối với hầu hết các thiết kế Linux nhúng trên Cyclone V, sẽ không có nhiều sai lệch với mẫu này

Các binary cho PreLoader, U-boot và Linux có thể được đặt trên nhiều loại thiết bị NvM (Non-volatile Memory) khác nhau (QSPI flash, SD card, v.v) Để biết vị trí của preloader (giai đoạn 2 trong boot flow), chúng ta sẽ cần đặt các chân BSEL (Boot SELect) tương ứng để có thể chọn đúng vị thiết bị boot (trong phạm vi của luận văn này là SD Card)

Altera cung cấp Linux image được build sẵn dựa trên Angstrom với Linux kernel 4.5 Trong phạm vi luận văn này, học viên sử dụng linux image được cung cấp

Nền tảng chạy lớp cho ARM này chỉ thực thi 24 tính năng cần thiết để mã nguồn CRYSTALS-Kyber có thể chạy được trên ARM Tuy nhiên, nó không xây dựng kernel mới mà chỉ xây dựng lại kernel hiện có với các tính năng cần thiết.

Mã nguồn CRYSTALS-Kyber

Mã nguồn tham chiếu phần mềm Kyber được cung cấp miễn phí tại [33] Cho mỗi phiên bản Kyber512, Kyber512-90s, Kyber768, Kyber768-90s, Kyber1024, Kyber1024-90s, phần mềm tham chiếu này có thể tạo ra các tệp thực thi test_kyber, test_kex, test_vector, test_speed Trong đó:

+ test_kyber: kiểm tra 1000 lần tạo khoá, đóng gói một khoá ngẫu nhiên và giải mã lại một cách chính xác 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 Chương trình sẽ bị huỷ với thông báo lỗi và trả về 1 nếu có lỗi Nếu không nó sẽ xuất kích thước khoá và văn bản mã hoá và trả về 0 Chương trình này sẽ đảm bảo tính đúng đắn cho các triển khai của Kyber

+ test_kex: kiểm tra các chương trình trao đổi khoá được xác thực bắt nguồn từ Kyber KEM

+ 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

+ test_speed: phục vụ cho benchmark cho việc triển khai của Kyber 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

Mã nguồn tham chiếu của CRYSTALS-Kyber được thực hiện trên kiến trúc x86_64 cho các vi xử lý Intel/AMD (kết quả trong trang chủ của thuật toán Kyber [33] được thực hiện trên vi xử lý Intel Core-i7 4770K) Để mã nguồn này có thể biên dịch và thực thi đầy đủ các tính năng trên kiến trúc ARM Cortex-A9 (ARM v7

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 lệnh rdpmc (Đọc bộ đếm đo lường hiệu suất) hoặc rdtsc (Đọc bộ đếm dấu thời gian) để đánh giá hiệu năng chương trình Hai bộ đếm 64 bit này do bộ đếm hiệu suất của CPU x86_64 Intel/AMD cung cấp, dùng để đếm các giá trị đo lường hiệu suất hoặc thời gian giữa các sự kiện trong mã máy Đối với ARM Cortex-A9, nó có bộ đếm 32 bit tương tự là pmccntr (Bộ đếm chu kỳ của màn hình hiệu suất) Thay thế rdpmc/rdtsc bằng pmccntr giải quyết 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)

Coprocessor là thành phần quan trọng trong kiến trúc ARM, với Coprocessor Kiểm soát Hệ thống (Coprocessor 15 - CP15) đóng vai trò thiết yếu CP15 được sử dụng rộng rãi để điều khiển và thiết lập cấu hình hệ thống trong kiến trúc ARM, thực hiện các chức năng quan trọng như:

+ Cấu hình đặc tính hệ thống: CP15 được sử dụng để cấu hình các đặc tính của hệ thống, chẳng hạn như cơ sở dữ liệu bộ nhớ và tùy chọn cache

+ Quản lý bộ nhớ: CP15 chứa các thanh ghi để quản lý bộ nhớ, chẳng hạn như thanh ghi cấu hình TTBR (Translation Table Base Register) và thanh ghi cấu hình TLB (Translation Lookaside Buffer)

+ Quản lý quyền truy cập: Cung cấp các thanh ghi để kiểm soát quyền truy cập bộ nhớ, bao gồm các cơ chế kiểm soát quyền truy cập cơ bản

+ Quản lý hiệu suất: Hỗ trợ các thanh ghi bộ đếm hiệu suất và bộ đếm sự kiện hiệu suất thông qua cơ chế Performance Monitoring

+ Kiểm soát cơ bản: Chứa các thanh ghi kiểm soát hệ thống cơ bản như SCTLR (System Control Register), ACTLR (Auxiliary Control Register) để kiểm soát các tính năng cụ thể của lõi

+ Quản lý truy cập cache: Kiểm soát việc bật/tắt và cấu hình cache bộ nhớ, bao gồm các thanh ghi cấu hình các cấp độ cache

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 Thông thường, pmccntr được sử dụng để đo lường thời gian thực thi của một đoạn mã hoặc một chức năng

Mã assembly thường được sử dụng để truy nhập và cấu hình các thanh ghi trong System Control Coprocessor, để đọc pmccntr có thể sử dụng lệnh sau:

Trong đó, MRC là một lệnh coprocessor đọc giá trị từ thanh ghi của coprocessor vào thanh ghi tổng quát (general-purpose register)

Bằng cách đọc giá trị của pmccntr trước và sau khi thực thi một đoạn mã, bạn có thể tính được số chu kỳ xung nhịp đã trôi qua và từ đó đo lường thời gian thực thi của đoạn mã đó Tuy nhiên để có thể sử dụng pmccntr, cần kích hoạt và cấu hình nó ở kernel space Việc build lại kernel và kernel module nhằm mục đích kích hoạt và cấu hình hoạt động cho pmccntr sẽ được trình bày ở Phụ lục 9.1

Kết quả thực thi phần mềm trên HPS

Vị trí của dữ liệu được lưu trong RAM

Với 256 dữ liệu 16 bit được tính toán trong quá trình NTT/INTT Việc tính toán trong mỗi lớp của NTT sẽ bao gồm 128 phép tính toán Việc sử dụng cấu hình 2 BU sẽ giúp giảm số lượng phép tính cho mỗi lớp tính toán đi một nửa Để có thể thực hiện việc sử dụng 2 BU, độ dài dữ liệu sẽ được tăng từ 16 bit (256 dữ liệu) lên 32 bit (128 dữ liệu) So với việc thiết kế một bộ BRAM với số lượng ngõ vào/ra nhiều hơn (quad port in/out), cách này chỉ cần tăng độ dài bit của của RAM để đủ cho ngõ vào của 2 BU Vì vậy, RAM sử dụng có độ dài 32 bit cho mỗi port, có 2 port in/out là đảm bảo phục vụ đủ cho thiết kế

Do việc ở đây, hai dữ liệu 16 bit sẽ được ghép vào (16 bit H, 16 bit L) thành một dữ liệu 32 bit và lưu trữ trong RAM Vì vậy 2 dữ liệu này khi truy xuất phải được truy xuất đồng thời để đảm bảo việc truy xuất thực hiện đúng và hiệu quả Có thể nhận thấy, với 𝑛 = 256 , dữ liệu 2𝑘 và 2𝑘 + 1 (với 𝑘 = 0,1, … ,127) có thể được chọn để tính đồng thời và cùng lúc Vì vậy các cặp dữ liệu này được chọn để kết hợp thành các dữ liệu vào/ra 32 bit Chi tiết được thể hiện trong Bảng

Bộ tạo địa chỉ (Address Generator)

Bộ tạo địa chỉ đóng vai trò là một bộ tạo điều khiển và địa chỉ cho một ứng dụng cụ thể, cung cấp các tín hiệu và địa chỉ cần thiết để đảm bảo chuỗi dữ liệu cho từng chu kỳ trong một lớp Mỗi phép tính NTT/INTT cho Kyber n = 256 phải trải qua 7 lớp Mỗi lớp có 64 hoạt động của BU cho cấu hình BU kép Dựa trên chế độ và lớp hiện tại, mô-đun tạo ra các tín hiệu điều khiển cụ thể và tính toán các giá trị địa chỉ cho các lớp tính toán khác nhau Nó sử dụng các câu lệnh điều kiện và trường hợp để xác định hành vi dựa trên chế độ và giá trị của lớp Tùy thuộc vào giá trị lớp, nó tạo tín hiệu địa chỉ tới RAM và ROM, được sử dụng để đọc giá trị của đa thức và các twiddle factor Chuỗi địa chỉ của từng phép tính (NTT, INTT, Đầu vào và Đầu ra) được lưu trữ trong BRAM để giảm các đường dẫn quan trọng, nâng cao tốc độ của mạch và giảm mức tiêu thụ tài nguyên LUT

Giá trị twiddle factor

Các giá trị twiddle factors cần cho NTT và INTT được tính toán sẵn và lưu trong ROM cùng với vị trí của 𝑢, 𝑣 Cho mỗi bước tính toán, vị trí của 𝑢, 𝑣 và giá trị

𝜔 sẽ được lưu sẵn và đọc từ ROM để tối ưu tốc độ Thiết kế sử dụng bảng giá trị twiddle factor được tính toán sẵn bằng mã nguồn tham chiếu có giá trị như trong Bảng ở phần phụ lục 9.2.1.

Thiết kế phần cứng của BU

BU xử lý ba phép tính: cộng, trừ và nhân theo modulo Có các bước nhân và rút gọn modulo cho phép nhân modulo Với CRYSTALS-Kyber số nguyên tố 𝑞 3329, độ dài bit yêu cầu của mỗi hệ số đa thức là 12 bit Đầu vào cho BU và dữ liệu trong bộ nhớ được lưu trữ dưới dạng 16 bit để đảm bảo tính nhất quán với mô hình phần mềm sử dụng mã C tham chiếu Hơn nữa, ở bước đầu tiên, khi các đa thức được tạo ngẫu nhiên trong Kyber, chúng không bắt buộc phải tính modulo với số nguyên tố 𝑞 theo mặc định Vì vậy, đầu vào ban đầu vào BU có thể lớn hơn số nguyên tố 𝑞 và mọi đơn vị vận hành module phải chuẩn bị cho các đầu vào này Hình cho thấy sơ đồ khối của BU Nó có đầu vào 16 bit 𝑢 và 𝑣, đầu ra 16 bit 𝑐 và 𝑑, lựa chọn chế độ giữa Cooley-Tuckey (NTT) và Gentleman-Sande (INTT) và đầu vào 𝜔 16 bit cho twiddle factor Phép cộng và phép trừ modulo sử dụng bộ cộng Brent-Kung Các phép tính nhân mô-đun sử dụng lõi xử lý tín hiệu số (Digital Signal Processing – DSP ) và các khối rút gọn Montgomery, Barrett Độ trễ cho mỗi phép tính Butterfly CT/GS là

8 clocks (pipeline khối rút gọn Montgomery 2 clock và khối rút gọn Barrett 1 clock)

Hình 5.3 Sơ đồ khối của Butterfly Unit

Hình 5.4 Sơ đồ ngõ vào/ra của BU Bảng 5.1 Bảng mô tả chức năng chân khối phần cứng BU xử lý CT/GS

Chân Input/output Độ dài (bit) Mô tả clk Input 1 Xung clock hệ thống mode Input 2 Mode sử dụng

𝑢 Input 16 Ngõ vào dữ liệu a (u)

𝑣 Input 16 Ngõ vào dữ liệu b (t)

𝜔 Input 16 Ngõ vào dữ liệu twiddle factor

𝑐 Output 16 Ngõ ra dữ liệu c

𝑑 Output 16 Ngõ ra dữ liệu d

Bộ cộng Brent-Kung 16 bit

Ở hàng đầu tiên, các tiền tố được tính toán cho các nhóm 2 bit Các tiền tố này lần lượt được sử dụng để tìm các tiền tố cho các nhóm 4 bit, sau đó chúng được sử dụng để tính toán các tiền tố cho các nhóm 8 bit, v.v Và các tiền tố này được quay ngược lại để tính toán carry của từng bit Bộ cộng Brent Kung yêu cầu 2 log + 𝑁 giai đoạn tính toán Hình của bộ cộng Brent Kung 16-bit cho thấy fan-out ra là 2 ở mỗi giai đoạn và nơi sử dụng buffer

Hình 5.5 Bộ cộng Brent-Kung 16 bit

Một Gray cell có ba đầu vào và một đầu ra như trong Hình Tín hiệu Generate(G) và Propagate(P) hiện tại và tín hiệu G từ giai đoạn trước là đầu vào Tín hiệu nhóm G là đầu ra Mỗi giai đoạn kết thúc bằng một ô màu xám trong bất kỳ cấu trúc cây nào và đầu ra của ô màu xám này là tín hiệu tạo nhóm được coi là tín hiệu của giai đoạn đó

Black cell (Hình ) có 4 đầu vào và 2 đầu ra Đầu vào của ô đen là tín hiệu P và G của giai đoạn hiện tại và tín hiệu P, G của giai đoạn trước

Hình 5.7 Black cell Ở các giai đoạn khác nhau, bộ đệm (Hình 5.8) được sử dụng để giảm bớt căng thẳng cho các con đường quan trọng Trong hộp trên cùng, PG theo bit được trừu tượng hóa và ở hộp dưới cùng, tổng XOR được trừu tượng hóa Cổng AND-OR được cho là hoạt động song song để tạo ra carryout Thực tế là không bao giờ có nhiều hơn một ô trong mỗi cặp cột cho mỗi hàng nhất định giúp mạng Brent Kung có lợi thế hơn Không có nhiều cổng Các dây ngang dọc theo chiều dài của bộ cộng được cắt làm đôi, làm giảm chiều dài của chúng

Rút gọn Barrett với tham số Kyber

Trong NTT Kyber, việc tính toán 𝑎𝑏 𝑚𝑜𝑑 𝑞 với 𝑞 = 3329 cố định 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

+ Chọn 𝑘 ∈ ℕ sao cho 2 > 𝑞 Suy ra 𝑘 > 2 log + 𝑞 ≈ 11.7 à Chọn 𝑘 = 13 + Tính: 𝑣 = * ! 9

Thuật toán được mô tả bên dưới:

Rút gọn Montgomery trong Kyber

Phép rút gọn Montgomery trong Kyber giải quyết bài toán cho 𝐶 là số 32 bit sao cho −𝑞 ∙ 2 &, ≤ 𝐶 ≤ 𝑞 ∙ 2 &, − 1 Tính 𝑆 là số 16 bit sao cho 𝑆 ≡ 𝐶 ∙ : & mod 𝑞 với

𝐶 được tính theo giải thuật toán bên dưới:

Mục đích của phép rút gọn này là rút gọn kết quả của phép nhân 16 bit với mod 𝑞 Với 𝐶 là kết quả của phép nhân cần được rút gọn.

RAM và ROM

Mô-đun RAM bao gồm khối RAM (BRAM) được thiết lập ở chế độ cổng kép RAM có mảng bộ nhớ 128x32 bit để lưu trữ dữ liệu Khi kích hoạt lệnh ghi (we = 1), dữ liệu đầu vào (DAin, DBin) sẽ được ghi vào RAM tại địa chỉ ghi đã chỉ định (addA, addB) Nếu lệnh ghi không được kích hoạt (we = 0), dữ liệu đầu ra (DAout, DBout) sẽ được đọc từ RAM tại địa chỉ đọc đã chỉ định (addA, addB).

Module ROM có thể truy cập dựa trên các địa chỉ cụ thể được cung cấp bởi module Address Generator như đầu vào ROM cổng kép chứa tham số twiddle factor ω [zeta] được tính toán trước, đồng thời vị trí data in 𝑢, 𝑣 của từng step cũng được tính toán sẵn trong đó Nó chứa 2 mảng (1 cho NTT, 1 cho INTT) bộ nhớ 448x32 bit (8 cho vị trí 𝑢, 8 cho vị trí 𝑣, 16 cho zeta, 7*64 = 448 bước tính toán) và một mảng bộ nhớ 64*16 bit cho việc ghi giá trị input vào NTT Giá trị ban đầu của ROM được lưu sẵn để thuận lợi cho việc tính toán

Kết quả tổng hợp và mô phỏng

Kết quả tổng hợp mạch trên Vivado (Xilinx Artix-7 XC7A200T)

Hình 5.9 Kết quả tổng hợp tốc độ mạch trên Xilinx Artix-7

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

Tổng hợp tài nguyên tiêu thụ trên Xilinx Artix-7 của thiết kế phần cứng hiệu quả của NTT và INTT với tham số của mã hoá lượng tử CRYSTALS-Kyber Thiết kế (Cấu hình 2 BU) sử dụng chỉ 430 LUT, 544 FF, 3 BRAM, 16 DSP, đạt tốc độ tổng hợp mạch 5.18 ns ~ 193.05 MHz

Kết quả tổng hợp mạch trên Quartus (Cyclone V)

Hình 5.11 Kết quả tổng hợp trên Cyclone V

Hình 5.12 Tần số mạch tổng hợp trên Cyclone V

Tổng hợp tài nguyên tiêu thụ trên Cyclone V 5CSXFC6D6F31C6 của thiết kế với tham số của mã hoá lượng tử CRYSTALS-Kyber Thiết kế (Cấu hình 2 BU) sử dụng chỉ 504 ALMs, 760 registers, 16 DSP cùng 35072 memory bits, đạt tốc độ tổng hợp mạch ~ 109.42 MHz

Kết quả mô phỏng QuestaIntel

Hình 5.13 Kết quả mô phỏng dạng sóng ngõ ra đầu của phép tính NTT

Hình 5.14 Kết quả mô phỏng dạng sóng ngõ ra cuối của phép tính NTT

Hình 5.15 Kết quả mô phỏng dạng sóng ngõ ra đầu của phép tính INTT

Hình 5.16 Kết quả mô phỏng dạng sóng ngõ ra cuối của phép tính INTT

Kết quả mô phỏng dữ liệu ra của của các phép NTT/INTT với dữ liệu đầu vào được tạo ngẫu nhiên từ phần mềm tham chiếu Kyber.

Kết quả từ phần mềm Kyber

NTT input array: r_in_ntt[256]_hex: {0x0, 0xfffe, 0x0, 0x2, 0xfffe, 0xfffe, 0x1, 0xffff, 0x1, 0xffff, 0x0, 0x2, 0x0, 0x0, 0x1, 0xffff, 0x1, 0x0, 0x1, 0x2, 0xffff, 0x0, 0x1, 0xfffe, 0xffff, 0x0, 0xfffe, 0x1, 0xffff, 0x1, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x1, 0x0, 0xffff, 0xfffe, 0x0, 0x2, 0x0, 0x1, 0xffff, 0x1, 0x0, 0x1, 0x0, 0xfffe, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0xfffe, 0xffff, 0x0, 0xffff, 0xfffe, 0x1, 0x0, 0x0, 0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0xfffe, 0x0, 0x0, 0x0, 0xfffe, 0xffff, 0xfffe, 0x0, 0x0, 0x2, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0xffff, 0x1, 0x0, 0x0, 0x0, 0x0, 0xffff, 0xffff, 0x1, 0xffff, 0x0, 0xfffe, 0xffff, 0x1, 0x0, 0x2, 0x2, 0x1, 0xffff, 0xffff, 0x0, 0x0, 0x0, 0x1, 0xffff, 0x0, 0x0, 0x0, 0x1, 0xffff, 0xffff, 0x0, 0x2, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x1, 0x0, 0x1, 0xffff, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x1, 0xffff, 0x2, 0x0, 0x1, 0x0, 0x1, 0x2, 0x0, 0x0, 0xffff, 0x0, 0xffff, 0x0, 0x1, 0x0, 0xffff, 0x0, 0x1, 0xffff, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x1, 0x1, 0xffff, 0xffff, 0x0, 0x0, 0xfffe, 0x0, 0x1, 0x0, 0xffff, 0x0, 0x2, 0x1, 0x1, 0xfffe, 0x1, 0x1, 0xffff, 0x0, 0x1, 0x0, 0xffff, 0xfffe, 0x0, 0x0, 0xffff, 0x0, 0x1, 0x1, 0xffff, 0xffff, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x1, 0x0, 0x0, 0x0, 0xffff, 0xffff, 0xfffe, 0xffff, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0xffff, 0x0, 0x0, 0xffff, 0xffff, 0x1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0, 0xffff, 0x0, 0xffff, 0xffff, 0xffff, 0xfffe, 0x0, 0x0, 0x1, 0x2, 0x0, 0x0, 0x1, 0x0, 0x1, 0xffff, 0xffff, 0x1, 0xffff,

NTT output array: r_out_ntt[256]_hex: {0x70d, 0xf10a, 0x4af, 0xf372, 0x4da, 0xeef3, 0x26, 0xfb5d, 0x469, 0xfbd2, 0xf9c7, 0xef24, 0x2f8, 0x38, 0xddc, 0x1de, 0xf5bf, 0x77, 0xfd71, 0xc1, 0x191, 0xfc39, 0xa4b, 0x31b, 0x56, 0x5d2, 0x2d6, 0x113a, 0x2c8, 0x180, 0x0, 0x530, 0xfa49, 0xdfe, 0xfebb, 0xfd4, 0x210, 0x8b8, 0x9c4, 0x8ba, 0x481, 0x7b3, 0x1071, 0x2fb, 0xfb8a, 0xac5, 0x4a4, 0x1449, 0xa98,

0x20c, 0xb5a, 0x238, 0x2df, 0x4c5, 0x687, 0x51f, 0x34, 0x53b, 0x3ba, 0x2b, 0xfd2a, 0x8bc, 0xfe78, 0x8f6, 0xfd97, 0x1af, 0x321, 0xfcd9, 0xefbb, 0x509, 0xf7cd, 0x39b, 0xfd3f, 0xf9f7, 0xfc9f, 0x515, 0xfc3d, 0xa91, 0x3d5, 0x40f, 0x96b, 0xf6cf, 0x619, 0x37f, 0x587, 0xf29d, 0x1131, 0xf9f5, 0xfd1d, 0xf662, 0xf9a1, 0xfa96, 0x5a2, 0xf0e7, 0xfe84, 0xe969, 0xfc9a, 0xf00b, 0xfc7e, 0xf21d, 0xfdad, 0xf576, 0x60b, 0xf57e, 0xf733, 0x3f4, 0xff31, 0x10c, 0x442, 0xfbc5, 0xfb1a, 0xeef7, 0xfeb6, 0x552, 0xf6e8, 0x11ce, 0xfa7b, 0x5ae, 0xff77, 0x6b6, 0xf458, 0xff8a, 0xeb52, 0x4be, 0xed92, 0x42d, 0xefb4, 0xf74f, 0xff6f, 0x420, 0x47d, 0xfae8, 0xfccf, 0x972, 0xfbdd, 0xff9e, 0x836, 0xf57f, 0x12a8, 0x8d, 0xd5f, 0x4ae, 0x48b, 0xfd6e, 0xf61c, 0xfedc, 0xfb04, 0x428, 0x80c, 0x5f4, 0xfbb8, 0x364, 0x5af, 0xfd31, 0xf9f3, 0x40f, 0xec3, 0xe73, 0x7f7, 0xa11, 0xf9e8, 0xf23a, 0xf1c0, 0xe9f8, 0xf9b5, 0xf5f8, 0xf3af, 0xeec6, 0xf033, 0xefd3, 0xf779, 0xf29f, 0x127, 0xf96b, 0xf9a9, 0x1f3, 0x28a, 0xf63b, 0xfd64, 0xffa7, 0x270, 0xf55e, 0xfea6, 0xf590, 0xd14, 0x17e, 0x2c6, 0xfeb8, 0xfceb, 0xba, 0x70f, 0x40, 0xfb03, 0x639, 0xfc29, 0x72d, 0x54d, 0xf6b3, 0x607, 0x1d3, 0x9de, 0x193, 0x8fa, 0xf8bd, 0xa9, 0x32b, 0x33f, 0xfa11, 0x756, 0xf4d8, 0x200, 0xfd88, 0xff2b, 0xe5, 0xfcab, 0xb63, 0xfd30, 0x7a1, 0xf402, 0xb47, 0xf11a, 0xf6f3, 0xf2b8, 0x265, 0xfdef, 0x47, 0x1f, 0x8d1, 0x8aa, 0xf839, 0x4c8, 0xf82f, 0xfed3, 0x68a, 0x717, 0xfd2e, 0xb5e, 0x4ae, 0x8e0, 0xfd62, 0xfe10, 0x85a, 0x9a4, 0x634, 0x76f, 0x16ec, 0xfbdd, 0xaf6, 0xf477, 0xf37, 0xf813,

INTT input array: r_in_intt[256]_hex: {0xfa0c, 0xfe0b, 0x4af, 0x73, 0x4da, 0xfbf4, 0x26, 0xfb5d, 0x469, 0xfbd2, 0xf9c7, 0xfc25, 0x2f8, 0x38, 0xdb, 0x1de, 0x2c0, 0x77, 0xfd71, 0xc1, 0x191, 0xfc39, 0xfd4a, 0x31b, 0x56, 0x5d2, 0x2d6, 0x439, 0x2c8, 0x180, 0x0, 0x530, 0xfa49, 0xfd, 0xfebb, 0x2d3, 0x210, 0xfbb7, 0xfcc3, 0xfbb9, 0x481, 0xfab2, 0x370, 0x2fb, 0xfb8a, 0xfdc4, 0x4a4, 0xfa47, 0xfd97, 0x20c, 0xfe59, 0x238, 0x2df, 0x4c5, 0xf986, 0x51f, 0x34, 0x53b, 0x3ba, 0x2b, 0xfd2a, 0xfbbb, 0xfe78, 0xfbf5, 0xfd97, 0x1af, 0x321, 0xfcd9, 0xfcbc, 0x509, 0x4ce, 0x39b, 0xfd3f, 0xf9f7, 0xfc9f, 0x515, 0xfc3d, 0xfd90, 0x3d5, 0x40f, 0xfc6a, 0x3d0, 0x619, 0x37f, 0x587, 0xff9e, 0x430, 0xf9f5, 0xfd1d, 0x363, 0xf9a1, 0xfa96, 0x5a2, 0xfde8, 0xfe84, 0x36b, 0xfc9a, 0xfd0c, 0xfc7e, 0xff1e, 0xfdad, 0x277, 0x60b, 0x27f, 0x434, 0x3f4, 0xff31, 0x10c, 0x442, 0xfbc5, 0xfb1a, 0xfbf8, 0xfeb6, 0x552, 0x3e9, 0x4cd, 0xfa7b, 0x5ae, 0xff77, 0xf9b5, 0x159, 0xff8a, 0x554, 0x4be, 0xfa93, 0x42d, 0xfcb5, 0x450, 0xff6f, 0x420, 0x47d, 0xfae8, 0xfccf, 0xfc71, 0xfbdd, 0xff9e, 0xfb35, 0x280, 0x5a7, 0x8d, 0x5e, 0x4ae, 0x48b, 0xfd6e, 0x31d, 0xfedc, 0xfb04, 0x428, 0xfb0b, 0x5f4, 0xfbb8, 0x364, 0x5af, 0xfd31, 0xf9f3, 0x40f, 0x1c2, 0x172, 0xfaf6, 0xfd10, 0xf9e8, 0xff3b, 0xfec1, 0x3fa, 0xf9b5, 0x2f9, 0xb0, 0xfbc7, 0xfd34, 0xfcd4, 0x47a, 0xffa0, 0x127, 0x66c, 0xf9a9, 0x1f3, 0x28a, 0x33c, 0xfd64, 0xffa7, 0x270, 0x25f, 0xfea6, 0x291, 0x13, 0x17e, 0x2c6, 0xfeb8, 0xfceb, 0xba, 0xfa0e, 0x40, 0xfb03, 0x639, 0xfc29, 0xfa2c, 0x54d, 0x3b4, 0x607, 0x1d3, 0xfcdd, 0x193, 0xfbf9, 0x5be, 0xa9, 0x32b, 0x33f, 0xfa11, 0xfa55, 0x1d9, 0x200, 0xfd88, 0xff2b, 0xe5, 0xfcab, 0xfe62, 0xfd30, 0xfaa0, 0x103, 0xfe46, 0xfe1b, 0x3f4, 0xffb9, 0x265,

0xfdef, 0x47, 0x1f, 0xfbd0, 0xfba9, 0x53a, 0x4c8, 0x530, 0xfed3, 0xf989, 0xfa16, 0xfd2e, 0xfe5d, 0x4ae, 0xfbdf, 0xfd62, 0xfe10, 0xfb59, 0xfca3, 0x634, 0xfa6e, 0xfcea, 0xfbdd, 0xfdf5, 0x178, 0x236, 0x514, 0xff9a, 0xfaa1, 0x1a9,

INTT output array: r_out_before_fqmul[256]_hex: {0x0, 0xff00, 0x0, 0x100, 0xff00, 0xff00, 0x80, 0xff80, 0x80, 0xff80, 0x0, 0x100, 0x0, 0x0, 0x80, 0xff80, 0x80, 0x0, 0x80, 0x100, 0xff80, 0x0, 0x80, 0xff00, 0xff80, 0x0, 0xff00, 0x80, 0xff80, 0x80, 0x0, 0x0, 0xff80, 0x0, 0x0, 0x0, 0x80, 0x0, 0xff80, 0xff00, 0x0, 0x100, 0x0, 0x80, 0xff80, 0x80, 0x0, 0x80, 0x0, 0xff00, 0x0, 0x0, 0x0, 0xff80, 0x0, 0x0, 0xff00, 0xff80, 0x0, 0xff80, 0xff00, 0x80, 0x0, 0x0, 0xff80, 0xff80, 0x0, 0x0, 0x0, 0x0, 0xff00, 0x0, 0x0, 0x0, 0xff00, 0xff80, 0xff00, 0x0, 0x0, 0x100, 0x0, 0x80, 0x0, 0x0, 0x80, 0x80, 0xff80, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff80, 0xff80, 0x80, 0xff80, 0x0, 0xff00, 0xff80, 0x80, 0x0, 0x100, 0x100, 0x80, 0xff80, 0xff80, 0x0, 0x0, 0x0, 0x80, 0xff80, 0x0, 0x0, 0x0, 0x80, 0xff80, 0xff80, 0x0, 0x100, 0x0, 0x0, 0xff80, 0x0, 0x0, 0x80, 0x0, 0x80, 0xff80, 0x0, 0x0, 0xff80, 0x0, 0x0, 0x80, 0xff80, 0x100, 0x0, 0x80, 0x0, 0x80, 0x100, 0x0, 0x0, 0xff80, 0x0, 0xff80, 0x0, 0x80, 0x0, 0xff80, 0x0, 0x80, 0xff80, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0xff80, 0x80, 0x80, 0xff80, 0xff80, 0x0, 0x0, 0xff00, 0x0, 0x80, 0x0, 0xff80, 0x0, 0x100, 0x80, 0x80, 0xff00, 0x80, 0x80, 0xff80, 0x0, 0x80, 0x0, 0xff80, 0xff00, 0x0, 0x0, 0xff80, 0x0, 0x80, 0x80, 0xff80, 0xff80, 0x80, 0x0, 0x80, 0x0, 0x0, 0x0, 0x100, 0x80, 0x0, 0x0, 0x0, 0xff80, 0xff80, 0xff00, 0xff80, 0x100, 0x0, 0x80, 0x100, 0x80, 0x0, 0xff80, 0x0, 0x0, 0xff80, 0xff80, 0x80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0xff80, 0x0, 0xff80, 0x0, 0xff80, 0xff80, 0xff80, 0xff00, 0x0, 0x0, 0x80, 0x100, 0x0, 0x0, 0x80, 0x0, 0x80, 0xff80, 0xff80, 0x80, 0xff80, 0x80, 0x0, 0x80, 0xff00, 0x100, 0x0}

Kết quả mô phỏng phần cứng trên QuestaIntel là chính xác so với kết quả từ ntt của mã nguồn CRYSTALS-Kyber Với cùng dữ liệu vào, bộ NTT/INTT trên phần cứng cho kết quả khớp với kết quả chạy trên phần mềm Điều này chứng tỏ thiết kế là chính xác và có độ tin cậy cao 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

Đánh giá và bàn luận kết quả

Bảng 5.2 Thiết kế đề xuất so với cái nghiên cứu NTT tương tự trước đây

[MHz] LUTs FFs DSPs BRAM

Thực hiện mô phỏng và tổng hợp thiết kế bộ tăng tốc NTT/INTT trên nền tảng FPGA Xilinx Vivado 23.1, Artix-7 Thiết kế này gồm 430 LUTs, 544 Flip Flops, 16 DSP và 3 BRAM, hoạt động ở tốc độ 262 MHz Khi so sánh với các thiết kế bộ tăng tốc NTT/INTT dựa trên FPGA đã được công bố, thiết kế này có cấu hình đơn vị bươm bướm, sử dụng tài nguyên và tốc độ hoạt động phù hợp với các tiêu chí đánh giá.

Về sử dụng tài nguyên, thuật toán HS-NTT [29] đạt số lượng LUT tương đối thấp so với các thiết kế khác Tuy nhiên, nó sử dụng một số lượng FF vừa phải và có giới hạn về số lượng DSP và BRAM Thiết kế Low-Comp [3] chứng minh giảm đáng kể số lượng LUT nhưng sử dụng nhiều FF hơn Thiết kế QISC [20] cho thấy việc sử dụng DSP cao nhưng không cần sử dụng BRAM 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

1 Thực hiện trên Intel Cyclone V

2 Thực hiện trên Xilinx Artix-7

3 Thực hiện trên Xilinx Zynq-7000

Về tốc độ, thiết kế đề xuất đạt tốc độ clock cao hơn thiết kế [28] tuy nhiên lại thấp hơn các tài thiết kế [4][29][28] Thiết kế đề xuất tối ưu trong việc sử dụng tài nguyên LUT và FFs với cùng cấu hình 2 BU, thiết kế tận dụng BRAM để lưu trữ chuỗi địa chỉ, các twiddle factor và dữ liệu thay vì sử dụng LUT cho việc tạo địa chỉ logic Để tương thích với ngõ vào 16 bit như phần mềm tham chiếu, các bước tiền/hậu xử lý cũng tốn nhiều thời gian trong việc tính toán hơn, từ đó gây ra tốc độ tổng hợp mạch thấp hơn một số 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 Cấu hình BU (Sử dụng Khối) của mỗi thiết kế được làm nổi bật trong Bảng 2 Thiết kế được đề xuất áp dụng cấu hình 2 BU tương tự như [3, 20, 28], giúp đơn giản hóa việc tích hợp vào các hệ thống hiện tại và cấu trúc bộ xử lý như RISC-V

Rất quan trọng khi xem xét nền tảng mà những thiết kế này được thực hiện; các nền tảng FPGA khác nhau có thể có kết quả tổng hợp khác nhau, khiến việc so sánh trực tiếp trở nên không khả thi Nói chung, thiết kế đề xuất hiệu quả hơn về và có khả năng cấu hình cao hơn so với các tài liệu tham khảo hiện có

Thiết kế cũng sử dụng phép toán trên tập số nguyên để có thể kiểm tra được kết quả trực tiếp với phần mềm tham chiếu

6 KẾT LUẬN VÀ KIẾN NGHỊ NHỮNG

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 Ngoài ra, việc tăng thông lượng qua mạng BU song song hoá sẽ cải thiện đáng kể tốc độ tính toán NTT/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) Đây là hàm băm được chuẩn hoá và có thể tối ưu tính toán trên phần cứng Đ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

Bộ tăng tốc NTT/INTT có khả năng mở rộng cho các thuật toán mã hóa lưới khác như CRYSTALS-Dilithium và NTRU Mặc dù các thuật toán này có thể có các thông số khác nhau, nhưng chúng đều dựa trên tính chất toán học của phép biến đổi NTT/INTT.

7 DANH MỤC CÁC CÔNG TRÌNH KHOA HỌC

1 T Nguyen, H Anh, H Nguyen, T Hoang, L Tran “Efficient Number Theoretic Transform (NTT) Accelerator for CRYSTALS-Kyber,” Indonesian

Journal of Electrical Engineering and Computer Science, vol 33, no 2, pp

[1] D Moody, “Module-Lattice-Based Key-Encapsulation Mechanism Standard,” National Institute of Standards and Technology, Gaithersburg, MD, Tech Rep NIST FIPS 203 ipd, 2023, doi: 10.6028/NIST.FIPS.203.ipd

[2] J Bos, L Ducas, E Kiltz, T Lepoint, V Lyubashevsky, J M Schanck, P Schwabe,

G Seiler, and D Stehle, “CRYSTALS - Kyber: A CCA-Secure Module-Lattice- Based KEM,” in 2018 IEEE European Symposium on Security and Privacy (EuroS&P) London: IEEE, Apr 2018, pp 353–367, doi: 10.1109/EuroSP.2018.00032

[3] N Zhang, B Yang, C Chen, S Yin, S Wei, and L Liu, “Highly Efficient Architecture of NewHope-NIST on FPGA using Low-Complexity NTT/INTT,”

IACR Transactions on Cryptographic Hardware and Embedded Systems, pp 49–

[4] H Nguyen and L Tran, “Design of Polynomial NTT and INTT Accelerator for Post-Quantum Cryptography CRYSTALS-Kyber,” Arabian Journal for Science and Engineering, vol 48, no 2, pp 1527–1536, Feb 2023, doi: 10.1007/s13369-

[5] T Ye, Y Yang, S R Kuppannagari, R Kannan, and V K Prasanna, “FPGA Acceleration of Number Theoretic Transform,” in High Performance Computing, ser Lecture Notes in Computer Science, B L Chamberlain, A.-L Varbanescu, H Ltaief, and P Luszczek, Eds Cham: Springer International Publishing, 2021, pp 98–117, doi: 10.1007/978-3-030-78713-46

[6] J Zhang, M Imani, and E Sadredini, “BP-NTT: Fast and Compact in-SRAM Number Theoretic Transform with Bit-Parallel Modular Multiplication,” 2023, doi: 10.48550/ARXIV.2303.00173

[7] D W Kim, D I Maulana, and W Jung, “Kyber Accelerator on FPGA Using Energy-Efficient LUT-Based Barrett Reduction,” in 2022 19th International SoC Design Conference (ISOCC), Oct 2022, pp 83–84, doi: 10.1109/ISOCC56007.2022.10031533

[8] T Fritzmann and J Sepulveda, “Efficient and Flexible Low-Power NTT for Lattice- Based Cryptography,” in 2019 IEEE International Symposium on Hardware Oriented Security and Trust (HOST), May 2019, pp 141–150, doi:

[9] C Zhang, D Liu, X Liu, X Zou, G Niu, B Liu, and Q Jiang, “Towards Efficient Hardware Implementation of NTT for Kyber on FPGAs,” in 2021 IEEE International Symposium on Circuits and Systems (ISCAS), May 2021, pp 1–5, doi:

[10] B M K Younis and A K Younis, “Hardware accelerator for anti-aliasing Wu’s line algorithm using FPGA,” TELKOMNIKA (Telecommunication Computing Electronics and Control), vol.19, no.2, p.672, Apr 2021, doi:

[11] P Visconti, R Velazquez, C D.-V Soto, and R D Fazio, “FPGA based technical solutions for high throughput data processing and encryption for 5G communication: A review,” TELKOMNIKA (Telecommunication Computing Electronics and Control), vol 19, no 4, p 1291, Aug 2021 , doi: 10.12928/telkomnika.v19i4.18400

[12] M K Metwaly, M Alsharef, N A Sabiha, E E Elattar, I B M Taha, A M Abd- Elhady, and N I Elkalashy, “Smart integration of drive system for induction motor applications in electric vehicles,” International Journal of Power Electronics and

Drive Systems (IJPEDS), vol 12, no 1, p 20, Mar 2021, doi:

[13] T Gomathi and M Shaby, “An efficient and effective energy harvesting system using surface micromachined accelerometer,” International Journal of Power Electronics and Drive Systems (IJPEDS), vol 13, no 2, p 1068, Jun 2022doi: 10.11591/ijpeds.v13.i2.pp1068-1074

[14] R Paludo and L Sousa, “NTT Architecture for a Linux-Ready RISC-V Fully- Homomorphic Encryption Accelerator,” IEEE Transactions on Circuits and Systems I: Regular Papers, vol 69, no 7, pp 2669–2682, Jul 2022 , doi: 10.1109/TCSI.2022.3166550

[15] K Derya, A C Mert, E Ozt urk, and E Savas, “CoHA-NTT: A Configurable Hardware Accelerator for NTT-based Polynomial Multiplication,”

Microprocessors and Microsystems, vol 89, p 104451, Mar 2022 , doi: 10.1016/j.micpro.2022.104451

[16] R Geelen, M Van Beirendonck, H V L Pereira, B Huffman, T McAuley, B Selfridge, D Wagner, G Dimou, I Verbauwhede, F Vercauteren, and D W Archer, “BASALISC: Programmable Hardware Accelerator for BGV Fully Homomorphic Encryption,” IACR Transactions on Cryptographic Hardware and

Embedded Systems, pp 32–57, Aug 2023, doi: 10.46586/tches.v2023.i4.32-57 [17] H Kuang, Y Zhao, and J Han, “A High-Speed NTT-Based Polynomial Multiplication Accelerator with Vector Extension of RISCV for Saber Algorithm,” in 2022 IEEE Asia Pacific Conference on Circuits and Systems (APCCAS), Nov

[18] Z Chen, Y Ma, T Chen, J Lin, and J Jing, “Towards Efficient Kyber on FPGAs:

A Processor for Vector of Polynomials,” in 2020 25th Asia and South Pacific Design Automation Conference (ASP-DAC), Jan 2020, pp 247–252, doi:

[19] P Karl, J Schupp, T Fritzmann, and G Sigl, “Post-Quantum Signatures on RISC-

V with Hardware Acceleration,” ACM Transactions on Embedded Computing Systems, p 3579092, Jan 2023, doi: 10.1145/3579092

[20] T Fritzmann, G Sigl, and J Sepulveda, “RISQ-V: Tightly Coupled RISC-V Accelerators for Post-Quantum Cryptography,” IACR Transactions on

Cryptographic Hardware and Embedded Systems, pp 239–280, Aug 2020, doi:

[21] T Fritzmann, U Sharif, D Muller-Gritschneder, C Reinbrecht, U Schlichtmann, and J Sepulveda, “Towards Reliable and Secure Post-Quantum Co-Processors based on RISC-V,” in 2019 Design, Automation & Test in Europe Conference & Exhibition (DATE), Mar 2019, pp 1148–1153, doi: 10.23919/DATE.2019.8715173

[22] Z Azad, G Yang, R Agrawal, D Petrisko, M Taylor, and A 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 ISLPED ’22 New York, NY, USA:

Association for Computing Machinery, Aug 2022, pp 1–6, doi:

[23] D Micciancio and O Regev, “Lattice-based Cryptography,” in Post-Quantum Cryptography, D J Bernstein, J Buchmann, and E Dahmen, Eds Berlin,

Heidelberg: Springer, 2009, pp 147–191, doi: 10.1007/978-3-540-88702-75 [24] M Scott, “A Note on the Implementation of the Number Theoretic Transform,” in

Cryptography and Coding, ser Lecture Notes in Computer Science, M O’Neill, Ed

Cham: Springer International Publishing, 2017, pp 247–258, doi: 10.1007/978-3- 319-71045-713

[25] T Poppelmann and T G uneysu, “Towards Efficient Arithmetic for Lattice-Based Cryptography on Reconfigurable Hardware,” in ¨ Progress in Cryptology – LATINCRYPT 2012, ser Lecture Notes in Computer Science, A Hevia and G

Neven, Eds Berlin, Heidelberg: Springer, 2012, pp 139–158, doi: 10.1007/978-3- 642-33481-88

[26] Brent and Kung, “A Regular Layout for Parallel Adders,” IEEE Transactions on Computers, vol C-31, no 3, pp 260–264, Mar 1982 , doi: 10.1109/TC.1982.1675982

[27] P Longa and M Naehrig, “Speeding up the Number Theoretic Transform for Faster Ideal Lattice-Based Cryptography,” in Cryptology and Network Security, ser

Lecture Notes in Computer Science, S Foresti and G Persiano, Eds Cham: Springer International Publishing, 2016, pp 124–139 , doi: 10.1007/978-3-319- 48965-08

[28] Y Xing and S Li, “A Compact Hardware Implementation of CCA-Secure Key Exchange Mechanism CRYSTALSKYBER on FPGA,” IACR Transactions on Cryptographic Hardware and Embedded Systems, pp 328–356, Feb 2021., doi: 10.46586/tches.v2021.i2.328-356

[29] M Bisheh-Niasar, R Azarderakhsh, and M Mozaffari-Kermani, “High-Speed NTT-based Polynomial Multiplication Accelerator for Post-Quantum Cryptography,” in 2021 IEEE 28th Symposium on Computer Arithmetic (ARITH) Lyngby, Denmark: IEEE, Jun 2021, pp 94–101 , doi: 10.1109/ARITH51176.2021.00028

[30] Y Huang, M Huang, Z Lei, and J Wu, “A pure hardware implementation of crystals-kyber PQC algorithm through resource reuse,” in IEICE Electronics Express, 2020, pp 1-6, doi: 10.1587/elex.17.20200234

[31] L Botros, M J Kannwischer, and P Schwabe, “Memory-efficient high-speed implementation of Kyber on Cortex-M4,” in International Conference on Cryptology in Africa, pp 209-228 Springer, Cham, 2019, doi: 10.1007/978-3-030-

[32] A Jati, N Gupta, A Chattopadhyay, and S K Sanadhya “A Configurable Crystals- Kyber Hardware Implementation with SideChannel Protection,” in ACM Transactions on Embedded Computing Systems, 2023, doi: 10.1145/3587037

[33] P Schwabe, “CRYSTALS-Kyber Home.” Internet: https://pq-crystals.org/kyber/, Dec 2020

[34] PQCRYPTO ICT-645662, “PQM4 Project.” Internet: https://github.com/mupq/pqm4, June 2022

[35] T Nguyen, S Kim, Y Eom, H Lee “Area-Time Efficient Hardware Architecture for CRYSTALS-Kyber,” in Applied Sciences, 2022, doi: 10.3390/app12115305

Kernel

Kernel module cho pmccntr

Theo tài liệu về Cortex-A9 do arm cung cấp, để xây dựng mô-đun hạt nhân nhằm mục đích kích hoạt các thanh ghi quản lý hiệu suất (System Performance Monitor), các tùy chọn cấu hình được mô tả trong đoạn mã C dưới đây:```cstatic void enable_ccnt_read(void* data)```

// PMCR.E (bit 0) = 1 asm volatile ("mcr p15, 0, %0, c9, c12, 0" :: "r"(1));

// PMCNTENSET.C (bit 31) = 1 asm volatile ("mcr p15, 0, %0, c9, c12, 1" :: "r"(1

Ngày đăng: 22/05/2024, 11:06

HÌNH ẢNH LIÊN QUAN

Hình 3.1 Mã hoá đối xứng - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.1 Mã hoá đối xứng (Trang 24)
Hình 3.2 Mã hoá bất đối xứng - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.2 Mã hoá bất đối xứng (Trang 25)
Hình 3.4 Quá trình encryption/decryption của kyber - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.4 Quá trình encryption/decryption của kyber (Trang 26)
Hình 3.3 Quá trình tạo khoá của CRYSTALS-Kyber - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.3 Quá trình tạo khoá của CRYSTALS-Kyber (Trang 26)
Bảng 3.1 Thông số của các phiên bản Kyber - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Bảng 3.1 Thông số của các phiên bản Kyber (Trang 27)
Hình 3.6 NTT/INTT với n=8 - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.6 NTT/INTT với n=8 (Trang 30)
Hình 3.5 Hai Butterfly Unit với thuật toán giảm độ phức tạp. - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.5 Hai Butterfly Unit với thuật toán giảm độ phức tạp (Trang 30)
Hình 3.7 Cấu trúc hình cây của bộ cộng Brent-Kung - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 3.7 Cấu trúc hình cây của bộ cộng Brent-Kung (Trang 31)
Hình 4.1 Sơ đồ khối đơn giản của Cyclone V - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 4.1 Sơ đồ khối đơn giản của Cyclone V (Trang 34)
Hình 4.2 Altera (Intel) SoC boot flow - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 4.2 Altera (Intel) SoC boot flow (Trang 35)
Hình 5.1 Block diagram cho thiết kế phần cứng bộ tăng tốc NTT - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.1 Block diagram cho thiết kế phần cứng bộ tăng tốc NTT (Trang 42)
Hình 5.2 Sơ đồ máy trạng thái của bộ tăng tốc NTT - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.2 Sơ đồ máy trạng thái của bộ tăng tốc NTT (Trang 42)
Hỡnh 5.4 Sơ đồ ngừ vào/ra của BU - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
nh 5.4 Sơ đồ ngừ vào/ra của BU (Trang 45)
Hình 5.3 Sơ đồ khối của Butterfly Unit - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.3 Sơ đồ khối của Butterfly Unit (Trang 45)
Bảng 5.1 Bảng mô tả chức năng chân khối phần cứng BU xử lý CT/GS - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Bảng 5.1 Bảng mô tả chức năng chân khối phần cứng BU xử lý CT/GS (Trang 45)
Hình 5.5 Bộ cộng Brent-Kung 16 bit - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.5 Bộ cộng Brent-Kung 16 bit (Trang 46)
Hình 5.6 Gray cell - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.6 Gray cell (Trang 46)
Hình 5.7 Black cell - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.7 Black cell (Trang 47)
Hình 5.8 Bộ đệm - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.8 Bộ đệm (Trang 47)
Hình 5.10 Tài nguyên tiêu thụ trên Xilinx Artix-7 - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.10 Tài nguyên tiêu thụ trên Xilinx Artix-7 (Trang 50)
Hình 5.11 Kết quả tổng hợp trên Cyclone V - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 5.11 Kết quả tổng hợp trên Cyclone V (Trang 51)
Hỡnh 5.13 Kết quả mụ phỏng dạng súng ngừ ra đầu của phộp tớnh NTT - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
nh 5.13 Kết quả mụ phỏng dạng súng ngừ ra đầu của phộp tớnh NTT (Trang 52)
Hỡnh 5.16 Kết quả mụ phỏng dạng súng ngừ ra cuối của phộp tớnh INTT - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
nh 5.16 Kết quả mụ phỏng dạng súng ngừ ra cuối của phộp tớnh INTT (Trang 53)
Bảng 5.2 Thiết kế đề xuất so với cái nghiên cứu NTT tương tự trước đây - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Bảng 5.2 Thiết kế đề xuất so với cái nghiên cứu NTT tương tự trước đây (Trang 56)
Hình 9.1 Giao diện cửa sổ cấu hình kernel - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Hình 9.1 Giao diện cửa sổ cấu hình kernel (Trang 68)
9.2.1  Bảng dữ liệu twiddle factor - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
9.2.1 Bảng dữ liệu twiddle factor (Trang 70)
Bảng 9.2 Bảng map vị trí dữ liệu 16 - 32 bit - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
Bảng 9.2 Bảng map vị trí dữ liệu 16 - 32 bit (Trang 71)
9.3  Sơ đồ Netlist Viewer - thiết kế bộ tăng tốc ntt cho mã hóa sau lượng tử crystals kyber
9.3 Sơ đồ Netlist Viewer (Trang 73)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w