【问题标题】:Sign xml with smart card taking too long使用智能卡签署 xml 耗时过长
【发布时间】:2016-09-21 14:27:21
【问题描述】:

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

    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());
    }

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢 Eugene,我尝试过并行执行,每次执行增加了 2 秒。你不知道我可以尝试至少再改进几秒钟吗?
    • @LanaStf 我会尽量确保它是增加速度的硬件。如果您可以在除 Java 签名代码之外的任何其他签名操作中使用相同的硬件,那么测试硬件会很棒。也许硬件供应商提供了一个应用程序,或者有一些其他非托管(非 Java)的方式来测试你的设备。
    • a1 运行速度快 16 倍这一事实难道不能确保这一点吗?
    • @LanaStf 我建议的比较不是存储在磁盘上的证书和硬件中的证书,而是托管代码与非托管代码之间的比较。我会尝试排除 Java 到硬件互操作的因素。
    • @LanaStf 我们遇到了和你类似的问题。在我的例子中,延迟与网络相关,所以我们实现了线程,确切地说是 5 个。该应用程序签署了 200000 个文件,并在 20 小时内生成了它们各自的 xml 文件。在实施之前,该过程大约需要 80 小时才能完成。所以线程是一个不错的选择。
    【解决方案2】:

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

    【讨论】:

    • 我认为在内部已经可以这样工作了。智能卡也能消化价值吗?
    • @一些卡支持散列,但由于 I/O 带宽,这很少使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多