用智能卡签署xml需要太长时间

时间:2016-05-24 11:38:35

标签: java security digital-signature smartcard digital-certificate

我正在开发一个使用数字签名的项目,无论是物理的还是非物理的(智能卡或文件)。 我需要为每个文件签署一百个xml代码,现在有2500个文件,所以它意味着2500 * 100 = 250,000次。使用a1证书(文件)时,每个文件需要2秒。当我尝试智能卡时,每个文件需要30秒,这意味着所有文件将花费将近21个小时,这太长了。 我想知道是否有人曾经处理过这个问题,顺便说一句,这是一个代码片段。

    Element elemento = (Element) document.getElementsByTagName(elementName).item(0);
    elemento.setIdAttribute("id", true);
    String id = elemento.getAttribute("id");

    Init.init();

    ElementProxy.setDefaultPrefix(Constants.SignatureSpecNS, "");
    XMLSignature sig = new XMLSignature(document, "", XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256);

    elemento.getParentNode().appendChild(sig.getElement());

    {
        Transforms transforms = new Transforms(document);
        transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
        transforms.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS);
        sig.addDocument("#" + id, transforms, "http://www.w3.org/2001/04/xmlenc#sha256");
    }

    XmlUtils.trimWhitespace(document);
    XmlUtils.scapeChars(document);

    {
        X509Certificate cert = certificadoBean.getCertificate();
        sig.addKeyInfo(cert);
        sig.sign(certificadoBean.getPrivateKey());
    }

2 个答案:

答案 0 :(得分:0)

虽然30秒对于单次操作而言太长,但廉价的硬件(智能卡和USB令牌)确实非常慢,单次操作通常需要2-3秒。您需要使用更快的硬件设备来完成任务。例如,行业级PKI设备(专用硬件加速器和设备)在几分之一秒内执行签名。

答案 1 :(得分:0)

我无法从您的代码中识别散列发生的位置。如果卡片散列,则需要传输的数据量肯定是瓶颈。考虑在主机端进行散列。仅在卡上执行签名操作应该在亚秒范围内执行某些操作。