0

我正在使用BouncyCastles Java API并且想要使用McEliece加密。浏览各种纸张以找到好的参数(例如How to choose McEliece's parameters?)后,我现在遇到了问题,我没有看到使用BouncyCastle API设置这些参数的可能性。用BouncyCastle的元组(m,t,poly)定义McEliece参数元组(n,k,t)

在所有论文中,参数集是一个三元组:(n,k,t)。但是,随着BouncyCastle的,我只能指定3元组(M,T,聚)为密钥对生成与:

new McElieceCCA2Parameters(m, t, poly) 

如何它们对应于(N,K,T)参数组?

+0

不确定你指的是哪个bouncycastle版本,但[在1.52'McElieceCCA2Parameters'](http://grepcode.com/file/repo1.maven.org/maven2/org.bouncycastle/bcprov-jdk15on/1.52 /org/bouncycastle/pqc/crypto/mceliece/McElieceCCA2Parameters.java#McElieceCCA2Parameters)至多需要'm'和't'。 –

+0

我使用的是1.55版本;-)但是,当1.52版本中只有2个参数时,如何指定它们,以便获得一个设置。 *(n,k,t)* = *(6624,5129,118)*? – Ph3n1x

回答

1

我相信m,tpoly定义了一个Goppa代码。 m表示GF2上的多项式的程度,其在代码内生成支持。 n表示支持的元素数量/加密消息的长度(以位为单位)。我快速浏览了McElieceParameters,他们使用完全支持。这意味着n总是等于2^mt,代码可以纠正的错误数量必须从区间[2; (n - 1)/m]k中选择,隐含地等于n - m*t

+0

谢谢你的回答,但我完全不理解它。两个元组中的“t”是否相同?当我用*(n,k,t)*为*(6624,5129,118)*解出m时,我得到m = 12.67。但'm'必须是一个整数。 你可能只是提供一个简单的例子吗?例如。我如何指定'(m,t,poly)'来获得'(n,k,t)'= *(6624,5129,118)*? – Ph3n1x

+0

据我所知,BouncyCastle计算'n = 1 << m',所以不可能让'n'成为2的幂值。我错了吗? – Ph3n1x

+0

@ Ph3n1x对不完整的答案抱歉。是的,'(n,k,t)'和'(m,t,poly)'符号中't'是相同的。你是对的,n始终是2的力量。从我所看到的弹性城堡库不允许你需要的设置。 –