工作组: 网络工作组 Internet草稿: 草案-josefsson-mceliece-00 出版: 预期状态: 信息 到期:
经典McEliece
摘要
关于本文档
关于下段备忘
版权声明
1 前言
-
Daniel J.Bernstein,伊利诺伊大学芝加哥分校和鲁尔大学波鸿分校 ¶ -
中国科学院董周 ¶ -
Carlos Cid、Simula UiB和冲绳科学技术研究所 ¶ -
苏黎世联邦理工学院Jan Gilcher ¶ -
Tanja Lange,埃因霍温理工大学 ¶ -
苏黎世联邦理工大学Varun Maram ¶ -
Ingo von Maurich,自我 ¶ -
拉斐尔·米索茨基(Rafael Misoczki),谷歌 ¶ -
鲁本·尼德哈根,中国科学院和丹麦南部大学 ¶ -
Edoardo Persichetti,佛罗里达大西洋大学 ¶ -
克里斯蒂安·彼得斯,自我 ¶ -
尼古拉斯·森德里尔(Inria Nicolas Sendrier) ¶ -
耶鲁大学Jakub Szefer ¶ -
PQ Solutions Ltd.的岑荣哲海。 ¶ -
Martin Tomlinson,PQ Solutions Ltd.和普利茅斯大学 ¶ -
Wen Wang,耶鲁大学 ¶
2 介绍
三。 术语和定义
-
SHAKE256:参见 [ NIST。 FIPS.202年 ] ,Classic McEliece中使用的唯一对称基本体,具有选定的参数 ¶ -
IND-CCA2:对自适应选择密码攻击的不可区分性 ¶ -
KEM:钥匙封装机制 ¶ -
OW-CPA:单向对抗chosen-plantext攻击 ¶ -
PKE:公钥加密系统 ¶ -
ROM:随机模型 ¶ -
QROM:量子随机模型 ¶ -
F_q:q的有限域 ¶ -
:=:集合的成员 ¶ -
A_b,A_{b}:用表达式b下标的实体A ¶ -
A^b,A^{b}:实体A上标有表达式b ¶ -
A_b^c,A_{b}^{c},A^ {c}_ {b} :实体A用表达式b下标,用表达式c上标 ¶ -
=>:大于或等于 ¶ -
<=:小于或等于 ¶ -
天花板(a):将a映射到大于或等于a的最小整数的函数 ¶ -
p*q:矩阵乘法 ¶
4 符号和缩略语
4.1. 符号指南
-
n: 代码长度(CM参数的一部分) ¶ -
k: 代码维度(CM参数的一部分) ¶ -
t: 保证的纠错能力(CM参数的一部分) ¶ -
q: 所用字段的大小(CM参数的一部分) ¶ -
m: q的以2为底的对数(CM参数的一部分) ¶ -
u: 非负整数(CM参数的一部分) ¶ -
v: 非负整数(CM参数的一部分) ¶ -
Hash:加密哈希函数(symmetric-cryptronic参数) ¶ -
HashLen:Hash(对称密码参数)输出的长度 ¶ -
Sigma_1:非负整数(对称加密参数) ¶ -
Sigma_2:非负整数(对称密码参数) ¶ -
PRG:伪随机比特生成器(对称密码参数) ¶ -
g: F_q[x]中的多项式(私钥的一部分) ¶ -
alpha_i:有限字段F_q的元素(私钥的一部分) ¶ -
Gamma:(g,alpha_0,…,alpha_{n-1})(私钥的一部分) ¶ -
s: 长度为n的位字符串(私钥的一部分) ¶ -
T: F_2(CM公钥)上的mt*k矩阵 ¶ -
e: 长度为n且汉明重量为t的比特串 ¶ -
C: 封装会话密钥的密文 ¶
5 要求
6 参数
-
正整数m。这也定义了参数q=2^m。 ¶ -
n≤q的正整数n。 ¶ -
带有mt<n的正整数t=>2。这也定义了参数k=n-mt。 ¶ -
阶m的一元不可约多项式f(z):=f_2[z]。这定义了 字段F_q。 ¶ -
t次的一元不可约多项式F(y):=F_q[y]。这定义了 字段F{q^t}=F{2^mt}。 ¶ -
带v<=k+u的整数v=>u=>0。未提及这些参数的参数集将它们定义为 默认情况下为(0,0)。 ¶ -
下面列出了对称加密参数。 ¶
7 单向函数
7.1. 矩阵缩减
7.1.1. 简化的排-螯式
-
R的第0行以c0列的1开头,这是c0列中唯一的非零条目; ¶ -
R的第1行以c1列中的1开头,这是c1列唯一的非零条目; ¶ -
R的第2行以c2列的1开头,这是c2列中唯一的非零条目; ¶ -
等。; ¶ -
r的第r-1行以列c{r-1}中的1开头,这是列c{r-1}的唯一非零项; 和 ¶ -
R的所有后续行都是0。 ¶
7.1.3. 半系统形式
7.2. Goppa码的矩阵生成
7.2.1. 概述
7.2.3. 半系统形式
-
T是F_2上的mt*k矩阵; ¶ -
c_{mt-u}。。。, c{mt-1}是mt-u<=c{mt-u}<c{mt-u+1}<…<的整数 c{mt-1}<mt-u+v; ¶ -
伽马射线=(g,α'_0,α'_1,…,α'_{n-1}); ¶ -
g与输入中的相同; 和 ¶ -
α'_0,α'_1。。。, α′_{n-1}是F_ q的不同元素。 ¶
-
计算F_q上的t*n矩阵M={h_{i,j}},其中h_{i,j}=alpha_j^i/g(alpha_j),i=0。。。, t-1和j=0。。。, n-1。 ¶ -
通过替换每个条目u_0+u1 z+…+,在F_2上形成一个mt*n矩阵n 带列的m的u_{m-1}z^{m-1{ 共m位u_0,u_1。。。, u{m-1}。 ¶ -
将N减少为(u,v)-半系统形式,获得矩阵H。如果失败,则返回NIL。 (现在第一排有了它 c_i列中的前导1。根据半系统形式的定义,c_i=i表示0<=i<mt-u; 和mt-u<= c{mt-u} c_{mt-1}<mt-u+v。矩阵H是一个变量,可以稍后更改。) ¶ -
集合(alpha'_0,alpha'_1,…,alpha'_{n-1})=(alpha_0,alpha_1,..,alpha_{n-1})。 (每个alpha’_i都是一个变量,以后可以更改。) ¶ -
对于i=mt-u,则i=mt-u+1,以此类推,直至i=mt-1,顺序如下:将列i与 H中的列c_i,同时将alpha'_i与alpha'{c_i}交换。 (交换后,第i行在第i列中具有前导1 如果ci=i,swap不执行任何操作。) ¶ -
矩阵H现在具有系统形式(I_{mt}|T),其中I_{mt}是mt*mt单位矩阵。返回 (T,c{mt-u},…,c_{mt-1},Gamma')其中Gamma’=(g,alpha'_0,alpha’_1,……,alpha'_{n-1})。 ¶
7.4. 解码子程序
-
T是F_2上的mt*k矩阵; ¶ -
Gamma’的形式为(g,alpha'_0,alpha’_1,…,alpha'{n-1}); ¶ -
g是t次F_q[x]中的一元不可约多项式; 和 ¶ -
α'_0,α'_1。。。, α{n-1}是F_q的不同元素。 ¶
-
如果C=编码(e,T),则解码(C,Gamma')=e。换句话说,如果存在权重-T向量e:=F_2^n,则 C=He,H=(I_{mt}|T),则解码(C,Gamma’)=e。 ¶ -
如果对于任何权重t向量e:=F_2^n,C的形式都不是He,那么解码(C,Gamma')=NIL。 ¶
8 经典McEliece KEM
8.2. 现场订单生成
-
取第一个Sigma_2输入位b_0,b_1。。。, b_{Sigma_2-1}作为Sigma_2位整数a_0=b_0+2b_1+…+ 2^{Sigma_2-1}b_{Sigma-2-1},取 下一个Sigma_2位作为Sigma_2-bit整数a_1,以此类推,直到a{q-1}。 ¶ -
如果a_0,a_1。。。, a_q-1不明显,返回NIL。 ¶ -
按字典顺序对对(a_i,i)进行排序以获得对(a_pi(i),pi(i)),其中pi是 {0,1,…,q-1}。 ¶ -
定义alpha_i=SUM^ {m-1}_ {j=0}(π(i)_jz^{m-1-j}) ¶ -
其中pi(i)_j表示pi(i)的第j个最低有效位。 (回想一下,有限域F_q被构造为F_2[z]/F(z)。) ¶ -
输出(alpha_0、alpha_1、…、alpha_{q-1})。 ¶
8.3. 密钥生成
-
计算E=PRG(Delta),即n+Sigma_2 q+Sigma _1 t+HashLen位的字符串。 ¶ -
将Delta定义为E的最后一个HashLen位。 ¶ -
将s定义为E的前n位。 ¶ -
计算alpha_0。。。, 通过FieldOrdering算法从E的下一个Sigma_2 q位中提取alpha_{q-1}。 如果此操作失败,请设置Delta=Delta’ 并重新启动算法。 ¶ -
用不可约算法从E的下一个Sigma_1 t位计算g。 如果此操作失败,请设置Delta=Delta,然后重新启动 算法。 ¶ -
定义Gamma=(g,alpha_0,alpha_1,…,alpha_{n-1})。 (请注意,alpha_n,…,alpha_{q-1}不用于Gamma。) ¶ -
计算(T,c{mt-u},…,c{mt-1},Gamma’)=MatGen(Gamma)。 如果失败,请设置Delta=Delta'并重新启动算法。 ¶ -
将Gamma'写成(g,alpha'_0,alpha'_1,…,alpha’_{n-1})。 ¶ -
输出T作为公钥,输出(Delta,c,g,alpha,s)作为私钥,其中c=(c_{mt-u},…,c_{mt-1})和alpha= (α'_0,…,α'{n-1},α_n,……,α{q-1})。 ¶
8.4. 固定重量矢量生成
-
生成Sigma_1 tau均匀随机位b_0、b_1。。。, b_{Sigma_1 tau-1}。 ¶ -
定义d_j=SUM^ {m-1}_ {i=0}(b_{Sigma_1j+i}2^i)对于每个j:={0,1,…,τ-1}。 (在每组Sigma_1随机位中,使用 只有前m位。 算法忽略剩余的位。) ¶ -
定义a_0、a_1、…、。。。, a{t-1}作为d_0,d_1,…,中的第一个t项。。。, d_{tau-1}在{0,1,…,n-1}范围内。 如果数量较少 然后重新启动算法。 ¶ -
如果a_0,a_1。。。, a{t-1}并不完全不同,请重新启动算法。 ¶ -
将e=(e_0,e_1,…,e_{n-1}):=F_2^n定义为权重-t向量,使得每个i的e_{a_i}=1。 ¶ -
返回e。 ¶
9 位元及字节组
9.1. 对称密码参数的选择
-
整数HashLen是256。 ¶ -
HashLen-bit字符串Hash(x)定义为SHAKE256(x)输出的第一个HashLen位。 这里的字节字符串是 被视为小型字符串; 见第9.2条。 字节集被定义为{0,1,…,255}。 ¶ -
整数Sigma_1是16。 (所有选定的参数集都有m≤16,因此Sigma_1=>m。) ¶ -
整数Sigma_2是32。 ¶ -
(n+Sigma_2 q+Sigma_1 t+HashLen)位字符串PRG(Delta)定义为 SHAKE256(64,三角形)。 这里的64,Delta是指以字节64开始并以Delta继续的33字节字符串。 ¶
9.2. 对象表示为字节字符串
9.2.1. 位矢量
9.2.4. pc参数集的密码
9.2.5. 非c参数集的散列输入
9.2.6. pc参数集的散列输入
9.2.8. 字段元素
9.2.10. 现场订购
定义composeinv(c,pi): return[y表示x,y按排序(zip(pi,c))] 定义控制位(pi): n=长度(pi) m=1 而1<<m<n:m+=1 断言1<<m==n 如果m==1:返回[pi[0]] p=[pi[x^1]对于范围(n)中的x q=[pi[x]^1,对于范围(n)中的x piinv=组合inv(范围(n),pi) p、 q=composeinv(p,q),composein(q,p) c=[范围(n)内x的最小值(x,p[x])] p、 q=composeinv(p,q),composein(q,p) 对于范围(1,m-1)中的i: cp,p,q=composeinv(c,q),composein(p,q) c=[范围(n)内x的最小值(c[x],cp[x])] f=[c[2*j]%2,对于范围内的j(n//2)] 对于范围(n)中的x,F=[x^F[x//2] Fpi=组合inv(F,piinv) l=[Fpi[2*k]%2,对于范围(n//2)中的k 对于范围(n)中的y,L=[y^L[y//2] M=组合inv(Fpi,L) subM=[[M[2*j+e]//2(对于范围(n//2)中的j)](对于范围内的e)] subz=映射(控制位,subM) z=[s表示s0s1在zip(*subz)中表示s在s0s1] 返回f+z+l
10 所选参数集
10.1. 参数集mcelice6688128
10.2. 参数集mcelice6688128f
10.3. 参数集mcelice6688128pc
10.4. 参数集mcelice6688128pcf
10.5. 参数集mcelice6960119
10.6. 参数集mcelice6960119f
10.7. 参数集mceliece6960119pc
10.8. 参数集mcelice6960119pcf
10.9. 参数集mcelice8192128
10.10. 参数集mcelice8192128f
10.11. 参数集mcelice8192128pc
10.12. 参数集mcelice8192128pcf
11 安全注意事项
13 工具书类
13.1. 规范性引用文件
【NIST.FIPS.202】 -
德沃金,M。 , 德沃金,M.J。 ,以及 NIST标准 , “SHA-3标准:基于排列的散列和可扩展输出函数” , 菲普斯PUB 202 , NIST联邦信息处理标准出版物202 , DOI 10.6028/nist.fips.202 , 内政部10.6028/NIST。 FIPS.202年 , , < http://nvlpubs.nist.gov/nistpubs/FIPS/nist.FIPS.202.pdf > .
13.2. 资料性引用
[CM-impl](CM-impl) -
经典McEliece团队 , “经典McEliece:保守的基于代码的加密:实现者指南” , , < https://classic.mcelice.org/mceliece-impl-20221023.pdf > . [CM论文] -
经典McEliece团队 , “经典McEliece:论文” , , < https://classic.mcelice.org/papers.html > . 【CM-pc】 -
经典McEliece团队 , “经典McEliece:保守的基于代码的加密:明文确认意味着什么” , , < https://classic.mcelice.org/mceliece-pc-20221023.pdf > . [CM-国家] -
经典McEliece团队 , “经典McEliece:保守的基于代码的加密:设计原理” , , < https://classic.mcelice.org/mceliece-rationale-20221023.pdf > . [CM-段] -
经典McEliece团队 , “经典McEliece:Sage套餐” , , < https://classic.mcelice.org/spec.html > . [CM安全] -
经典McEliece团队 , “经典McEliece:保守的基于代码的加密:安全审查指南” , , < https://classic.mcelice.org/mceliece-security-20221023.pdf > . 【CM-特定】 -
经典McEliece团队 , “经典McEliece:保守的基于代码的加密:密码系统规范” , , < https://classic.mcelice.org/mceliece-spec-20221023.pdf > . [麦克利埃塞] -
R.J.麦克利埃塞。 , “基于代数编码理论的公钥密码系统” , , < https://ipnpr.jpl.nasa.gov/progress_report2/42-44/44N.PDF > . [RFC4086] -
东湖3号,D。 , J.席勒。 ,以及 S.克罗克 , “安全随机性要求” , 业务连续性计划106 , RFC 4086号文件 , 内政部10.17487/RFC4086 , , < https://www.rfc-editor.org/rfc/rfc4086 > .