NTRU有三种类型的默认安全级别,在bouncy-castle中实现:
1. NTRUSigningKeyGenerationParameters.TEST157
2. NTRUSigningKeyGenerationParameters.APR2011_439
3. NTRUSigningKeyGenerationParameters.APR2011_743
前两个是正常生成的,但是当我尝试生成tird时,我得到了下一个异常:
SEVERE:servlet [mvc-dispatcher]的Servlet.service()与path []的上下文引发了异常[请求处理失败;嵌套异常是java.lang.IllegalStateException:签名失败:根本原因重试次数太多(max = 100)] java.lang.IllegalStateException:签名失败:重试次数过多(max = 100)
这是我的代码:
NTRUSigningPrivateKeyParameters ntruSigningPrivateKeyParameters1 = null;
NTRUSigner ntruSigner = new NTRUSigner(ntruSigningKeyGenerationParameters.getSigningParameters());
try {
ntruSigningPrivateKeyParameters1 = new NTRUSigningPrivateKeyParameters(ntruSigningPrivateKeyParameters.getEncoded(), ntruSigningKeyGenerationParameters);
} catch (IOException e) {
e.printStackTrace();
}
ntruSigner.init(true, ntruSigningPrivateKeyParameters);
byte [] res = ntruSigner.generateSignature();
使用第三组参数调用ntruSigner.generateSignature()
会导致此类异常。
有谁知道如何解决它?
答案 0 :(得分:0)
目前,这是一个错误,因此有两种解决方案:
答案 1 :(得分:0)
这不是代码中的错误。问题是APR2011_743
和APR2011_743_PROD
参数集中的范数限制太低,这意味着签名者无法生成有效签名。
对于N=743
,q=2048
和beta=0.127
,您应该选择大约545的范数界限(参见J. Hoffstein等人的等式10,性能改进和基线参数生成算法for NTRUSign)但BouncyCastle中的参数集使用normBound=405
。改变这个解决了这个问题。
答案 2 :(得分:0)
更新normBound似乎确实解决了这个问题,但是我应该指出现在Bouncy Castle中不推荐使用NTRUSigner类。一年多前,NTRU签名算法被证明是严重破坏的。参见:
http://www.di.ens.fr/~ducas/NTRUSign_Cryptanalysis/DucasNguyen_Learning.pdf
了解详情。