0

Ich arbeite an einem Projekt, das digitale Signatur verwendet, physisch oder nicht (Smartcard oder Datei). Ich muss einhundert Stück XML-Code pro Datei signieren, mittlerweile gibt es 2500 Dateien, also 2500 * 100 = 250.000 mal. Bei Verwendung von a1-Zertifikat (Datei) dauert es 2 Sekunden pro Datei. Wenn ich eine Smartcard ausprobiere, dauert es 30 Sekunden pro Datei, was bedeutet, dass alle Dateien fast 21 Stunden benötigen, was zu lang ist. Ich würde gerne wissen, ob jemand jemals damit umgegangen ist, denn es ist Java-Code, ein Schnipsel folgt.Unterschreiben xml mit Smartcard dauert zu lange

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

Antwort

0

Während 30 Sekunden für einen Vorgang zu lang sind, ist die billigere Hardware (Smart Cards und USB-Token) in der Tat sehr langsam und einziger Vorgang dauert in der Regel 2-3 Sekunden. Sie müssen ein schnelleres Hardwaregerät für Ihre Aufgabe verwenden. Beispielsweise führen PKI-Geräte auf Branchenebene (spezialisierte Hardwarebeschleuniger und -geräte) das Signieren in Sekundenbruchteilen durch.

+0

Vielen Dank Eugene, ich habe versucht, parallele Ausführung, erhöht es 2 Sekunden pro Ausführung. Hast du keine Ahnung, dass ich versuchen könnte, wenigstens noch ein paar Sekunden zu verbessern? –

+0

@LanaStf Ich würde versuchen, sicherzustellen, dass es Hardware ist, die Langsamkeit hinzufügt. Wenn Sie dieselbe Hardware in einem anderen Signaturvorgang als Java-Signaturcode verwenden können, wäre es großartig, die Hardware zu testen. Vielleicht bietet der Hardware-Anbieter eine Anwendung an oder es gibt eine andere nicht-verwaltete (nicht-Java) Möglichkeit, Ihr Gerät zu testen. –

+0

Ist das nicht die Tatsache, dass a1 16x schneller laufen? –

0

Ich kann nicht aus Ihrem Code erkennen, wo das Hashing stattfindet. Wenn die Karte hasht, ist die Menge an Daten, die übertragen werden muss, sicherlich der Flaschenhals. Erwägen Sie Hashing auf der Host-Seite. Wenn Sie nur die Signaturoperation auf der Karte ausführen, sollte etwas im Bereich von weniger als einer Sekunde liegen.

+0

Ich dachte das würde schon intern so funktionieren. Kann Smartcard-Wert auch verdauen? –

+0

@ Einige Karten unterstützen Hashing, aber aufgrund der I/O-Bandbreite wird dies selten verwendet. – guidot