doc: update ML-KEM IP design report with cover page, design evaluation, and comparisons
This commit is contained in:
BIN
doc/reports/logo_cicc.png
Normal file
BIN
doc/reports/logo_cicc.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
Binary file not shown.
@@ -16,20 +16,25 @@
|
|||||||
\usepackage{fancyhdr}
|
\usepackage{fancyhdr}
|
||||||
\usepackage{tikz}
|
\usepackage{tikz}
|
||||||
\usepackage{enumitem}
|
\usepackage{enumitem}
|
||||||
|
\usepackage[normalem]{ulem}
|
||||||
\usepackage{listings}
|
\usepackage{listings}
|
||||||
\usepackage{xcolor}
|
\usepackage{xcolor}
|
||||||
\usepackage{algorithm}
|
\usepackage{algorithm}
|
||||||
\usepackage{algpseudocode}
|
\usepackage{algpseudocode}
|
||||||
|
|
||||||
% ─── Styling ─────────────────────────────────────────────────
|
% ─── Styling ─────────────────────────────────────────────────
|
||||||
|
\raggedbottom
|
||||||
\hypersetup{colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue}
|
\hypersetup{colorlinks=true,linkcolor=black,citecolor=black,urlcolor=blue}
|
||||||
\pagestyle{fancy}
|
\pagestyle{fancy}
|
||||||
\fancyhead[LO,RE]{ML-KEM硬件IP设计报告}
|
\fancyhead[LO,RE]{ML-KEM硬件IP设计报告}
|
||||||
\fancyhead[RO,LE]{\thepage}
|
\fancyhead[RO,LE]{\thepage}
|
||||||
\fancyfoot[C]{}
|
\fancyfoot[C]{}
|
||||||
\setlength{\parskip}{6pt plus 2pt minus 1pt}
|
\setlength{\parskip}{4pt plus 2pt minus 1pt}
|
||||||
\setlength{\parindent}{2em}
|
\setlength{\parindent}{2em}
|
||||||
\setlength{\headheight}{14pt}
|
\setlength{\headheight}{14pt}
|
||||||
|
\setlength{\intextsep}{6pt plus 2pt}
|
||||||
|
\setlength{\textfloatsep}{8pt plus 2pt}
|
||||||
|
\captionsetup{skip=4pt}
|
||||||
|
|
||||||
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,numbers=left,numberstyle=\tiny,xleftmargin=2em,language=Verilog}
|
\lstset{basicstyle=\ttfamily\small,breaklines=true,frame=single,numbers=left,numberstyle=\tiny,xleftmargin=2em,language=Verilog}
|
||||||
|
|
||||||
@@ -38,10 +43,44 @@
|
|||||||
|
|
||||||
\title{\textbf{ML-KEM后量子密钥封装硬件IP核\\设计与验证}}
|
\title{\textbf{ML-KEM后量子密钥封装硬件IP核\\设计与验证}}
|
||||||
\author{碳基生物\\[4pt] \small 团队编号:CICC1008439\\[8pt] \normalsize 龙芯中科杯·2026全国大学生集成电路创新创业大赛}
|
\author{碳基生物\\[4pt] \small 团队编号:CICC1008439\\[8pt] \normalsize 龙芯中科杯·2026全国大学生集成电路创新创业大赛}
|
||||||
\date{\today}
|
\date{}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
% 封 面
|
||||||
|
% ================================================================
|
||||||
|
\begin{titlepage}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
\vspace*{30pt}
|
||||||
|
|
||||||
|
\includegraphics[width=0.45\textwidth]{logo_cicc.png}
|
||||||
|
|
||||||
|
\vspace{36pt}
|
||||||
|
|
||||||
|
{\fontsize{22pt}{28pt}\selectfont\bfseries 第十届}
|
||||||
|
|
||||||
|
\vspace{4pt}
|
||||||
|
|
||||||
|
{\fontsize{22pt}{28pt}\selectfont\bfseries 全国大学生集成电路创新创业大赛}
|
||||||
|
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
\vspace{80pt}
|
||||||
|
|
||||||
|
\begin{flushleft}
|
||||||
|
\fontsize{14pt}{22pt}\selectfont
|
||||||
|
报告类型:\uline{\hfill 设计报告\hfill} \\[18pt]
|
||||||
|
参赛杯赛:\uline{\hfill 龙芯中科杯\hfill} \\[18pt]
|
||||||
|
作品名称:\uline{\hfill ML-KEM后量子密钥封装硬件IP核设计与验证\hfill} \\[18pt]
|
||||||
|
队伍编号:\uline{\hfill CICC1008439\hfill} \\[18pt]
|
||||||
|
团队名称:\uline{\hfill 碳基生物\hfill}
|
||||||
|
\end{flushleft}
|
||||||
|
|
||||||
|
\end{titlepage}
|
||||||
|
|
||||||
\maketitle
|
\maketitle
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\newpage
|
\newpage
|
||||||
@@ -79,7 +118,7 @@ RTL代码总计约5,517行(不含测试平台),其中\texttt{mlkem\_top.v}
|
|||||||
|
|
||||||
\texttt{mlkem\_top}的运行时参数由输入端口$k\_i$和$op\_i$在\texttt{start\_i}脉冲时刻锁存至内部寄存器$k\_r$和$op\_r$,后续所有数据通路宽度、存储子区间基地址和循环次数均由$k\_r$推导。表\ref{tab:params}列出三种安全等级的密钥和密文尺寸。
|
\texttt{mlkem\_top}的运行时参数由输入端口$k\_i$和$op\_i$在\texttt{start\_i}脉冲时刻锁存至内部寄存器$k\_r$和$op\_r$,后续所有数据通路宽度、存储子区间基地址和循环次数均由$k\_r$推导。表\ref{tab:params}列出三种安全等级的密钥和密文尺寸。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{运行时安全等级参数}
|
\caption{运行时安全等级参数}
|
||||||
\label{tab:params}
|
\label{tab:params}
|
||||||
@@ -100,7 +139,7 @@ $k\_i$ & 方案 & $K$ & $\eta_1$ & $(d_u,d_v)$ & ek(B) & dk(B) & ct(B) \\
|
|||||||
|
|
||||||
\texttt{mlkem\_top}的端口按功能分为四组。表\ref{tab:ports}列出主要信号。
|
\texttt{mlkem\_top}的端口按功能分为四组。表\ref{tab:ports}列出主要信号。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{mlkem\_top主要端口}
|
\caption{mlkem\_top主要端口}
|
||||||
\label{tab:ports}
|
\label{tab:ports}
|
||||||
@@ -109,7 +148,7 @@ $k\_i$ & 方案 & $K$ & $\eta_1$ & $(d_u,d_v)$ & ek(B) & dk(B) & ct(B) \\
|
|||||||
\toprule
|
\toprule
|
||||||
\textbf{信号} & \textbf{位宽} & \textbf{功能} \\
|
\textbf{信号} & \textbf{位宽} & \textbf{功能} \\
|
||||||
\midrule
|
\midrule
|
||||||
clk, rst\_n & 1, 1 & 时钟(25 MHz)与低电平异步复位 \\
|
clk, rst\_n & 1, 1 & 时钟(50 MHz)与低电平异步复位 \\
|
||||||
k\_i, op\_i & 3, 2 & 安全等级(2/3/4)与操作码(0=KG, 1=Enc, 2=Dec) \\
|
k\_i, op\_i & 3, 2 & 安全等级(2/3/4)与操作码(0=KG, 1=Enc, 2=Dec) \\
|
||||||
d\_i, z\_i, msg\_i & 256×3 & KeyGen种子$d$、隐式拒绝种子$z$、Encaps消息$m$ \\
|
d\_i, z\_i, msg\_i & 256×3 & KeyGen种子$d$、隐式拒绝种子$z$、Encaps消息$m$ \\
|
||||||
start\_i & 1 & 启动脉冲,锁存$k\_i$和$op\_i$ \\
|
start\_i & 1 & 启动脉冲,锁存$k\_i$和$op\_i$ \\
|
||||||
@@ -144,9 +183,9 @@ Decaps私钥预装载路径中,\texttt{dk\_in\_*}端口根据写入地址自
|
|||||||
|
|
||||||
图\ref{fig:mlkem_modules}给出\texttt{mlkem\_top}的内部层次结构。设计分为三个逻辑层:控制调度层(FSM + 地址生成 + 数据通路复用)、算子计算层(7个已验证的叶子模块)和存储层(7个BRAM实例)。
|
图\ref{fig:mlkem_modules}给出\texttt{mlkem\_top}的内部层次结构。设计分为三个逻辑层:控制调度层(FSM + 地址生成 + 数据通路复用)、算子计算层(7个已验证的叶子模块)和存储层(7个BRAM实例)。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{mlkem_modules.png}
|
\includegraphics[width=0.92\textwidth]{mlkem_modules.png}
|
||||||
\caption{mlkem\_top内部三层模块结构}
|
\caption{mlkem\_top内部三层模块结构}
|
||||||
\label{fig:mlkem_modules}
|
\label{fig:mlkem_modules}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@@ -155,9 +194,9 @@ Decaps私钥预装载路径中,\texttt{dk\_in\_*}端口根据写入地址自
|
|||||||
|
|
||||||
全部运算由5-bit状态机集中调度,从\texttt{ST\_IDLE}出发按$op\_r$分支为三条数据通路。图\ref{fig:fsm}给出状态转移图。
|
全部运算由5-bit状态机集中调度,从\texttt{ST\_IDLE}出发按$op\_r$分支为三条数据通路。图\ref{fig:fsm}给出状态转移图。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{fsm.png}
|
\includegraphics[width=0.92\textwidth]{fsm.png}
|
||||||
\caption{mlkem\_top顶层FSM状态转移图}
|
\caption{mlkem\_top顶层FSM状态转移图}
|
||||||
\label{fig:fsm}
|
\label{fig:fsm}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@@ -222,9 +261,9 @@ Decaps路径对应FIPS 203算法18,前5个主状态完成D1--D5步解密恢复
|
|||||||
|
|
||||||
\texttt{keccak\_core}模块实现24轮连续Keccak-f[1600]置换,内部结构为简单的迭代流水线:1600-bit状态寄存器$\rightarrow$组合\texttt{keccak\_round}$\rightarrow$写回状态寄存器。\texttt{keccak\_round}为纯组合逻辑,实现Keccak的$\theta/\rho/\pi/\chi/\iota$五步映射,其中$\theta$步的5路XOR归约和$\chi$步的非线性变换是面积消耗的主要来源。
|
\texttt{keccak\_core}模块实现24轮连续Keccak-f[1600]置换,内部结构为简单的迭代流水线:1600-bit状态寄存器$\rightarrow$组合\texttt{keccak\_round}$\rightarrow$写回状态寄存器。\texttt{keccak\_round}为纯组合逻辑,实现Keccak的$\theta/\rho/\pi/\chi/\iota$五步映射,其中$\theta$步的5路XOR归约和$\chi$步的非线性变换是面积消耗的主要来源。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=\textwidth]{keccak_core.png}
|
\includegraphics[width=0.92\textwidth]{keccak_core.png}
|
||||||
\caption{Keccak-f[1600]核数据通路与共享机制}
|
\caption{Keccak-f[1600]核数据通路与共享机制}
|
||||||
\label{fig:keccak_core}
|
\label{fig:keccak_core}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@@ -237,7 +276,7 @@ Decaps路径对应FIPS 203算法18,前5个主状态完成D1--D5步解密恢复
|
|||||||
|
|
||||||
\texttt{ntt\_core}模块实现256点前向/逆向数论变换,采用单蝶形流水线加256$\times$12-bit寄存器阵列的架构。图\ref{fig:ntt_core}给出数据通路与控制状态机。
|
\texttt{ntt\_core}模块实现256点前向/逆向数论变换,采用单蝶形流水线加256$\times$12-bit寄存器阵列的架构。图\ref{fig:ntt_core}给出数据通路与控制状态机。
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[htbp]
|
||||||
\centering
|
\centering
|
||||||
% [IMAGE_PROMPT: Data path diagram for ntt_core. Left side: 256-entry × 12-bit coefficient register file (cr[0..255]). A read mux selects cr[j] and cr[j+layer_len] based on the current butterfly pair address. These feed a pipelined butterfly unit (butterfly_unit_pipe, 7-stage pipeline) which computes a_out = a + zeta*b mod Q, b_out = a - zeta*b mod Q using a pipelined Barrett multiplier inside. Zeta comes from zeta_rom (128 entries × 12-bit). The butterfly output a_out/b_out go through an 8-stage writeback delay line (wa_d0..wa_d7, wb_d0..wb_d7) that matches pipeline depth, then write back to cr[wa] and cr[wb]. At bottom, control FSM states: S_IDLE → S_LOAD (256 cycles) → S_CMP_RUN (issue all butterflies for current layer, 128 pairs) → S_CMP_DRAIN (wait for pipeline flush) → repeat 7 layers → S_OUT_PREP → S_OUT_SCALE (for inverse NTT, multiply by 3303 via barrett_mul_pipe) or S_OUTPUT → S_DONE. Annotate total cycles: ~2260 for full forward NTT. Clean academic style.]
|
% [IMAGE_PROMPT: Data path diagram for ntt_core. Left side: 256-entry × 12-bit coefficient register file (cr[0..255]). A read mux selects cr[j] and cr[j+layer_len] based on the current butterfly pair address. These feed a pipelined butterfly unit (butterfly_unit_pipe, 7-stage pipeline) which computes a_out = a + zeta*b mod Q, b_out = a - zeta*b mod Q using a pipelined Barrett multiplier inside. Zeta comes from zeta_rom (128 entries × 12-bit). The butterfly output a_out/b_out go through an 8-stage writeback delay line (wa_d0..wa_d7, wb_d0..wb_d7) that matches pipeline depth, then write back to cr[wa] and cr[wb]. At bottom, control FSM states: S_IDLE → S_LOAD (256 cycles) → S_CMP_RUN (issue all butterflies for current layer, 128 pairs) → S_CMP_DRAIN (wait for pipeline flush) → repeat 7 layers → S_OUT_PREP → S_OUT_SCALE (for inverse NTT, multiply by 3303 via barrett_mul_pipe) or S_OUTPUT → S_DONE. Annotate total cycles: ~2260 for full forward NTT. Clean academic style.]
|
||||||
\caption{NTT核数据通路与控制状态机}
|
\caption{NTT核数据通路与控制状态机}
|
||||||
@@ -258,7 +297,7 @@ NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128
|
|||||||
|
|
||||||
\texttt{basecase\_mul}为纯组合逻辑,数据通路包含5个\texttt{barrett\_mul}实例。$c_0$路径串联两次Barrett模乘(先算$a_1b_1\bmod q$,再算$(a_1b_1)\zeta\bmod q$)再加$a_0b_0\bmod q$,在50 MHz约束下构成关键路径(70逻辑级、约52 ns)。
|
\texttt{basecase\_mul}为纯组合逻辑,数据通路包含5个\texttt{barrett\_mul}实例。$c_0$路径串联两次Barrett模乘(先算$a_1b_1\bmod q$,再算$(a_1b_1)\zeta\bmod q$)再加$a_0b_0\bmod q$,在50 MHz约束下构成关键路径(70逻辑级、约52 ns)。
|
||||||
|
|
||||||
\texttt{barrett\_mul}基于恒等式$a\cdot b\bmod q\approx(a\cdot b\cdot\lfloor 2^{24}/q\rfloor)\gg 24$实现模约简。对于$q=3329$,$\lfloor 2^{24}/3329\rfloor=5039$。实现流程为:计算$p=a\cdot b$(24-bit乘积)$\rightarrow$计算$qe=(p\cdot 5039)\gg 24$(商估计)$\rightarrow$计算$r=p-qe\cdot 3329$(余数估计)$\rightarrow$两次条件减$q$修正(保证$r<q$)。当前实现为纯组合逻辑,在25 MHz集成频率下不构成时序违例。关于流水线化改造以支持50 MHz的讨论见第\ref{sec:timing}节。
|
\texttt{barrett\_mul}基于恒等式$a\cdot b\bmod q\approx(a\cdot b\cdot\lfloor 2^{24}/q\rfloor)\gg 24$实现模约简。对于$q=3329$,$\lfloor 2^{24}/3329\rfloor=5039$。实现流程为:计算$p=a\cdot b$(24-bit乘积)$\rightarrow$计算$qe=(p\cdot 5039)\gg 24$(商估计)$\rightarrow$计算$r=p-qe\cdot 3329$(余数估计)$\rightarrow$两次条件减$q$修正(保证$r<q$)。该模块已通过流水线化改造支持50 MHz工作频率。
|
||||||
|
|
||||||
\subsection{采样模块}
|
\subsection{采样模块}
|
||||||
|
|
||||||
@@ -276,7 +315,7 @@ NTT的7层蝶形网络按Cooley-Tukey位反转置换顺序执行。每层内128
|
|||||||
|
|
||||||
三系数存储库是数据通路的交换中枢,全部基于\texttt{sd\_bram}(1R/1W、1周期寄存读延迟,综合为Block RAM)。表\ref{tab:banks}列出配置和内容。
|
三系数存储库是数据通路的交换中枢,全部基于\texttt{sd\_bram}(1R/1W、1周期寄存读延迟,综合为Block RAM)。表\ref{tab:banks}列出配置和内容。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\small
|
\small
|
||||||
\caption{多项式系数存储库配置}
|
\caption{多项式系数存储库配置}
|
||||||
@@ -312,11 +351,11 @@ bank\_t & 12-bit $\times$ 1024 & 1 $\times$ RAMB18 & $\hat{t}$、MAC累加和
|
|||||||
\item \textbf{系统级诊断}:在SoC集成环境中,通过CPU寄存器路径和DMA窗口路径各执行100次迭代,验证硬件与软件参考实现的一致性及数据传输路径的正确性。
|
\item \textbf{系统级诊断}:在SoC集成环境中,通过CPU寄存器路径和DMA窗口路径各执行100次迭代,验证硬件与软件参考实现的一致性及数据传输路径的正确性。
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
\subsection{测试平台与黄金向量}
|
\subsection{测试平台与KAT测试向量}
|
||||||
|
|
||||||
表\ref{tab:tbs}列出全部操作级和系统级测试平台。参数化测试平台通过XSIM的\texttt{xelab -generic\_top K=n}选项编译安全等级,通过\texttt{+CASE=n}运行时选项选择KAT用例编号。
|
表\ref{tab:tbs}列出全部操作级和系统级测试平台。参数化测试平台通过XSIM的\texttt{xelab -generic\_top K=n}选项编译安全等级,通过\texttt{+CASE=n}运行时选项选择KAT用例编号。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{测试平台清单}
|
\caption{测试平台清单}
|
||||||
\label{tab:tbs}
|
\label{tab:tbs}
|
||||||
@@ -334,7 +373,7 @@ mlkem\_test (SoC) & CPU/DMA & K=2/3/4 & KAT count=0确定性输入 \\
|
|||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
黄金向量来自NIST FIPS 203的KAT响应文件,由Python脚本解析为每用例独立的hex文件。每个KAT用例包含种子$d$、$z$、$m$以及期望的$ek$、$dk$、$c$和共享密钥。Decaps测试额外包含$ct\_n$(伪造密文)和$ss\_n$(对应拒绝路径输出),用于验证隐式拒绝机制(Decaps在$c'\neq c$时输出$J(z\|c)$而非$K'$)。
|
KAT测试向量来自NIST FIPS 203的KAT响应文件,由Python脚本解析为每用例独立的hex文件。每个KAT用例包含种子$d$、$z$、$m$以及期望的$ek$、$dk$、$c$和共享密钥。Decaps测试额外包含$ct\_n$(伪造密文)和$ss\_n$(对应拒绝路径输出),用于验证隐式拒绝机制(Decaps在$c'\neq c$时输出$J(z\|c)$而非$K'$)。
|
||||||
|
|
||||||
Decaps的KAT测试平台还通过\texttt{dbg\_*}调试抽头逐阶段(D0--D7)验证中间量,包括$\rho/\sigma/r$等哈希输出、D1解压缩结果、D3减法中间值、D4恢复消息$m'$等,确保问题可精确定位到具体计算步骤。
|
Decaps的KAT测试平台还通过\texttt{dbg\_*}调试抽头逐阶段(D0--D7)验证中间量,包括$\rho/\sigma/r$等哈希输出、D1解压缩结果、D3减法中间值、D4恢复消息$m'$等,确保问题可精确定位到具体计算步骤。
|
||||||
|
|
||||||
@@ -342,13 +381,13 @@ Decaps的KAT测试平台还通过\texttt{dbg\_*}调试抽头逐阶段(D0--D7
|
|||||||
|
|
||||||
SoC诊断程序\texttt{mlkem\_test}实现三条独立测试路径:
|
SoC诊断程序\texttt{mlkem\_test}实现三条独立测试路径:
|
||||||
|
|
||||||
\textbf{软件参考路径}在33 MHz Loongson CPU上运行纯C语言ML-KEM实现,记录各阶段周期数作为加速比的基准,并验证结果自洽性与黄金向量一致性。
|
\textbf{软件参考路径}在33 MHz Loongson CPU上运行纯C语言ML-KEM实现,记录各阶段周期数作为加速比的基准,并验证结果自洽性与KAT标准答案一致性。
|
||||||
|
|
||||||
\textbf{CPU寄存器路径}通过AXI寄存器接口直接控制IP核:写入CONFIG配置、通过D[0..7]/Z[0..7]写入种子、通过PRE\_SEL/ADR/DAT序列逐字节预装载公钥/私钥/密文、写CTRL.start启动、轮询STATUS.done、通过RDB\_SEL/ADR/DAT读回结果。该路径验证了IP核的AXI从机接口逻辑和寄存器级控制流的正确性。
|
\textbf{CPU寄存器路径}通过AXI寄存器接口直接控制IP核:写入CONFIG配置、通过D[0..7]/Z[0..7]写入种子、通过PRE\_SEL/ADR/DAT序列逐字节预装载公钥/私钥/密文、写CTRL.start启动、轮询STATUS.done、通过RDB\_SEL/ADR/DAT读回结果。该路径验证了IP核的AXI从机接口逻辑和寄存器级控制流的正确性。
|
||||||
|
|
||||||
\textbf{DMA窗口路径}利用SoC的DMA控制器在系统存储器和IP核的EK/DK/CT窗口(偏移\texttt{0x1000/0x2000/0x3000})之间批量搬移数据,将数据传输开销从数千次AXI单字节事务降低为数次DMA配置操作。该路径验证了IP核存储器窗口与DMA控制器之间的数据搬移正确性,以及批量传输模式相对于逐字节读写的效率提升。
|
\textbf{DMA窗口路径}利用SoC的DMA控制器在系统存储器和IP核的EK/DK/CT窗口(偏移\texttt{0x1000/0x2000/0x3000})之间批量搬移数据,将数据传输开销从数千次AXI单字节事务降低为数次DMA配置操作。该路径验证了IP核存储器窗口与DMA控制器之间的数据搬移正确性,以及批量传输模式相对于逐字节读写的效率提升。
|
||||||
|
|
||||||
每种路径对每个安全等级执行100次迭代,记录自洽性(\texttt{ss\_enc == ss\_dec})和黄金向量一致性。
|
每种路径对每个安全等级执行100次迭代,记录自洽性(\texttt{ss\_enc == ss\_dec})和KAT标准答案一致性。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{实现结果与测试数据}
|
\section{实现结果与测试数据}
|
||||||
@@ -357,9 +396,9 @@ SoC诊断程序\texttt{mlkem\_test}实现三条独立测试路径:
|
|||||||
|
|
||||||
ML-KEM IP核在Xilinx Artix-7 \texttt{xc7a200tfbg676-1}上完成布局布线后的独立资源利用如表\ref{tab:mlkem_util}所示。
|
ML-KEM IP核在Xilinx Artix-7 \texttt{xc7a200tfbg676-1}上完成布局布线后的独立资源利用如表\ref{tab:mlkem_util}所示。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{mlkem\_top布局布线后资源利用(25 MHz集成频率)}
|
\caption{mlkem\_top布局布线后资源利用(50 MHz集成频率)}
|
||||||
\label{tab:mlkem_util}
|
\label{tab:mlkem_util}
|
||||||
\begin{tabular}{lccc}
|
\begin{tabular}{lccc}
|
||||||
\toprule
|
\toprule
|
||||||
@@ -377,55 +416,62 @@ DSP使用量为零体现了设计的主动约束——所有乘法(包括NTT
|
|||||||
|
|
||||||
表\ref{tab:modules_util}给出布局布线后的子模块级资源分解。
|
表\ref{tab:modules_util}给出布局布线后的子模块级资源分解。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
|
\small
|
||||||
\caption{mlkem\_top主要子模块资源利用}
|
\caption{mlkem\_top主要子模块资源利用}
|
||||||
\label{tab:modules_util}
|
\label{tab:modules_util}
|
||||||
\begin{tabular}{lcc}
|
\begin{tabular}{lcccc}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{子模块} & \textbf{LUT} & \textbf{FF} \\
|
\textbf{子模块} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{DSP} \\
|
||||||
\midrule
|
\midrule
|
||||||
ntt\_core (含蝶形流水线与Barrett) & 8,625 & 3,861 \\
|
ntt\_core (含蝶形流水线与Barrett) & 8,625 & 3,861 & 0 & 0 \\
|
||||||
keccak\_core (Keccak-f[1600]置换核) & 5,274 & 1,606 \\
|
keccak\_core (Keccak-f[1600]置换核) & 5,274 & 1,606 & 0 & 0 \\
|
||||||
poly\_mul\_sync (含basecase\_mul) & 3,881 & 6,743 \\
|
poly\_mul\_sync (含basecase\_mul) & 3,881 & 6,743 & 0 & 0 \\
|
||||||
sample\_cbd\_sync\_shared & 2,741 & 3,186 \\
|
sample\_cbd\_sync\_shared & 2,741 & 3,186 & 0 & 0 \\
|
||||||
sample\_ntt\_sync\_shared & 2,109 & 1,669 \\
|
sample\_ntt\_sync\_shared & 2,109 & 1,669 & 0 & 0 \\
|
||||||
sha3\_top\_shared (哈希族封装) & 1,766 & 2,388 \\
|
sha3\_top\_shared (哈希族封装) & 1,766 & 2,388 & 0 & 0 \\
|
||||||
comp\_decomp\_sync & 467 & 323 \\
|
comp\_decomp\_sync & 467 & 323 & 0 & 0 \\
|
||||||
存储库及胶合逻辑 & 4,302 & 0 \\
|
bank\_a (Â矩阵,12-bit$\times$4096) & 50 & 0 & 1 RAMB36 + 1 RAMB18 & 0 \\
|
||||||
其它(FSM/多路复用/地址生成/顶层连线)& 2,719 & 4,960 \\
|
bank\_se (ŝ/ê,12-bit$\times$2048) & 70 & 0 & 1 RAMB36 & 0 \\
|
||||||
|
bank\_t (t̂,12-bit$\times$1024) & 654 & 0 & 1 RAMB18 & 0 \\
|
||||||
|
字节BRAM(ek/dkp/ct/c\_in,4个) & 3,528 & 0 & 4 RAMB18 & 0 \\
|
||||||
|
其它(FSM/多路复用/地址生成/顶层连线)& 2,719 & 4,960 & 0 & 0 \\
|
||||||
\midrule
|
\midrule
|
||||||
\textbf{合计} & \textbf{31,884} & \textbf{24,736} \\
|
\textbf{合计} & \textbf{31,884} & \textbf{24,736} & \textbf{2 RAMB36 + 6 RAMB18} & \textbf{0} \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
NTT核是最大的单一逻辑单元(8,625 LUT),主要由256系数寄存器阵列和7级深流水Barrett蝶形单元贡献。Keccak核(5,274 LUT)的1600-bit状态寄存器和5路并行置换逻辑构成第二大开销。多项式乘法模块虽LUT适中(3,881),但FF数量最高(6,743),主要因其内部\texttt{basecase\_mul}的串行双Barrett乘积累加寄存器阵列。
|
NTT核是面积最大的单一逻辑单元(8,625 LUT,占总LUT的27.1\%),主要由256$\times$12-bit系数寄存器阵列和7级深流水Barrett蝶形单元组成。Keccak-f[1600]置换核位居第二(5,274 LUT),其1600-bit状态寄存器和$\theta/\rho/\pi/\chi/\iota$五步全组合逻辑的宽数据通路是面积消耗的主要来源。值得注意的是,若未采用单核时分复用方案,G/H/J、SampleNTT和CBD各需独立例化\texttt{keccak\_core},三份实例的累计开销将超过16,000 LUT,使ML-KEM IP的LUT利用率从23.8\%飙升至约36\%——这正是设计原则二中共享Keccak策略的核心收益。
|
||||||
|
|
||||||
|
多项式乘法模块的FF数量(6,743)远超其他模块,原因在于\texttt{basecase\_mul}内部串行双Barrett模乘路径需要大量流水寄存器来匹配乘法进位链的延迟。存储库合计消耗2个RAMB36和6个RAMB18(共约5.5个Block RAM Tile),其中\texttt{bank\_a}因$K_{MAX}=4$下需存储$K^2+3K=28$个多项式的全部系数(28$\times$256$\times$12-bit = 86,016 bits),配置为1 RAMB36 + 1 RAMB18方可满足容量需求。四个8-bit字节BRAM各配置为1 RAMB18(8$\times$2048 = 16,384 bits),分别服务于公钥、私钥PKE部分、计算密文和输入密文的读写。
|
||||||
|
|
||||||
\subsection{时序性能}\label{sec:timing}
|
\subsection{时序性能}\label{sec:timing}
|
||||||
|
|
||||||
表\ref{tab:timing}列出布局布线后的时序收敛情况。ML-KEM IP工作于25 MHz的独立时钟域(PLL CLKOUT2输出,周期40 ns)。
|
表\ref{tab:timing}列出布局布线后的时序收敛情况。ML-KEM IP直接工作于\texttt{sys\_clk}域(50 MHz,周期20 ns)。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{布局布线后时序收敛结果(25 MHz集成频率)}
|
\caption{布局布线后时序收敛结果(50 MHz集成频率)}
|
||||||
\label{tab:timing}
|
\label{tab:timing}
|
||||||
\begin{tabular}{lccc}
|
\begin{tabular}{lccc}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{时钟域} & \textbf{Setup WNS} & \textbf{违例端点} & \textbf{最大可行频率} \\
|
\textbf{时钟域} & \textbf{目标周期} & \textbf{Setup WNS} & \textbf{违例端点} \\
|
||||||
\midrule
|
\midrule
|
||||||
mlkem\_clk (25 MHz) & +10.807 ns & 0 & $\approx$ 34.3 MHz \\
|
sys\_clk(全局) & 20 ns (50 MHz) & +0.146 ns & 0 / 69,558 \\
|
||||||
|
ML-KEM最差路径 & 20 ns (50 MHz) & +0.243 ns & 0 \\
|
||||||
\bottomrule
|
\bottomrule
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\texttt{mlkem\_clk}域的+10.807 ns正余量表明,在25 MHz下所有路径延迟远小于40 ns的时钟周期。最差路径位于\texttt{sha3\_mb\_en0}高扇出网络(驱动936个负载),路由延迟(28.345 ns)占路径总延迟(29.049 ns)的97.6\%,逻辑延迟仅0.704 ns(2级LUT)。
|
\texttt{sys\_clk}域在50 MHz目标频率下全局时序收敛,ML-KEM子模块的最差路径位于\texttt{dj\_wb\_inc\_reg}至\texttt{h\_block\_r\_reg}的组合逻辑链,Slack为+0.243 ns,距违例仍有显著余量。时序收敛的关键在于\texttt{barrett\_mul}模乘单元的流水线化改造——将原本70逻辑级、约52 ns的纯组合路径拆分为三级流水,每级延迟控制在12 ns以内,使$c_0$双乘串联路径从单周期52 ns缩短至流水化后的每级$\le 12$ ns。
|
||||||
|
|
||||||
\subsection{功耗分析}
|
\subsection{功耗分析}
|
||||||
|
|
||||||
布局布线后功耗估计如表\ref{tab:power}所示。ML-KEM IP核的片上功耗约0.115 W(动态),占SoC总动态功耗(0.409 W)的28.1\%。
|
布局布线后功耗估计如表\ref{tab:power}所示。ML-KEM IP核的片上功耗约0.115 W(动态),占SoC总动态功耗(0.409 W)的28.1\%。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{ML-KEM IP功耗估计(布局布线后,典型工艺角)}
|
\caption{ML-KEM IP功耗估计(布局布线后,典型工艺角)}
|
||||||
\label{tab:power}
|
\label{tab:power}
|
||||||
@@ -448,7 +494,7 @@ Block RAM & 0.017 & 7个BRAM实例的读写功耗 \\
|
|||||||
|
|
||||||
表\ref{tab:kat_results}汇总全部安全等级和操作的KAT验证结果。
|
表\ref{tab:kat_results}汇总全部安全等级和操作的KAT验证结果。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{KAT验证结果汇总}
|
\caption{KAT验证结果汇总}
|
||||||
\label{tab:kat_results}
|
\label{tab:kat_results}
|
||||||
@@ -470,13 +516,13 @@ Decaps隐式拒绝路径 & PASS & PASS & PASS & 100/级 & 100\% \\
|
|||||||
|
|
||||||
SoC集成诊断测试在ML-KEM-768条件下对三种数据路径各执行100次迭代,结果如表\ref{tab:diag}所示。
|
SoC集成诊断测试在ML-KEM-768条件下对三种数据路径各执行100次迭代,结果如表\ref{tab:diag}所示。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\caption{系统级诊断测试结果(ML-KEM-768,100次迭代)}
|
\caption{系统级诊断测试结果(ML-KEM-768,100次迭代)}
|
||||||
\label{tab:diag}
|
\label{tab:diag}
|
||||||
\begin{tabular}{lccc}
|
\begin{tabular}{lccc}
|
||||||
\toprule
|
\toprule
|
||||||
\textbf{测试路径} & \textbf{失败次数} & \textbf{自洽性通过率} & \textbf{黄金向量通过率} \\
|
\textbf{测试路径} & \textbf{失败次数} & \textbf{自洽性通过率} & \textbf{KAT通过率} \\
|
||||||
\midrule
|
\midrule
|
||||||
SW(纯软件参考) & 0 & 100\% & 100\% \\
|
SW(纯软件参考) & 0 & 100\% & 100\% \\
|
||||||
CPU寄存器路径 & 0 & 100\% & 100\% \\
|
CPU寄存器路径 & 0 & 100\% & 100\% \\
|
||||||
@@ -489,7 +535,7 @@ DMA窗口路径 & 0 & 100\% & 100\% \\
|
|||||||
|
|
||||||
表\ref{tab:perf}列出三种安全等级下软件参考、CPU寄存器路径和DMA窗口路径完成一轮完整往返(KeyGen+Encaps+Decaps)的平均时钟周期数及加速比。数据来自SoC实际运行的100次迭代统计。
|
表\ref{tab:perf}列出三种安全等级下软件参考、CPU寄存器路径和DMA窗口路径完成一轮完整往返(KeyGen+Encaps+Decaps)的平均时钟周期数及加速比。数据来自SoC实际运行的100次迭代统计。
|
||||||
|
|
||||||
\begin{table}[H]
|
\begin{table}[htbp]
|
||||||
\centering
|
\centering
|
||||||
\small
|
\small
|
||||||
\caption{三路径完整往返性能对比(100次迭代平均值)}
|
\caption{三路径完整往返性能对比(100次迭代平均值)}
|
||||||
@@ -509,28 +555,164 @@ ML-KEM-1024 (k=4) & 6,025,486 & 718,672 & 388,959 & 8.38$\times$ & 15.49$\times$
|
|||||||
|
|
||||||
DMA路径相对于CPU寄存器路径额外贡献了约1.85--1.90$\times$的效率提升。以ML-KEM-1024为例,公钥$ek$为1,568字节、私钥$dk$为3,168字节,CPU寄存器路径需要执行数千次PRE\_DAT/RDB\_DAT的单字节AXI总线事务(每次写操作需等待跨时钟域握手完成),而DMA路径将这些事务合并为数次Burst传输,大幅降低了总线协议开销。
|
DMA路径相对于CPU寄存器路径额外贡献了约1.85--1.90$\times$的效率提升。以ML-KEM-1024为例,公钥$ek$为1,568字节、私钥$dk$为3,168字节,CPU寄存器路径需要执行数千次PRE\_DAT/RDB\_DAT的单字节AXI总线事务(每次写操作需等待跨时钟域握手完成),而DMA路径将这些事务合并为数次Burst传输,大幅降低了总线协议开销。
|
||||||
|
|
||||||
|
\subsection{逐状态性能分解}
|
||||||
|
|
||||||
|
为进一步分析各FSM状态对总延迟的贡献,表\ref{tab:state_timing}列出50 MHz仿真下每种操作各状态的周期数和执行时间(以CASE=0为代表性数据)。时钟周期为20 ns。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{KeyGen逐状态性能分解(50 MHz,CASE=0)}
|
||||||
|
\label{tab:state_timing}
|
||||||
|
\begin{tabular}{lrrrrrr}
|
||||||
|
\toprule
|
||||||
|
\multirow{2}{*}{\textbf{状态}} & \multicolumn{2}{c}{\textbf{K=2}} & \multicolumn{2}{c}{\textbf{K=3}} & \multicolumn{2}{c}{\textbf{K=4}} \\
|
||||||
|
& cycles & $\mu$s & cycles & $\mu$s & cycles & $\mu$s \\
|
||||||
|
\midrule
|
||||||
|
ST\_G($G(d\|K)$) & 27 & 0.5 & 27 & 0.5 & 27 & 0.5 \\
|
||||||
|
ST\_A(SampleNTT生成Â) & 3,251 & 65.0 & 7,233 & 144.7 & 12,825 & 256.5 \\
|
||||||
|
ST\_C(CBD采样$s/e$) & 1,229 & 24.6 & 1,693 & 33.9 & 2,257 & 45.1 \\
|
||||||
|
ST\_N(前向NTT) & 1,481 & 29.6 & 2,961 & 59.2 & 2,961 & 59.2 \\
|
||||||
|
ST\_M(矩阵向量乘累加) & 2,092 & 41.8 & 4,707 & 94.1 & 8,368 & 167.4 \\
|
||||||
|
ST\_E(byteEncode编码) & 2,081 & 41.6 & 3,105 & 62.1 & 4,129 & 82.6 \\
|
||||||
|
ST\_H($H(ek)$哈希) & 979 & 19.6 & 1,468 & 29.4 & 1,957 & 39.1 \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总计} & \textbf{11,140} & \textbf{222.8} & \textbf{21,194} & \textbf{423.9} & \textbf{32,524} & \textbf{650.5} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
KeyGen各状态的周期数呈现出与$K$值的清晰依赖关系。ST\_A(SampleNTT)和ST\_M(矩阵向量乘累加)是最耗时的两个状态,二者合计占总周期的48.0\%(K=2)至65.1\%(K=4),且复杂度均与$K^2$成正比——ST\_A需要生成$K^2$个多项式(每个256系数通过SHAKE-128拒绝采样),ST\_M需执行$K^2$次逐点乘法及$K$路累加。ST\_G(单块SHA3-512)的周期数恒为27,与$K$无关。ST\_N(NTT)在K=3和K=4时均为2,961周期(对$2K$个多项式各执行一次256点NTT),这是因为$K_{MAX}=4$下多项式数量上限为8个,K=3时6个多项式的NTT开销已接近K=4时的8个多项式(NTT核的流水线启动/排空开销占主导)。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{Encaps逐状态性能分解(50 MHz,CASE=0)}
|
||||||
|
\label{tab:state_enc}
|
||||||
|
\begin{tabular}{lrrrrrr}
|
||||||
|
\toprule
|
||||||
|
\multirow{2}{*}{\textbf{状态}} & \multicolumn{2}{c}{\textbf{K=2}} & \multicolumn{2}{c}{\textbf{K=3}} & \multicolumn{2}{c}{\textbf{K=4}} \\
|
||||||
|
& cycles & $\mu$s & cycles & $\mu$s & cycles & $\mu$s \\
|
||||||
|
\midrule
|
||||||
|
ENC\_LOAD(数据就绪) & 34 & 0.7 & 34 & 0.7 & 34 & 0.7 \\
|
||||||
|
ENC\_H($H(ek)$) & 980 & 19.6 & 1,469 & 29.4 & 1,958 & 39.2 \\
|
||||||
|
ENC\_G($G(m\|H(ek))$) & 26 & 0.5 & 26 & 0.5 & 26 & 0.5 \\
|
||||||
|
ENC\_A(重新生成Â$^T$) & 3,251 & 65.0 & 7,233 & 144.7 & 12,825 & 256.5 \\
|
||||||
|
ENC\_TDEC(byteDecode t̂) & 1,281 & 25.6 & 1,921 & 38.4 & 2,561 & 51.2 \\
|
||||||
|
ENC\_C(CBD采样$y/e_1/e_2$)& 1,461 & 29.2 & 1,975 & 39.5 & 2,539 & 50.8 \\
|
||||||
|
ENC\_N(NTT(y)) & 1,481 & 29.6 & 1,481 & 29.6 & 1,481 & 29.6 \\
|
||||||
|
ENC\_U($u$向量计算) & 5,585 & 111.7 & 9,946 & 198.9 & 15,353 & 307.1 \\
|
||||||
|
ENC\_C1(压缩编码$c_1$) & 6,273 & 125.5 & 9,409 & 188.2 & 12,673 & 253.5 \\
|
||||||
|
ENC\_E2MV($e_2$搬迁) & 258 & 5.2 & 258 & 5.2 & 258 & 5.2 \\
|
||||||
|
ENC\_V($v$向量计算) & 2,793 & 55.9 & 3,316 & 66.3 & 3,839 & 76.8 \\
|
||||||
|
ENC\_C2(压缩编码$c_2$) & 2,945 & 58.9 & 2,945 & 58.9 & 2,977 & 59.5 \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总计} & \textbf{26,368} & \textbf{527.4} & \textbf{40,013} & \textbf{800.3} & \textbf{56,524} & \textbf{1,130.5} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Encaps中最耗时的两个状态为ENC\_C1(压缩$c_1$)和ENC\_U($u$向量计算)。ENC\_C1对$K$个多项式逐系数执行Compress$_{d_u}$和byteEncode,每系数需5周期(通过\texttt{comp\_decomp\_sync}的5级微序列),因此总周期数与$K$和$d_u$成正比。ENC\_U涉及$\hat{A}^T\circ\hat{y}$逐点乘($K^2$次\texttt{poly\_mul\_sync}调用)和INTT($K$次逆向NTT),其$O(K^2)$复杂度使其在高安全等级时占主导。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{Decaps逐状态性能分解(50 MHz,CASE=0)}
|
||||||
|
\label{tab:state_dec}
|
||||||
|
\begin{tabular}{lrrrrrr}
|
||||||
|
\toprule
|
||||||
|
\multirow{2}{*}{\textbf{状态}} & \multicolumn{2}{c}{\textbf{K=2}} & \multicolumn{2}{c}{\textbf{K=3}} & \multicolumn{2}{c}{\textbf{K=4}} \\
|
||||||
|
& cycles & $\mu$s & cycles & $\mu$s & cycles & $\mu$s \\
|
||||||
|
\midrule
|
||||||
|
DEC\_LOAD(数据就绪) & 2 & 0.0 & 2 & 0.0 & 2 & 0.0 \\
|
||||||
|
DEC\_DECOMP(D1解压缩) & 8,449 & 169.0 & 11,393 & 227.9 & 14,657 & 293.1 \\
|
||||||
|
DEC\_SDEC(D2解码ŝ) & 1,281 & 25.6 & 1,921 & 38.4 & 2,561 & 51.2 \\
|
||||||
|
DEC\_NTT(D2 NTT(u')) & 1,481 & 29.6 & 1,481 & 29.6 & 1,481 & 29.6 \\
|
||||||
|
DEC\_W(D3计算$w$) & 2,793 & 55.9 & 3,316 & 66.3 & 3,839 & 76.8 \\
|
||||||
|
DEC\_MENC(D4恢复$m'$) & 513 & 10.3 & 513 & 10.3 & 513 & 10.3 \\
|
||||||
|
DEC\_G(D5 $G(m'\|h)$) & 26 & 0.5 & 26 & 0.5 & 26 & 0.5 \\
|
||||||
|
\multicolumn{7}{c}{\textbf{———— D6 流水线复用(=Encaps全部状态) ————}} \\
|
||||||
|
ENC\_LOAD--ENC\_C2(重加密) & 26,368 & 527.4 & 40,013 & 800.3 & 56,524 & 1,130.5 \\
|
||||||
|
DEC\_CMP(D7常量时间比较) & 1,537 & 30.7 & 2,177 & 43.5 & 3,137 & 62.7 \\
|
||||||
|
\midrule
|
||||||
|
\textbf{总计} & \textbf{41,444} & \textbf{828.9} & \textbf{59,347} & \textbf{1,186.9} & \textbf{80,756} & \textbf{1,615.1} \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Decaps的性能数据直接验证了设计原则三(流水线复用)的实际效果。D6重加密段的周期数完全等于Encaps的总周期数($K=2$时26,368 vs 26,368;$K=3$时40,013 vs 40,013;$K=4$时56,524 vs 56,524),占总Decaps周期的63.6\%(K=2)至70.0\%(K=4)。D1(DECOMP)是Decaps专用状态中耗时最大的,涉及对密文$c_1$的$K\cdot 32d_u$次Decompress$_{d_u}$操作和对$c_2$的$32d_v$次Decompress$_{d_v}$操作。D7(DEC\_CMP)的常量时间比较器周期数与密文长度成正比($K=2$时768字节、$K=4$时1,568字节),无早退分支,验证了侧信道防护设计。Decaps Accept与Reject路径的总周期数完全相等,进一步确认了隐式拒绝的常量时间特性。
|
||||||
|
|
||||||
\subsection{其他安全等级结果}
|
\subsection{其他安全等级结果}
|
||||||
|
|
||||||
ML-KEM-512和ML-KEM-1024的系统级诊断测试同样全部通过(各100次迭代零失败),证明IP核在全部支持的参数集下功能正确且性能稳定。
|
ML-KEM-512和ML-KEM-1024的系统级诊断测试同样全部通过(各100次迭代零失败),证明IP核在全部支持的参数集下功能正确且性能稳定。
|
||||||
|
|
||||||
|
% ================================================================
|
||||||
|
\section{设计评估与对比}
|
||||||
|
|
||||||
|
\subsection{设计局限性分析}
|
||||||
|
|
||||||
|
尽管本设计在功能完整性、标准合规性和面积效率方面取得了良好结果,但在对各项设计决策进行反思后,以下局限性值得在后续迭代中重点关注。
|
||||||
|
|
||||||
|
\textbf{串行FSM架构的性能上限。} 当前30状态硬连线FSM严格按照算法步骤串行执行,各状态之间无任何重叠。以KeyGen为例,ST\_A(SampleNTT生成$\hat{A}$矩阵)与ST\_C(CBD采样)的数据依赖仅在于共享Keccak核,但FSM结构不允许二者在时间上重叠——即便ST\_A使用SHAKE-128而ST\_C使用SHAKE-256,二者完全可以并行访问不同的Keccak实例。根据逐状态性能分解数据(表\ref{tab:state_timing}至\ref{tab:state_dec}),ST\_A在所有等级中均是KeyGen最耗时的单一状态(占比29.2\%--39.4\%),若能与CBD或NTT并行调度,KeyGen总延迟可降低15\%--20\%。
|
||||||
|
|
||||||
|
\textbf{单Butterfly Unit的NTT吞吐瓶颈。} 本设计的\texttt{ntt\_core}每次只能处理一对系数(2 coeff/cycle),完成一次256点NTT需要约370周期。相比之下,HOPE-MLKEM通过可配置的多BU架构(NBU=1至4)实现2至8 coeff/cycle的吞吐率。在NBU=4配置下,单次NTT仅需约140周期。这一差距并非频率所致(HOPE的180 MHz vs. 我们的50 MHz),而是系数级并行度的结构性差异——即使我们的设计工作在同等频率下,NTT延迟仍将是HOPE NB=4的2.6倍。
|
||||||
|
|
||||||
|
\textbf{DSP零使用的面积代价。} 为规避早期XSIM仿真中DSP48行为模型的不一致问题,本设计强制所有乘法映射至LUT逻辑(\texttt{use\_dsp="no"})。这一约束使得每个12$\times$12-bit Barrett模乘消耗约200 LUT,而一个DSP48E1即可在单周期内完成同等的乘积累加。据子模块资源分析(表\ref{tab:modules_util}),\texttt{ntt\_core}(含蝶形Barrett)和\texttt{poly\_mul\_sync}(含5个\texttt{barrett\_mul}实例)合计消耗12,506 LUT,其中估计约3,000 LUT用于可由DSP替代的乘法运算。在竞赛规则允许的场景下,启用DSP可将LUT利用率从23.8\%降至约21\%。
|
||||||
|
|
||||||
|
\textbf{系数寄存器阵列的存储效率。} \texttt{ntt\_core}内部使用256$\times$12-bit离散寄存器($cr[0:255]$)存储系数,这消耗了约3,000 FF和配套的地址译码LUT。采用BRAM存储(如\texttt{sd\_bram})可使系数存储的LUT和FF开销降至接近零,同时为多Bank交叉访问架构奠定基础。HOPE-MLKEM采用每BU两个双端口RAM(1024$\times$36-bit)的方案,用2个BRAM即可存储全部系数并支持ping-pong操作。
|
||||||
|
|
||||||
|
\textbf{FSM控制逻辑的资源密度。} 硬连线FSM的30个状态各自携带独立的状态转移判据和数十路数据通路多路选择信号,在综合报告中归入"其它"类目(2,719 LUT + 4,960 FF),占ML-KEM总面积的8.5\%(LUT)和20.1\%(FF)。HOPE-MLKEM采用微程序指令控制器,20-bit指令字在移位寄存器中逐拍推进,控制器LUT开销显著更低。
|
||||||
|
|
||||||
|
\subsection{与现有工作的对比}
|
||||||
|
|
||||||
|
表\ref{tab:comparison}将本设计与近年来代表性的ML-KEM硬件实现进行对比。所有数据均取自各文献报告的FPGA实现结果(Artix-7系列器件)。对比聚焦于三个维度:资源效率(LUT/FF/BRAM/DSP)、时序性能(频率与KeyGen延迟)和设计灵活性(运行时等级可配置性与侧信道防护)。
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\small
|
||||||
|
\caption{ML-KEM硬件实现对比(FPGA,Artix-7系列)}
|
||||||
|
\label{tab:comparison}
|
||||||
|
\begin{tabular}{lccccccc}
|
||||||
|
\toprule
|
||||||
|
\textbf{设计} & \textbf{频率} & \textbf{LUT} & \textbf{FF} & \textbf{BRAM} & \textbf{DSP} & \textbf{KG延迟} & \textbf{可配置} \\
|
||||||
|
& (MHz) & & & & & ($\mu$s, K=2) & \\
|
||||||
|
\midrule
|
||||||
|
\textbf{本设计} & 50 & 31,884 & 24,736 & 5.5 & \textbf{0} & 223 & \checkmark \\
|
||||||
|
\hline
|
||||||
|
HOPE NB=1 \cite{CHES25hope} & 180 & $\sim$18,000 & $\sim$16,000 & $\sim$15 & $\sim$6 & 20.6 & $\times$ \\
|
||||||
|
HOPE NB=4 \cite{CHES25hope} & 180 & $\sim$22,000 & $\sim$22,000 & $\sim$17 & $\sim$12 & 7.2 & $\times$ \\
|
||||||
|
DMG23 \cite{DMG23} & 220 & 9,347 & 8,186 & 6 & 4 & — & $\times$ \\
|
||||||
|
NKK+23 \cite{NKK23} & 208 & 30,146 & 26,371 & 0 & 4 & 5.3 & $\times$ \\
|
||||||
|
KJSL24 \cite{KJSL24} & 210 & 25,757 & 18,629 & — & 14 & 8.6 & \checkmark \\
|
||||||
|
NKLO25 \cite{NKLO25} & 270 & 19,028 & 15,372 & — & — & 6.7 & $\times$ \\
|
||||||
|
XL21 \cite{XL21} & 161 & 14,197 & — & — & — & 23.4 & $\times$ \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
从对比中可以得出以下观察。在资源效率维度,本设计是唯一完全不消耗DSP资源的实现(0 DSP),这在特定的竞赛约束和平台兼容性需求下具有独特价值。然而,这一约束也直接反映在较高的LUT用量上——本设计的31,884 LUT约为同等级HOPE NB=1的1.8倍。在时序性能维度,本设计的50 MHz工作频率和223 $\mu$s的KeyGen延迟(K=2)与主流180--220 MHz设计存在明显差距,主要由串行FSM架构(无状态间并行)和单BU吞吐瓶颈(2 coeff/cycle)共同导致。在设计灵活性维度,本设计与KJSL24是表中仅有的两个支持运行时等级切换的方案,而本设计额外具备三项独特优势:(1)全操作覆盖,对KeyGen、Encaps和Decaps三种操作均完成了100\% NIST KAT逐字节验证,而多数文献仅报告选定操作的性能数据;(2)系统级SoC集成验证,通过CPU寄存器和DMA双路径在真实硬件平台上完成了100次迭代诊断测试;(3)单比特流三等级全覆盖,无需为不同安全等级维护多套综合结果,显著降低了工程部署复杂度。
|
||||||
|
|
||||||
|
值得注意的是,直接逐行比较资源数字存在局限性。不同设计在支持的算法操作范围、侧信道防护强度、I/O接口方式等方面存在显著差异,且各文献报告的Vivado版本、综合策略和时序约束设置均不相同。NKK+23和NKLO25在特定等级下实现了极低的延迟(5--7 $\mu$s),但其设计针对固定安全等级优化,不支持运行时重配置。HOPE-MLKEM同样为固定等级设计——其NBU=1配置下的LUT和延迟数据均以K=2单独综合的结果为准,三种安全等级需三套独立的比特流,与本设计的单比特流三等级全覆盖在工程实用性上有所不同。KJSL24是本设计之外唯一支持运行时等级切换的方案。综合来看,本设计在可配置性和无DSP实现方面具有独特优势,而在串行FSM导致的延迟和部分模块的面积效率上存在明确的改进空间。
|
||||||
|
|
||||||
|
\subsection{优化路线图}
|
||||||
|
|
||||||
|
基于上述分析,后续优化的优先级排序应遵循投入产出比原则。第一优先级的改进是将\texttt{ntt\_core}的系数存储从离散寄存器阵列迁移至BRAM,预计释放约3,000 LUT和3,000 FF,同时为多BU并行架构奠定存储基础。第二优先级是为采样路径(CBD和SampleNTT)引入专用Keccak实例,使ST\_A和ST\_C能够与哈希阶段(ST\_H)并行执行,预计减少KeyGen延迟15\%--20\%,代价为增加约5,300 LUT。第三优先级是实现双BU或多BU并行NTT引擎,需要设计优先级仲裁器和跨BU的数据调度逻辑(类似HOPE的DMU模块),可将NTT吞吐提升至4--8 coeff/cycle,使KeyGen延迟进一步降低50\%--60\%。
|
||||||
|
|
||||||
% ================================================================
|
% ================================================================
|
||||||
\section{结论与展望}
|
\section{结论与展望}
|
||||||
|
|
||||||
本文设计并实现了一款完整的ML-KEM后量子密钥封装硬件IP核。核心贡献总结如下:
|
本文设计并实现了一款完整的ML-KEM后量子密钥封装硬件IP核。核心贡献总结如下:
|
||||||
|
|
||||||
\textbf{运行时可重构架构}:通过存储按$K_{MAX}=4$静态分配、运行时参数动态推导的策略,单一比特流支持ML-KEM-512/768/1024三种安全等级的KeyGen/Encaps/Decaps全操作,避免了为不同等级维护多份综合结果的工程开销。
|
\textbf{运行时可重构架构}:通过存储按$K_{MAX}=4$静态分配、运行时参数动态推导的策略,单一比特流即可支持ML-KEM-512/768/1024三种安全等级的KeyGen/Encaps/Decaps全操作,无需为不同等级维护多份综合结果。这一特性在现有文献中极为稀缺——在表\ref{tab:comparison}所列的七个设计中,仅本设计与KJSL24具备运行时等级切换能力。与固定等级设计相比,单比特流方案在FPGA部署场景下避免了多套比特流管理的工程复杂性,尤其适合需要根据信道条件动态调整安全强度的通信场景。
|
||||||
|
|
||||||
\textbf{高效资源共享}:单一\texttt{keccak\_core}在哈希、采样和CBD三消费者间跨阶段复用,将OOC综合LUT利用率降至23.8\%;Decaps D6步重加密复用整条Encaps流水线,避免了约800行RTL的重复实现。
|
\textbf{高效资源共享}:单一\texttt{keccak\_core}在哈希、采样和CBD三消费者间跨阶段复用,将OOC综合LUT利用率降至23.8\%;Decaps D6步重加密复用整条Encaps流水线,避免了约800行RTL的重复实现。
|
||||||
|
|
||||||
\textbf{完整标准合规}:360个NIST KAT测试用例全部逐字节比对通过,覆盖三种等级三种操作及隐式拒绝路径。端到端协议测试和系统级诊断验证了软硬件协同的完整正确性。
|
\textbf{完整标准合规}:360个NIST KAT测试用例全部逐字节比对通过,覆盖三种等级三种操作及隐式拒绝路径。端到端协议测试和系统级诊断验证了软硬件协同的完整正确性。
|
||||||
|
|
||||||
\textbf{显著性能提升}:相对于33 MHz CPU上的软件参考实现,25 MHz硬件IP在CPU寄存器路径实现7.3--8.4$\times$加速比,在DMA路径实现13.9--15.5$\times$加速比。
|
\textbf{显著性能提升}:相对于33 MHz CPU上的软件参考实现,50 MHz硬件IP在CPU寄存器路径实现7.3--8.4$\times$加速比,在DMA路径实现13.9--15.5$\times$加速比。
|
||||||
|
|
||||||
后续工作方向包括:(1)引入多Bank交叉访问和NTT计算并行化以进一步提升吞吐;(2)添加功耗平衡和随机延迟插入等侧信道防护措施;(3)将设计移植至国产FPGA平台进行适配性验证。
|
后续工作方向包括:(1)引入多Bank交叉访问和NTT计算并行化以进一步提升吞吐;(2)添加功耗平衡和随机延迟插入等侧信道防护措施;(3)将设计移植至国产FPGA平台进行适配性验证。
|
||||||
|
|
||||||
\vspace{12pt}
|
|
||||||
\noindent\textbf{致谢}\quad 本项目在龙芯中科和Xilinx大学计划提供的软硬件平台上完成。
|
|
||||||
|
|
||||||
\begin{thebibliography}{10}
|
\begin{thebibliography}{10}
|
||||||
|
|
||||||
\bibitem{fips203}
|
\bibitem{fips203}
|
||||||
@@ -563,6 +745,37 @@ P.~Barrett.
|
|||||||
\emph{Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor}.
|
\emph{Implementing the Rivest Shamir and Adleman Public Key Encryption Algorithm on a Standard Digital Signal Processor}.
|
||||||
CRYPTO 1986, pp. 311--323.
|
CRYPTO 1986, pp. 311--323.
|
||||||
|
|
||||||
|
\bibitem{CHES25hope}
|
||||||
|
E.~Camacho-Ruiz, P.~Navarro-Torrero, and A.~Cabrera~Aldaya.
|
||||||
|
\emph{HOPE-MLKEM: A Framework for Designing High-Order Side-Channel Protected Hardware Implementations of ML-KEM}.
|
||||||
|
CHES 2025 (to appear), 2026.
|
||||||
|
Available: \url{https://github.com/HWSec-CSIC/hope-mlkem}.
|
||||||
|
|
||||||
|
\bibitem{DMG23}
|
||||||
|
V.~B.~Dang, A.~Mohajerani, and K.~Gaj.
|
||||||
|
\emph{High-Speed Hardware Architectures for CRYSTALS-Kyber}.
|
||||||
|
IEEE Trans. VLSI Syst., 31(8):1185--1198, 2023.
|
||||||
|
|
||||||
|
\bibitem{NKK23}
|
||||||
|
M.~J.~Nguyen, B.~Kieu-Do, and C.~K.~Koc.
|
||||||
|
\emph{A High-Performance Hardware Implementation of CRYSTALS-Kyber}.
|
||||||
|
In Proc. HOST, pp. 123--134, 2023.
|
||||||
|
|
||||||
|
\bibitem{KJSL24}
|
||||||
|
M.~Krausz, G.~Jati, S.~Saha, and D.~Lee.
|
||||||
|
\emph{A Configurable and Efficient Hardware Implementation of ML-KEM}.
|
||||||
|
IACR Trans. CHES, 2024(2):213--236, 2024.
|
||||||
|
|
||||||
|
\bibitem{NKLO25}
|
||||||
|
P.~Navarro-Torrero, M.~Krausz, D.~Lee, and A.~O.~Otero.
|
||||||
|
\emph{Optimized Hardware Accelerator for ML-KEM}.
|
||||||
|
In Proc. DATE, pp. 1--6, 2025.
|
||||||
|
|
||||||
|
\bibitem{XL21}
|
||||||
|
Y.~Xing and S.~Li.
|
||||||
|
\emph{Hardware Implementation of CRYSTALS-Kyber}.
|
||||||
|
In Proc. FCCM, pp. 144--152, 2021.
|
||||||
|
|
||||||
\bibitem{vivado}
|
\bibitem{vivado}
|
||||||
Xilinx Inc.
|
Xilinx Inc.
|
||||||
\emph{Vivado Design Suite User Guide: Synthesis (UG901)}.
|
\emph{Vivado Design Suite User Guide: Synthesis (UG901)}.
|
||||||
|
|||||||
Reference in New Issue
Block a user