- From: Aleksey Sanin <aleksey@aleksey.com>
- Date: Mon, 13 May 2002 14:37:08 -0700
- To: Christian Geuer-Pollmann <geuer-pollmann@nue.et-inf.uni-siegen.de>
- CC: reagle@w3.org, merlin <merlin@baltimore.ie>, John Boyer <JBoyer@PureEdge.com>, w3c-ietf-xmldsig@w3.org
Just for comparisson there are some numbers from XMLSec Library: pureedge_xfilter2_doc.xml: Executed 600 tests in 298640 msec (497.7 msec/op) xfilter2spec_xfilter2_doc_1.xml: Executed 600 tests in 550 msec (0.9 msec/op) xfilter2spec_xfilter2_doc_2.xml: Executed 600 tests in 770 msec (1.3 msec/op) xfilter2spec_xfilter2_doc_3.xml: Executed 600 tests in 970 msec (1.6 msec/op) Aleksey Christian Geuer-Pollmann wrote: > --On Dienstag, 7. Mai 2002 12:24 -1000 Joseph Reagle <reagle@w3.org> > wrote: > >> On Monday 06 May 2002 21:01, Christian Geuer-Pollmann wrote: >> >>> PS: Actually, I don't know why [2] is not considered by anybody be >>> worth >>> to have a closer look at. >> >> >> I think it is worth consideration, and we want to think about >> functionality and performance. Merlin mentioned he didn't feel the >> functionality that compelling but I'd like to here from others. >> Since in >> another email you mentioned your hoping to respond to John's request >> for >> performance results, perhaps you could share numbers on this point too! > > > OK, here they are: > > Hi all, > > today, I did some performance testing on xmldsig-xfilter2 and on my > own approach for filtering. For these tests, I used the sample file > which John supplied (the pureedge data) and the illustrated sample > from the xmldsig-xfilter2 filter spec. > > To have a rough idea on the comparison to other signatures, I also > created a detached signature for a 300kB GIF image. To get a little > bit more accurate data, I created each signature 600 times. To > eliminate the influence of public key crypto, all these "signatures" > are HMAC-SHA1's. The test machine is a Pentium3, 733MHz, 256MB RAM, > Windows 2000, SUN Java JRE 1.3.1. > > ##################################### > > Test description: > > ##################################### > > simple_gif_detached: > > A detached signature over a 300 kilo bytes binary file (no > transforms). The file (should) come from the operating systems and > hard drives cache (600 reads on the same file...). > > ##################################### > > pureedge_xfilter2: > > This is an enveloped signature which is embedded into the > "LeaveRequest.xfd" file. It uses the transform: > > <ds:Transforms> > <ds:Transform Algorithm="http://www.w3.org/2002/04/xmldsig-filter2"> > <dsig-xpath:XPath > xmlns:dsig-xpath="http://www.w3.org/2002/04/xmldsig-filter2" > Filter="subtract"> > /XFDL/page[@sid='PAGE1']/*[@sid='CHECK16' or > @sid='CHECK17' or > @sid='FIELD47' or > @sid='BUTTON2' or > @sid='FIELD48'] > | > /XFDL/page/triggeritem[not(attribute::sid) | > /XFDL/page/*/triggeritem] > | > here()/ancestor::ds:Signature[1]</dsig-xpath:XPath> > </ds:Transform> > </ds:Transforms> > > ##################################### > > pureedge_apachefilter > > This is an enveloped signature which is embedded into the > "LeaveRequest.xfd" file. The transform results in the same result as > pureedge_xfilter2 does. It uses the proprietary transform: > > <ds:Transforms> > <ds:Transform > Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter > > "> > <xx:XPathAlternative > xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> > > <xx:IncludeButSearch> > / > </xx:IncludeButSearch> > <xx:Exclude> > /XFDL/page[@sid='PAGE1']/*[@sid='CHECK16' or > @sid='CHECK17' or > @sid='FIELD47' or > @sid='BUTTON2' or > @sid='FIELD48'] > | > /XFDL/page/triggeritem[not(attribute::sid) | > /XFDL/page/*/triggeritem] > | > here()/ancestor::ds:Signature[1]</xx:Exclude> > </xx:XPathAlternative> > </ds:Transform> > </ds:Transforms> > > ##################################### > > xfilter2spec_xfilter2_3 and xfilter2spec_apachefilter_3 are both > applied to the sample from section 4 in > <http://www.w3.org/Signature/Drafts/xmldsig-xfilter2/>. The > ..xfilter2_3 uses the three <ds:Transform>s from the example, the > ..apachefilter_3 results in the same nodeset using the following > transform: > > <ds:Transforms> > <ds:Transform > Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter > > "> > <xx:XPathAlternative > xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> > > <xx:IncludeButSearch> > //ToBeSigned | //ReallyToBeSigned > </xx:IncludeButSearch> > <xx:ExcludeButSearch> > / | //NotToBeSigned > </xx:ExcludeButSearch> > <xx:Exclude> > here()/ancestor::ds:Signature[1] > </xx:Exclude> > </xx:XPathAlternative> > </ds:Transform> > </ds:Transforms> > > ##################################### > > Timing Results: > > Number of iterations: 600 > > simple_gif_detached 294,503 seconds (0,49 second per > iteration) > ---------------------------------------------------------------------------- > > pureedge_xfilter2 1.144,620 seconds (1,91 second per > iteration) > pureedge_apachefilter 1.205,240 seconds (2,00 second per > iteration) > ---------------------------------------------------------------------------- > > xfilter2spec_xfilter2_3 138,910 seconds (0,23 second per > iteration) > xfilter2spec_apachefilter_3 131,178 seconds (0,22 second per > iteration) > > What you can see here is that my approach is 5% slower than the > current spec for the pureedge example and 5% faster for the example > from the spec. My guess is the following: > > It's not possible with xmldsig-xfilter2 to do the operations from > subsequent transforms in a single step; each transform MUST be handled > individualy, so each transform costs time. If you do multiple > xmldsig-xfilter2 operations for selecting the right nodes, this > becomes more and more inefficient. > > 'My' transform does the complete selection in a single step. These is > no need to do multiple union/intersect/subtract ops in a sequence to > select the right things. So I guess that the runtime of my transform > is -- well, not constant, but -- depending on the form of the selected > subtrees. > > ##################################### > > To test this, I took the (very small) example from section 4 and > created three different signatures using both transform algos: > > xfilter2spec_xfilter2_1 only does this: > > - intersect(//ToBeSigned) > > xfilter2spec_xfilter2_2 does this: > > - intersect(//ToBeSigned) > - subtract(//NotToBeSigned) > > xfilter2spec_xfilter2_3 was the full magic (mentioned earlier): > > - intersect(//ToBeSigned) > - subtract(//NotToBeSigned) > - union(//ReallyToBeSigned) > > ################################# > > xfilter2spec_apachefilter_1, xfilter2spec_apachefilter_2 and > xfilter2spec_apachefilter_3 produce the same results using my transform: > > ################################# > > xfilter2spec_apachefilter_1: > > <ds:Transform > Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter > > "> > <xx:XPathAlternative > xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> > > <xx:IncludeButSearch> > //ToBeSigned > </xx:IncludeButSearch> > <xx:ExcludeButSearch> > / > </xx:ExcludeButSearch> > <xx:Exclude> > here()/ancestor::ds:Signature[1] > </xx:Exclude> > </xx:XPathAlternative> > </ds:Transform> > > ################################# > > xfilter2spec_apachefilter_2 > > <ds:Transform > Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter > > "> > <xx:XPathAlternative > xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> > > <xx:IncludeButSearch> > //ToBeSigned > </xx:IncludeButSearch> > <xx:ExcludeButSearch> > / | //NotToBeSigned > </xx:ExcludeButSearch> > <xx:Exclude> > here()/ancestor::ds:Signature[1] > </xx:Exclude> > </xx:XPathAlternative> > </ds:Transform> > > ################################# > > xfilter2spec_apachefilter_3 > > <ds:Transform > Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter > > "> > <xx:XPathAlternative > xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> > > <xx:IncludeButSearch> > //ToBeSigned | //ReallyToBeSigned > </xx:IncludeButSearch> > <xx:ExcludeButSearch> > / | //NotToBeSigned > </xx:ExcludeButSearch> > <xx:Exclude> > here()/ancestor::ds:Signature[1] > </xx:Exclude> > </xx:XPathAlternative> > </ds:Transform> > > ################################# > > When you look at the results below, you see that each step in the > xfilter2spec_xfilter2_(1/2/3) adds more processing time, while this is > not the case for 'my' transform: I can't tell why they are as they are. > > xfilter2spec_xfilter2_1 109,337 seconds (0,18 second per > iteration) > xfilter2spec_xfilter2_2 122,206 seconds (0,20 second per > iteration) > xfilter2spec_xfilter2_3 138,910 seconds (0,23 second per > iteration) > ---------------------------------------------------------------------------- > > xfilter2spec_apachefilter_1 130,297 seconds (0,22 second per > iteration) > xfilter2spec_apachefilter_2 123,268 seconds (0,21 second per > iteration) > xfilter2spec_apachefilter_3 131,178 seconds (0,22 second per > iteration) > > ################################# > > To show you what I did, I attach a ZIP containing all signatures (doc) > and the de-references and transfomed octets (ref). (I did not include > the GIF, it's simply 318 KB (326.587 Bytes).
Received on Monday, 13 May 2002 17:39:24 UTC