前文内容提过不再赘述,如术语未解释的一部分可以查看:
Falcon算法:Chapter 1 简介 (入门级讲解)
Falcon算法:Chapter 2 设计原理 (入门级讲解)(1)FALCON的GPV框架简介
2.3 NTRU格
为了紧凑型,我们使用NTRU格,且该格经过20年沉淀,安全性很靠谱。
2.3.1 NTRU格简介
给定
ϕ
=
x
n
+
1
,
n
=
2
k
,
q
∈
N
∗
\phi=x^n+1, n=2^k,q\in \mathbb{N}^*
ϕ=xn+1,n=2k,q∈N∗。NTRU秘密集包含四个多项式
f
,
g
,
F
,
G
∈
Z
[
x
]
/
(
ϕ
)
f,g,F,G\in \mathbb{Z}[x]/(\phi)
f,g,F,G∈Z[x]/(ϕ),他们满足等式:
f
G
−
g
F
=
q
m
o
d
ϕ
fG-gF=q \ mod \phi
fG−gF=q modϕ
当
f
f
f可逆时,给出
h
=
g
⋅
f
−
1
m
o
d
q
h=g\cdot f^{-1}\ mod \ q
h=g⋅f−1 mod q。(h,f,g,F,G都是整数环上的多项式,但是h是系数还要模q)。
通常
h
h
h是公钥,
f
,
g
,
F
,
G
f,g,F,G
f,g,F,G是私钥。
我们可以判断矩阵
[
1
h
0
q
]
\left[\begin{array}{c|c} 1&h\\ \hline 0&q \end{array}\right]
[10hq]和
[
f
g
F
G
]
\left[\begin{array}{c|c} f&g\\ \hline F&G \end{array}\right]
[fFgG]生成相同的格(后者化阶梯行矩阵可以得到前者)。前者是大多项式,后者是小多项式(前者是坏格基,后者是好格基,好格基才能求出能用的近向量,也就是前文的GPV中的v向量)。
在实践中,即使f,g都很小,得到的h也很难找到另一对f’和g’满足
h
=
g
′
⋅
f
′
−
1
m
o
d
q
h=g'\cdot f'^{-1}\ mod \ q
h=g′⋅f′−1 mod q。这个困难性构成了NTRU假设。
2.3.2 GPV实例化
- 公共基 A = [ 1 h ∗ ] \textbf{A}=\left[\begin{array}{c|c} 1&h^*\\ \end{array}\right] A=[1h∗](作者理解 h ∗ h^* h∗为h的共轭转置)。
- 秘密基 B = [ g − f G − F ] \textbf{B}=\left[\begin{array}{c|c} g&-f\\ \hline G&-F \end{array}\right] B=[gG−f−F],可以判断 B × A ∗ = 0 m o d q \textbf{B}\times\textbf{A}^*=0\ mod \ q B×A∗=0 mod q。
- 消息m的签名加盐r后是由一对多项式 ( s 1 , s 2 ) (s_1,s_2) (s1,s2)组成,即 s 1 + s 2 h = H ( r ∣ ∣ m ) s_1+s_2h=H(r||m) s1+s2h=H(r∣∣m),由于已知其他可以推出 s 1 s_1 s1,所以我们只将 ( r , s 2 ) (r,s_2) (r,s2)作为签名。
2.3.3 选择最优参数
我们的陷门采样器采样的签名的范数与
∣
∣
B
∣
∣
G
S
||\textbf{B}||_{GS}
∣∣B∣∣GS成比例,这个
∣
∣
B
∣
∣
G
S
||\textbf{B}||_{GS}
∣∣B∣∣GS表示
∣
∣
B
∣
∣
||\textbf{B}||
∣∣B∣∣的Gram-Schmidt范数。(第三章有定义,指的是
B
\textbf{B}
B做施密特正交化后的正交基中范数最大的那一个的范数(欧几里得范数))。
先前工作通过启发式和实验的结果表明
∣
∣
B
∣
∣
G
S
||\textbf{B}||_{GS}
∣∣B∣∣GS在
∣
∣
(
f
,
g
)
∣
∣
≈
1.17
q
||(f,g)||\approx1.17\sqrt{q}
∣∣(f,g)∣∣≈1.17q时去最小。因此我们在
Z
n
[
x
]
/
(
ϕ
)
\mathbb{Z}_n[x]/(\phi)
Zn[x]/(ϕ)中以0为中心按离散高斯分布生成f,g,这样f,g的期望能满足在
1.17
q
1.17\sqrt{q}
1.17q附近,一旦如此
∣
∣
B
∣
∣
G
S
||\textbf{B}||_{GS}
∣∣B∣∣GS将非常容易求,当f,g超过该值则重新生成。
准优化.
d
e
t
(
B
)
=
f
G
−
g
F
=
q
det(B)=fG-gF=q
det(B)=fG−gF=q,所以理论下界为
q
\sqrt{q}
q。
2.4 快速傅里叶采样
GPV实例化的另一个部分是陷门采样器,这个东西输入是矩阵
A
\textbf{A}
A,陷门T,目标c,输出一个向量满足
s
A
t
=
c
m
o
d
q
sA^t=c\ mod \ q
sAt=c mod q。由2.2节可知这等价于找一个
c
0
c_0
c0的最近向量,所以陷门采样器可以指这两个的算法的随意一个。
现在给出以往的陷门采样器,这东西有俩指标,一个当然是效率,另一个则是向量越短(近)越好(短指的是s,近指的是v)。
- [Kle00]将矩阵 B \textbf{B} B做为陷门,输出向量s的范数与 ∣ ∣ B ∣ ∣ G S ||\textbf{B}||_{GS} ∣∣B∣∣GS成比例,这个短够安全,但是时空复杂度为 O ( m 2 ) O(m^2) O(m2)。
- [Pei10]和前面那个一样,对舍入算法做了一个随机化,这个好处是跟FALCON一样做了一个环上的 B \textbf{B} B,时空复杂度 O ( m l o g m ) O(mlogm) O(mlogm),但他与 ∣ ∣ B ∣ ∣ 2 ||\textbf{B}||_2 ∣∣B∣∣2成比例(没正交化的范数),因此安全性不行。
- [MP12]提出新颖方法,简单有效,但是与NTRU不兼容。
- [DP16]提出环上最近平面算法的变体,用了一个递归的方法,与快速傅里叶变换类似,他们称之为快速傅里叶最近平面,这个又快又好又兼容NTRU。
省流:[DP16]最好,就用这个快速傅里叶最近平面算法。下面附原文对比图。
选择标准差. 采样器的标准差
σ
\sigma
σ是一个重要参数,
σ
\sigma
σ太低采样器会泄露信息(
σ
\sigma
σ=0直接就为攻击敞开大门),
σ
\sigma
σ太高则生成的向量不好(不够近或者不够短)导致方案安全性差。
我们的快速傅里叶采样器与[Kle00]的有很多相似之处,其中包括
σ
\sigma
σ的最优值(足够小的
σ
\sigma
σ,但不会导致泄露信息)。当
σ
≤
1.312
∣
∣
B
∣
∣
G
S
\sigma \leq1.312||\textbf{B}||_{GS}
σ≤1.312∣∣B∣∣GS满足NIST的安全等级和查询次数(
q
s
q_s
qs)的要求。在我们这可以转换为
σ
≤
1.55
q
\sigma \leq1.55\sqrt{q}
σ≤1.55q。
2.5 安全性
本章暂时不看了,与算法本身无关,后续如有机会再补上。
2.6 参数总结
本章给出参数相互关系,最终参数选择过程在源文件Supporting_Documentation/additional/parameters.py
里(在falcon官网有除原文外其他内容),该文件还给出了密钥恢复和伪造的核心SVP难度。
查询数 Q s Q_s Qs,目标安全等级 λ \lambda λ,环的指数n. 根据[NIS16], Q s = 2 64 Q_s=2^{64} Qs=264,对于NIST等级I,使用 λ = 512 \lambda=512 λ=512,对于NIST等级V,使用 λ = 1024 \lambda=1024 λ=1024。
模整数q. q=12*1024+1=12289
Gram-Schmidt范数 ∣ ∣ B ∣ ∣ G S ||\textbf{B}||_{GS} ∣∣B∣∣GS. ∣ ∣ B ∣ ∣ G S ≤ 1.17 q ||\textbf{B}||_{GS} \leq1.17\sqrt{q} ∣∣B∣∣GS≤1.17q,为满足这个条件,f,g的系数由离散高斯分布采样,标准差为 σ { f , g } = 1.17 q / 2 n \sigma_{\{f,g\}}=1.17\sqrt{q/2n} σ{f,g}=1.17q/2n。
签名标准差
σ
\sigma
σ. 签名使用快速傅里叶采样算法按离散高斯分布采样得到(按基为
B
\textbf{B}
B,标准差
σ
\sigma
σ)。只需满足
ϵ
≤
1
/
Q
s
/
λ
\epsilon\leq 1/\sqrt{Q_s/\lambda}
ϵ≤1/Qs/λ和
σ
=
1
π
⋅
l
o
g
(
4
n
(
1
+
1
/
ϵ
)
)
2
⋅
1.17
⋅
q
≥
η
ϵ
(
Z
2
n
)
⋅
∣
∣
B
∣
∣
G
S
\begin{align*} \sigma &= \frac{1}{\pi}\cdot\sqrt{\frac{log(4n(1+1/\epsilon))}{2}}\cdot1.17\cdot\sqrt{q} \\ &\geq \eta_\epsilon(\mathbb{Z}^{2n})\cdot ||\textbf{B}||_{GS}\\ \end{align*}
σ=π1⋅2log(4n(1+1/ϵ))⋅1.17⋅q≥ηϵ(Z2n)⋅∣∣B∣∣GS
(这块没解释这些
η
\eta
η和
ϵ
\epsilon
ϵ的含义,后面章节可能再到这块的细节会解释)
签名最大范数 β \beta β. ( s 1 , s 2 ) (s_1,s_2) (s1,s2)必须满足 ∣ ∣ ( s 1 , s 2 ) ∣ ∣ 2 ≤ ⌊ β 2 ⌋ ||(s_1,s_2)||^2\leq\lfloor\beta^2\rfloor ∣∣(s1,s2)∣∣2≤⌊β2⌋,具体为 β = τ S I G ⋅ σ 2 n τ S I G = 1.1 \beta=\tau_{SIG}\cdot\sigma\sqrt{2n}\quad\tau_{SIG}=1.1 β=τSIG⋅σ2nτSIG=1.1我们称 τ S I G \tau_{SIG} τSIG为签名尾部切割率(tailcut rate)。因为 ∣ ∣ ( s 1 , s 2 ) ∣ ∣ ||(s_1,s_2)|| ∣∣(s1,s2)∣∣的期望是 σ 2 n \sigma\sqrt{2n} σ2n,比 τ S I G ⋅ σ 2 n \tau_{SIG}\cdot\sigma\sqrt{2n} τSIG⋅σ2n大的都会被拒收。
2.7 优势和局限性。
不展开了,主要就是:
优势:紧凑型,快速的签名生成和验证,在ROM(随机预言机)和QROM(量子随机预言机)上安全,模块化(NTRU格和快速傅里叶采样都是在必要或特殊需求时可以替换的模块),消息恢复模式(有时有用),转换成IBE,极简验签。
局限性:复杂的实现设计,浮点运算(FALCON用53位浮点,对于某些受限设备会不太合适)。