From 74047a33be46375d50dfd8cef7fdeb0a7df6bdfd Mon Sep 17 00:00:00 2001 From: Sun Yimin Date: Wed, 30 Apr 2025 09:01:53 +0000 Subject: [PATCH] =?UTF-8?q?Updated=20=E5=AE=9E=E7=8E=B0ML=E2=80=90DSA?= =?UTF-8?q?=E6=89=80=E9=9C=80=E7=9A=84=E5=A4=9A=E9=A1=B9=E5=BC=8F=E5=92=8C?= =?UTF-8?q?=E7=BA=BF=E6=80=A7=E4=BB=A3=E6=95=B0=E7=9F=A5=E8=AF=86=20(markd?= =?UTF-8?q?own)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...A所需的多项式和线性代数知识.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/实现ML‐DSA所需的多项式和线性代数知识.md b/实现ML‐DSA所需的多项式和线性代数知识.md index 0caee45..3cc16f5 100644 --- a/实现ML‐DSA所需的多项式和线性代数知识.md +++ b/实现ML‐DSA所需的多项式和线性代数知识.md @@ -1,3 +1,19 @@ 大部分和[实现Kyber所需的多项式和线性代数知识](https://github.com/emmansun/gmsm/wiki/%E5%AE%9E%E7%8E%B0Kyber%E6%89%80%E9%9C%80%E7%9A%84%E5%A4%9A%E9%A1%B9%E5%BC%8F%E5%92%8C%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%E7%9F%A5%E8%AF%86)类似。 -## 多项式 +# 多项式 +一个多项式是环 $R_q$ 的一个元素[[3](#user-content-anchor-ref3)],看起来像这样: + +$$f = f_0 + f_1 X + f_2 X^2 + \cdots + f_{255} X^{255}$$ + +但你甚至不需要知道这些。对你作为一个实施者来说,一个ML-DSA多项式就是一个有256个系数的数组。每个系数都是一个整数模 $q$,其中 $q = 8380417= 2^23 - 2^13 + 1$。一个系数数组被称为在 $\mathbb{Z}_q^{256}$ 中,因为它由 256 个系数组成,每个系数都在 $\mathbb{Z}_q$,即整数模 $q$。 + +$$f_0 + f_1X + f_2X^2 + \cdots + f_{255}X^{255} \in R_q$$ + +$$ \downarrow $$ +```math +(f_0, f_1, f_2, ..., f_{255}) \in \mathbb{Z}_q^{256} +``` + +每个系数都适合放在一个`uint32`中,所以你可以为多项式编写一个类型,比如`[256]uint32`。 + +要加或减两个多项式(或者环元素),你需要逐个系数地进行( $c[0] = a[0] + b[0]$ ,以此类推)。在ML-DSA中,你永远不会直接乘以环元素。 \ No newline at end of file