bouncycastle无法生成NTRU

时间:2014-04-15 21:40:38

标签: java cryptography digital-signature bouncycastle ntrusign

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()会导致此类异常。

有谁知道如何解决它?

3 个答案:

答案 0 :(得分:0)

目前,这是一个错误,因此有两种解决方案:

  1. 使用另一个图书馆 - tbuktu's github project(正如我所见,bouncy-castle正在使用它进行一些修改)
  2. 下载源码,捕获此生成参数的错误,解决它并打包到项目库中

答案 1 :(得分:0)

这不是代码中的错误。问题是APR2011_743APR2011_743_PROD参数集中的范数限制太低,这意味着签名者无法生成有效签名。

对于N=743q=2048beta=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

了解详情。