现有的基于格的签名方案基本都是在下述两种框架中得到的。
第一种:哈希-签名的方法主要是基于Ajtai SIS问题及其相关的陷门函数。陷门函数用来生成优质基。原像采样函数使用优质基对格进行采样。原像采样函数生成的参数用来进行签名构造。
第二种:Fiat-Shamir框架:…(待补充)\dots(待补充)…(待补充)
但是相对第二种Fiat-Shamir框架,哈希-签名这种模式要求格的维数要相对大的多,所以哈希-签名这种模式在密钥、签名的尺寸上来说相对非常大。(哈希-签名要求格维数大于5nlogq5n\log q5nlogq,第二种Fiat-Shamir差不多是2n2n2n)
Hash-and-sign 格签名一般构造方式
keygen(⋅):keygen(\sdot):keygen(⋅):
-
生成矩阵A(ai∈Rq)A(a_i\in R_q)A(ai∈Rq),B(bi∈Rq)B(b_i\in R_q)B(bi∈Rq).
(1)满足AT=0AT=0AT=0;
(2)TTT的范数比较小。
-
AAA为公钥
-
TTT为私钥(TTT为陷门基)
Sign(sk,μ):Sign(sk,\mu):Sign(sk,μ):
- 计算ttt满足At=H(μ)At=H(\mu)At=H(μ)
- 利用原像陷门采样选取距离H(μ)H(\mu)H(μ)最近的格点v∈L(T)v\in L(T)v∈L(T)
- e=t−ve=t-ve=t−v
Verify(pk,μ,e):Verify(pk,\mu,e):Verify(pk,μ,e):
- eee的范数较小
- Ae=H(μ)Ae=H(\mu)Ae=H(μ)
Fiat-Shamir格签名一般构造方式
原文中叙述了两种表达,此处只记关于高斯分布的一种。
keygen(⋅):keygen(\sdot):keygen(⋅):
- 生成矩阵A∈Rqn×mA\in \mathbb R^{n\times m}_qA∈Rqn×m,S∈Rqm×kS\in \mathbb R^{m\times k}_qS∈Rqm×k.满足T←AST\leftarrow AST←AS;
- 公钥(A,T)(A,T)(A,T)
- 私钥为SSS
Sign(sk,μ):Sign(sk,\mu):Sign(sk,μ):
- 从某一高斯分布中随机抽取y←Dsmy \leftarrow D^m_sy←Dsm
- 计算c←H(Ay,μ)c\leftarrow H(Ay,\mu)c←H(Ay,μ)
- 计算z=Sc+yz=Sc+yz=Sc+y
- 以概率min(Dsm(z)MDSc,sm(z),1)\min(\frac{D^m_s(z)}{MD^m_{Sc,s}(z)},1)min(MDSc,sm(z)Dsm(z),1)输出(z,c)(z,c)(z,c)
Verify(pk,μ,z,c,A,T):Verify(pk,\mu,z,c,A,T):Verify(pk,μ,z,c,A,T):
- ∥z∥≤ksm\|z\|\leq ks\sqrt{m}∥z∥≤ksm,其中k>1k>1k>1
- c=H(Az−Tc,μ)c=H(Az-Tc,\mu)c=H(Az−Tc,μ)
[1]蔡杰. 基于格的指定验证者数字签名方案及身份鉴别协议研究[D].山东大学,2020.